From 62af18aaf2ecc6212aa318e0e2c261ee27678f98 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Bandinelli Date: Sat, 6 Mar 2021 09:38:12 +0100 Subject: [PATCH] Upgrading rainloop to 1.15 --- app/data/EMPTY | 2 +- app/data/VERSION | 2 +- app/index.php | 2 +- .../v/1.14.0/app/templates/Index.html | 33 - app/rainloop/v/1.14.0/static/js/boot.js | 8402 ---------------- .../v/1.14.0/static/js/min/admin.min.js | 1 - .../v/1.14.0/static/js/min/app.min.js | 1 - .../v/1.14.0/static/js/min/boot.min.js | 1 - .../v/1.14.0/static/js/min/libs.min.js | 1 - .../v/1.14.0/static/js/min/polyfills.min.js | 1 - app/rainloop/v/1.14.0/static/js/polyfills.js | 4463 --------- .../app/domains/default.ini.dist | 0 .../v/{1.14.0 => 1.15.0}/app/domains/disabled | 0 .../app/domains/gmail.com.ini | 0 .../app/domains/outlook.com.ini | 0 .../{1.14.0 => 1.15.0}/app/domains/qq.com.ini | 0 .../app/domains/yahoo.com.ini | 0 .../v/{1.14.0 => 1.15.0}/app/handle.php | 2 +- .../Facebook/Authentication/AccessToken.php | 0 .../Authentication/AccessTokenMetadata.php | 0 .../Facebook/Authentication/OAuth2Client.php | 0 .../FacebookAuthenticationException.php | 0 .../FacebookAuthorizationException.php | 0 .../Exceptions/FacebookClientException.php | 0 .../Exceptions/FacebookOtherException.php | 0 .../Exceptions/FacebookResponseException.php | 0 .../Exceptions/FacebookSDKException.php | 0 .../Exceptions/FacebookServerException.php | 0 .../Exceptions/FacebookThrottleException.php | 0 .../app/libraries/Facebook/Facebook.php | 0 .../app/libraries/Facebook/FacebookApp.php | 0 .../Facebook/FacebookBatchRequest.php | 0 .../Facebook/FacebookBatchResponse.php | 0 .../app/libraries/Facebook/FacebookClient.php | 0 .../libraries/Facebook/FacebookRequest.php | 0 .../libraries/Facebook/FacebookResponse.php | 0 .../Facebook/FileUpload/FacebookFile.php | 0 .../Facebook/FileUpload/FacebookVideo.php | 0 .../Facebook/FileUpload/Mimetypes.php | 0 .../Facebook/GraphNodes/Collection.php | 0 .../Facebook/GraphNodes/GraphAchievement.php | 0 .../Facebook/GraphNodes/GraphAlbum.php | 0 .../Facebook/GraphNodes/GraphApplication.php | 0 .../Facebook/GraphNodes/GraphCoverPhoto.php | 0 .../Facebook/GraphNodes/GraphEdge.php | 0 .../Facebook/GraphNodes/GraphEvent.php | 0 .../Facebook/GraphNodes/GraphGroup.php | 0 .../Facebook/GraphNodes/GraphList.php | 0 .../Facebook/GraphNodes/GraphLocation.php | 0 .../Facebook/GraphNodes/GraphNode.php | 0 .../Facebook/GraphNodes/GraphNodeFactory.php | 0 .../Facebook/GraphNodes/GraphObject.php | 0 .../GraphNodes/GraphObjectFactory.php | 0 .../Facebook/GraphNodes/GraphPage.php | 0 .../Facebook/GraphNodes/GraphPicture.php | 0 .../Facebook/GraphNodes/GraphSessionInfo.php | 0 .../Facebook/GraphNodes/GraphUser.php | 0 .../Facebook/Helpers/FacebookCanvasHelper.php | 0 .../Helpers/FacebookJavaScriptHelper.php | 0 .../Helpers/FacebookPageTabHelper.php | 0 .../Helpers/FacebookRedirectLoginHelper.php | 0 .../FacebookSignedRequestFromInputHelper.php | 0 .../Facebook/Http/GraphRawResponse.php | 0 .../Facebook/Http/RequestBodyInterface.php | 0 .../Facebook/Http/RequestBodyMultipart.php | 0 .../Facebook/Http/RequestBodyUrlEncoded.php | 0 .../Facebook/HttpClients/FacebookCurl.php | 0 .../HttpClients/FacebookCurlHttpClient.php | 0 .../HttpClients/FacebookGuzzleHttpClient.php | 0 .../FacebookHttpClientInterface.php | 0 .../Facebook/HttpClients/FacebookStream.php | 0 .../HttpClients/FacebookStreamHttpClient.php | 0 .../certs/DigiCertHighAssuranceEVRootCA.pem | 0 .../FacebookMemoryPersistentDataHandler.php | 0 .../FacebookSessionPersistentDataHandler.php | 0 .../PersistentDataInterface.php | 0 .../McryptPseudoRandomStringGenerator.php | 0 .../OpenSslPseudoRandomStringGenerator.php | 0 .../PseudoRandomStringGeneratorInterface.php | 0 .../PseudoRandomStringGeneratorTrait.php | 0 .../UrandomPseudoRandomStringGenerator.php | 0 .../app/libraries/Facebook/SignedRequest.php | 0 .../Url/FacebookUrlDetectionHandler.php | 0 .../Facebook/Url/FacebookUrlManipulator.php | 0 .../Facebook/Url/UrlDetectionInterface.php | 0 .../app/libraries/Facebook/autoload.php | 0 .../Imagine/Draw/DrawerInterface.php | 0 .../Imagine/Effects/EffectsInterface.php | 0 .../libraries/Imagine/Exception/Exception.php | 0 .../Exception/InvalidArgumentException.php | 0 .../Exception/NotSupportedException.php | 0 .../Exception/OutOfBoundsException.php | 0 .../Imagine/Exception/RuntimeException.php | 0 .../Imagine/Filter/Advanced/Border.php | 0 .../Imagine/Filter/Advanced/Canvas.php | 0 .../Imagine/Filter/Advanced/Grayscale.php | 0 .../Imagine/Filter/Advanced/OnPixelBased.php | 0 .../Filter/Advanced/RelativeResize.php | 0 .../Imagine/Filter/Basic/ApplyMask.php | 0 .../Imagine/Filter/Basic/Autorotate.php | 0 .../libraries/Imagine/Filter/Basic/Copy.php | 0 .../libraries/Imagine/Filter/Basic/Crop.php | 0 .../libraries/Imagine/Filter/Basic/Fill.php | 0 .../Imagine/Filter/Basic/FlipHorizontally.php | 0 .../Imagine/Filter/Basic/FlipVertically.php | 0 .../libraries/Imagine/Filter/Basic/Paste.php | 0 .../libraries/Imagine/Filter/Basic/Resize.php | 0 .../libraries/Imagine/Filter/Basic/Rotate.php | 0 .../libraries/Imagine/Filter/Basic/Save.php | 0 .../libraries/Imagine/Filter/Basic/Show.php | 0 .../libraries/Imagine/Filter/Basic/Strip.php | 0 .../Imagine/Filter/Basic/Thumbnail.php | 0 .../Imagine/Filter/Basic/WebOptimization.php | 0 .../Imagine/Filter/FilterInterface.php | 0 .../libraries/Imagine/Filter/ImagineAware.php | 0 .../Imagine/Filter/Transformation.php | 0 .../app/libraries/Imagine/Gd/Drawer.php | 0 .../app/libraries/Imagine/Gd/Effects.php | 0 .../app/libraries/Imagine/Gd/Font.php | 0 .../app/libraries/Imagine/Gd/Image.php | 0 .../app/libraries/Imagine/Gd/Imagine.php | 0 .../app/libraries/Imagine/Gd/Layers.php | 0 .../app/libraries/Imagine/Gmagick/Drawer.php | 0 .../app/libraries/Imagine/Gmagick/Effects.php | 0 .../app/libraries/Imagine/Gmagick/Font.php | 0 .../app/libraries/Imagine/Gmagick/Image.php | 0 .../app/libraries/Imagine/Gmagick/Imagine.php | 0 .../app/libraries/Imagine/Gmagick/Layers.php | 0 .../libraries/Imagine/Image/AbstractFont.php | 0 .../libraries/Imagine/Image/AbstractImage.php | 0 .../Imagine/Image/AbstractImagine.php | 0 .../Imagine/Image/AbstractLayers.php | 0 .../app/libraries/Imagine/Image/Box.php | 0 .../libraries/Imagine/Image/BoxInterface.php | 0 .../Imagine/Image/Fill/FillInterface.php | 0 .../Image/Fill/Gradient/Horizontal.php | 0 .../Imagine/Image/Fill/Gradient/Linear.php | 0 .../Imagine/Image/Fill/Gradient/Vertical.php | 0 .../libraries/Imagine/Image/FontInterface.php | 0 .../Imagine/Image/Histogram/Bucket.php | 0 .../Imagine/Image/Histogram/Range.php | 0 .../Imagine/Image/ImageInterface.php | 0 .../Imagine/Image/ImagineInterface.php | 0 .../Imagine/Image/LayersInterface.php | 0 .../Imagine/Image/ManipulatorInterface.php | 0 .../Image/Metadata/AbstractMetadataReader.php | 0 .../Image/Metadata/DefaultMetadataReader.php | 0 .../Image/Metadata/ExifMetadataReader.php | 0 .../Imagine/Image/Metadata/MetadataBag.php | 0 .../Metadata/MetadataReaderInterface.php | 0 .../libraries/Imagine/Image/Palette/CMYK.php | 0 .../Imagine/Image/Palette/Color/CMYK.php | 0 .../Image/Palette/Color/ColorInterface.php | 0 .../Imagine/Image/Palette/Color/Gray.php | 0 .../Imagine/Image/Palette/Color/RGB.php | 0 .../Imagine/Image/Palette/ColorParser.php | 0 .../Imagine/Image/Palette/Grayscale.php | 0 .../Image/Palette/PaletteInterface.php | 0 .../libraries/Imagine/Image/Palette/RGB.php | 0 .../app/libraries/Imagine/Image/Point.php | 0 .../libraries/Imagine/Image/Point/Center.php | 0 .../Imagine/Image/PointInterface.php | 0 .../app/libraries/Imagine/Image/Profile.php | 0 .../Imagine/Image/ProfileInterface.php | 0 .../app/libraries/Imagine/Imagick/Drawer.php | 0 .../app/libraries/Imagine/Imagick/Effects.php | 0 .../app/libraries/Imagine/Imagick/Font.php | 0 .../app/libraries/Imagine/Imagick/Image.php | 0 .../app/libraries/Imagine/Imagick/Imagine.php | 0 .../app/libraries/Imagine/Imagick/Layers.php | 0 .../app/libraries/MailSo/Base/Collection.php | 0 .../app/libraries/MailSo/Base/Crypt.php | 10 +- .../libraries/MailSo/Base/DateTimeHelper.php | 0 .../MailSo/Base/Enumerations/Charset.php | 0 .../MailSo/Base/Enumerations/Encoding.php | 0 .../MailSo/Base/Exceptions/Exception.php | 0 .../Exceptions/InvalidArgumentException.php | 0 .../app/libraries/MailSo/Base/HtmlUtils.php | 0 .../app/libraries/MailSo/Base/Http.php | 0 .../app/libraries/MailSo/Base/LinkFinder.php | 0 .../app/libraries/MailSo/Base/Loader.php | 0 .../MailSo/Base/ResourceRegistry.php | 0 .../MailSo/Base/StreamWrappers/Binary.php | 0 .../MailSo/Base/StreamWrappers/Literal.php | 0 .../MailSo/Base/StreamWrappers/SubStreams.php | 0 .../MailSo/Base/StreamWrappers/TempFile.php | 0 .../MailSo/Base/StreamWrappers/Test.php | 0 .../app/libraries/MailSo/Base/Utils.php | 15 - .../app/libraries/MailSo/Base/Validator.php | 0 .../libraries/MailSo/Cache/CacheClient.php | 0 .../MailSo/Cache/DriverInterface.php | 0 .../libraries/MailSo/Cache/Drivers/APC.php | 0 .../libraries/MailSo/Cache/Drivers/File.php | 0 .../MailSo/Cache/Drivers/Memcache.php | 0 .../libraries/MailSo/Cache/Drivers/Redis.php | 0 .../app/libraries/MailSo/Config.php | 0 .../app/libraries/MailSo/Hooks.php | 0 .../libraries/MailSo/Imap/BodyStructure.php | 0 .../MailSo/Imap/Enumerations/FetchType.php | 0 .../Enumerations/FolderResponseStatus.php | 0 .../MailSo/Imap/Enumerations/FolderStatus.php | 0 .../MailSo/Imap/Enumerations/FolderType.php | 0 .../MailSo/Imap/Enumerations/MessageFlag.php | 0 .../Imap/Enumerations/ResponseStatus.php | 0 .../MailSo/Imap/Enumerations/ResponseType.php | 0 .../MailSo/Imap/Enumerations/StoreAction.php | 0 .../MailSo/Imap/Exceptions/Exception.php | 0 .../Exceptions/InvalidResponseException.php | 0 .../LoginBadCredentialsException.php | 0 .../Exceptions/LoginBadMethodException.php | 0 .../MailSo/Imap/Exceptions/LoginException.php | 0 .../Exceptions/NegativeResponseException.php | 0 .../Imap/Exceptions/ResponseException.php | 0 .../Exceptions/ResponseNotFoundException.php | 0 .../Imap/Exceptions/RuntimeException.php | 0 .../libraries/MailSo/Imap/FetchResponse.php | 0 .../app/libraries/MailSo/Imap/Folder.php | 0 .../MailSo/Imap/FolderInformation.php | 0 .../app/libraries/MailSo/Imap/ImapClient.php | 0 .../libraries/MailSo/Imap/NamespaceResult.php | 0 .../app/libraries/MailSo/Imap/Response.php | 0 .../app/libraries/MailSo/LICENSE | 0 .../app/libraries/MailSo/Log/Driver.php | 0 .../libraries/MailSo/Log/Drivers/Callback.php | 0 .../app/libraries/MailSo/Log/Drivers/File.php | 0 .../libraries/MailSo/Log/Drivers/Inline.php | 0 .../libraries/MailSo/Log/Drivers/Syslog.php | 0 .../MailSo/Log/Enumerations/Type.php | 0 .../app/libraries/MailSo/Log/Logger.php | 0 .../app/libraries/MailSo/Mail/Attachment.php | 0 .../MailSo/Mail/AttachmentCollection.php | 0 .../MailSo/Mail/Exceptions/Exception.php | 0 .../MailSo/Mail/Exceptions/NonEmptyFolder.php | 0 .../Mail/Exceptions/RuntimeException.php | 0 .../app/libraries/MailSo/Mail/Folder.php | 0 .../MailSo/Mail/FolderCollection.php | 0 .../app/libraries/MailSo/Mail/MailClient.php | 2 +- .../app/libraries/MailSo/Mail/Message.php | 0 .../MailSo/Mail/MessageCollection.php | 0 .../app/libraries/MailSo/MailSo.php | 2 +- .../app/libraries/MailSo/Mime/Attachment.php | 0 .../MailSo/Mime/AttachmentCollection.php | 0 .../app/libraries/MailSo/Mime/Email.php | 0 .../libraries/MailSo/Mime/EmailCollection.php | 0 .../app/libraries/MailSo/Mime/EmailDep.php | 0 .../MailSo/Mime/Enumerations/Constants.php | 0 .../MailSo/Mime/Enumerations/DkimStatus.php | 0 .../MailSo/Mime/Enumerations/Header.php | 0 .../Mime/Enumerations/MessagePriority.php | 0 .../MailSo/Mime/Enumerations/MimeType.php | 0 .../MailSo/Mime/Enumerations/Parameter.php | 0 .../MailSo/Mime/Enumerations/Sensitivity.php | 0 .../app/libraries/MailSo/Mime/Header.php | 0 .../MailSo/Mime/HeaderCollection.php | 0 .../app/libraries/MailSo/Mime/Message.php | 21 +- .../app/libraries/MailSo/Mime/Parameter.php | 0 .../MailSo/Mime/ParameterCollection.php | 0 .../MailSo/Mime/Parser/ParserEmpty.php | 0 .../MailSo/Mime/Parser/ParserInterface.php | 0 .../MailSo/Mime/Parser/ParserMemory.php | 0 .../app/libraries/MailSo/Mime/Part.php | 0 .../libraries/MailSo/Mime/PartCollection.php | 0 .../Enumerations/ConnectionSecurityType.php | 0 .../Net/Exceptions/ConnectionException.php | 0 .../MailSo/Net/Exceptions/Exception.php | 0 .../Exceptions/InvalidArgumentException.php | 0 .../SocketAlreadyConnectedException.php | 0 .../SocketCanNotConnectToHostException.php | 0 ...ketConnectionDoesNotAvailableException.php | 0 .../Net/Exceptions/SocketReadException.php | 0 .../Exceptions/SocketReadTimeoutException.php | 0 .../SocketUnreadBufferException.php | 0 ...etUnsuppoterdSecureConnectionException.php | 0 .../Net/Exceptions/SocketWriteException.php | 0 .../app/libraries/MailSo/Net/NetClient.php | 0 .../MailSo/Pop3/Exceptions/Exception.php | 0 .../LoginBadCredentialsException.php | 0 .../Exceptions/NegativeResponseException.php | 0 .../Pop3/Exceptions/ResponseException.php | 0 .../Pop3/Exceptions/RuntimeException.php | 0 .../app/libraries/MailSo/Pop3/Pop3Client.php | 0 .../MailSo/Poppassd/Exceptions/Exception.php | 0 .../LoginBadCredentialsException.php | 0 .../Exceptions/NegativeResponseException.php | 0 .../Poppassd/Exceptions/ResponseException.php | 0 .../Poppassd/Exceptions/RuntimeException.php | 0 .../MailSo/Poppassd/PoppassdClient.php | 0 .../MailSo/Sieve/Exceptions/Exception.php | 0 .../LoginBadCredentialsException.php | 0 .../Exceptions/LoginBadMethodException.php | 0 .../Sieve/Exceptions/LoginException.php | 0 .../Exceptions/NegativeResponseException.php | 0 .../Sieve/Exceptions/ResponseException.php | 0 .../Sieve/Exceptions/RuntimeException.php | 0 .../MailSo/Sieve/ManageSieveClient.php | 2 +- .../MailSo/Smtp/Exceptions/Exception.php | 0 .../LoginBadCredentialsException.php | 0 .../Exceptions/LoginBadMethodException.php | 0 .../MailSo/Smtp/Exceptions/LoginException.php | 0 .../Exceptions/NegativeResponseException.php | 0 .../Smtp/Exceptions/ResponseException.php | 0 .../Smtp/Exceptions/RuntimeException.php | 0 .../app/libraries/MailSo/Smtp/SmtpClient.php | 0 .../libraries/MailSo/Vendors/Net/IDNA2.php | 0 .../Vendors/Net/IDNA2CustomExceptions.php | 0 .../app/libraries/MailSo/Version.php | 0 .../app/libraries/Mobile_Detect/LICENSE.txt | 0 .../Mobile_Detect/Mobile_Detect.json | 0 .../libraries/Mobile_Detect/Mobile_Detect.php | 0 .../app/libraries/Mobile_Detect/README.md | 0 .../app/libraries/Mobile_Detect/composer.json | 0 .../namespaced/Detection/MobileDetect.php | 0 .../app/libraries/Mobile_Detect/ruleset.xml | 0 .../app/libraries/PHP-OAuth2/Client.php | 0 .../GrantType/AuthorizationCode.php | 0 .../GrantType/ClientCredentials.php | 0 .../PHP-OAuth2/GrantType/IGrantType.php | 0 .../PHP-OAuth2/GrantType/Password.php | 0 .../PHP-OAuth2/GrantType/RefreshToken.php | 0 .../app/libraries/PHP-OAuth2/README | 0 .../PHPGangsta/GoogleAuthenticator.php | 0 .../app/libraries/PHPThumb/GD.php | 0 .../app/libraries/PHPThumb/PHPThumb.php | 0 .../libraries/PHPThumb/PluginInterface.php | 0 .../libraries/PHPThumb/Plugins/Reflection.php | 0 .../app/libraries/Predis/Autoloader.php | 0 .../app/libraries/Predis/Client.php | 0 .../Predis/ClientContextInterface.php | 0 .../app/libraries/Predis/ClientException.php | 0 .../app/libraries/Predis/ClientInterface.php | 0 .../Predis/Cluster/ClusterStrategy.php | 0 .../Distributor/DistributorInterface.php | 0 .../Distributor/EmptyRingException.php | 0 .../Predis/Cluster/Distributor/HashRing.php | 0 .../Predis/Cluster/Distributor/KetamaRing.php | 0 .../libraries/Predis/Cluster/Hash/CRC16.php | 0 .../Cluster/Hash/HashGeneratorInterface.php | 0 .../Predis/Cluster/PredisStrategy.php | 0 .../Predis/Cluster/RedisStrategy.php | 0 .../Predis/Cluster/StrategyInterface.php | 0 .../Iterator/CursorBasedIterator.php | 0 .../Predis/Collection/Iterator/HashKey.php | 0 .../Predis/Collection/Iterator/Keyspace.php | 0 .../Predis/Collection/Iterator/ListKey.php | 0 .../Predis/Collection/Iterator/SetKey.php | 0 .../Collection/Iterator/SortedSetKey.php | 0 .../app/libraries/Predis/Command/Command.php | 0 .../Predis/Command/CommandInterface.php | 0 .../Predis/Command/ConnectionAuth.php | 0 .../Predis/Command/ConnectionEcho.php | 0 .../Predis/Command/ConnectionPing.php | 0 .../Predis/Command/ConnectionQuit.php | 0 .../Predis/Command/ConnectionSelect.php | 0 .../libraries/Predis/Command/HashDelete.php | 0 .../libraries/Predis/Command/HashExists.php | 0 .../app/libraries/Predis/Command/HashGet.php | 0 .../libraries/Predis/Command/HashGetAll.php | 0 .../Predis/Command/HashGetMultiple.php | 0 .../Predis/Command/HashIncrementBy.php | 0 .../Predis/Command/HashIncrementByFloat.php | 0 .../app/libraries/Predis/Command/HashKeys.php | 0 .../libraries/Predis/Command/HashLength.php | 0 .../app/libraries/Predis/Command/HashScan.php | 0 .../app/libraries/Predis/Command/HashSet.php | 0 .../Predis/Command/HashSetMultiple.php | 0 .../Predis/Command/HashSetPreserve.php | 0 .../Predis/Command/HashStringLength.php | 0 .../libraries/Predis/Command/HashValues.php | 0 .../Predis/Command/HyperLogLogAdd.php | 0 .../Predis/Command/HyperLogLogCount.php | 0 .../Predis/Command/HyperLogLogMerge.php | 0 .../libraries/Predis/Command/KeyDelete.php | 0 .../app/libraries/Predis/Command/KeyDump.php | 0 .../libraries/Predis/Command/KeyExists.php | 0 .../libraries/Predis/Command/KeyExpire.php | 0 .../libraries/Predis/Command/KeyExpireAt.php | 0 .../app/libraries/Predis/Command/KeyKeys.php | 0 .../libraries/Predis/Command/KeyMigrate.php | 0 .../app/libraries/Predis/Command/KeyMove.php | 0 .../libraries/Predis/Command/KeyPersist.php | 0 .../Predis/Command/KeyPreciseExpire.php | 0 .../Predis/Command/KeyPreciseExpireAt.php | 0 .../Predis/Command/KeyPreciseTimeToLive.php | 0 .../libraries/Predis/Command/KeyRandom.php | 0 .../libraries/Predis/Command/KeyRename.php | 0 .../Predis/Command/KeyRenamePreserve.php | 0 .../libraries/Predis/Command/KeyRestore.php | 0 .../app/libraries/Predis/Command/KeyScan.php | 0 .../app/libraries/Predis/Command/KeySort.php | 0 .../Predis/Command/KeyTimeToLive.php | 0 .../app/libraries/Predis/Command/KeyType.php | 0 .../libraries/Predis/Command/ListIndex.php | 0 .../libraries/Predis/Command/ListInsert.php | 0 .../libraries/Predis/Command/ListLength.php | 0 .../libraries/Predis/Command/ListPopFirst.php | 0 .../Predis/Command/ListPopFirstBlocking.php | 0 .../libraries/Predis/Command/ListPopLast.php | 0 .../Predis/Command/ListPopLastBlocking.php | 0 .../Predis/Command/ListPopLastPushHead.php | 0 .../Command/ListPopLastPushHeadBlocking.php | 0 .../libraries/Predis/Command/ListPushHead.php | 0 .../Predis/Command/ListPushHeadX.php | 0 .../libraries/Predis/Command/ListPushTail.php | 0 .../Predis/Command/ListPushTailX.php | 0 .../libraries/Predis/Command/ListRange.php | 0 .../libraries/Predis/Command/ListRemove.php | 0 .../app/libraries/Predis/Command/ListSet.php | 0 .../app/libraries/Predis/Command/ListTrim.php | 0 .../Command/PrefixableCommandInterface.php | 0 .../Command/Processor/KeyPrefixProcessor.php | 0 .../Command/Processor/ProcessorChain.php | 0 .../Command/Processor/ProcessorInterface.php | 0 .../Predis/Command/PubSubPublish.php | 0 .../libraries/Predis/Command/PubSubPubsub.php | 0 .../Predis/Command/PubSubSubscribe.php | 0 .../Command/PubSubSubscribeByPattern.php | 0 .../Predis/Command/PubSubUnsubscribe.php | 0 .../Command/PubSubUnsubscribeByPattern.php | 0 .../libraries/Predis/Command/RawCommand.php | 0 .../Predis/Command/ScriptCommand.php | 0 .../Command/ServerBackgroundRewriteAOF.php | 0 .../Predis/Command/ServerBackgroundSave.php | 0 .../libraries/Predis/Command/ServerClient.php | 0 .../Predis/Command/ServerCommand.php | 0 .../libraries/Predis/Command/ServerConfig.php | 0 .../Predis/Command/ServerDatabaseSize.php | 0 .../libraries/Predis/Command/ServerEval.php | 0 .../Predis/Command/ServerEvalSHA.php | 0 .../Predis/Command/ServerFlushAll.php | 0 .../Predis/Command/ServerFlushDatabase.php | 0 .../libraries/Predis/Command/ServerInfo.php | 0 .../Predis/Command/ServerInfoV26x.php | 0 .../Predis/Command/ServerLastSave.php | 0 .../Predis/Command/ServerMonitor.php | 0 .../libraries/Predis/Command/ServerObject.php | 0 .../libraries/Predis/Command/ServerSave.php | 0 .../libraries/Predis/Command/ServerScript.php | 0 .../Predis/Command/ServerSentinel.php | 0 .../Predis/Command/ServerShutdown.php | 0 .../Predis/Command/ServerSlaveOf.php | 0 .../Predis/Command/ServerSlowlog.php | 0 .../libraries/Predis/Command/ServerTime.php | 0 .../app/libraries/Predis/Command/SetAdd.php | 0 .../Predis/Command/SetCardinality.php | 0 .../Predis/Command/SetDifference.php | 0 .../Predis/Command/SetDifferenceStore.php | 0 .../Predis/Command/SetIntersection.php | 0 .../Predis/Command/SetIntersectionStore.php | 0 .../libraries/Predis/Command/SetIsMember.php | 0 .../libraries/Predis/Command/SetMembers.php | 0 .../app/libraries/Predis/Command/SetMove.php | 0 .../app/libraries/Predis/Command/SetPop.php | 0 .../Predis/Command/SetRandomMember.php | 0 .../libraries/Predis/Command/SetRemove.php | 0 .../app/libraries/Predis/Command/SetScan.php | 0 .../app/libraries/Predis/Command/SetUnion.php | 0 .../Predis/Command/SetUnionStore.php | 0 .../libraries/Predis/Command/StringAppend.php | 0 .../Predis/Command/StringBitCount.php | 0 .../libraries/Predis/Command/StringBitOp.php | 0 .../libraries/Predis/Command/StringBitPos.php | 0 .../Predis/Command/StringDecrement.php | 0 .../Predis/Command/StringDecrementBy.php | 0 .../libraries/Predis/Command/StringGet.php | 0 .../libraries/Predis/Command/StringGetBit.php | 0 .../Predis/Command/StringGetMultiple.php | 0 .../Predis/Command/StringGetRange.php | 0 .../libraries/Predis/Command/StringGetSet.php | 0 .../Predis/Command/StringIncrement.php | 0 .../Predis/Command/StringIncrementBy.php | 0 .../Predis/Command/StringIncrementByFloat.php | 0 .../Predis/Command/StringPreciseSetExpire.php | 0 .../libraries/Predis/Command/StringSet.php | 0 .../libraries/Predis/Command/StringSetBit.php | 0 .../Predis/Command/StringSetExpire.php | 0 .../Predis/Command/StringSetMultiple.php | 0 .../Command/StringSetMultiplePreserve.php | 0 .../Predis/Command/StringSetPreserve.php | 0 .../Predis/Command/StringSetRange.php | 0 .../libraries/Predis/Command/StringStrlen.php | 0 .../libraries/Predis/Command/StringSubstr.php | 0 .../Predis/Command/TransactionDiscard.php | 0 .../Predis/Command/TransactionExec.php | 0 .../Predis/Command/TransactionMulti.php | 0 .../Predis/Command/TransactionUnwatch.php | 0 .../Predis/Command/TransactionWatch.php | 0 .../app/libraries/Predis/Command/ZSetAdd.php | 0 .../Predis/Command/ZSetCardinality.php | 0 .../libraries/Predis/Command/ZSetCount.php | 0 .../Predis/Command/ZSetIncrementBy.php | 0 .../Predis/Command/ZSetIntersectionStore.php | 0 .../libraries/Predis/Command/ZSetLexCount.php | 0 .../libraries/Predis/Command/ZSetRange.php | 0 .../Predis/Command/ZSetRangeByLex.php | 0 .../Predis/Command/ZSetRangeByScore.php | 0 .../app/libraries/Predis/Command/ZSetRank.php | 0 .../libraries/Predis/Command/ZSetRemove.php | 0 .../Predis/Command/ZSetRemoveRangeByLex.php | 0 .../Predis/Command/ZSetRemoveRangeByRank.php | 0 .../Predis/Command/ZSetRemoveRangeByScore.php | 0 .../Predis/Command/ZSetReverseRange.php | 0 .../Predis/Command/ZSetReverseRangeByLex.php | 0 .../Command/ZSetReverseRangeByScore.php | 0 .../Predis/Command/ZSetReverseRank.php | 0 .../app/libraries/Predis/Command/ZSetScan.php | 0 .../libraries/Predis/Command/ZSetScore.php | 0 .../Predis/Command/ZSetUnionStore.php | 0 .../Predis/CommunicationException.php | 0 .../Predis/Configuration/ClusterOption.php | 0 .../Configuration/ConnectionFactoryOption.php | 0 .../Predis/Configuration/ExceptionsOption.php | 0 .../Predis/Configuration/OptionInterface.php | 0 .../Predis/Configuration/Options.php | 0 .../Predis/Configuration/OptionsInterface.php | 0 .../Predis/Configuration/PrefixOption.php | 0 .../Predis/Configuration/ProfileOption.php | 0 .../Configuration/ReplicationOption.php | 0 .../Predis/Connection/AbstractConnection.php | 0 .../Connection/Aggregate/ClusterInterface.php | 0 .../Aggregate/MasterSlaveReplication.php | 0 .../Connection/Aggregate/PredisCluster.php | 0 .../Connection/Aggregate/RedisCluster.php | 0 .../Aggregate/ReplicationInterface.php | 0 .../AggregateConnectionInterface.php | 0 .../CompositeConnectionInterface.php | 0 .../Connection/CompositeStreamConnection.php | 0 .../Predis/Connection/ConnectionException.php | 0 .../Predis/Connection/ConnectionInterface.php | 0 .../libraries/Predis/Connection/Factory.php | 0 .../Predis/Connection/FactoryInterface.php | 0 .../Connection/NodeConnectionInterface.php | 0 .../Predis/Connection/Parameters.php | 0 .../Predis/Connection/ParametersInterface.php | 0 .../Connection/PhpiredisSocketConnection.php | 0 .../Connection/PhpiredisStreamConnection.php | 0 .../Predis/Connection/StreamConnection.php | 0 .../Predis/Connection/WebdisConnection.php | 0 .../app/libraries/Predis/Monitor/Consumer.php | 0 .../Predis/NotSupportedException.php | 0 .../app/libraries/Predis/Pipeline/Atomic.php | 0 .../Predis/Pipeline/ConnectionErrorProof.php | 0 .../Predis/Pipeline/FireAndForget.php | 0 .../libraries/Predis/Pipeline/Pipeline.php | 0 .../app/libraries/Predis/PredisException.php | 0 .../app/libraries/Predis/Profile/Factory.php | 0 .../Predis/Profile/ProfileInterface.php | 0 .../libraries/Predis/Profile/RedisProfile.php | 0 .../Predis/Profile/RedisUnstable.php | 0 .../Predis/Profile/RedisVersion200.php | 0 .../Predis/Profile/RedisVersion220.php | 0 .../Predis/Profile/RedisVersion240.php | 0 .../Predis/Profile/RedisVersion260.php | 0 .../Predis/Profile/RedisVersion280.php | 0 .../Predis/Profile/RedisVersion300.php | 0 .../Predis/Protocol/ProtocolException.php | 0 .../Protocol/ProtocolProcessorInterface.php | 0 .../Protocol/RequestSerializerInterface.php | 0 .../Protocol/ResponseReaderInterface.php | 0 .../Text/CompositeProtocolProcessor.php | 0 .../Protocol/Text/Handler/BulkResponse.php | 0 .../Protocol/Text/Handler/ErrorResponse.php | 0 .../Protocol/Text/Handler/IntegerResponse.php | 0 .../Text/Handler/MultiBulkResponse.php | 0 .../Text/Handler/ResponseHandlerInterface.php | 0 .../Protocol/Text/Handler/StatusResponse.php | 0 .../Handler/StreamableMultiBulkResponse.php | 0 .../Protocol/Text/ProtocolProcessor.php | 0 .../Protocol/Text/RequestSerializer.php | 0 .../Predis/Protocol/Text/ResponseReader.php | 0 .../Predis/PubSub/AbstractConsumer.php | 0 .../app/libraries/Predis/PubSub/Consumer.php | 0 .../Predis/PubSub/DispatcherLoop.php | 0 .../Replication/ReplicationStrategy.php | 0 .../app/libraries/Predis/Response/Error.php | 0 .../Predis/Response/ErrorInterface.php | 0 .../Predis/Response/Iterator/MultiBulk.php | 0 .../Response/Iterator/MultiBulkIterator.php | 0 .../Response/Iterator/MultiBulkTuple.php | 0 .../Predis/Response/ResponseInterface.php | 0 .../Predis/Response/ServerException.php | 0 .../app/libraries/Predis/Response/Status.php | 0 .../app/libraries/Predis/Session/Handler.php | 0 .../Transaction/AbortedMultiExecException.php | 0 .../Predis/Transaction/MultiExec.php | 0 .../Predis/Transaction/MultiExecState.php | 0 .../app/libraries/RainLoop/Actions.php | 11 +- .../app/libraries/RainLoop/Api.php | 0 .../Common/BackwardCapability/Account.php | 0 .../FacebookRainLoopPersistentDataHandler.php | 0 .../libraries/RainLoop/Common/MbStringFix.php | 0 .../libraries/RainLoop/Common/PdoAbstract.php | 0 .../RainLoopFacebookRedirectLoginHelper.php | 0 .../RainLoop/Config/AbstractConfig.php | 6 +- .../libraries/RainLoop/Config/Application.php | 24 +- .../app/libraries/RainLoop/Config/Plugin.php | 0 .../libraries/RainLoop/Enumerations/Capa.php | 0 .../RainLoop/Enumerations/Layout.php | 2 +- .../Enumerations/PluginPropertyType.php | 0 .../RainLoop/Enumerations/SignMeType.php | 4 +- .../RainLoop/Enumerations/TimeFormat.php | 0 .../Enumerations/UploadClientError.php | 0 .../RainLoop/Enumerations/UploadError.php | 0 .../RainLoop/Exceptions/ClientException.php | 0 .../RainLoop/Exceptions/Exception.php | 0 .../Exceptions/InvalidArgumentException.php | 0 .../RainLoop/Exceptions/RuntimeException.php | 0 .../app/libraries/RainLoop/KeyPathHelper.php | 0 .../app/libraries/RainLoop/Model/Account.php | 0 .../app/libraries/RainLoop/Model/Domain.php | 0 .../app/libraries/RainLoop/Model/Identity.php | 0 .../app/libraries/RainLoop/Model/Template.php | 0 .../app/libraries/RainLoop/Notifications.php | 0 .../RainLoop/Plugins/AbstractPlugin.php | 0 .../app/libraries/RainLoop/Plugins/Helper.php | 0 .../libraries/RainLoop/Plugins/Manager.php | 0 .../libraries/RainLoop/Plugins/Property.php | 0 .../RainLoop/Providers/AbstractProvider.php | 0 .../RainLoop/Providers/AddressBook.php | 0 .../AddressBook/AddressBookInterface.php | 0 .../Providers/AddressBook/Classes/Contact.php | 0 .../AddressBook/Classes/Property.php | 0 .../Providers/AddressBook/Classes/Tag.php | 0 .../AddressBook/Enumerations/PropertyType.php | 0 .../Providers/AddressBook/PdoAddressBook.php | 0 .../RainLoop/Providers/ChangePassword.php | 0 .../ChangePasswordInterface.php | 0 .../libraries/RainLoop/Providers/Domain.php | 0 .../Providers/Domain/DefaultDomain.php | 0 .../Providers/Domain/DomainAdminInterface.php | 0 .../Providers/Domain/DomainInterface.php | 0 .../libraries/RainLoop/Providers/Files.php | 0 .../RainLoop/Providers/Files/FileStorage.php | 0 .../RainLoop/Providers/Files/IFiles.php | 0 .../libraries/RainLoop/Providers/Filters.php | 0 .../Providers/Filters/Classes/Filter.php | 0 .../Filters/Classes/FilterCondition.php | 0 .../Filters/Enumerations/ActionType.php | 0 .../Filters/Enumerations/ConditionField.php | 0 .../Filters/Enumerations/ConditionType.php | 0 .../Filters/Enumerations/ConditionsType.php | 0 .../Providers/Filters/FiltersInterface.php | 0 .../Providers/Filters/SieveStorage.php | 0 .../libraries/RainLoop/Providers/Settings.php | 0 .../Providers/Settings/DefaultSettings.php | 0 .../RainLoop/Providers/Settings/ISettings.php | 0 .../libraries/RainLoop/Providers/Storage.php | 0 .../Storage/Enumerations/StorageType.php | 0 .../Providers/Storage/FileStorage.php | 0 .../RainLoop/Providers/Storage/IStorage.php | 0 .../Providers/Storage/TemproryApcStorage.php | 0 .../RainLoop/Providers/Suggestions.php | 0 .../Providers/Suggestions/ISuggestions.php | 0 .../Suggestions/OwnCloudSuggestions.php | 0 .../Providers/Suggestions/TestSuggestions.php | 0 .../RainLoop/Providers/TwoFactorAuth.php | 0 .../TwoFactorAuth/AbstractTwoFactorAuth.php | 0 .../TwoFactorAuth/GoogleTwoFactorAuth.php | 0 .../TwoFactorAuth/TwoFactorAuthInterface.php | 0 .../app/libraries/RainLoop/Service.php | 2 +- .../app/libraries/RainLoop/ServiceActions.php | 4 +- .../app/libraries/RainLoop/Settings.php | 0 .../app/libraries/RainLoop/Social.php | 0 .../app/libraries/RainLoop/Utils.php | 23 +- .../CalDAV/Backend/AbstractBackend.php | 0 .../CalDAV/Backend/BackendInterface.php | 0 .../CalDAV/Backend/NotificationSupport.php | 0 .../SabreForRainLoop/CalDAV/Backend/PDO.php | 0 .../CalDAV/Backend/SharingSupport.php | 0 .../SabreForRainLoop/CalDAV/Calendar.php | 0 .../CalDAV/CalendarObject.php | 0 .../CalDAV/CalendarQueryParser.php | 0 .../CalDAV/CalendarQueryValidator.php | 0 .../CalDAV/CalendarRootNode.php | 0 .../CalDAV/Exception/InvalidComponentType.php | 0 .../CalDAV/ICSExportPlugin.php | 0 .../SabreForRainLoop/CalDAV/ICalendar.php | 0 .../CalDAV/ICalendarObject.php | 0 .../CalDAV/IShareableCalendar.php | 0 .../CalDAV/ISharedCalendar.php | 0 .../CalDAV/Notifications/Collection.php | 0 .../CalDAV/Notifications/ICollection.php | 0 .../CalDAV/Notifications/INode.php | 0 .../Notifications/INotificationType.php | 0 .../CalDAV/Notifications/Node.php | 0 .../Notifications/Notification/Invite.php | 0 .../Notification/InviteReply.php | 0 .../Notification/SystemStatus.php | 0 .../SabreForRainLoop/CalDAV/Plugin.php | 0 .../CalDAV/Principal/Collection.php | 0 .../CalDAV/Principal/IProxyRead.php | 0 .../CalDAV/Principal/IProxyWrite.php | 0 .../CalDAV/Principal/ProxyRead.php | 0 .../CalDAV/Principal/ProxyWrite.php | 0 .../CalDAV/Principal/User.php | 0 .../CalDAV/Property/AllowedSharingModes.php | 0 .../CalDAV/Property/Invite.php | 0 .../Property/ScheduleCalendarTransp.php | 0 .../SupportedCalendarComponentSet.php | 0 .../CalDAV/Property/SupportedCalendarData.php | 0 .../CalDAV/Property/SupportedCollationSet.php | 0 .../SabreForRainLoop/CalDAV/Schedule/IMip.php | 0 .../CalDAV/Schedule/IOutbox.php | 0 .../CalDAV/Schedule/Outbox.php | 0 .../CalDAV/ShareableCalendar.php | 0 .../CalDAV/SharedCalendar.php | 0 .../SabreForRainLoop/CalDAV/SharingPlugin.php | 0 .../SabreForRainLoop/CalDAV/UserCalendars.php | 0 .../SabreForRainLoop/CalDAV/Version.php | 0 .../SabreForRainLoop/CardDAV/AddressBook.php | 0 .../CardDAV/AddressBookQueryParser.php | 0 .../CardDAV/AddressBookRoot.php | 0 .../CardDAV/Backend/AbstractBackend.php | 0 .../CardDAV/Backend/BackendInterface.php | 0 .../SabreForRainLoop/CardDAV/Backend/PDO.php | 0 .../SabreForRainLoop/CardDAV/Card.php | 0 .../SabreForRainLoop/CardDAV/IAddressBook.php | 0 .../SabreForRainLoop/CardDAV/ICard.php | 0 .../SabreForRainLoop/CardDAV/IDirectory.php | 0 .../SabreForRainLoop/CardDAV/Plugin.php | 0 .../CardDAV/Property/SupportedAddressData.php | 0 .../CardDAV/UserAddressBooks.php | 0 .../CardDAV/VCFExportPlugin.php | 0 .../SabreForRainLoop/CardDAV/Version.php | 0 .../DAV/Auth/Backend/AbstractBasic.php | 0 .../DAV/Auth/Backend/AbstractDigest.php | 0 .../DAV/Auth/Backend/Apache.php | 0 .../DAV/Auth/Backend/BackendInterface.php | 0 .../DAV/Auth/Backend/File.php | 0 .../SabreForRainLoop/DAV/Auth/Backend/PDO.php | 0 .../SabreForRainLoop/DAV/Auth/Plugin.php | 0 .../DAV/Browser/GuessContentType.php | 0 .../DAV/Browser/MapGetToPropFind.php | 0 .../SabreForRainLoop/DAV/Browser/Plugin.php | 0 .../DAV/Browser/assets/favicon.ico | Bin .../DAV/Browser/assets/icons/addressbook.png | Bin .../DAV/Browser/assets/icons/calendar.png | Bin .../DAV/Browser/assets/icons/card.png | Bin .../DAV/Browser/assets/icons/collection.png | Bin .../DAV/Browser/assets/icons/file.png | Bin .../DAV/Browser/assets/icons/parent.png | Bin .../DAV/Browser/assets/icons/principal.png | Bin .../libraries/SabreForRainLoop/DAV/Client.php | 0 .../SabreForRainLoop/DAV/Collection.php | 0 .../SabreForRainLoop/DAV/Exception.php | 0 .../DAV/Exception/BadRequest.php | 0 .../DAV/Exception/Conflict.php | 0 .../DAV/Exception/ConflictingLock.php | 0 .../DAV/Exception/FileNotFound.php | 0 .../DAV/Exception/Forbidden.php | 0 .../DAV/Exception/InsufficientStorage.php | 0 .../DAV/Exception/InvalidResourceType.php | 0 .../Exception/LockTokenMatchesRequestUri.php | 0 .../SabreForRainLoop/DAV/Exception/Locked.php | 0 .../DAV/Exception/MethodNotAllowed.php | 0 .../DAV/Exception/NotAuthenticated.php | 0 .../DAV/Exception/NotFound.php | 0 .../DAV/Exception/NotImplemented.php | 0 .../DAV/Exception/PaymentRequired.php | 0 .../DAV/Exception/PreconditionFailed.php | 0 .../DAV/Exception/ReportNotSupported.php | 0 .../RequestedRangeNotSatisfiable.php | 0 .../DAV/Exception/ServiceUnavailable.php | 0 .../DAV/Exception/UnsupportedMediaType.php | 0 .../SabreForRainLoop/DAV/FS/Directory.php | 0 .../SabreForRainLoop/DAV/FS/File.php | 0 .../SabreForRainLoop/DAV/FS/Node.php | 0 .../SabreForRainLoop/DAV/FSExt/Directory.php | 0 .../SabreForRainLoop/DAV/FSExt/File.php | 0 .../SabreForRainLoop/DAV/FSExt/Node.php | 0 .../libraries/SabreForRainLoop/DAV/File.php | 0 .../SabreForRainLoop/DAV/ICollection.php | 0 .../DAV/IExtendedCollection.php | 0 .../libraries/SabreForRainLoop/DAV/IFile.php | 0 .../libraries/SabreForRainLoop/DAV/INode.php | 0 .../SabreForRainLoop/DAV/IProperties.php | 0 .../libraries/SabreForRainLoop/DAV/IQuota.php | 0 .../DAV/Locks/Backend/AbstractBackend.php | 0 .../DAV/Locks/Backend/BackendInterface.php | 0 .../SabreForRainLoop/DAV/Locks/Backend/FS.php | 0 .../DAV/Locks/Backend/File.php | 0 .../DAV/Locks/Backend/PDO.php | 0 .../SabreForRainLoop/DAV/Locks/LockInfo.php | 0 .../SabreForRainLoop/DAV/Locks/Plugin.php | 0 .../SabreForRainLoop/DAV/Mount/Plugin.php | 0 .../libraries/SabreForRainLoop/DAV/Node.php | 0 .../SabreForRainLoop/DAV/ObjectTree.php | 0 .../DAV/PartialUpdate/IFile.php | 0 .../DAV/PartialUpdate/Plugin.php | 0 .../SabreForRainLoop/DAV/Property.php | 0 .../DAV/Property/GetLastModified.php | 0 .../SabreForRainLoop/DAV/Property/Href.php | 0 .../DAV/Property/HrefList.php | 0 .../SabreForRainLoop/DAV/Property/IHref.php | 0 .../DAV/Property/LockDiscovery.php | 0 .../DAV/Property/ResourceType.php | 0 .../DAV/Property/Response.php | 0 .../DAV/Property/ResponseList.php | 0 .../DAV/Property/SupportedLock.php | 0 .../DAV/Property/SupportedReportSet.php | 0 .../DAV/PropertyInterface.php | 0 .../libraries/SabreForRainLoop/DAV/Server.php | 0 .../SabreForRainLoop/DAV/ServerPlugin.php | 0 .../SabreForRainLoop/DAV/SimpleCollection.php | 0 .../SabreForRainLoop/DAV/SimpleFile.php | 0 .../SabreForRainLoop/DAV/StringUtil.php | 0 .../DAV/TemporaryFileFilterPlugin.php | 0 .../libraries/SabreForRainLoop/DAV/Tree.php | 0 .../SabreForRainLoop/DAV/Tree/Filesystem.php | 0 .../SabreForRainLoop/DAV/URLUtil.php | 0 .../SabreForRainLoop/DAV/UUIDUtil.php | 0 .../SabreForRainLoop/DAV/Version.php | 0 .../SabreForRainLoop/DAV/XMLUtil.php | 0 .../DAVACL/AbstractPrincipalCollection.php | 0 .../DAVACL/Exception/AceConflict.php | 0 .../DAVACL/Exception/NeedPrivileges.php | 0 .../DAVACL/Exception/NoAbstract.php | 0 .../Exception/NotRecognizedPrincipal.php | 0 .../Exception/NotSupportedPrivilege.php | 0 .../SabreForRainLoop/DAVACL/IACL.php | 0 .../SabreForRainLoop/DAVACL/IPrincipal.php | 0 .../DAVACL/IPrincipalCollection.php | 0 .../SabreForRainLoop/DAVACL/Plugin.php | 0 .../SabreForRainLoop/DAVACL/Principal.php | 0 .../PrincipalBackend/AbstractBackend.php | 0 .../PrincipalBackend/BackendInterface.php | 0 .../DAVACL/PrincipalBackend/PDO.php | 0 .../DAVACL/PrincipalCollection.php | 0 .../SabreForRainLoop/DAVACL/Property/Acl.php | 0 .../DAVACL/Property/AclRestrictions.php | 0 .../Property/CurrentUserPrivilegeSet.php | 0 .../DAVACL/Property/Principal.php | 0 .../DAVACL/Property/SupportedPrivilegeSet.php | 0 .../SabreForRainLoop/DAVACL/Version.php | 0 .../SabreForRainLoop/HTTP/AWSAuth.php | 0 .../SabreForRainLoop/HTTP/AbstractAuth.php | 0 .../SabreForRainLoop/HTTP/BasicAuth.php | 0 .../SabreForRainLoop/HTTP/DigestAuth.php | 0 .../SabreForRainLoop/HTTP/Request.php | 0 .../SabreForRainLoop/HTTP/Response.php | 0 .../libraries/SabreForRainLoop/HTTP/Util.php | 0 .../SabreForRainLoop/HTTP/Version.php | 0 .../SabreForRainLoop/VObject/Cli.php | 0 .../SabreForRainLoop/VObject/Component.php | 0 .../VObject/Component/VAlarm.php | 0 .../VObject/Component/VCalendar.php | 0 .../VObject/Component/VCard.php | 0 .../VObject/Component/VEvent.php | 0 .../VObject/Component/VFreeBusy.php | 0 .../VObject/Component/VJournal.php | 0 .../VObject/Component/VTodo.php | 0 .../VObject/DateTimeParser.php | 0 .../SabreForRainLoop/VObject/Document.php | 0 .../SabreForRainLoop/VObject/ElementList.php | 0 .../SabreForRainLoop/VObject/EofException.php | 0 .../VObject/FreeBusyGenerator.php | 0 .../SabreForRainLoop/VObject/Node.php | 0 .../SabreForRainLoop/VObject/Parameter.php | 0 .../VObject/ParseException.php | 0 .../SabreForRainLoop/VObject/Parser/Json.php | 0 .../VObject/Parser/MimeDir.php | 0 .../VObject/Parser/Parser.php | 0 .../SabreForRainLoop/VObject/Property.php | 0 .../VObject/Property/Binary.php | 0 .../VObject/Property/Boolean.php | 0 .../VObject/Property/FlatText.php | 0 .../VObject/Property/Float.php | 0 .../VObject/Property/ICalendar/CalAddress.php | 0 .../VObject/Property/ICalendar/Date.php | 0 .../VObject/Property/ICalendar/DateTime.php | 0 .../VObject/Property/ICalendar/Duration.php | 0 .../VObject/Property/ICalendar/Period.php | 0 .../VObject/Property/ICalendar/Recur.php | 0 .../VObject/Property/Integer.php | 0 .../VObject/Property/Text.php | 0 .../VObject/Property/Time.php | 0 .../VObject/Property/Unknown.php | 0 .../SabreForRainLoop/VObject/Property/Uri.php | 0 .../VObject/Property/UtcOffset.php | 0 .../VObject/Property/VCard/Date.php | 0 .../VObject/Property/VCard/DateAndOrTime.php | 0 .../VObject/Property/VCard/DateTime.php | 0 .../VObject/Property/VCard/LanguageTag.php | 0 .../VObject/Property/VCard/TimeStamp.php | 0 .../SabreForRainLoop/VObject/Reader.php | 0 .../VObject/RecurrenceIterator.php | 0 .../VObject/Splitter/ICalendar.php | 0 .../VObject/Splitter/SplitterInterface.php | 0 .../VObject/Splitter/VCard.php | 0 .../SabreForRainLoop/VObject/StringUtil.php | 0 .../SabreForRainLoop/VObject/TimeZoneUtil.php | 0 .../VObject/VCardConverter.php | 0 .../SabreForRainLoop/VObject/Version.php | 0 .../SabreForRainLoop/VObject/includes.php | 0 .../app/libraries/lessphp/LICENSE | 0 .../app/libraries/lessphp/README.md | 0 .../app/libraries/lessphp/ctype.php | 0 .../app/libraries/lessphp/lessc.inc.php | 0 .../app/libraries/pclzip/_pclzip.lib.php | 0 .../app/libraries/pclzip/gnu-lgpl.txt | 0 .../app/libraries/pclzip/pclzip.lib.php | 0 .../app/libraries/pclzip/readme.txt | 0 .../app/libraries/spyc/COPYING | 0 .../app/libraries/spyc/README.md | 0 .../app/libraries/spyc/Spyc.php | 0 .../app/libraries/spyc/composer.json | 0 .../app/libraries/tmhOAuth/LICENSE | 0 .../app/libraries/tmhOAuth/README.md | 0 .../app/libraries/tmhOAuth/cacert.pem | 0 .../app/libraries/tmhOAuth/tmhOAuth.php | 0 .../app/libraries/tmhOAuth/tmhUtilities.php | 0 .../app/localization/README | 0 .../app/localization/admin/README | 0 .../app/localization/admin/_source.en.yml | 0 .../app/localization/admin/cs_CZ.yml | 0 .../app/localization/admin/da_DK.yml | 0 .../app/localization/admin/de_DE.yml | 0 .../app/localization/admin/en_US.yml | 0 .../app/localization/admin/es_ES.yml | 0 .../app/localization/admin/fa_IR.yml | 0 .../app/localization/admin/fi_FI.yml | 0 .../app/localization/admin/fr_FR.yml | 0 .../app/localization/admin/hu_HU.yml | 0 .../app/localization/admin/id_ID.yml | 0 .../app/localization/admin/it_IT.yml | 0 .../app/localization/admin/ja_JP.yml | 0 .../app/localization/admin/lt_LT.yml | 0 .../app/localization/admin/nb_NO.yml | 0 .../app/localization/admin/nl_NL.yml | 0 .../app/localization/admin/pl_PL.yml | 12 +- .../app/localization/admin/pt_BR.yml | 0 .../app/localization/admin/ru_RU.yml | 0 .../app/localization/admin/sk_SK.yml | 0 .../app/localization/admin/sl_SI.yml | 0 .../app/localization/admin/sv_SE.yml | 0 .../app/localization/admin/zh_CN.yml | 0 .../app/localization/langs.yml | 0 .../app/localization/moment/af.js | 0 .../app/localization/moment/ar-dz.js | 0 .../app/localization/moment/ar-kw.js | 0 .../app/localization/moment/ar-ly.js | 0 .../app/localization/moment/ar-ma.js | 0 .../app/localization/moment/ar-sa.js | 0 .../app/localization/moment/ar-tn.js | 0 .../app/localization/moment/ar.js | 0 .../app/localization/moment/az.js | 0 .../app/localization/moment/be.js | 0 .../app/localization/moment/bg.js | 0 .../app/localization/moment/bm.js | 0 .../app/localization/moment/bn.js | 0 .../app/localization/moment/bo.js | 0 .../app/localization/moment/br.js | 0 .../app/localization/moment/bs.js | 0 .../app/localization/moment/ca.js | 0 .../app/localization/moment/cs.js | 0 .../app/localization/moment/cv.js | 0 .../app/localization/moment/cy.js | 0 .../app/localization/moment/da.js | 0 .../app/localization/moment/de-at.js | 0 .../app/localization/moment/de-ch.js | 0 .../app/localization/moment/de.js | 0 .../app/localization/moment/dv.js | 0 .../app/localization/moment/el.js | 0 .../app/localization/moment/en-SG.js | 0 .../app/localization/moment/en-au.js | 0 .../app/localization/moment/en-ca.js | 0 .../app/localization/moment/en-gb.js | 0 .../app/localization/moment/en-ie.js | 0 .../app/localization/moment/en-il.js | 0 .../app/localization/moment/en-nz.js | 0 .../app/localization/moment/eo.js | 0 .../app/localization/moment/es-do.js | 0 .../app/localization/moment/es-us.js | 0 .../app/localization/moment/es.js | 0 .../app/localization/moment/et.js | 0 .../app/localization/moment/eu.js | 0 .../app/localization/moment/fa.js | 0 .../app/localization/moment/fi.js | 0 .../app/localization/moment/fo.js | 0 .../app/localization/moment/fr-ca.js | 0 .../app/localization/moment/fr-ch.js | 0 .../app/localization/moment/fr.js | 0 .../app/localization/moment/fy.js | 0 .../app/localization/moment/ga.js | 0 .../app/localization/moment/gd.js | 0 .../app/localization/moment/gl.js | 0 .../app/localization/moment/gom-latn.js | 0 .../app/localization/moment/gu.js | 0 .../app/localization/moment/he.js | 0 .../app/localization/moment/hi.js | 0 .../app/localization/moment/hr.js | 0 .../app/localization/moment/hu.js | 0 .../app/localization/moment/hy-am.js | 0 .../app/localization/moment/id.js | 0 .../app/localization/moment/is.js | 0 .../app/localization/moment/it-ch.js | 0 .../app/localization/moment/it.js | 0 .../app/localization/moment/ja.js | 0 .../app/localization/moment/jv.js | 0 .../app/localization/moment/ka.js | 0 .../app/localization/moment/kk.js | 0 .../app/localization/moment/km.js | 0 .../app/localization/moment/kn.js | 0 .../app/localization/moment/ko.js | 0 .../app/localization/moment/ku.js | 0 .../app/localization/moment/ky.js | 0 .../app/localization/moment/lb.js | 0 .../app/localization/moment/lo.js | 0 .../app/localization/moment/lt.js | 0 .../app/localization/moment/lv.js | 0 .../app/localization/moment/me.js | 0 .../app/localization/moment/mi.js | 0 .../app/localization/moment/mk.js | 0 .../app/localization/moment/ml.js | 0 .../app/localization/moment/mn.js | 0 .../app/localization/moment/mr.js | 0 .../app/localization/moment/ms-my.js | 0 .../app/localization/moment/ms.js | 0 .../app/localization/moment/mt.js | 0 .../app/localization/moment/my.js | 0 .../app/localization/moment/nb.js | 0 .../app/localization/moment/ne.js | 0 .../app/localization/moment/nl-be.js | 0 .../app/localization/moment/nl.js | 0 .../app/localization/moment/nn.js | 0 .../app/localization/moment/pa-in.js | 0 .../app/localization/moment/pl.js | 0 .../app/localization/moment/pt-br.js | 0 .../app/localization/moment/pt.js | 0 .../app/localization/moment/ro.js | 0 .../app/localization/moment/ru.js | 0 .../app/localization/moment/sd.js | 0 .../app/localization/moment/se.js | 0 .../app/localization/moment/si.js | 0 .../app/localization/moment/sk.js | 0 .../app/localization/moment/sl.js | 0 .../app/localization/moment/sq.js | 0 .../app/localization/moment/sr-cyrl.js | 0 .../app/localization/moment/sr.js | 0 .../app/localization/moment/ss.js | 0 .../app/localization/moment/sv.js | 0 .../app/localization/moment/sw.js | 0 .../app/localization/moment/ta.js | 0 .../app/localization/moment/te.js | 0 .../app/localization/moment/tet.js | 0 .../app/localization/moment/tg.js | 0 .../app/localization/moment/th.js | 0 .../app/localization/moment/tl-ph.js | 0 .../app/localization/moment/tlh.js | 0 .../app/localization/moment/tr.js | 0 .../app/localization/moment/tzl.js | 0 .../app/localization/moment/tzm-latn.js | 0 .../app/localization/moment/tzm.js | 0 .../app/localization/moment/ug-cn.js | 0 .../app/localization/moment/uk.js | 0 .../app/localization/moment/ur.js | 0 .../app/localization/moment/uz-latn.js | 0 .../app/localization/moment/uz.js | 0 .../app/localization/moment/vi.js | 0 .../app/localization/moment/x-pseudo.js | 0 .../app/localization/moment/yo.js | 0 .../app/localization/moment/zh-cn.js | 0 .../app/localization/moment/zh-hk.js | 0 .../app/localization/moment/zh-tw.js | 0 .../app/localization/webmail/README | 0 .../app/localization/webmail/_source.en.yml | 0 .../app/localization/webmail/ar_SA.yml | 0 .../app/localization/webmail/bg_BG.yml | 0 .../app/localization/webmail/cs_CZ.yml | 0 .../app/localization/webmail/da_DK.yml | 0 .../app/localization/webmail/de_DE.yml | 0 .../app/localization/webmail/el_GR.yml | 0 .../app/localization/webmail/en_GB.yml | 0 .../app/localization/webmail/en_US.yml | 0 .../app/localization/webmail/es_ES.yml | 0 .../app/localization/webmail/et_EE.yml | 0 .../app/localization/webmail/fa_IR.yml | 0 .../app/localization/webmail/fi_FI.yml | 4 +- .../app/localization/webmail/fr_FR.yml | 0 .../app/localization/webmail/hu_HU.yml | 0 .../app/localization/webmail/id_ID.yml | 0 .../app/localization/webmail/is_IS.yml | 0 .../app/localization/webmail/it_IT.yml | 0 .../app/localization/webmail/ja_JP.yml | 0 .../app/localization/webmail/ko_KR.yml | 0 .../app/localization/webmail/lt_LT.yml | 0 .../app/localization/webmail/lv_LV.yml | 0 .../app/localization/webmail/nb_NO.yml | 0 .../app/localization/webmail/nl_NL.yml | 0 .../app/localization/webmail/pl_PL.yml | 0 .../app/localization/webmail/pt_BR.yml | 0 .../app/localization/webmail/pt_PT.yml | 0 .../app/localization/webmail/ro_RO.yml | 0 .../app/localization/webmail/ru_RU.yml | 0 .../app/localization/webmail/sk_SK.yml | 0 .../app/localization/webmail/sl_SI.yml | 0 .../app/localization/webmail/sv_SE.yml | 0 .../app/localization/webmail/tr_TR.yml | 0 .../app/localization/webmail/uk_UA.yml | 0 .../app/localization/webmail/zh_CN.yml | 0 .../app/localization/webmail/zh_TW.yml | 0 .../app/resources/RainLoop.asc | 0 .../app/resources/images/empty-contact.png | Bin .../resources/images/services/amazon.com.png | Bin .../resources/images/services/apple.com.png | Bin .../resources/images/services/asana.com.png | Bin .../resources/images/services/battle.net.png | Bin .../images/services/blizzard.com.png | Bin .../images/services/cnet.online.com.png | Bin .../images/services/connect.asana.com.png | Bin .../images/services/e.paypal.com.png | Bin .../app/resources/images/services/ea.com.png | Bin .../resources/images/services/ebay.com.png | Bin .../resources/images/services/em.ea.com.png | Bin .../images/services/email.blizzard.com.png | Bin .../images/services/email.microsoft.com.png | Bin .../images/services/email.skype.com.png | Bin .../images/services/facebook.com.png | Bin .../images/services/facebookmail.com.png | Bin .../resources/images/services/github.com.png | Bin .../resources/images/services/google.com.png | Bin .../images/services/id.apple.com.png | Bin .../images/services/intl.paypal.com.png | Bin .../images/services/microsoft.com.png | Bin .../images/services/microsoftonline.com.png | Bin .../resources/images/services/myspace.com.png | Bin .../images/services/news.myspace.com.png | Bin .../images/services/news.onlive.com.png | Bin .../resources/images/services/onlive.com.png | Bin .../resources/images/services/paypal.com.png | Bin .../images/services/plus.google.com.png | Bin .../services/postmaster.twitter.com.png | Bin .../images/services/reply.ebay.com.png | Bin .../images/services/reply1.ebay.com.png | Bin .../images/services/reply2.ebay.com.png | Bin .../images/services/reply3.ebay.com.png | Bin .../resources/images/services/skype.com.png | Bin .../images/services/steampowered.com.png | Bin .../app/resources/images/services/ted.com.png | Bin .../resources/images/services/twitter.com.png | Bin .../resources/images/services/youtube.com.png | Bin .../app/templates/BadBrowser.html | 0 .../app/templates/Error.html | 0 .../v/1.15.0/app/templates/Index.html | 37 + .../app/templates/Social.html | 0 .../app/templates/Themes/template.less | 0 .../app/templates/Themes/values.less | 0 .../app/templates/Views/Admin/AdminLogin.html | 0 .../app/templates/Views/Admin/AdminMenu.html | 0 .../app/templates/Views/Admin/AdminPane.html | 0 .../Views/Admin/AdminSettingsAbout.html | 0 .../Views/Admin/AdminSettingsBranding.html | 0 .../Views/Admin/AdminSettingsContacts.html | 2 +- .../Admin/AdminSettingsDomainListItem.html | 0 .../Views/Admin/AdminSettingsDomains.html | 0 .../Views/Admin/AdminSettingsGeneral.html | 0 .../Views/Admin/AdminSettingsLicensing.html | 0 .../Views/Admin/AdminSettingsLogin.html | 0 .../Views/Admin/AdminSettingsPackages.html | 0 .../Admin/AdminSettingsPackagesListItem.html | 0 .../Admin/AdminSettingsPackagesTable.html | 0 .../Admin/AdminSettingsPluginListItem.html | 0 .../Admin/AdminSettingsPluginProperty.html | 2 +- .../Views/Admin/AdminSettingsPlugins.html | 0 .../Views/Admin/AdminSettingsSecurity.html | 8 +- .../Views/Admin/AdminSettingsSocial.html | 0 .../templates/Views/Admin/PopupsActivate.html | 0 .../templates/Views/Admin/PopupsDomain.html | 0 .../Views/Admin/PopupsDomainAlias.html | 0 .../templates/Views/Admin/PopupsPlugin.html | 0 .../app/templates/Views/Common/Cmd.html | 0 .../app/templates/Views/Common/Pagenator.html | 0 .../app/templates/Views/Common/PopupsAsk.html | 0 .../Common/PopupsKeyboardShortcutsHelp.html | 0 .../Views/Common/PopupsLanguages.html | 0 .../Views/Common/PopupsWelcomePage.html | 0 .../templates/Views/Components/Checkbox.html | 0 .../Views/Components/CheckboxClassic.html | 0 .../Components/CheckboxMaterialDesign.html | 0 .../app/templates/Views/Components/Date.html | 0 .../app/templates/Views/Components/Input.html | 0 .../app/templates/Views/Components/Radio.html | 0 .../Views/Components/SaveTrigger.html | 0 .../templates/Views/Components/Select.html | 0 .../templates/Views/Components/TextArea.html | 0 .../app/templates/Views/User/About.html | 0 .../Views/User/ComposeAttachment.html | 0 .../app/templates/Views/User/Login.html | 0 .../templates/Views/User/LoginWelcome.html | 0 .../templates/Views/User/MailFolderList.html | 0 .../Views/User/MailFolderListItem.html | 0 .../Views/User/MailFolderListSystemItem.html | 0 .../templates/Views/User/MailMessageList.html | 0 .../Views/User/MailMessageListItem.html | 0 .../MailMessageListItemNoPreviewPane.html | 0 .../templates/Views/User/MailMessageView.html | 0 .../app/templates/Views/User/PhotoSwipe.html | 0 .../templates/Views/User/PopupsAccount.html | 2 +- .../Views/User/PopupsAddOpenPgpKey.html | 0 .../Views/User/PopupsAdvancedSearch.html | 0 .../templates/Views/User/PopupsCompose.html | 0 .../Views/User/PopupsComposeOpenPgp.html | 2 +- .../templates/Views/User/PopupsContacts.html | 0 .../templates/Views/User/PopupsFilter.html | 0 .../Views/User/PopupsFolderClear.html | 0 .../Views/User/PopupsFolderCreate.html | 0 .../Views/User/PopupsFolderSystem.html | 0 .../templates/Views/User/PopupsIdentity.html | 0 .../Views/User/PopupsMessageOpenPgp.html | 2 +- .../Views/User/PopupsNewOpenPgpKey.html | 2 +- .../templates/Views/User/PopupsTemplate.html | 0 .../User/PopupsTwoFactorConfiguration.html | 0 .../Views/User/PopupsTwoFactorTest.html | 0 .../Views/User/PopupsViewOpenPgpKey.html | 0 .../Views/User/PopupsWindowSimpleMessage.html | 0 .../Views/User/SettingsAccounts.html | 0 .../Views/User/SettingsChangePassword.html | 6 +- .../Views/User/SettingsContacts.html | 11 +- .../templates/Views/User/SettingsCustom.html | 0 .../templates/Views/User/SettingsFilters.html | 0 .../User/SettingsFiltersActionDiscard.html | 0 .../User/SettingsFiltersActionForward.html | 0 .../SettingsFiltersActionMoveToFolder.html | 0 .../Views/User/SettingsFiltersActionNone.html | 0 .../User/SettingsFiltersActionReject.html | 0 .../User/SettingsFiltersActionVacation.html | 0 .../User/SettingsFiltersConditionDefault.html | 0 .../User/SettingsFiltersConditionMore.html | 0 .../User/SettingsFiltersConditionSize.html | 0 .../Views/User/SettingsFolderItem.html | 0 .../templates/Views/User/SettingsFolders.html | 0 .../templates/Views/User/SettingsGeneral.html | 0 .../templates/Views/User/SettingsMenu.html | 0 .../templates/Views/User/SettingsOpenPGP.html | 0 .../templates/Views/User/SettingsPane.html | 0 .../Views/User/SettingsSecurity.html | 0 .../templates/Views/User/SettingsSocial.html | 0 .../Views/User/SettingsTemplates.html | 0 .../templates/Views/User/SettingsThemes.html | 0 .../templates/Views/User/SystemDropDown.html | 0 app/rainloop/v/{1.14.0 => 1.15.0}/check.php | 0 app/rainloop/v/{1.14.0 => 1.15.0}/include.php | 31 +- app/rainloop/v/{1.14.0 => 1.15.0}/index.php | 0 .../v/{1.14.0 => 1.15.0}/index.php.root | 2 +- .../static/android-icon.png | Bin .../static/apple-touch-icon.png | Bin .../static/browsers/chrome.gif | Bin .../static/browsers/firefox.gif | Bin .../static/browsers/opera.gif | Bin .../static/browsers/safari.gif | Bin .../static/ckeditor/FIXES.txt | 0 .../static/ckeditor/build-config.js | 0 .../static/ckeditor/ckeditor.js | 0 .../static/ckeditor/ckeditor.orig.js | 0 .../static/ckeditor/config.js | 0 .../static/ckeditor/contents.css | 0 .../static/ckeditor/lang/af.js | 0 .../static/ckeditor/lang/ar.js | 0 .../static/ckeditor/lang/az.js | 0 .../static/ckeditor/lang/bg.js | 0 .../static/ckeditor/lang/bn.js | 0 .../static/ckeditor/lang/bs.js | 0 .../static/ckeditor/lang/ca.js | 0 .../static/ckeditor/lang/cs.js | 0 .../static/ckeditor/lang/cy.js | 0 .../static/ckeditor/lang/da.js | 0 .../static/ckeditor/lang/de-ch.js | 0 .../static/ckeditor/lang/de.js | 0 .../static/ckeditor/lang/el.js | 0 .../static/ckeditor/lang/en-au.js | 0 .../static/ckeditor/lang/en-ca.js | 0 .../static/ckeditor/lang/en-gb.js | 0 .../static/ckeditor/lang/en.js | 0 .../static/ckeditor/lang/eo.js | 0 .../static/ckeditor/lang/es.js | 0 .../static/ckeditor/lang/et.js | 0 .../static/ckeditor/lang/eu.js | 0 .../static/ckeditor/lang/fa.js | 0 .../static/ckeditor/lang/fi.js | 0 .../static/ckeditor/lang/fo.js | 0 .../static/ckeditor/lang/fr-ca.js | 0 .../static/ckeditor/lang/fr.js | 0 .../static/ckeditor/lang/gl.js | 0 .../static/ckeditor/lang/gu.js | 0 .../static/ckeditor/lang/he.js | 0 .../static/ckeditor/lang/hi.js | 0 .../static/ckeditor/lang/hr.js | 0 .../static/ckeditor/lang/hu.js | 0 .../static/ckeditor/lang/id.js | 0 .../static/ckeditor/lang/is.js | 0 .../static/ckeditor/lang/it.js | 0 .../static/ckeditor/lang/ja.js | 0 .../static/ckeditor/lang/ka.js | 0 .../static/ckeditor/lang/km.js | 0 .../static/ckeditor/lang/ko.js | 0 .../static/ckeditor/lang/ku.js | 0 .../static/ckeditor/lang/lt.js | 0 .../static/ckeditor/lang/lv.js | 0 .../static/ckeditor/lang/mk.js | 0 .../static/ckeditor/lang/mn.js | 0 .../static/ckeditor/lang/ms.js | 0 .../static/ckeditor/lang/nb.js | 0 .../static/ckeditor/lang/nl.js | 0 .../static/ckeditor/lang/no.js | 0 .../static/ckeditor/lang/oc.js | 0 .../static/ckeditor/lang/pl.js | 0 .../static/ckeditor/lang/pt-br.js | 0 .../static/ckeditor/lang/pt.js | 0 .../static/ckeditor/lang/ro.js | 0 .../static/ckeditor/lang/ru.js | 0 .../static/ckeditor/lang/si.js | 0 .../static/ckeditor/lang/sk.js | 0 .../static/ckeditor/lang/sl.js | 0 .../static/ckeditor/lang/sq.js | 0 .../static/ckeditor/lang/sr-latn.js | 0 .../static/ckeditor/lang/sr.js | 0 .../static/ckeditor/lang/sv.js | 0 .../static/ckeditor/lang/th.js | 0 .../static/ckeditor/lang/tr.js | 0 .../static/ckeditor/lang/tt.js | 0 .../static/ckeditor/lang/ug.js | 0 .../static/ckeditor/lang/uk.js | 0 .../static/ckeditor/lang/vi.js | 0 .../static/ckeditor/lang/zh-cn.js | 0 .../static/ckeditor/lang/zh.js | 0 .../ckeditor/plugins/about/dialogs/about.js | 0 .../about/dialogs/hidpi/logo_ckeditor.png | Bin .../plugins/about/dialogs/logo_ckeditor.png | Bin .../ckeditor/plugins/base64image/LICENSE.md | 0 .../ckeditor/plugins/base64image/README.md | 0 .../base64image/dialogs/base64image.js | 0 .../plugins/clipboard/dialogs/paste.js | 0 .../colordialog/dialogs/colordialog.css | 0 .../colordialog/dialogs/colordialog.js | 0 .../plugins/dialog/dialogDefinition.js | 0 .../static/ckeditor/plugins/icons.png | Bin .../static/ckeditor/plugins/icons_hidpi.png | Bin .../ckeditor/plugins/image/dialogs/image.js | 0 .../ckeditor/plugins/image/images/noimage.png | Bin .../ckeditor/plugins/image2/dialogs/image2.js | 0 .../ckeditor/plugins/link/dialogs/anchor.js | 0 .../ckeditor/plugins/link/dialogs/link.js | 0 .../ckeditor/plugins/link/images/anchor.png | Bin .../plugins/link/images/hidpi/anchor.png | Bin .../plugins/plain/icons/hidpi/plain-rtl.png | Bin .../plugins/plain/icons/hidpi/plain.png | Bin .../plugins/plain/icons/plain-rtl.png | Bin .../ckeditor/plugins/plain/icons/plain.png | Bin .../static/ckeditor/plugins/plain/plugin.js | 0 .../ckeditor/plugins/quicktable/CHANGELOG.md | 0 .../ckeditor/plugins/quicktable/Gruntfile.js | 0 .../ckeditor/plugins/quicktable/LICENSE | 0 .../ckeditor/plugins/quicktable/README.md | 0 .../ckeditor/plugins/quicktable/package.json | 0 .../ckeditor/plugins/quicktable/template.jst | 0 .../ckeditor/plugins/signature/plugin.js | 0 .../ckeditor/plugins/table/dialogs/table.js | 0 .../ckeditor/plugins/widget/images/handle.png | Bin .../ckeditor/skins/moono-lisa/dialog.css | 0 .../ckeditor/skins/moono-lisa/dialog_ie.css | 0 .../ckeditor/skins/moono-lisa/dialog_ie8.css | 0 .../skins/moono-lisa/dialog_iequirks.css | 0 .../ckeditor/skins/moono-lisa/editor.css | 0 .../skins/moono-lisa/editor_gecko.css | 0 .../ckeditor/skins/moono-lisa/editor_ie.css | 0 .../ckeditor/skins/moono-lisa/editor_ie8.css | 0 .../skins/moono-lisa/editor_iequirks.css | 0 .../ckeditor/skins/moono-lisa/icons.png | Bin .../ckeditor/skins/moono-lisa/icons_hidpi.png | Bin .../skins/moono-lisa/images/arrow.png | Bin .../skins/moono-lisa/images/close.png | Bin .../skins/moono-lisa/images/hidpi/close.png | Bin .../moono-lisa/images/hidpi/lock-open.png | Bin .../skins/moono-lisa/images/hidpi/lock.png | Bin .../skins/moono-lisa/images/hidpi/refresh.png | Bin .../skins/moono-lisa/images/lock-open.png | Bin .../ckeditor/skins/moono-lisa/images/lock.png | Bin .../skins/moono-lisa/images/refresh.png | Bin .../skins/moono-lisa/images/spinner.gif | Bin .../ckeditor/skins/moono-lisa/readme.md | 0 .../static/ckeditor/styles.js | 0 .../v/{1.14.0 => 1.15.0}/static/css/app.css | 6 +- .../{1.14.0 => 1.15.0}/static/css/app.min.css | 0 .../static/css/default-skin.png | Bin .../static/css/default-skin.svg | 0 .../v/{1.14.0 => 1.15.0}/static/css/flags.png | Bin .../static/css/fonts/lg.eot | Bin .../static/css/fonts/lg.svg | 0 .../static/css/fonts/lg.ttf | Bin .../static/css/fonts/lg.woff | Bin .../static/css/fonts/rainloop.eot | Bin .../static/css/fonts/rainloop.svg | 0 .../static/css/fonts/rainloop.ttf | Bin .../static/css/fonts/rainloop.woff | Bin .../static/css/images/editor.png | Bin .../static/css/images/empty-contact.png | Bin .../static/css/images/grey.png | Bin .../css/images/icom-message-notification.png | Bin .../static/css/images/loading.gif | Bin .../static/css/images/rainloop-logo.png | Bin .../static/css/images/sync.gif | Bin .../static/css/images/sync.png | Bin .../static/css/images/white.png | Bin .../static/css/img/loading.gif | Bin .../{1.14.0 => 1.15.0}/static/css/loading.gif | Bin .../static/css/preloader.gif | Bin .../{1.14.0 => 1.15.0}/static/css/social.css | 0 .../static/css/social.min.css | 0 .../static/favicon-light.ico | Bin .../static/favicon-light.png | Bin .../v/{1.14.0 => 1.15.0}/static/favicon.ico | Bin .../v/{1.14.0 => 1.15.0}/static/favicon.png | Bin .../v/{1.14.0 => 1.15.0}/static/js/admin.js | 3573 +++---- .../v/{1.14.0 => 1.15.0}/static/js/app.js | 4445 ++++----- app/rainloop/v/1.15.0/static/js/boot.js | 8421 +++++++++++++++++ .../v/{1.14.0 => 1.15.0}/static/js/libs.js | 6 +- .../v/1.15.0/static/js/min/admin.min.js | 1 + .../v/1.15.0/static/js/min/app.min.js | 1 + .../v/1.15.0/static/js/min/boot.min.js | 1 + .../v/1.15.0/static/js/min/libs.min.js | 1 + .../static/js/min/openpgp.min.js | 0 .../static/js/min/openpgp.worker.min.js | 0 .../v/1.15.0/static/js/min/polyfills.min.js | 1 + app/rainloop/v/1.15.0/static/js/polyfills.js | 4469 +++++++++ .../v/{1.14.0 => 1.15.0}/static/manifest.json | 0 .../static/sounds/new-mail.mp3 | Bin .../static/sounds/new-mail.ogg | Bin .../themes/A/images/background.jpg | Bin .../themes/A/images/preview.png | Bin .../v/{1.14.0 => 1.15.0}/themes/A/styles.less | 0 .../themes/Blurred/images/background.jpg | Bin .../themes/Blurred/images/preview.png | Bin .../themes/Blurred/styles.less | 0 .../themes/Clear/images/preview.png | Bin .../themes/Clear/styles.less | 0 .../themes/DarkShine/images/background.jpg | Bin .../themes/DarkShine/images/preview.png | Bin .../themes/DarkShine/styles.less | 0 .../themes/Default/images/background.jpg | Bin .../themes/Default/images/background.png | Bin .../themes/Default/images/preview.png | Bin .../themes/Default/styles.less | 0 .../themes/Linen/images/background.jpg | Bin .../themes/Linen/images/background.png | Bin .../themes/Linen/images/preview.png | Bin .../themes/Linen/styles.less | 0 .../themes/Love/images/background.jpg | Bin .../themes/Love/images/preview.png | Bin .../themes/Love/styles.less | 0 .../{1.14.0 => 1.15.0}/themes/Mobile/ext.less | 0 .../themes/Mobile/images/preview.png | Bin .../themes/Mobile/styles.less | 0 .../themes/Snow/images/background.jpg | Bin .../themes/Snow/images/preview.png | Bin .../themes/Snow/styles.less | 0 .../themes/Squares/images/background.jpg | Bin .../themes/Squares/images/background.png | Bin .../themes/Squares/images/preview.png | Bin .../themes/Squares/styles.less | 0 .../themes/SquaresDark/images/background.jpg | Bin .../themes/SquaresDark/images/background.png | Bin .../themes/SquaresDark/images/preview.png | Bin .../themes/SquaresDark/styles.less | 0 .../themes/Stripes/images/background.jpg | Bin .../themes/Stripes/images/preview.png | Bin .../themes/Stripes/styles.less | 0 .../themes/Wood/images/background.jpg | Bin .../themes/Wood/images/background.png | Bin .../themes/Wood/images/preview.png | Bin .../themes/Wood/styles.less | 0 .../themes/Xv/images/background.jpg | Bin .../themes/Xv/images/background.png | Bin .../themes/Xv/images/preview.png | Bin .../{1.14.0 => 1.15.0}/themes/Xv/styles.less | 0 1473 files changed, 17184 insertions(+), 16903 deletions(-) delete mode 100644 app/rainloop/v/1.14.0/app/templates/Index.html delete mode 100644 app/rainloop/v/1.14.0/static/js/boot.js delete mode 100644 app/rainloop/v/1.14.0/static/js/min/admin.min.js delete mode 100644 app/rainloop/v/1.14.0/static/js/min/app.min.js delete mode 100644 app/rainloop/v/1.14.0/static/js/min/boot.min.js delete mode 100644 app/rainloop/v/1.14.0/static/js/min/libs.min.js delete mode 100644 app/rainloop/v/1.14.0/static/js/min/polyfills.min.js delete mode 100644 app/rainloop/v/1.14.0/static/js/polyfills.js rename app/rainloop/v/{1.14.0 => 1.15.0}/app/domains/default.ini.dist (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/domains/disabled (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/domains/gmail.com.ini (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/domains/outlook.com.ini (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/domains/qq.com.ini (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/domains/yahoo.com.ini (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/handle.php (93%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Authentication/AccessToken.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Authentication/AccessTokenMetadata.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Authentication/OAuth2Client.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookAuthenticationException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookAuthorizationException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookClientException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookOtherException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookSDKException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookServerException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Exceptions/FacebookThrottleException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Facebook.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FacebookApp.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FacebookBatchRequest.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FacebookBatchResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FacebookClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FacebookRequest.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FacebookResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FileUpload/FacebookFile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FileUpload/FacebookVideo.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/FileUpload/Mimetypes.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/Collection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphAchievement.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphAlbum.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphApplication.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphCoverPhoto.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphEdge.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphEvent.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphGroup.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphList.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphLocation.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphNode.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphNodeFactory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphObject.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphObjectFactory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphPage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphPicture.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphSessionInfo.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/GraphNodes/GraphUser.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Helpers/FacebookCanvasHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Helpers/FacebookJavaScriptHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Helpers/FacebookPageTabHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Helpers/FacebookRedirectLoginHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Http/GraphRawResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Http/RequestBodyInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Http/RequestBodyMultipart.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Http/RequestBodyUrlEncoded.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/FacebookCurl.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/FacebookCurlHttpClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/FacebookGuzzleHttpClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/FacebookHttpClientInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/FacebookStream.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/FacebookStreamHttpClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PersistentData/PersistentDataInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/SignedRequest.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Url/FacebookUrlDetectionHandler.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Url/FacebookUrlManipulator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/Url/UrlDetectionInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Facebook/autoload.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Draw/DrawerInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Effects/EffectsInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Exception/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Exception/InvalidArgumentException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Exception/NotSupportedException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Exception/OutOfBoundsException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Exception/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Advanced/Border.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Advanced/Canvas.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Advanced/Grayscale.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Advanced/OnPixelBased.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Advanced/RelativeResize.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/ApplyMask.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Autorotate.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Copy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Crop.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Fill.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/FlipHorizontally.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/FlipVertically.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Paste.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Resize.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Rotate.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Save.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Show.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Strip.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/Thumbnail.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Basic/WebOptimization.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/FilterInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/ImagineAware.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Filter/Transformation.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gd/Drawer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gd/Effects.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gd/Font.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gd/Image.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gd/Imagine.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gd/Layers.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gmagick/Drawer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gmagick/Effects.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gmagick/Font.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gmagick/Image.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gmagick/Imagine.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Gmagick/Layers.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/AbstractFont.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/AbstractImage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/AbstractImagine.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/AbstractLayers.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Box.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/BoxInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Fill/FillInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Fill/Gradient/Horizontal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Fill/Gradient/Linear.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Fill/Gradient/Vertical.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/FontInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Histogram/Bucket.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Histogram/Range.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/ImageInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/ImagineInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/LayersInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/ManipulatorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Metadata/AbstractMetadataReader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Metadata/DefaultMetadataReader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Metadata/ExifMetadataReader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Metadata/MetadataBag.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Metadata/MetadataReaderInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/CMYK.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/Color/CMYK.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/Color/ColorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/Color/Gray.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/Color/RGB.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/ColorParser.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/Grayscale.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/PaletteInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Palette/RGB.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Point.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Point/Center.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/PointInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/Profile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Image/ProfileInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Imagick/Drawer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Imagick/Effects.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Imagick/Font.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Imagick/Image.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Imagick/Imagine.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Imagine/Imagick/Layers.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Collection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Crypt.php (90%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/DateTimeHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Enumerations/Charset.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Enumerations/Encoding.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Exceptions/InvalidArgumentException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/HtmlUtils.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Http.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/LinkFinder.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Loader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/ResourceRegistry.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/StreamWrappers/Binary.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/StreamWrappers/Literal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/StreamWrappers/TempFile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/StreamWrappers/Test.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Utils.php (95%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Base/Validator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Cache/CacheClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Cache/DriverInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Cache/Drivers/APC.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Cache/Drivers/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Cache/Drivers/Memcache.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Cache/Drivers/Redis.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Config.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Hooks.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/BodyStructure.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/FetchType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/FolderType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/ResponseType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Enumerations/StoreAction.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/LoginException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/ResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/FetchResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Folder.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/FolderInformation.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/ImapClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/NamespaceResult.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Imap/Response.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/LICENSE (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Driver.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Drivers/Callback.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Drivers/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Drivers/Inline.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Drivers/Syslog.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Enumerations/Type.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Log/Logger.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/Attachment.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/AttachmentCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/Folder.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/FolderCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/MailClient.php (96%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/Message.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mail/MessageCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/MailSo.php (98%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Attachment.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/AttachmentCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Email.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/EmailCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/EmailDep.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/Constants.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/DkimStatus.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/Header.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/MimeType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/Parameter.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Header.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/HeaderCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Message.php (97%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Parameter.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/ParameterCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Parser/ParserEmpty.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Parser/ParserInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Parser/ParserMemory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/Part.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Mime/PartCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/ConnectionException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketReadException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Net/NetClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Pop3/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Pop3/Pop3Client.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Poppassd/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Poppassd/PoppassdClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/LoginException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Sieve/ManageSieveClient.php (95%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/LoginException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Smtp/SmtpClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Vendors/Net/IDNA2.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Vendors/Net/IDNA2CustomExceptions.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/MailSo/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/LICENSE.txt (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/Mobile_Detect.json (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/Mobile_Detect.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/README.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/composer.json (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/namespaced/Detection/MobileDetect.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Mobile_Detect/ruleset.xml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/Client.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/GrantType/IGrantType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/GrantType/Password.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHP-OAuth2/README (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHPGangsta/GoogleAuthenticator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHPThumb/GD.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHPThumb/PHPThumb.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHPThumb/PluginInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/PHPThumb/Plugins/Reflection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Autoloader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Client.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/ClientContextInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/ClientException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/ClientInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/ClusterStrategy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/Distributor/DistributorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/Distributor/EmptyRingException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/Distributor/HashRing.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/Distributor/KetamaRing.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/Hash/CRC16.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/Hash/HashGeneratorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/PredisStrategy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/RedisStrategy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Cluster/StrategyInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Collection/Iterator/CursorBasedIterator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Collection/Iterator/HashKey.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Collection/Iterator/Keyspace.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Collection/Iterator/ListKey.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Collection/Iterator/SetKey.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Collection/Iterator/SortedSetKey.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/Command.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/CommandInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ConnectionAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ConnectionEcho.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ConnectionPing.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ConnectionQuit.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ConnectionSelect.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashDelete.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashExists.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashGet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashGetAll.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashGetMultiple.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashIncrementBy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashIncrementByFloat.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashKeys.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashLength.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashScan.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashSetMultiple.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashSetPreserve.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashStringLength.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HashValues.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HyperLogLogAdd.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HyperLogLogCount.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/HyperLogLogMerge.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyDelete.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyDump.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyExists.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyExpire.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyExpireAt.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyKeys.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyMigrate.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyMove.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyPersist.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyPreciseExpire.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyPreciseExpireAt.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyPreciseTimeToLive.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyRandom.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyRename.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyRenamePreserve.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyRestore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyScan.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeySort.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyTimeToLive.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/KeyType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListIndex.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListInsert.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListLength.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPopFirst.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPopFirstBlocking.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPopLast.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPopLastBlocking.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPopLastPushHead.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPopLastPushHeadBlocking.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPushHead.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPushHeadX.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPushTail.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListPushTailX.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListRange.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListRemove.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ListTrim.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PrefixableCommandInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/Processor/KeyPrefixProcessor.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/Processor/ProcessorChain.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/Processor/ProcessorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PubSubPublish.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PubSubPubsub.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PubSubSubscribe.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PubSubSubscribeByPattern.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PubSubUnsubscribe.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/PubSubUnsubscribeByPattern.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/RawCommand.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ScriptCommand.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerBackgroundRewriteAOF.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerBackgroundSave.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerClient.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerCommand.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerConfig.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerDatabaseSize.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerEval.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerEvalSHA.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerFlushAll.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerFlushDatabase.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerInfo.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerInfoV26x.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerLastSave.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerMonitor.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerObject.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerSave.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerScript.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerSentinel.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerShutdown.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerSlaveOf.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerSlowlog.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ServerTime.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetAdd.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetCardinality.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetDifference.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetDifferenceStore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetIntersection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetIntersectionStore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetIsMember.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetMembers.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetMove.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetPop.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetRandomMember.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetRemove.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetScan.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetUnion.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/SetUnionStore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringAppend.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringBitCount.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringBitOp.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringBitPos.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringDecrement.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringDecrementBy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringGet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringGetBit.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringGetMultiple.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringGetRange.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringGetSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringIncrement.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringIncrementBy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringIncrementByFloat.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringPreciseSetExpire.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSetBit.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSetExpire.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSetMultiple.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSetMultiplePreserve.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSetPreserve.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSetRange.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringStrlen.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/StringSubstr.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/TransactionDiscard.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/TransactionExec.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/TransactionMulti.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/TransactionUnwatch.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/TransactionWatch.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetAdd.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetCardinality.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetCount.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetIncrementBy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetIntersectionStore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetLexCount.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRange.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRangeByLex.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRangeByScore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRank.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRemove.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRemoveRangeByLex.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRemoveRangeByRank.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetRemoveRangeByScore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetReverseRange.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetReverseRangeByLex.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetReverseRangeByScore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetReverseRank.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetScan.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetScore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Command/ZSetUnionStore.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/CommunicationException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/ClusterOption.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/ConnectionFactoryOption.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/ExceptionsOption.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/OptionInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/Options.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/OptionsInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/PrefixOption.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/ProfileOption.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Configuration/ReplicationOption.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/AbstractConnection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Aggregate/ClusterInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Aggregate/MasterSlaveReplication.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Aggregate/PredisCluster.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Aggregate/RedisCluster.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Aggregate/ReplicationInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/AggregateConnectionInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/CompositeConnectionInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/CompositeStreamConnection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/ConnectionException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/ConnectionInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Factory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/FactoryInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/NodeConnectionInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/Parameters.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/ParametersInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/PhpiredisSocketConnection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/PhpiredisStreamConnection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/StreamConnection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Connection/WebdisConnection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Monitor/Consumer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/NotSupportedException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Pipeline/Atomic.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Pipeline/ConnectionErrorProof.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Pipeline/FireAndForget.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Pipeline/Pipeline.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/PredisException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/Factory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/ProfileInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisProfile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisUnstable.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisVersion200.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisVersion220.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisVersion240.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisVersion260.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisVersion280.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Profile/RedisVersion300.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/ProtocolException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/ProtocolProcessorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/RequestSerializerInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/ResponseReaderInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/CompositeProtocolProcessor.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/BulkResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/ErrorResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/IntegerResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/MultiBulkResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/ResponseHandlerInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/StatusResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/Handler/StreamableMultiBulkResponse.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/ProtocolProcessor.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/RequestSerializer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Protocol/Text/ResponseReader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/PubSub/AbstractConsumer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/PubSub/Consumer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/PubSub/DispatcherLoop.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Replication/ReplicationStrategy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/Error.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/ErrorInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/Iterator/MultiBulk.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/Iterator/MultiBulkIterator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/Iterator/MultiBulkTuple.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/ResponseInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/ServerException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Response/Status.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Session/Handler.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Transaction/AbortedMultiExecException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Transaction/MultiExec.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/Predis/Transaction/MultiExecState.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Actions.php (99%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Api.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Common/BackwardCapability/Account.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Common/FacebookRainLoopPersistentDataHandler.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Common/MbStringFix.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Common/PdoAbstract.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Common/RainLoopFacebookRedirectLoginHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Config/AbstractConfig.php (93%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Config/Application.php (93%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Config/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/Capa.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/Layout.php (82%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/PluginPropertyType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/SignMeType.php (56%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/TimeFormat.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/UploadClientError.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Enumerations/UploadError.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Exceptions/ClientException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Exceptions/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Exceptions/RuntimeException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/KeyPathHelper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Model/Account.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Model/Domain.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Model/Identity.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Model/Template.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Notifications.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Plugins/AbstractPlugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Plugins/Helper.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Plugins/Manager.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Plugins/Property.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AbstractProvider.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook/AddressBookInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook/Classes/Property.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook/Classes/Tag.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook/Enumerations/PropertyType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/ChangePassword.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Domain.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Domain/DomainInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Files.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Files/FileStorage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Files/IFiles.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/Classes/Filter.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/Classes/FilterCondition.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/Enumerations/ActionType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionField.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionsType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/FiltersInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Filters/SieveStorage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Settings.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Settings/ISettings.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Storage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Storage/FileStorage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Storage/IStorage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Storage/TemproryApcStorage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Suggestions.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Suggestions/ISuggestions.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Suggestions/OwnCloudSuggestions.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/Suggestions/TestSuggestions.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/TwoFactorAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/TwoFactorAuth/AbstractTwoFactorAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/TwoFactorAuth/GoogleTwoFactorAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Providers/TwoFactorAuth/TwoFactorAuthInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Service.php (95%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/ServiceActions.php (95%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Settings.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Social.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/RainLoop/Utils.php (95%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Backend/AbstractBackend.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Backend/BackendInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Backend/NotificationSupport.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Backend/PDO.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Backend/SharingSupport.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Calendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/CalendarObject.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryParser.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryValidator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/CalendarRootNode.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Exception/InvalidComponentType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/ICSExportPlugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/ICalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/ICalendarObject.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/IShareableCalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/ISharedCalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/Collection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/ICollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/INode.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/INotificationType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/Node.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/Invite.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/InviteReply.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/SystemStatus.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Principal/Collection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyRead.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyWrite.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyRead.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyWrite.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Principal/User.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Property/AllowedSharingModes.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Property/Invite.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Property/ScheduleCalendarTransp.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarComponentSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarData.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCollationSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Schedule/IMip.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Schedule/IOutbox.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Schedule/Outbox.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/ShareableCalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/SharedCalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/SharingPlugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/UserCalendars.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CalDAV/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/AddressBook.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/AddressBookQueryParser.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/AddressBookRoot.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Backend/AbstractBackend.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Backend/BackendInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Backend/PDO.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Card.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/IAddressBook.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/ICard.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/IDirectory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Property/SupportedAddressData.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/UserAddressBooks.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/VCFExportPlugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/CardDAV/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractBasic.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractDigest.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Backend/Apache.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Backend/BackendInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Backend/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Backend/PDO.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Auth/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/GuessContentType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/MapGetToPropFind.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/favicon.ico (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/addressbook.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/calendar.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/card.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/collection.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/file.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/parent.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/principal.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Client.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Collection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/BadRequest.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/Conflict.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/ConflictingLock.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/FileNotFound.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/Forbidden.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/InsufficientStorage.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/InvalidResourceType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/LockTokenMatchesRequestUri.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/Locked.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/MethodNotAllowed.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/NotAuthenticated.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/NotFound.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/NotImplemented.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/PaymentRequired.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/PreconditionFailed.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/ReportNotSupported.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/RequestedRangeNotSatisfiable.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/ServiceUnavailable.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Exception/UnsupportedMediaType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/FS/Directory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/FS/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/FS/Node.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/FSExt/Directory.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/FSExt/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/FSExt/Node.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/ICollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/IExtendedCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/IFile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/INode.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/IProperties.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/IQuota.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/Backend/AbstractBackend.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/Backend/BackendInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/Backend/FS.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/Backend/File.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/Backend/PDO.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/LockInfo.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Locks/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Mount/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Node.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/ObjectTree.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/PartialUpdate/IFile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/PartialUpdate/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/GetLastModified.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/Href.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/HrefList.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/IHref.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/LockDiscovery.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/ResourceType.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/Response.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/ResponseList.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/SupportedLock.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Property/SupportedReportSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/PropertyInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Server.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/ServerPlugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/SimpleCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/SimpleFile.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/StringUtil.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/TemporaryFileFilterPlugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Tree.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Tree/Filesystem.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/URLUtil.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/UUIDUtil.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAV/XMLUtil.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/AbstractPrincipalCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Exception/AceConflict.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Exception/NeedPrivileges.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Exception/NoAbstract.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Exception/NotRecognizedPrincipal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Exception/NotSupportedPrivilege.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/IACL.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/IPrincipal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/IPrincipalCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Plugin.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Principal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/AbstractBackend.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/BackendInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/PDO.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/PrincipalCollection.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Property/Acl.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Property/AclRestrictions.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Property/CurrentUserPrivilegeSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Property/Principal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Property/SupportedPrivilegeSet.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/DAVACL/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/AWSAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/AbstractAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/BasicAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/DigestAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/Request.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/Response.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/Util.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/HTTP/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Cli.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VAlarm.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VCalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VCard.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VEvent.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VFreeBusy.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VJournal.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Component/VTodo.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/DateTimeParser.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Document.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/ElementList.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/EofException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/FreeBusyGenerator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Node.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Parameter.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/ParseException.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Parser/Json.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Parser/MimeDir.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Parser/Parser.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Binary.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Boolean.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/FlatText.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Float.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/CalAddress.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Date.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/DateTime.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Duration.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Period.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Recur.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Integer.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Text.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Time.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Unknown.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/Uri.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/UtcOffset.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/VCard/Date.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateAndOrTime.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateTime.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/VCard/LanguageTag.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Property/VCard/TimeStamp.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Reader.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/RecurrenceIterator.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Splitter/ICalendar.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Splitter/SplitterInterface.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Splitter/VCard.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/StringUtil.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/TimeZoneUtil.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/VCardConverter.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/Version.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/SabreForRainLoop/VObject/includes.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/lessphp/LICENSE (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/lessphp/README.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/lessphp/ctype.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/lessphp/lessc.inc.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/pclzip/_pclzip.lib.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/pclzip/gnu-lgpl.txt (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/pclzip/pclzip.lib.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/pclzip/readme.txt (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/spyc/COPYING (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/spyc/README.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/spyc/Spyc.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/spyc/composer.json (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/tmhOAuth/LICENSE (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/tmhOAuth/README.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/tmhOAuth/cacert.pem (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/tmhOAuth/tmhOAuth.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/libraries/tmhOAuth/tmhUtilities.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/README (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/README (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/_source.en.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/cs_CZ.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/da_DK.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/de_DE.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/en_US.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/es_ES.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/fa_IR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/fi_FI.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/fr_FR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/hu_HU.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/id_ID.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/it_IT.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/ja_JP.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/lt_LT.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/nb_NO.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/nl_NL.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/pl_PL.yml (97%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/pt_BR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/ru_RU.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/sk_SK.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/sl_SI.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/sv_SE.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/admin/zh_CN.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/langs.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/af.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar-dz.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar-kw.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar-ly.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar-ma.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar-sa.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar-tn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ar.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/az.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/be.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/bg.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/bm.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/bn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/bo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/br.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/bs.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ca.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/cs.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/cv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/cy.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/da.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/de-at.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/de-ch.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/de.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/dv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/el.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-SG.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-au.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-ca.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-gb.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-ie.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-il.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/en-nz.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/eo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/es-do.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/es-us.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/es.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/et.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/eu.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fa.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fr-ca.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fr-ch.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/fy.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ga.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/gd.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/gl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/gom-latn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/gu.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/he.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/hi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/hr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/hu.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/hy-am.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/id.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/is.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/it-ch.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/it.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ja.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/jv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ka.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/kk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/km.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/kn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ko.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ku.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ky.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/lb.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/lo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/lt.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/lv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/me.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/mi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/mk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ml.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/mn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/mr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ms-my.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ms.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/mt.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/my.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/nb.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ne.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/nl-be.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/nl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/nn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/pa-in.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/pl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/pt-br.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/pt.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ro.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ru.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sd.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/se.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/si.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sq.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sr-cyrl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ss.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/sw.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ta.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/te.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tet.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tg.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/th.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tl-ph.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tlh.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tzl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tzm-latn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/tzm.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ug-cn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/uk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/ur.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/uz-latn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/uz.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/vi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/x-pseudo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/yo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/zh-cn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/zh-hk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/moment/zh-tw.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/README (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/_source.en.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/ar_SA.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/bg_BG.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/cs_CZ.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/da_DK.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/de_DE.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/el_GR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/en_GB.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/en_US.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/es_ES.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/et_EE.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/fa_IR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/fi_FI.yml (99%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/fr_FR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/hu_HU.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/id_ID.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/is_IS.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/it_IT.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/ja_JP.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/ko_KR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/lt_LT.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/lv_LV.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/nb_NO.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/nl_NL.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/pl_PL.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/pt_BR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/pt_PT.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/ro_RO.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/ru_RU.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/sk_SK.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/sl_SI.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/sv_SE.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/tr_TR.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/uk_UA.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/zh_CN.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/localization/webmail/zh_TW.yml (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/RainLoop.asc (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/empty-contact.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/amazon.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/apple.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/asana.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/battle.net.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/blizzard.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/cnet.online.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/connect.asana.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/e.paypal.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/ea.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/ebay.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/em.ea.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/email.blizzard.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/email.microsoft.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/email.skype.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/facebook.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/facebookmail.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/github.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/google.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/id.apple.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/intl.paypal.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/microsoft.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/microsoftonline.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/myspace.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/news.myspace.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/news.onlive.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/onlive.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/paypal.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/plus.google.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/postmaster.twitter.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/reply.ebay.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/reply1.ebay.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/reply2.ebay.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/reply3.ebay.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/skype.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/steampowered.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/ted.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/twitter.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/resources/images/services/youtube.com.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/BadBrowser.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Error.html (100%) create mode 100644 app/rainloop/v/1.15.0/app/templates/Index.html rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Social.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Themes/template.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Themes/values.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminLogin.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminMenu.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminPane.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsAbout.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsBranding.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsContacts.html (97%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsDomainListItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsDomains.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsGeneral.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsLicensing.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsLogin.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsPackages.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsPackagesListItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsPackagesTable.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsPluginListItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsPluginProperty.html (90%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsPlugins.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsSecurity.html (90%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/AdminSettingsSocial.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/PopupsActivate.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/PopupsDomain.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/PopupsDomainAlias.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Admin/PopupsPlugin.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Common/Cmd.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Common/Pagenator.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Common/PopupsAsk.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Common/PopupsLanguages.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Common/PopupsWelcomePage.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/Checkbox.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/CheckboxClassic.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/CheckboxMaterialDesign.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/Date.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/Input.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/Radio.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/SaveTrigger.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/Select.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/Components/TextArea.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/About.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/ComposeAttachment.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/Login.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/LoginWelcome.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailFolderList.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailFolderListItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailFolderListSystemItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailMessageList.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailMessageListItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailMessageListItemNoPreviewPane.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/MailMessageView.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PhotoSwipe.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsAccount.html (94%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsAddOpenPgpKey.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsAdvancedSearch.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsCompose.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsComposeOpenPgp.html (98%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsContacts.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsFilter.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsFolderClear.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsFolderCreate.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsFolderSystem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsIdentity.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsMessageOpenPgp.html (95%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsNewOpenPgpKey.html (96%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsTemplate.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsTwoFactorConfiguration.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsTwoFactorTest.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsViewOpenPgpKey.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/PopupsWindowSimpleMessage.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsAccounts.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsChangePassword.html (84%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsContacts.html (82%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsCustom.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFilters.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersActionDiscard.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersActionForward.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersActionMoveToFolder.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersActionNone.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersActionReject.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersActionVacation.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersConditionDefault.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersConditionMore.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFiltersConditionSize.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFolderItem.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsFolders.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsGeneral.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsMenu.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsOpenPGP.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsPane.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsSecurity.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsSocial.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsTemplates.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SettingsThemes.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/app/templates/Views/User/SystemDropDown.html (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/check.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/include.php (89%) rename app/rainloop/v/{1.14.0 => 1.15.0}/index.php (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/index.php.root (89%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/android-icon.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/apple-touch-icon.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/browsers/chrome.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/browsers/firefox.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/browsers/opera.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/browsers/safari.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/FIXES.txt (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/build-config.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/ckeditor.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/ckeditor.orig.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/config.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/contents.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/af.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ar.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/az.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/bg.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/bn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/bs.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ca.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/cs.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/cy.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/da.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/de-ch.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/de.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/el.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/en-au.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/en-ca.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/en-gb.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/en.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/eo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/es.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/et.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/eu.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/fa.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/fi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/fo.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/fr-ca.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/fr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/gl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/gu.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/he.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/hi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/hr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/hu.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/id.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/is.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/it.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ja.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ka.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/km.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ko.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ku.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/lt.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/lv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/mk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/mn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ms.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/nb.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/nl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/no.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/oc.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/pl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/pt-br.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/pt.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ro.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ru.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/si.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/sk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/sl.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/sq.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/sr-latn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/sr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/sv.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/th.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/tr.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/tt.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/ug.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/uk.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/vi.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/zh-cn.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/lang/zh.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/about/dialogs/about.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/base64image/LICENSE.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/base64image/README.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/base64image/dialogs/base64image.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/clipboard/dialogs/paste.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/colordialog/dialogs/colordialog.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/colordialog/dialogs/colordialog.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/dialog/dialogDefinition.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/icons.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/icons_hidpi.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/image/dialogs/image.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/image/images/noimage.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/image2/dialogs/image2.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/link/dialogs/anchor.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/link/dialogs/link.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/link/images/anchor.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/link/images/hidpi/anchor.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/plain/icons/hidpi/plain-rtl.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/plain/icons/hidpi/plain.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/plain/icons/plain-rtl.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/plain/icons/plain.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/plain/plugin.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/quicktable/CHANGELOG.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/quicktable/Gruntfile.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/quicktable/LICENSE (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/quicktable/README.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/quicktable/package.json (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/quicktable/template.jst (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/signature/plugin.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/table/dialogs/table.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/plugins/widget/images/handle.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/dialog.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/dialog_ie.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/dialog_ie8.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/dialog_iequirks.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/editor.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/editor_gecko.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/editor_ie.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/editor_ie8.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/editor_iequirks.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/icons.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/icons_hidpi.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/arrow.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/close.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/hidpi/close.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/hidpi/lock.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/hidpi/refresh.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/lock-open.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/lock.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/refresh.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/images/spinner.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/skins/moono-lisa/readme.md (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/ckeditor/styles.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/app.css (99%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/app.min.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/default-skin.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/default-skin.svg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/flags.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/lg.eot (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/lg.svg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/lg.ttf (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/lg.woff (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/rainloop.eot (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/rainloop.svg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/rainloop.ttf (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/fonts/rainloop.woff (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/editor.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/empty-contact.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/grey.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/icom-message-notification.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/loading.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/rainloop-logo.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/sync.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/sync.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/images/white.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/img/loading.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/loading.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/preloader.gif (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/social.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/css/social.min.css (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/favicon-light.ico (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/favicon-light.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/favicon.ico (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/favicon.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/js/admin.js (51%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/js/app.js (56%) create mode 100644 app/rainloop/v/1.15.0/static/js/boot.js rename app/rainloop/v/{1.14.0 => 1.15.0}/static/js/libs.js (98%) create mode 100644 app/rainloop/v/1.15.0/static/js/min/admin.min.js create mode 100644 app/rainloop/v/1.15.0/static/js/min/app.min.js create mode 100644 app/rainloop/v/1.15.0/static/js/min/boot.min.js create mode 100644 app/rainloop/v/1.15.0/static/js/min/libs.min.js rename app/rainloop/v/{1.14.0 => 1.15.0}/static/js/min/openpgp.min.js (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/js/min/openpgp.worker.min.js (100%) create mode 100644 app/rainloop/v/1.15.0/static/js/min/polyfills.min.js create mode 100644 app/rainloop/v/1.15.0/static/js/polyfills.js rename app/rainloop/v/{1.14.0 => 1.15.0}/static/manifest.json (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/sounds/new-mail.mp3 (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/static/sounds/new-mail.ogg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/A/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/A/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/A/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Blurred/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Blurred/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Blurred/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Clear/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Clear/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/DarkShine/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/DarkShine/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/DarkShine/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Default/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Default/images/background.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Default/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Default/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Linen/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Linen/images/background.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Linen/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Linen/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Love/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Love/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Love/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Mobile/ext.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Mobile/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Mobile/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Snow/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Snow/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Snow/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Squares/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Squares/images/background.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Squares/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Squares/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/SquaresDark/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/SquaresDark/images/background.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/SquaresDark/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/SquaresDark/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Stripes/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Stripes/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Stripes/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Wood/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Wood/images/background.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Wood/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Wood/styles.less (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Xv/images/background.jpg (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Xv/images/background.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Xv/images/preview.png (100%) rename app/rainloop/v/{1.14.0 => 1.15.0}/themes/Xv/styles.less (100%) diff --git a/app/data/EMPTY b/app/data/EMPTY index cd99d386..d19d0890 100644 --- a/app/data/EMPTY +++ b/app/data/EMPTY @@ -1 +1 @@ -1.14.0 \ No newline at end of file +1.15.0 \ No newline at end of file diff --git a/app/data/VERSION b/app/data/VERSION index cd99d386..d19d0890 100644 --- a/app/data/VERSION +++ b/app/data/VERSION @@ -1 +1 @@ -1.14.0 \ No newline at end of file +1.15.0 \ No newline at end of file diff --git a/app/index.php b/app/index.php index 3e6a6b28..381fc090 100644 --- a/app/index.php +++ b/app/index.php @@ -12,7 +12,7 @@ function __get_custom_data_full_path() if (!defined('APP_VERSION')) { - define('APP_VERSION', '1.14.0'); + define('APP_VERSION', '1.15.0'); define('APP_VERSION_TYPE', 'community'); define('APP_INDEX_ROOT_FILE', __FILE__); define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/')); diff --git a/app/rainloop/v/1.14.0/app/templates/Index.html b/app/rainloop/v/1.14.0/app/templates/Index.html deleted file mode 100644 index 1a3d7d2b..00000000 --- a/app/rainloop/v/1.14.0/app/templates/Index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - {{BaseContentSecurityPolicy}} - - {{BaseAppHeadScriptLink}} - {{BaseAppFaviconPngLinkTag}} - {{BaseAppFaviconTouchLinkTag}} - - - - - -
-
- {{BaseAppBodyScript}} - - - diff --git a/app/rainloop/v/1.14.0/static/js/boot.js b/app/rainloop/v/1.14.0/static/js/boot.js deleted file mode 100644 index dc22934a..00000000 --- a/app/rainloop/v/1.14.0/static/js/boot.js +++ /dev/null @@ -1,8402 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "rainloop/v/0.0.0/static/js/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 490); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */, -/* 3 */, -/* 4 */ -/*!*************************!*\ - !*** external "window" ***! - \*************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports) { - -module.exports = window; - -/***/ }), -/* 5 */, -/* 6 */, -/* 7 */, -/* 8 */, -/* 9 */, -/* 10 */, -/* 11 */, -/* 12 */, -/* 13 */, -/* 14 */, -/* 15 */, -/* 16 */, -/* 17 */, -/* 18 */, -/* 19 */, -/* 20 */, -/* 21 */, -/* 22 */, -/* 23 */, -/* 24 */, -/* 25 */, -/* 26 */, -/* 27 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { - return it && it.Math == Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == 'object' && globalThis) || - check(typeof window == 'object' && window) || - check(typeof self == 'object' && self) || - check(typeof global == 'object' && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) - -/***/ }), -/* 28 */, -/* 29 */, -/* 30 */, -/* 31 */, -/* 32 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/well-known-symbol.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var shared = __webpack_require__(/*! ../internals/shared */ 127); -var has = __webpack_require__(/*! ../internals/has */ 42); -var uid = __webpack_require__(/*! ../internals/uid */ 128); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); -var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 183); - -var WellKnownSymbolsStore = shared('wks'); -var Symbol = global.Symbol; -var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; - -module.exports = function (name) { - if (!has(WellKnownSymbolsStore, name)) { - if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; - else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); - } return WellKnownSymbolsStore[name]; -}; - - -/***/ }), -/* 33 */, -/* 34 */, -/* 35 */, -/* 36 */ -/*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - -/***/ }), -/* 37 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/an-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -module.exports = function (it) { - if (!isObject(it)) { - throw TypeError(String(it) + ' is not an object'); - } return it; -}; - - -/***/ }), -/* 38 */, -/* 39 */, -/* 40 */, -/* 41 */, -/* 42 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/has.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; - -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 43 */, -/* 44 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), -/* 45 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var exec = __webpack_require__(/*! ../internals/regexp-exec */ 110); - -$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { - exec: exec -}); - - -/***/ }), -/* 46 */, -/* 47 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/descriptors.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; -}); - - -/***/ }), -/* 48 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/export.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 179); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); - -/* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.noTargetGet - prevent calling a getter on target -*/ -module.exports = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global; - } else if (STATIC) { - target = global[TARGET] || setGlobal(TARGET, {}); - } else { - target = (global[TARGET] || {}).prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.noTargetGet) { - descriptor = getOwnPropertyDescriptor(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty === typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - createNonEnumerableProperty(sourceProperty, 'sham', true); - } - // extend global - redefine(target, key, sourceProperty, options); - } -}; - - -/***/ }), -/* 49 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); - -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 50 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 51 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/es.function.name.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; - -var FunctionPrototype = Function.prototype; -var FunctionPrototypeToString = FunctionPrototype.toString; -var nameRE = /^\s*function ([^ (]*)/; -var NAME = 'name'; - -// Function instances `.name` property -// https://tc39.github.io/ecma262/#sec-function-instances-name -if (DESCRIPTORS && !(NAME in FunctionPrototype)) { - defineProperty(FunctionPrototype, NAME, { - configurable: true, - get: function () { - try { - return FunctionPrototypeToString.call(this).match(nameRE)[1]; - } catch (error) { - return ''; - } - } - }); -} - - -/***/ }), -/* 52 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-property.js ***! - \******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); - -var nativeDefineProperty = Object.defineProperty; - -// `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty -exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), -/* 53 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/redefine.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var has = __webpack_require__(/*! ../internals/has */ 42); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); - -var getInternalState = InternalStateModule.get; -var enforceInternalState = InternalStateModule.enforce; -var TEMPLATE = String(String).split('String'); - -(module.exports = function (O, key, value, options) { - var unsafe = options ? !!options.unsafe : false; - var simple = options ? !!options.enumerable : false; - var noTargetGet = options ? !!options.noTargetGet : false; - if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); - enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); - } - if (O === global) { - if (simple) O[key] = value; - else setGlobal(key, value); - return; - } else if (!unsafe) { - delete O[key]; - } else if (!noTargetGet && O[key]) { - simple = true; - } - if (simple) O[key] = value; - else createNonEnumerableProperty(O, key, value); -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -})(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || inspectSource(this); -}); - - -/***/ }), -/* 54 */, -/* 55 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/require-object-coercible.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// `RequireObjectCoercible` abstract operation -// https://tc39.github.io/ecma262/#sec-requireobjectcoercible -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), -/* 56 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/modules/es.string.replace.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); - -var max = Math.max; -var min = Math.min; -var floor = Math.floor; -var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; -var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; - -var maybeToString = function (it) { - return it === undefined ? it : String(it); -}; - -// @@replace logic -fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { - var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE; - var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0; - var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; - - return [ - // `String.prototype.replace` method - // https://tc39.github.io/ecma262/#sec-string.prototype.replace - function replace(searchValue, replaceValue) { - var O = requireObjectCoercible(this); - var replacer = searchValue == undefined ? undefined : searchValue[REPLACE]; - return replacer !== undefined - ? replacer.call(searchValue, O, replaceValue) - : nativeReplace.call(String(O), searchValue, replaceValue); - }, - // `RegExp.prototype[@@replace]` method - // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace - function (regexp, replaceValue) { - if ( - (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) || - (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1) - ) { - var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); - if (res.done) return res.value; - } - - var rx = anObject(regexp); - var S = String(this); - - var functionalReplace = typeof replaceValue === 'function'; - if (!functionalReplace) replaceValue = String(replaceValue); - - var global = rx.global; - if (global) { - var fullUnicode = rx.unicode; - rx.lastIndex = 0; - } - var results = []; - while (true) { - var result = regExpExec(rx, S); - if (result === null) break; - - results.push(result); - if (!global) break; - - var matchStr = String(result[0]); - if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); - } - - var accumulatedResult = ''; - var nextSourcePosition = 0; - for (var i = 0; i < results.length; i++) { - result = results[i]; - - var matched = String(result[0]); - var position = max(min(toInteger(result.index), S.length), 0); - var captures = []; - // NOTE: This is equivalent to - // captures = result.slice(1).map(maybeToString) - // but for some reason `nativeSlice.call(result, 1, result.length)` (called in - // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and - // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. - for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); - var namedCaptures = result.groups; - if (functionalReplace) { - var replacerArgs = [matched].concat(captures, position, S); - if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); - var replacement = String(replaceValue.apply(undefined, replacerArgs)); - } else { - replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); - } - if (position >= nextSourcePosition) { - accumulatedResult += S.slice(nextSourcePosition, position) + replacement; - nextSourcePosition = position + matched.length; - } - } - return accumulatedResult + S.slice(nextSourcePosition); - } - ]; - - // https://tc39.github.io/ecma262/#sec-getsubstitution - function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { - var tailPos = position + matched.length; - var m = captures.length; - var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; - if (namedCaptures !== undefined) { - namedCaptures = toObject(namedCaptures); - symbols = SUBSTITUTION_SYMBOLS; - } - return nativeReplace.call(replacement, symbols, function (match, ch) { - var capture; - switch (ch.charAt(0)) { - case '$': return '$'; - case '&': return matched; - case '`': return str.slice(0, position); - case "'": return str.slice(tailPos); - case '<': - capture = namedCaptures[ch.slice(1, -1)]; - break; - default: // \d\d? - var n = +ch; - if (n === 0) return match; - if (n > m) { - var f = floor(n / 10); - if (f === 0) return match; - if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); - return match; - } - capture = captures[n - 1]; - } - return capture === undefined ? '' : capture; - }); - } -}); - - -/***/ }), -/* 57 */, -/* 58 */, -/* 59 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/get-built-in.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var path = __webpack_require__(/*! ../internals/path */ 148); -var global = __webpack_require__(/*! ../internals/global */ 27); - -var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; -}; - -module.exports = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) - : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; -}; - - -/***/ }), -/* 60 */, -/* 61 */, -/* 62 */, -/* 63 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.object.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 184); - -// `Object.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -if (!TO_STRING_TAG_SUPPORT) { - redefine(Object.prototype, 'toString', toString, { unsafe: true }); -} - - -/***/ }), -/* 64 */, -/* 65 */, -/* 66 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/a-function.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') { - throw TypeError(String(it) + ' is not a function'); - } return it; -}; - - -/***/ }), -/* 67 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/web.timers.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); - -var slice = [].slice; -var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check - -var wrap = function (scheduler) { - return function (handler, timeout /* , ...arguments */) { - var boundArgs = arguments.length > 2; - var args = boundArgs ? slice.call(arguments, 2) : undefined; - return scheduler(boundArgs ? function () { - // eslint-disable-next-line no-new-func - (typeof handler == 'function' ? handler : Function(handler)).apply(this, args); - } : handler, timeout); - }; -}; - -// ie9- setTimeout & setInterval additional parameters fix -// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers -$({ global: true, bind: true, forced: MSIE }, { - // `setTimeout` method - // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout - setTimeout: wrap(global.setTimeout), - // `setInterval` method - // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval - setInterval: wrap(global.setInterval) -}); - - -/***/ }), -/* 68 */, -/* 69 */, -/* 70 */, -/* 71 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-indexed-object.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); - -module.exports = function (it) { - return IndexedObject(requireObjectCoercible(it)); -}; - - -/***/ }), -/* 72 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-length.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); - -var min = Math.min; - -// `ToLength` abstract operation -// https://tc39.github.io/ecma262/#sec-tolength -module.exports = function (argument) { - return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - - -/***/ }), -/* 73 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/iterators.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 74 */, -/* 75 */, -/* 76 */, -/* 77 */, -/* 78 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), -/* 79 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/to-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var ceil = Math.ceil; -var floor = Math.floor; - -// `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger -module.exports = function (argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); -}; - - -/***/ }), -/* 80 */, -/* 81 */, -/* 82 */, -/* 83 */, -/* 84 */, -/* 85 */, -/* 86 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/internal-state.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 178); -var global = __webpack_require__(/*! ../internals/global */ 27); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var objectHas = __webpack_require__(/*! ../internals/has */ 42); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); - -var WeakMap = global.WeakMap; -var set, get, has; - -var enforce = function (it) { - return has(it) ? get(it) : set(it, {}); -}; - -var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject(it) || (state = get(it)).type !== TYPE) { - throw TypeError('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; -}; - -if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; - set = function (it, metadata) { - wmset.call(store, it, metadata); - return metadata; - }; - get = function (it) { - return wmget.call(store, it) || {}; - }; - has = function (it) { - return wmhas.call(store, it); - }; -} else { - var STATE = sharedKey('state'); - hiddenKeys[STATE] = true; - set = function (it, metadata) { - createNonEnumerableProperty(it, STATE, metadata); - return metadata; - }; - get = function (it) { - return objectHas(it, STATE) ? it[STATE] : {}; - }; - has = function (it) { - return objectHas(it, STATE); - }; -} - -module.exports = { - set: set, - get: get, - has: has, - enforce: enforce, - getterFor: getterFor -}; - - -/***/ }), -/* 87 */, -/* 88 */, -/* 89 */ -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! - \******************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 164); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); -var has = __webpack_require__(/*! ../internals/has */ 42); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); - -var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor -exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 90 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 91 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); - -module.exports = function (key, value) { - try { - createNonEnumerableProperty(global, key, value); - } catch (error) { - global[key] = value; - } return value; -}; - - -/***/ }), -/* 92 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/inspect-source.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var store = __webpack_require__(/*! ../internals/shared-store */ 126); - -var functionToString = Function.toString; - -// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper -if (typeof store.inspectSource != 'function') { - store.inspectSource = function (it) { - return functionToString.call(it); - }; -} - -module.exports = store.inspectSource; - - -/***/ }), -/* 93 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; - -module.exports = String(test) === '[object z]'; - - -/***/ }), -/* 94 */, -/* 95 */, -/* 96 */, -/* 97 */, -/* 98 */ -/*!************************************!*\ - !*** external "window.progressJs" ***! - \************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports) { - -module.exports = window.progressJs; - -/***/ }), -/* 99 */, -/* 100 */, -/* 101 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/document-create-element.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -var document = global.document; -// typeof document.createElement is 'object' in old IE -var EXISTS = isObject(document) && isObject(document.createElement); - -module.exports = function (it) { - return EXISTS ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 102 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/hidden-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 103 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/function-bind-context.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); - -// optional / simple context binding -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 0: return function () { - return fn.call(that); - }; - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 104 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/engine-user-agent.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); - -module.exports = getBuiltIn('navigator', 'userAgent') || ''; - - -/***/ }), -/* 105 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/new-promise-capability.js ***! - \******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); - -var PromiseCapability = function (C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); -}; - -// 25.4.1.5 NewPromiseCapability(C) -module.exports.f = function (C) { - return new PromiseCapability(C); -}; - - -/***/ }), -/* 106 */ -/*!*****************************!*\ - !*** ./dev/Common/Jassl.js ***! - \*****************************/ -/*! exports provided: jassl */ -/*! exports used: jassl */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); - - - // let rainloopCaches = window.caches && window.caches.open ? window.caches : null; - -/** - * @param {src} src - * @param {boolean} async = false - * @returns {Promise} - */ - -function jassl(src, async) { - if (async === void 0) { - async = false; - } - - if (!window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise || !window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise.all) { - throw new Error('Promises are not available your environment.'); - } - - if (!src) { - throw new Error('src should not be empty.'); - } - - return new window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise(function (resolve, reject) { - var element = window__WEBPACK_IMPORTED_MODULE_2___default.a.document.createElement('script'); - - element.onload = function () { - resolve(src); - }; - - element.onerror = function () { - reject(new Error(src)); - }; - - element.async = true === async; - element.src = src; - window__WEBPACK_IMPORTED_MODULE_2___default.a.document.body.appendChild(element); - }) - /* .then((s) => { - const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null; - if (found && found[1]) - { - rainloopCaches.open('rainloop-offline-' + found[1]).then( - (cache) => cache.add(s) - ).catch(() => { - rainloopCaches = null; - }); - } - return s; - })*/ - ; -} - -/***/ }), -/* 107 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/shared-key.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ../internals/shared */ 127); -var uid = __webpack_require__(/*! ../internals/uid */ 128); - -var keys = shared('keys'); - -module.exports = function (key) { - return keys[key] || (keys[key] = uid(key)); -}; - - -/***/ }), -/* 108 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// IE8- don't enum bug keys -module.exports = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' -]; - - -/***/ }), -/* 109 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; -var has = __webpack_require__(/*! ../internals/has */ 42); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - -module.exports = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } -}; - - -/***/ }), -/* 110 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-exec.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 170); -var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 233); - -var nativeExec = RegExp.prototype.exec; -// This always refers to the native implementation, because the -// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, -// which loads this file before patching the method. -var nativeReplace = String.prototype.replace; - -var patchedExec = nativeExec; - -var UPDATES_LAST_INDEX_WRONG = (function () { - var re1 = /a/; - var re2 = /b*/g; - nativeExec.call(re1, 'a'); - nativeExec.call(re2, 'a'); - return re1.lastIndex !== 0 || re2.lastIndex !== 0; -})(); - -var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; - -// nonparticipating capturing group, copied from es5-shim's String#split patch. -var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - -var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; - -if (PATCH) { - patchedExec = function exec(str) { - var re = this; - var lastIndex, reCopy, match, i; - var sticky = UNSUPPORTED_Y && re.sticky; - var flags = regexpFlags.call(re); - var source = re.source; - var charsAdded = 0; - var strCopy = str; - - if (sticky) { - flags = flags.replace('y', ''); - if (flags.indexOf('g') === -1) { - flags += 'g'; - } - - strCopy = String(str).slice(re.lastIndex); - // Support anchored sticky behavior. - if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { - source = '(?: ' + source + ')'; - strCopy = ' ' + strCopy; - charsAdded++; - } - // ^(? + rx + ) is needed, in combination with some str slicing, to - // simulate the 'y' flag. - reCopy = new RegExp('^(?:' + source + ')', flags); - } - - if (NPCG_INCLUDED) { - reCopy = new RegExp('^' + source + '$(?!\\s)', flags); - } - if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; - - match = nativeExec.call(sticky ? reCopy : re, strCopy); - - if (sticky) { - if (match) { - match.input = match.input.slice(charsAdded); - match[0] = match[0].slice(charsAdded); - match.index = re.lastIndex; - re.lastIndex += match[0].length; - } else re.lastIndex = 0; - } else if (UPDATES_LAST_INDEX_WRONG && match) { - re.lastIndex = re.global ? match.index + match[0].length : lastIndex; - } - if (NPCG_INCLUDED && match && match.length > 1) { - // Fix browsers whose `exec` methods don't consistently return `undefined` - // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ - nativeReplace.call(match[0], reCopy, function () { - for (i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) match[i] = undefined; - } - }); - } - - return match; - }; -} - -module.exports = patchedExec; - - -/***/ }), -/* 111 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var flags = __webpack_require__(/*! ../internals/regexp-flags */ 170); - -var TO_STRING = 'toString'; -var RegExpPrototype = RegExp.prototype; -var nativeToString = RegExpPrototype[TO_STRING]; - -var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); -// FF44- RegExp#toString has a wrong name -var INCORRECT_NAME = nativeToString.name != TO_STRING; - -// `RegExp.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring -if (NOT_GENERIC || INCORRECT_NAME) { - redefine(RegExp.prototype, TO_STRING, function toString() { - var R = anObject(this); - var p = String(R.source); - var rf = R.flags; - var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); - return '/' + p + '/' + f; - }, { unsafe: true }); -} - - -/***/ }), -/* 112 */, -/* 113 */, -/* 114 */, -/* 115 */, -/* 116 */, -/* 117 */, -/* 118 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/indexed-object.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); - -var split = ''.split; - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -module.exports = fails(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins - return !Object('z').propertyIsEnumerable(0); -}) ? function (it) { - return classof(it) == 'String' ? split.call(it, '') : Object(it); -} : Object; - - -/***/ }), -/* 119 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); - -// `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject -module.exports = function (argument) { - return Object(requireObjectCoercible(argument)); -}; - - -/***/ }), -/* 120 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/es.promise.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var global = __webpack_require__(/*! ../internals/global */ 27); -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 168); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 187); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 188); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 189); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 193); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var task = __webpack_require__(/*! ../internals/task */ 132).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 194); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 169); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 195); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); - -var SPECIES = wellKnownSymbol('species'); -var PROMISE = 'Promise'; -var getInternalState = InternalStateModule.get; -var setInternalState = InternalStateModule.set; -var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); -var PromiseConstructor = NativePromise; -var TypeError = global.TypeError; -var document = global.document; -var process = global.process; -var $fetch = getBuiltIn('fetch'); -var newPromiseCapability = newPromiseCapabilityModule.f; -var newGenericPromiseCapability = newPromiseCapability; -var IS_NODE = classof(process) == 'process'; -var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); -var UNHANDLED_REJECTION = 'unhandledrejection'; -var REJECTION_HANDLED = 'rejectionhandled'; -var PENDING = 0; -var FULFILLED = 1; -var REJECTED = 2; -var HANDLED = 1; -var UNHANDLED = 2; -var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; - -var FORCED = isForced(PROMISE, function () { - var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); - if (!GLOBAL_CORE_JS_PROMISE) { - // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables - // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // We can't detect it synchronously, so just check versions - if (V8_VERSION === 66) return true; - // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test - if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true; - } - // We need Promise#finally in the pure version for preventing prototype pollution - if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; - // We can't use @@species feature detection in V8 since it causes - // deoptimization and performance degradation - // https://github.com/zloirock/core-js/issues/679 - if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; - // Detect correctness of subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var FakePromise = function (exec) { - exec(function () { /* empty */ }, function () { /* empty */ }); - }; - var constructor = promise.constructor = {}; - constructor[SPECIES] = FakePromise; - return !(promise.then(function () { /* empty */ }) instanceof FakePromise); -}); - -var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { - PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); -}); - -// helpers -var isThenable = function (it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; -}; - -var notify = function (promise, state, isReject) { - if (state.notified) return; - state.notified = true; - var chain = state.reactions; - microtask(function () { - var value = state.value; - var ok = state.state == FULFILLED; - var index = 0; - // variable length - can't use forEach - while (chain.length > index) { - var reaction = chain[index++]; - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - try { - if (handler) { - if (!ok) { - if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); - state.rejection = HANDLED; - } - if (handler === true) result = value; - else { - if (domain) domain.enter(); - result = handler(value); // can throw - if (domain) { - domain.exit(); - exited = true; - } - } - if (result === reaction.promise) { - reject(TypeError('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (error) { - if (domain && !exited) domain.exit(); - reject(error); - } - } - state.reactions = []; - state.notified = false; - if (isReject && !state.rejection) onUnhandled(promise, state); - }); -}; - -var dispatchEvent = function (name, promise, reason) { - var event, handler; - if (DISPATCH_EVENT) { - event = document.createEvent('Event'); - event.promise = promise; - event.reason = reason; - event.initEvent(name, false, true); - global.dispatchEvent(event); - } else event = { promise: promise, reason: reason }; - if (handler = global['on' + name]) handler(event); - else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); -}; - -var onUnhandled = function (promise, state) { - task.call(global, function () { - var value = state.value; - var IS_UNHANDLED = isUnhandled(state); - var result; - if (IS_UNHANDLED) { - result = perform(function () { - if (IS_NODE) { - process.emit('unhandledRejection', value, promise); - } else dispatchEvent(UNHANDLED_REJECTION, promise, value); - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; - if (result.error) throw result.value; - } - }); -}; - -var isUnhandled = function (state) { - return state.rejection !== HANDLED && !state.parent; -}; - -var onHandleUnhandled = function (promise, state) { - task.call(global, function () { - if (IS_NODE) { - process.emit('rejectionHandled', promise); - } else dispatchEvent(REJECTION_HANDLED, promise, state.value); - }); -}; - -var bind = function (fn, promise, state, unwrap) { - return function (value) { - fn(promise, state, value, unwrap); - }; -}; - -var internalReject = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - state.value = value; - state.state = REJECTED; - notify(promise, state, true); -}; - -var internalResolve = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - try { - if (promise === value) throw TypeError("Promise can't be resolved itself"); - var then = isThenable(value); - if (then) { - microtask(function () { - var wrapper = { done: false }; - try { - then.call(value, - bind(internalResolve, promise, wrapper, state), - bind(internalReject, promise, wrapper, state) - ); - } catch (error) { - internalReject(promise, wrapper, error, state); - } - }); - } else { - state.value = value; - state.state = FULFILLED; - notify(promise, state, false); - } - } catch (error) { - internalReject(promise, { done: false }, error, state); - } -}; - -// constructor polyfill -if (FORCED) { - // 25.4.3.1 Promise(executor) - PromiseConstructor = function Promise(executor) { - anInstance(this, PromiseConstructor, PROMISE); - aFunction(executor); - Internal.call(this); - var state = getInternalState(this); - try { - executor(bind(internalResolve, this, state), bind(internalReject, this, state)); - } catch (error) { - internalReject(this, state, error); - } - }; - // eslint-disable-next-line no-unused-vars - Internal = function Promise(executor) { - setInternalState(this, { - type: PROMISE, - done: false, - notified: false, - parent: false, - reactions: [], - rejection: false, - state: PENDING, - value: undefined - }); - }; - Internal.prototype = redefineAll(PromiseConstructor.prototype, { - // `Promise.prototype.then` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.then - then: function then(onFulfilled, onRejected) { - var state = getInternalPromiseState(this); - var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE ? process.domain : undefined; - state.parent = true; - state.reactions.push(reaction); - if (state.state != PENDING) notify(this, state, false); - return reaction.promise; - }, - // `Promise.prototype.catch` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.catch - 'catch': function (onRejected) { - return this.then(undefined, onRejected); - } - }); - OwnPromiseCapability = function () { - var promise = new Internal(); - var state = getInternalState(promise); - this.promise = promise; - this.resolve = bind(internalResolve, promise, state); - this.reject = bind(internalReject, promise, state); - }; - newPromiseCapabilityModule.f = newPromiseCapability = function (C) { - return C === PromiseConstructor || C === PromiseWrapper - ? new OwnPromiseCapability(C) - : newGenericPromiseCapability(C); - }; - - if (!IS_PURE && typeof NativePromise == 'function') { - nativeThen = NativePromise.prototype.then; - - // wrap native Promise#then for native async functions - redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { - var that = this; - return new PromiseConstructor(function (resolve, reject) { - nativeThen.call(that, resolve, reject); - }).then(onFulfilled, onRejected); - // https://github.com/zloirock/core-js/issues/640 - }, { unsafe: true }); - - // wrap fetch result - if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { - // eslint-disable-next-line no-unused-vars - fetch: function fetch(input /* , init */) { - return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); - } - }); - } -} - -$({ global: true, wrap: true, forced: FORCED }, { - Promise: PromiseConstructor -}); - -setToStringTag(PromiseConstructor, PROMISE, false, true); -setSpecies(PROMISE); - -PromiseWrapper = getBuiltIn(PROMISE); - -// statics -$({ target: PROMISE, stat: true, forced: FORCED }, { - // `Promise.reject` method - // https://tc39.github.io/ecma262/#sec-promise.reject - reject: function reject(r) { - var capability = newPromiseCapability(this); - capability.reject.call(undefined, r); - return capability.promise; - } -}); - -$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { - // `Promise.resolve` method - // https://tc39.github.io/ecma262/#sec-promise.resolve - resolve: function resolve(x) { - return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); - } -}); - -$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { - // `Promise.all` method - // https://tc39.github.io/ecma262/#sec-promise.all - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - var values = []; - var counter = 0; - var remaining = 1; - iterate(iterable, function (promise) { - var index = counter++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - $promiseResolve.call(C, promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.error) reject(result.value); - return capability.promise; - }, - // `Promise.race` method - // https://tc39.github.io/ecma262/#sec-promise.race - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - iterate(iterable, function (promise) { - $promiseResolve.call(C, promise).then(capability.resolve, reject); - }); - }); - if (result.error) reject(result.value); - return capability.promise; - } -}); - - -/***/ }), -/* 121 */, -/* 122 */, -/* 123 */ -/*!***********************************!*\ - !*** (webpack)/buildin/global.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || new Function("return this")(); -} catch (e) { - // This works if the window reference is available - if (typeof window === "object") g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 124 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/to-primitive.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -// `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (input, PREFERRED_STRING) { - if (!isObject(input)) return input; - var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 125 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); - -// Thank's IE8 for his funny defineProperty -module.exports = !DESCRIPTORS && !fails(function () { - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; -}); - - -/***/ }), -/* 126 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/shared-store.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); - -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); - -module.exports = store; - - -/***/ }), -/* 127 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/shared.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var store = __webpack_require__(/*! ../internals/shared-store */ 126); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.6.4', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), -/* 128 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/uid.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var id = 0; -var postfix = Math.random(); - -module.exports = function (key) { - return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); -}; - - -/***/ }), -/* 129 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-forced.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -var replacement = /#|\.prototype\./; - -var isForced = function (feature, detection) { - var value = data[normalize(feature)]; - return value == POLYFILL ? true - : value == NATIVE ? false - : typeof detection == 'function' ? fails(detection) - : !!detection; -}; - -var normalize = isForced.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); -}; - -var data = isForced.data = {}; -var NATIVE = isForced.NATIVE = 'N'; -var POLYFILL = isForced.POLYFILL = 'P'; - -module.exports = isForced; - - -/***/ }), -/* 130 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/native-symbol.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion - // eslint-disable-next-line no-undef - return !String(Symbol()); -}); - - -/***/ }), -/* 131 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/classof.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 50); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; -}; - - -/***/ }), -/* 132 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/task.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var html = __webpack_require__(/*! ../internals/html */ 141); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); - -var location = global.location; -var set = global.setImmediate; -var clear = global.clearImmediate; -var process = global.process; -var MessageChannel = global.MessageChannel; -var Dispatch = global.Dispatch; -var counter = 0; -var queue = {}; -var ONREADYSTATECHANGE = 'onreadystatechange'; -var defer, channel, port; - -var run = function (id) { - // eslint-disable-next-line no-prototype-builtins - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } -}; - -var runner = function (id) { - return function () { - run(id); - }; -}; - -var listener = function (event) { - run(event.data); -}; - -var post = function (id) { - // old engines have not location.origin - global.postMessage(id + '', location.protocol + '//' + location.host); -}; - -// Node.js 0.9+ & IE10+ has setImmediate, otherwise: -if (!set || !clear) { - set = function setImmediate(fn) { - var args = []; - var i = 1; - while (arguments.length > i) args.push(arguments[i++]); - queue[++counter] = function () { - // eslint-disable-next-line no-new-func - (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); - }; - defer(counter); - return counter; - }; - clear = function clearImmediate(id) { - delete queue[id]; - }; - // Node.js 0.8- - if (classof(process) == 'process') { - defer = function (id) { - process.nextTick(runner(id)); - }; - // Sphere (JS game engine) Dispatch API - } else if (Dispatch && Dispatch.now) { - defer = function (id) { - Dispatch.now(runner(id)); - }; - // Browsers with MessageChannel, includes WebWorkers - // except iOS - https://github.com/zloirock/core-js/issues/624 - } else if (MessageChannel && !IS_IOS) { - channel = new MessageChannel(); - port = channel.port2; - channel.port1.onmessage = listener; - defer = bind(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post)) { - defer = post; - global.addEventListener('message', listener, false); - // IE8- - } else if (ONREADYSTATECHANGE in createElement('script')) { - defer = function (id) { - html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { - html.removeChild(this); - run(id); - }; - }; - // Rest old browsers - } else { - defer = function (id) { - setTimeout(runner(id), 0); - }; - } -} - -module.exports = { - set: set, - clear: clear -}; - - -/***/ }), -/* 133 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/engine-is-ios.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); - -module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); - - -/***/ }), -/* 134 */ -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! - \******************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// TODO: Remove from `core-js@4` since it's moved to entry points -__webpack_require__(/*! ../modules/es.regexp.exec */ 45); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); - -var SPECIES = wellKnownSymbol('species'); - -var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { - // #replace needs built-in support for named groups. - // #match works fine because it just return the exec results, even if it has - // a "grops" property. - var re = /./; - re.exec = function () { - var result = []; - result.groups = { a: '7' }; - return result; - }; - return ''.replace(re, '$') !== '7'; -}); - -// IE <= 11 replaces $0 with the whole match, as if it was $& -// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 -var REPLACE_KEEPS_$0 = (function () { - return 'a'.replace(/./, '$0') === '$0'; -})(); - -var REPLACE = wellKnownSymbol('replace'); -// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string -var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { - if (/./[REPLACE]) { - return /./[REPLACE]('a', '$0') === ''; - } - return false; -})(); - -// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec -// Weex JS has frozen built-in prototypes, so use try / catch wrapper -var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { - var re = /(?:)/; - var originalExec = re.exec; - re.exec = function () { return originalExec.apply(this, arguments); }; - var result = 'ab'.split(re); - return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; -}); - -module.exports = function (KEY, length, exec, sham) { - var SYMBOL = wellKnownSymbol(KEY); - - var DELEGATES_TO_SYMBOL = !fails(function () { - // String methods call symbol-named RegEp methods - var O = {}; - O[SYMBOL] = function () { return 7; }; - return ''[KEY](O) != 7; - }); - - var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { - // Symbol-named RegExp methods call .exec - var execCalled = false; - var re = /a/; - - if (KEY === 'split') { - // We can't use real regex here since it causes deoptimization - // and serious performance degradation in V8 - // https://github.com/zloirock/core-js/issues/306 - re = {}; - // RegExp[@@split] doesn't call the regex's exec method, but first creates - // a new one. We need to return the patched regex when creating the new one. - re.constructor = {}; - re.constructor[SPECIES] = function () { return re; }; - re.flags = ''; - re[SYMBOL] = /./[SYMBOL]; - } - - re.exec = function () { execCalled = true; return null; }; - - re[SYMBOL](''); - return !execCalled; - }); - - if ( - !DELEGATES_TO_SYMBOL || - !DELEGATES_TO_EXEC || - (KEY === 'replace' && !( - REPLACE_SUPPORTS_NAMED_GROUPS && - REPLACE_KEEPS_$0 && - !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE - )) || - (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) - ) { - var nativeRegExpMethod = /./[SYMBOL]; - var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { - if (regexp.exec === regexpExec) { - if (DELEGATES_TO_SYMBOL && !forceStringMethod) { - // The native String method already delegates to @@method (this - // polyfilled function), leasing to infinite recursion. - // We avoid it by directly calling the native @@method method. - return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; - } - return { done: true, value: nativeMethod.call(str, regexp, arg2) }; - } - return { done: false }; - }, { - REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, - REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE - }); - var stringMethod = methods[0]; - var regexMethod = methods[1]; - - redefine(String.prototype, KEY, stringMethod); - redefine(RegExp.prototype, SYMBOL, length == 2 - // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) - // 21.2.5.11 RegExp.prototype[@@split](string, limit) - ? function (string, arg) { return regexMethod.call(string, this, arg); } - // 21.2.5.6 RegExp.prototype[@@match](string) - // 21.2.5.9 RegExp.prototype[@@search](string) - : function (string) { return regexMethod.call(string, this); } - ); - } - - if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); -}; - - -/***/ }), -/* 135 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ./classof-raw */ 50); -var regexpExec = __webpack_require__(/*! ./regexp-exec */ 110); - -// `RegExpExec` abstract operation -// https://tc39.github.io/ecma262/#sec-regexpexec -module.exports = function (R, S) { - var exec = R.exec; - if (typeof exec === 'function') { - var result = exec.call(R, S); - if (typeof result !== 'object') { - throw TypeError('RegExp exec method returned something other than an Object or null'); - } - return result; - } - - if (classof(R) !== 'RegExp') { - throw TypeError('RegExp#exec called on incompatible receiver'); - } - - return regexpExec.call(R, S); -}; - - - -/***/ }), -/* 136 */, -/* 137 */, -/* 138 */, -/* 139 */, -/* 140 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys-internal.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 42); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 165).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); - -module.exports = function (object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key; - for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), -/* 141 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/html.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); - -module.exports = getBuiltIn('document', 'documentElement'); - - -/***/ }), -/* 142 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/iterate.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 190); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 191); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 192); - -var Result = function (stopped, result) { - this.stopped = stopped; - this.result = result; -}; - -var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, next, step; - - if (IS_ITERATOR) { - iterator = iterable; - } else { - iterFn = getIteratorMethod(iterable); - if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); - // optimisation for array iterators - if (isArrayIteratorMethod(iterFn)) { - for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = AS_ENTRIES - ? boundFunction(anObject(step = iterable[index])[0], step[1]) - : boundFunction(iterable[index]); - if (result && result instanceof Result) return result; - } return new Result(false); - } - iterator = iterFn.call(iterable); - } - - next = iterator.next; - while (!(step = next.call(iterator)).done) { - result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); - if (typeof result == 'object' && result && result instanceof Result) return result; - } return new Result(false); -}; - -iterate.stop = function (result) { - return new Result(true, result); -}; - - -/***/ }), -/* 143 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/species-constructor.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var SPECIES = wellKnownSymbol('species'); - -// `SpeciesConstructor` abstract operation -// https://tc39.github.io/ecma262/#sec-speciesconstructor -module.exports = function (O, defaultConstructor) { - var C = anObject(O).constructor; - var S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); -}; - - -/***/ }), -/* 144 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/perform.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return { error: false, value: exec() }; - } catch (error) { - return { error: true, value: error }; - } -}; - - -/***/ }), -/* 145 */, -/* 146 */ -/*!*********************************!*\ - !*** ./dev/Storage/RainLoop.js ***! - \*********************************/ -/*! exports provided: isStorageSupported, getHash, setHash, clearHash, checkTimestamp */ -/*! exports used: checkTimestamp, clearHash, getHash, isStorageSupported, setHash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isStorageSupported; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return setHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return clearHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return checkTimestamp; }); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__); - - - - - -var STORAGE_KEY = '__rlA'; -var TIME_KEY = '__rlT'; -/** - * @param {string} storageName - * @returns {boolean} - */ - -function isStorageSupported(storageName) { - var storageIsAvailable = false; - - try { - // at: window[storageName] firefox throws SecurityError: The operation is insecure. when in iframe - storageIsAvailable = storageName in window__WEBPACK_IMPORTED_MODULE_4___default.a && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName] && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName].setItem; - } catch (e) {} // eslint-disable-line no-empty - - - if (storageIsAvailable) { - var s = window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName], - key = 'testLocalStorage_' + window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.random(); - - try { - s.setItem(key, key); - - if (key === s.getItem(key)) { - s.removeItem(key); - return true; - } - } catch (e) {} // eslint-disable-line no-empty - - } - - return false; -} -var SESS_STORAGE = isStorageSupported('sessionStorage') ? window__WEBPACK_IMPORTED_MODULE_4___default.a.sessionStorage || null : null; -var WIN_STORAGE = window__WEBPACK_IMPORTED_MODULE_4___default.a.top || window__WEBPACK_IMPORTED_MODULE_4___default.a || null; - -var __get = function __get(key) { - var result = null; - - if (SESS_STORAGE) { - result = SESS_STORAGE.getItem(key) || null; - } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) { - var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; - result = data ? data[key] || null : null; - } - - return result; -}; - -var __set = function __set(key, value) { - if (SESS_STORAGE) { - SESS_STORAGE.setItem(key, value); - } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) { - var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; - data = data || {}; - data[key] = value; - WIN_STORAGE.name = window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.stringify(data); - } -}; - -var timestamp = function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_4___default.a.Date().getTime() / 1000); -}; - -var setTimestamp = function setTimestamp() { - return __set(TIME_KEY, timestamp()); -}; - -var getTimestamp = function getTimestamp() { - var time = __get(TIME_KEY, 0); - - return time ? window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(time, 10) || 0 : 0; -}; -/** - * @returns {string} - */ - - -function getHash() { - return __get(STORAGE_KEY); -} -/** - * @returns {void} - */ - -function setHash() { - var key = 'AuthAccountHash', - appData = window__WEBPACK_IMPORTED_MODULE_4___default.a.__rlah_data(); - - __set(STORAGE_KEY, appData && appData[key] ? appData[key] : ''); - - setTimestamp(); -} -/** - * @returns {void} - */ - -function clearHash() { - __set(STORAGE_KEY, ''); - - setTimestamp(); -} -/** - * @returns {boolean} - */ - -function checkTimestamp() { - if (timestamp() > getTimestamp() + 1000 * 60 * 60) { - // 60m - clearHash(); - return true; - } - - return false; -} // init section - -window__WEBPACK_IMPORTED_MODULE_4___default.a.setInterval(setTimestamp, 1000 * 60); // 1m - -/***/ }), -/* 147 */, -/* 148 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/path.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = global; - - -/***/ }), -/* 149 */, -/* 150 */, -/* 151 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/engine-v8-version.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); - -var process = global.process; -var versions = process && process.versions; -var v8 = versions && versions.v8; -var match, version; - -if (v8) { - match = v8.split('.'); - version = match[0] + match[1]; -} else if (userAgent) { - match = userAgent.match(/Edge\/(\d+)/); - if (!match || match[1] >= 74) { - match = userAgent.match(/Chrome\/(\d+)/); - if (match) version = match[1]; - } -} - -module.exports = version && +version; - - -/***/ }), -/* 152 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/advance-string-index.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 185).charAt; - -// `AdvanceStringIndex` abstract operation -// https://tc39.github.io/ecma262/#sec-advancestringindex -module.exports = function (S, index, unicode) { - return index + (unicode ? charAt(S, index).length : 1); -}; - - -/***/ }), -/* 153 */, -/* 154 */, -/* 155 */, -/* 156 */, -/* 157 */, -/* 158 */, -/* 159 */, -/* 160 */, -/* 161 */, -/* 162 */, -/* 163 */, -/* 164 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var nativePropertyIsEnumerable = {}.propertyIsEnumerable; -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// Nashorn ~ JDK8 bug -var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - -// `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable -exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; -} : nativePropertyIsEnumerable; - - -/***/ }), -/* 165 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/array-includes.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 182); - -// `Array.prototype.{ indexOf, includes }` methods implementation -var createMethod = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -module.exports = { - // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) -}; - - -/***/ }), -/* 166 */ -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! - \***************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), -/* 167 */, -/* 168 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = global.Promise; - - -/***/ }), -/* 169 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/promise-resolve.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 105); - -module.exports = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; -}; - - -/***/ }), -/* 170 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-flags.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// `RegExp.prototype.flags` getter implementation -// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags -module.exports = function () { - var that = anObject(this); - var result = ''; - if (that.global) result += 'g'; - if (that.ignoreCase) result += 'i'; - if (that.multiline) result += 'm'; - if (that.dotAll) result += 's'; - if (that.unicode) result += 'u'; - if (that.sticky) result += 'y'; - return result; -}; - - -/***/ }), -/* 171 */, -/* 172 */, -/* 173 */, -/* 174 */, -/* 175 */, -/* 176 */, -/* 177 */, -/* 178 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/native-weak-map.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); - -var WeakMap = global.WeakMap; - -module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); - - -/***/ }), -/* 179 */ -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! - \***********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 42); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 180); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); - -module.exports = function (target, source) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } -}; - - -/***/ }), -/* 180 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/own-keys.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 181); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 166); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// all object keys, includes non-enumerable and symbols -module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; -}; - - -/***/ }), -/* 181 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); - -var hiddenKeys = enumBugKeys.concat('length', 'prototype'); - -// `Object.getOwnPropertyNames` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertynames -exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys(O, hiddenKeys); -}; - - -/***/ }), -/* 182 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-absolute-index.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); - -var max = Math.max; -var min = Math.min; - -// Helper for a popular repeating case of the spec: -// Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). -module.exports = function (index, length) { - var integer = toInteger(index); - return integer < 0 ? max(integer + length, 0) : min(integer, length); -}; - - -/***/ }), -/* 183 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); - -module.exports = NATIVE_SYMBOL - // eslint-disable-next-line no-undef - && !Symbol.sham - // eslint-disable-next-line no-undef - && typeof Symbol.iterator == 'symbol'; - - -/***/ }), -/* 184 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/object-to-string.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classof = __webpack_require__(/*! ../internals/classof */ 131); - -// `Object.prototype.toString` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { - return '[object ' + classof(this) + ']'; -}; - - -/***/ }), -/* 185 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/string-multibyte.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); - -// `String.prototype.{ codePointAt, at }` methods implementation -var createMethod = function (CONVERT_TO_STRING) { - return function ($this, pos) { - var S = String(requireObjectCoercible($this)); - var position = toInteger(pos); - var size = S.length; - var first, second; - if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; - first = S.charCodeAt(position); - return first < 0xD800 || first > 0xDBFF || position + 1 === size - || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF - ? CONVERT_TO_STRING ? S.charAt(position) : first - : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; - }; -}; - -module.exports = { - // `String.prototype.codePointAt` method - // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat - codeAt: createMethod(false), - // `String.prototype.at` method - // https://github.com/mathiasbynens/String.prototype.at - charAt: createMethod(true) -}; - - -/***/ }), -/* 186 */, -/* 187 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/redefine-all.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); - -module.exports = function (target, src, options) { - for (var key in src) redefine(target, key, src[key], options); - return target; -}; - - -/***/ }), -/* 188 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/set-species.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); - -var SPECIES = wellKnownSymbol('species'); - -module.exports = function (CONSTRUCTOR_NAME) { - var Constructor = getBuiltIn(CONSTRUCTOR_NAME); - var defineProperty = definePropertyModule.f; - - if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { - defineProperty(Constructor, SPECIES, { - configurable: true, - get: function () { return this; } - }); - } -}; - - -/***/ }), -/* 189 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/an-instance.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name) { - if (!(it instanceof Constructor)) { - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); - } return it; -}; - - -/***/ }), -/* 190 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); - -var ITERATOR = wellKnownSymbol('iterator'); -var ArrayPrototype = Array.prototype; - -// check on default Array iterator -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); -}; - - -/***/ }), -/* 191 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/get-iterator-method.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof */ 131); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); - -module.exports = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), -/* 192 */ -/*!****************************************************************************!*\ - !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! - \****************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// call something on iterator step with safe closing on error -module.exports = function (iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (error) { - var returnMethod = iterator['return']; - if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); - throw error; - } -}; - - -/***/ }), -/* 193 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); -var SAFE_CLOSING = false; - -try { - var called = 0; - var iteratorWithReturn = { - next: function () { - return { done: !!called++ }; - }, - 'return': function () { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR] = function () { - return this; - }; - // eslint-disable-next-line no-throw-literal - Array.from(iteratorWithReturn, function () { throw 2; }); -} catch (error) { /* empty */ } - -module.exports = function (exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR] = function () { - return { - next: function () { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { /* empty */ } - return ITERATION_SUPPORT; -}; - - -/***/ }), -/* 194 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/microtask.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var macrotask = __webpack_require__(/*! ../internals/task */ 132).set; -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); - -var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; -var process = global.process; -var Promise = global.Promise; -var IS_NODE = classof(process) == 'process'; -// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` -var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); -var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; - -var flush, head, last, notify, toggle, node, promise, then; - -// modern engines have queueMicrotask method -if (!queueMicrotask) { - flush = function () { - var parent, fn; - if (IS_NODE && (parent = process.domain)) parent.exit(); - while (head) { - fn = head.fn; - head = head.next; - try { - fn(); - } catch (error) { - if (head) notify(); - else last = undefined; - throw error; - } - } last = undefined; - if (parent) parent.enter(); - }; - - // Node.js - if (IS_NODE) { - notify = function () { - process.nextTick(flush); - }; - // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver && !IS_IOS) { - toggle = true; - node = document.createTextNode(''); - new MutationObserver(flush).observe(node, { characterData: true }); - notify = function () { - node.data = toggle = !toggle; - }; - // environments with maybe non-completely correct, but existent Promise - } else if (Promise && Promise.resolve) { - // Promise.resolve without an argument throws an error in LG WebOS 2 - promise = Promise.resolve(undefined); - then = promise.then; - notify = function () { - then.call(promise, flush); - }; - // for other environments - macrotask based on: - // - setImmediate - // - MessageChannel - // - window.postMessag - // - onreadystatechange - // - setTimeout - } else { - notify = function () { - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); - }; - } -} - -module.exports = queueMicrotask || function (fn) { - var task = { fn: fn, next: undefined }; - if (last) last.next = task; - if (!head) { - head = task; - notify(); - } last = task; -}; - - -/***/ }), -/* 195 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/host-report-errors.js ***! - \**************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = function (a, b) { - var console = global.console; - if (console && console.error) { - arguments.length === 1 ? console.error(a) : console.error(a, b); - } -}; - - -/***/ }), -/* 196 */, -/* 197 */, -/* 198 */, -/* 199 */, -/* 200 */, -/* 201 */, -/* 202 */, -/* 203 */, -/* 204 */, -/* 205 */, -/* 206 */, -/* 207 */, -/* 208 */, -/* 209 */, -/* 210 */, -/* 211 */, -/* 212 */, -/* 213 */, -/* 214 */, -/* 215 */, -/* 216 */, -/* 217 */, -/* 218 */, -/* 219 */, -/* 220 */, -/* 221 */, -/* 222 */, -/* 223 */, -/* 224 */, -/* 225 */, -/* 226 */, -/* 227 */, -/* 228 */, -/* 229 */, -/* 230 */, -/* 231 */, -/* 232 */ -/*!*****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(/*! ./_fails */ 281)(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 233 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var fails = __webpack_require__(/*! ./fails */ 36); - -// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, -// so we use an intermediate function. -function RE(s, f) { - return RegExp(s, f); -} - -exports.UNSUPPORTED_Y = fails(function () { - // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError - var re = RE('a', 'y'); - re.lastIndex = 2; - return re.exec('abcd') != null; -}); - -exports.BROKEN_CARET = fails(function () { - // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 - var re = RE('^r', 'gy'); - re.lastIndex = 2; - return re.exec('str') != null; -}); - - -/***/ }), -/* 234 */, -/* 235 */, -/* 236 */, -/* 237 */, -/* 238 */, -/* 239 */, -/* 240 */, -/* 241 */, -/* 242 */, -/* 243 */, -/* 244 */, -/* 245 */, -/* 246 */, -/* 247 */, -/* 248 */, -/* 249 */, -/* 250 */, -/* 251 */, -/* 252 */, -/* 253 */, -/* 254 */, -/* 255 */, -/* 256 */, -/* 257 */, -/* 258 */, -/* 259 */, -/* 260 */, -/* 261 */, -/* 262 */, -/* 263 */, -/* 264 */, -/* 265 */, -/* 266 */, -/* 267 */, -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var core = module.exports = { version: '2.6.3' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - - -/***/ }), -/* 272 */, -/* 273 */, -/* 274 */, -/* 275 */, -/* 276 */, -/* 277 */, -/* 278 */, -/* 279 */, -/* 280 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), -/* 281 */ -/*!***********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } -}; - - -/***/ }), -/* 282 */, -/* 283 */, -/* 284 */, -/* 285 */, -/* 286 */, -/* 287 */, -/* 288 */, -/* 289 */, -/* 290 */, -/* 291 */, -/* 292 */, -/* 293 */, -/* 294 */, -/* 295 */, -/* 296 */, -/* 297 */, -/* 298 */, -/* 299 */, -/* 300 */, -/* 301 */, -/* 302 */, -/* 303 */, -/* 304 */, -/* 305 */, -/* 306 */, -/* 307 */, -/* 308 */, -/* 309 */, -/* 310 */, -/* 311 */, -/* 312 */, -/* 313 */, -/* 314 */, -/* 315 */, -/* 316 */, -/* 317 */, -/* 318 */, -/* 319 */, -/* 320 */, -/* 321 */, -/* 322 */, -/* 323 */, -/* 324 */, -/* 325 */, -/* 326 */, -/* 327 */, -/* 328 */, -/* 329 */, -/* 330 */, -/* 331 */, -/* 332 */, -/* 333 */, -/* 334 */, -/* 335 */, -/* 336 */, -/* 337 */, -/* 338 */, -/* 339 */, -/* 340 */, -/* 341 */, -/* 342 */, -/* 343 */, -/* 344 */, -/* 345 */, -/* 346 */, -/* 347 */, -/* 348 */, -/* 349 */, -/* 350 */, -/* 351 */, -/* 352 */, -/* 353 */, -/* 354 */, -/* 355 */, -/* 356 */, -/* 357 */, -/* 358 */, -/* 359 */, -/* 360 */, -/* 361 */, -/* 362 */, -/* 363 */, -/* 364 */, -/* 365 */, -/* 366 */, -/* 367 */, -/* 368 */, -/* 369 */, -/* 370 */, -/* 371 */, -/* 372 */, -/* 373 */, -/* 374 */, -/* 375 */, -/* 376 */, -/* 377 */, -/* 378 */, -/* 379 */, -/* 380 */, -/* 381 */, -/* 382 */, -/* 383 */, -/* 384 */, -/* 385 */, -/* 386 */, -/* 387 */, -/* 388 */, -/* 389 */, -/* 390 */, -/* 391 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/get-own-property-descriptor */ 498), __esModule: true }; - -/***/ }), -/* 392 */, -/* 393 */, -/* 394 */, -/* 395 */, -/* 396 */, -/* 397 */, -/* 398 */, -/* 399 */ -/*!************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js ***! - \************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ 400); -var core = __webpack_require__(/*! ./_core */ 271); -var ctx = __webpack_require__(/*! ./_ctx */ 493); -var hide = __webpack_require__(/*! ./_hide */ 495); -var has = __webpack_require__(/*! ./_has */ 405); -var PROTOTYPE = 'prototype'; - -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var IS_WRAP = type & $export.W; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE]; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; - var key, own, out; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - if (own && has(exports, key)) continue; - // export native or passed - out = own ? target[key] : source[key]; - // prevent global pollution for namespaces - exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] - // bind timers to global for call from export context - : IS_BIND && own ? ctx(out, global) - // wrap global constructors for prevent change them in library - : IS_WRAP && target[key] == out ? (function (C) { - var F = function (a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: return new C(); - case 1: return new C(a); - case 2: return new C(a, b); - } return new C(a, b, c); - } return C.apply(this, arguments); - }; - F[PROTOTYPE] = C[PROTOTYPE]; - return F; - // make static versions for prototype methods - })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% - if (IS_PROTO) { - (exports.virtual || (exports.virtual = {}))[key] = out; - // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% - if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); - } - } -}; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - - -/***/ }), -/* 400 */ -/*!************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js ***! - \************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - - -/***/ }), -/* 401 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ./_an-object */ 496); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 402); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 403); -var dP = Object.defineProperty; - -exports.f = __webpack_require__(/*! ./_descriptors */ 232) ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), -/* 402 */ -/*!********************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js ***! - \********************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = !__webpack_require__(/*! ./_descriptors */ 232) && !__webpack_require__(/*! ./_fails */ 281)(function () { - return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ 497)('div'), 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 403 */ -/*!******************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js ***! - \******************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(/*! ./_is-object */ 280); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 404 */ -/*!*******************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js ***! - \*******************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 405 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 406 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(/*! ./_iobject */ 500); -var defined = __webpack_require__(/*! ./_defined */ 502); -module.exports = function (it) { - return IObject(defined(it)); -}; - - -/***/ }), -/* 407 */, -/* 408 */, -/* 409 */, -/* 410 */, -/* 411 */, -/* 412 */, -/* 413 */, -/* 414 */ -/*!**************************************************************!*\ - !*** ./node_modules/element-dataset/lib/browser/index.es.js ***! - \**************************************************************/ -/*! exports provided: default */ -/*! exports used: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/define-property */ 415); -/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/core-js/object/get-own-property-descriptor */ 391); -/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__); - -// -// element-dataset 2.2.6 -// -// element-dataset is released under the terms of the BSD-3-Clause license. -// (c) 2015 - 2017 Mark Milstein -// -// For all details and documentation: https://github.com/epiloque/element-dataset -// - - - - -/* eslint-env browser */ - -function elementDatasetPolyfill() { - if (!document.documentElement.dataset && (!babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset') || !babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset').get)) { - var descriptor = {}; - - descriptor.enumerable = true; - - descriptor.get = function get() { - var element = this; - var map = {}; - var attributes = this.attributes; - - function toUpperCase(n0) { - return n0.charAt(1).toUpperCase(); - } - - function getter() { - return this.value; - } - - function setter(name, value) { - if (typeof value !== 'undefined') { - this.setAttribute(name, value); - } else { - this.removeAttribute(name); - } - } - - for (var i = 0; i < attributes.length; i += 1) { - var attribute = attributes[i]; - - // This test really should allow any XML Name without - // colons (and non-uppercase for XHTML) - - if (attribute && attribute.name && /^data-\w[\w-]*$/.test(attribute.name)) { - var name = attribute.name; - var value = attribute.value; - - // Change to CamelCase - - var propName = name.substr(5).replace(/-./g, toUpperCase); - - babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(map, propName, { - enumerable: descriptor.enumerable, - get: getter.bind({ value: value || '' }), - set: setter.bind(element, name) - }); - } - } - return map; - }; - - Object.defineProperty(HTMLElement.prototype, 'dataset', descriptor); - } -} - -/* harmony default export */ __webpack_exports__["a"] = (elementDatasetPolyfill); - - -/***/ }), -/* 415 */ -/*!**********************************************************************!*\ - !*** ./node_modules/babel-runtime/core-js/object/define-property.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/define-property */ 491), __esModule: true }; - -/***/ }), -/* 416 */ -/*!*********************************************!*\ - !*** ./vendors/Progress.js/src/progress.js ***! - \*********************************************/ -/*! no static exports found */ -/*! exports used: progressJs */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * Progress.js v0.1.0 - * https://github.com/usablica/progress.js - * MIT licensed - * - * Copyright (C) 2013 usabli.ca - Afshin Mehrabani (@afshinmeh) - */ - -(function (root, factory) { - if (true) { - // CommonJS - factory(exports); - } else {} -} (this, function (exports) { - //Default config/variables - var VERSION = '0.1.0'; - - /** - * ProgressJs main class - * - * @class ProgressJs - */ - function ProgressJs(obj) { - - if (typeof obj.length != 'undefined') { - this._targetElement = obj; - } else { - this._targetElement = [obj]; - } - - if (typeof window._progressjsId === 'undefined') - window._progressjsId = 1; - - if (typeof window._progressjsIntervals === 'undefined') - window._progressjsIntervals = {}; - - this._options = { - //progress bar theme - theme: 'blue', - //overlay mode makes an overlay layer in the target element - overlayMode: false, - //to consider CSS3 transitions in events - considerTransition: true - }; - } - - /** - * Start progress for specific element(s) - * - * @api private - * @method _createContainer - */ - function _startProgress() { - - //call onBeforeStart callback - if (typeof this._onBeforeStartCallback != 'undefined') { - this._onBeforeStartCallback.call(this); - } - - //create the container for progress bar - _createContainer.call(this); - - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - _setProgress.call(this, this._targetElement[i]); - } - } - - /** - * Set progress bar for specific element - * - * @api private - * @method _setProgress - * @param {Object} targetElement - */ - function _setProgress(targetElement) { - - //if the target element already as `data-progressjs`, ignore the init - if (targetElement.hasAttribute("data-progressjs")) - return; - - //get target element position - var targetElementOffset = _getOffset.call(this, targetElement); - - targetElement.setAttribute("data-progressjs", window._progressjsId); - - var progressElementContainer = document.createElement('div'); - progressElementContainer.className = 'progressjs-progress progressjs-theme-' + this._options.theme; - - - //set the position percent elements, it depends on targetElement tag - if (targetElement.tagName.toLowerCase() === 'body') { - progressElementContainer.style.position = 'fixed'; - } else { - progressElementContainer.style.position = 'absolute'; - } - - progressElementContainer.setAttribute("data-progressjs", window._progressjsId); - var progressElement = document.createElement("div"); - progressElement.className = "progressjs-inner"; - - //create an element for current percent of progress bar - var progressPercentElement = document.createElement('div'); - progressPercentElement.className = "progressjs-percent"; - progressPercentElement.innerHTML = "1%"; - - progressElement.appendChild(progressPercentElement); - - if (this._options.overlayMode && targetElement.tagName.toLowerCase() === 'body') { - //if we have `body` for target element and also overlay mode is enable, we should use a different - //position for progress bar container element - progressElementContainer.style.left = 0; - progressElementContainer.style.right = 0; - progressElementContainer.style.top = 0; - progressElementContainer.style.bottom = 0; - } else { - //set progress bar container size and offset - progressElementContainer.style.left = targetElementOffset.left + 'px'; - progressElementContainer.style.top = targetElementOffset.top + 'px'; - progressElementContainer.style.width = targetElementOffset.width + 'px'; - - if (this._options.overlayMode) { - progressElementContainer.style.height = targetElementOffset.height + 'px'; - } - } - - progressElementContainer.appendChild(progressElement); - - //append the element to container - var container = document.querySelector('.progressjs-container'); - container.appendChild(progressElementContainer); - - _setPercentFor(targetElement, 1); - - //and increase the progressId - ++window._progressjsId; - } - - /** - * Set percent for all elements - * - * @api private - * @method _setPercent - * @param {Number} percent - */ - function _setPercent(percent) { - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - _setPercentFor.call(this, this._targetElement[i], percent); - } - } - - /** - * Set percent for specific element - * - * @api private - * @method _setPercentFor - * @param {Object} targetElement - * @param {Number} percent - */ - function _setPercentFor(targetElement, percent) { - var self = this; - - //prevent overflow! - if (percent >= 100) - percent = 100; - - if (targetElement.hasAttribute("data-progressjs")) { - //setTimeout for better CSS3 animation applying in some cases - setTimeout(function() { - - //call the onprogress callback - if (typeof self._onProgressCallback != 'undefined') { - self._onProgressCallback.call(self, targetElement, percent); - } - - var percentElement = _getPercentElement(targetElement); - percentElement.style.width = parseInt(percent) + '%'; - - var percentElement = percentElement.querySelector(".progressjs-percent"); - var existingPercent = parseInt(percentElement.innerHTML.replace('%', '')); - - //start increase/decrease the percent element with animation - (function(percentElement, existingPercent, currentPercent) { - - var increasement = true; - if (existingPercent > currentPercent) { - increasement = false; - } - - var intervalIn = 10; - function changePercentTimer(percentElement, existingPercent, currentPercent) { - //calculate the distance between two percents - var distance = Math.abs(existingPercent - currentPercent); - if (distance < 3) { - intervalIn = 30; - } else if (distance < 20) { - intervalIn = 20; - } else { - intervanIn = 1; - } - - if ((existingPercent - currentPercent) != 0) { - //set the percent - percentElement.innerHTML = (increasement ? (++existingPercent) : (--existingPercent)) + '%'; - setTimeout(function() { changePercentTimer(percentElement, existingPercent, currentPercent); }, intervalIn); - } - } - - changePercentTimer(percentElement, existingPercent, currentPercent); - - })(percentElement, existingPercent, parseInt(percent)); - - }, 50); - } - } - - /** - * Get the progress bar element - * - * @api private - * @method _getPercentElement - * @param {Object} targetElement - */ - function _getPercentElement(targetElement) { - var progressjsId = parseInt(targetElement.getAttribute('data-progressjs')); - return document.querySelector('.progressjs-container > .progressjs-progress[data-progressjs="' + progressjsId + '"] > .progressjs-inner'); - } - - /** - * Auto increase the progress bar every X milliseconds - * - * @api private - * @method _autoIncrease - * @param {Number} size - * @param {Number} millisecond - */ - function _autoIncrease(size, millisecond) { - var self = this; - - var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); - - if (typeof window._progressjsIntervals[progressjsId] != 'undefined') { - clearInterval(window._progressjsIntervals[progressjsId]); - } - window._progressjsIntervals[progressjsId] = setInterval(function() { - _increasePercent.call(self, size); - }, millisecond); - } - - /** - * Increase the size of progress bar - * - * @api private - * @method _increasePercent - * @param {Number} size - */ - function _increasePercent(size) { - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - var currentElement = this._targetElement[i]; - if (currentElement.hasAttribute('data-progressjs')) { - var percentElement = _getPercentElement(currentElement); - var existingPercent = parseInt(percentElement.style.width.replace('%', '')); - if (existingPercent) { - _setPercentFor.call(this, currentElement, existingPercent + (size || 1)); - } - } - } - } - - /** - * Close and remove progress bar - * - * @api private - * @method _end - */ - function _end() { - - //call onBeforeEnd callback - if (typeof this._onBeforeEndCallback != 'undefined') { - if (this._options.considerTransition === true) { - //we can safety assume that all layers would be the same, so `this._targetElement[0]` is the same as `this._targetElement[1]` - _getPercentElement(this._targetElement[0]).addEventListener(whichTransitionEvent(), this._onBeforeEndCallback, false); - } else { - this._onBeforeEndCallback.call(this); - } - } - - var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); - - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - var currentElement = this._targetElement[i]; - var percentElement = _getPercentElement(currentElement); - - if (!percentElement) - return; - - var existingPercent = parseInt(percentElement.style.width.replace('%', '')); - - var timeoutSec = 1; - if (existingPercent < 100) { - _setPercentFor.call(this, currentElement, 100); - timeoutSec = 500; - } - - //I believe I should handle this situation with eventListener and `transitionend` event but I'm not sure - //about compatibility with IEs. Should be fixed in further versions. - (function(percentElement, currentElement) { - setTimeout(function() { - percentElement.parentNode.className += " progressjs-end"; - - setTimeout(function() { - //remove the percent element from page - percentElement.parentNode.parentNode.removeChild(percentElement.parentNode); - //and remove the attribute - currentElement.removeAttribute("data-progressjs"); - }, 1000); - }, timeoutSec); - })(percentElement, currentElement); - } - - //clean the setInterval for autoIncrease function - if (window._progressjsIntervals[progressjsId]) { - //`delete` keyword has some problems in IE - try { - clearInterval(window._progressjsIntervals[progressjsId]); - window._progressjsIntervals[progressjsId] = null; - delete window._progressjsIntervals[progressjsId]; - } catch(ex) { } - } - } - - /** - * Create the progress bar container - * - * @api private - * @method _createContainer - */ - function _createContainer() { - //first check if we have an container already, we don't need to create it again - if (!document.querySelector(".progressjs-container")) { - var containerElement = document.createElement("div"); - containerElement.className = "progressjs-container"; - document.body.appendChild(containerElement); - } - } - - /** - * Get an element position on the page - * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966 - * - * @api private - * @method _getOffset - * @param {Object} element - * @returns Element's position info - */ - function _getOffset(element) { - var elementPosition = {}; - - if (element.tagName.toLowerCase() === 'body') { - //set width - elementPosition.width = element.clientWidth; - //set height - elementPosition.height = element.clientHeight; - } else { - //set width - elementPosition.width = element.offsetWidth; - //set height - elementPosition.height = element.offsetHeight; - } - - //calculate element top and left - var _x = 0; - var _y = 0; - while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { - _x += element.offsetLeft; - _y += element.offsetTop; - element = element.offsetParent; - } - //set top - elementPosition.top = _y; - //set left - elementPosition.left = _x; - - return elementPosition; - } - - /** - * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 - * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically - * - * @param obj1 - * @param obj2 - * @returns obj3 a new object based on obj1 and obj2 - */ - function _mergeOptions(obj1, obj2) { - var obj3 = {}; - for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } - for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } - return obj3; - } - - var progressJs = function (targetElm) { - if (typeof (targetElm) === 'object') { - //Ok, create a new instance - return new ProgressJs(targetElm); - - } else if (typeof (targetElm) === 'string') { - //select the target element with query selector - var targetElement = document.querySelectorAll(targetElm); - - if (targetElement) { - return new ProgressJs(targetElement); - } else { - throw new Error('There is no element with given selector.'); - } - } else { - return new ProgressJs(document.body); - } - }; - - /** - * Get correct transition callback - * Thanks @webinista: http://stackoverflow.com/a/9090128/375966 - * - * @returns transition name - */ - function whichTransitionEvent() { - var t; - var el = document.createElement('fakeelement'); - var transitions = { - 'transition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'MozTransition': 'transitionend', - 'WebkitTransition': 'webkitTransitionEnd' - } - - for (t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - } - - /** - * Current ProgressJs version - * - * @property version - * @type String - */ - progressJs.version = VERSION; - - //Prototype - progressJs.fn = ProgressJs.prototype = { - clone: function () { - return new ProgressJs(this); - }, - setOption: function(option, value) { - this._options[option] = value; - return this; - }, - setOptions: function(options) { - this._options = _mergeOptions(this._options, options); - return this; - }, - start: function() { - _startProgress.call(this); - return this; - }, - set: function(percent) { - _setPercent.call(this, percent); - return this; - }, - increase: function(size) { - _increasePercent.call(this, size); - return this; - }, - autoIncrease: function(size, millisecond) { - _autoIncrease.call(this, size, millisecond); - return this; - }, - end: function() { - _end.call(this); - return this; - }, - onbeforeend: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onBeforeEndCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforeend was not a function'); - } - return this; - }, - onbeforestart: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onBeforeStartCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforestart was not a function'); - } - return this; - }, - onprogress: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onProgressCallback = providedCallback; - } else { - throw new Error('Provided callback for onprogress was not a function'); - } - return this; - } - }; - - exports.progressJs = progressJs; - return progressJs; -})); - - -/***/ }), -/* 417 */, -/* 418 */, -/* 419 */, -/* 420 */, -/* 421 */, -/* 422 */, -/* 423 */, -/* 424 */, -/* 425 */, -/* 426 */, -/* 427 */, -/* 428 */, -/* 429 */, -/* 430 */, -/* 431 */, -/* 432 */, -/* 433 */, -/* 434 */, -/* 435 */, -/* 436 */, -/* 437 */, -/* 438 */, -/* 439 */, -/* 440 */, -/* 441 */, -/* 442 */, -/* 443 */, -/* 444 */, -/* 445 */, -/* 446 */, -/* 447 */, -/* 448 */, -/* 449 */, -/* 450 */, -/* 451 */, -/* 452 */, -/* 453 */, -/* 454 */, -/* 455 */, -/* 456 */, -/* 457 */, -/* 458 */, -/* 459 */, -/* 460 */, -/* 461 */, -/* 462 */, -/* 463 */, -/* 464 */, -/* 465 */, -/* 466 */, -/* 467 */, -/* 468 */, -/* 469 */, -/* 470 */, -/* 471 */, -/* 472 */, -/* 473 */, -/* 474 */, -/* 475 */, -/* 476 */, -/* 477 */, -/* 478 */, -/* 479 */, -/* 480 */, -/* 481 */, -/* 482 */, -/* 483 */, -/* 484 */, -/* 485 */, -/* 486 */, -/* 487 */, -/* 488 */, -/* 489 */, -/* 490 */ -/*!*********************!*\ - !*** ./dev/boot.js ***! - \*********************/ -/*! no exports provided */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var element_dataset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-dataset */ 414); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vendors/Progress.js/src/progress.js */ 416); -/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__); - - -Object(element_dataset__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(); - -__webpack_require__(/*! json3 */ 506); - -__webpack_require__(/*! intersection-observer */ 509); - - - -window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs = window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs || Object(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__["progressJs"])(); -window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs.onbeforeend(function () { - var _$ = window__WEBPACK_IMPORTED_MODULE_2___default.a.$; - - if (_$) { - try { - _$('.progressjs-container').hide(); - - window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { - _$('.progressjs-container').remove(); - }, 200); // eslint-disable-line no-magic-numbers - } catch (e) {} // eslint-disable-line no-empty - - } -}); - -__webpack_require__(/*! ../vendors/modernizr/modernizr-custom.js */ 510); - -__webpack_require__(/*! Common/Booter */ 511); - -if (window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot) { - window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot(); -} - -/***/ }), -/* 491 */ -/*!**********************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/define-property.js ***! - \**********************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es6.object.define-property */ 492); -var $Object = __webpack_require__(/*! ../../modules/_core */ 271).Object; -module.exports = function defineProperty(it, key, desc) { - return $Object.defineProperty(it, key, desc); -}; - - -/***/ }), -/* 492 */ -/*!*******************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.define-property.js ***! - \*******************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(/*! ./_export */ 399); -// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) -$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ 232), 'Object', { defineProperty: __webpack_require__(/*! ./_object-dp */ 401).f }); - - -/***/ }), -/* 493 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(/*! ./_a-function */ 494); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 494 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), -/* 495 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ 401); -var createDesc = __webpack_require__(/*! ./_property-desc */ 404); -module.exports = __webpack_require__(/*! ./_descriptors */ 232) ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 496 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ 280); -module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; -}; - - -/***/ }), -/* 497 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ 280); -var document = __webpack_require__(/*! ./_global */ 400).document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 498 */ -/*!**********************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/get-own-property-descriptor.js ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es6.object.get-own-property-descriptor */ 499); -var $Object = __webpack_require__(/*! ../../modules/_core */ 271).Object; -module.exports = function getOwnPropertyDescriptor(it, key) { - return $Object.getOwnPropertyDescriptor(it, key); -}; - - -/***/ }), -/* 499 */ -/*!*******************************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js ***! - \*******************************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) -var toIObject = __webpack_require__(/*! ./_to-iobject */ 406); -var $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ 503).f; - -__webpack_require__(/*! ./_object-sap */ 505)('getOwnPropertyDescriptor', function () { - return function getOwnPropertyDescriptor(it, key) { - return $getOwnPropertyDescriptor(toIObject(it), key); - }; -}); - - -/***/ }), -/* 500 */ -/*!*************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(/*! ./_cof */ 501); -// eslint-disable-next-line no-prototype-builtins -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); -}; - - -/***/ }), -/* 501 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 502 */ -/*!*************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), -/* 503 */ -/*!*****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(/*! ./_object-pie */ 504); -var createDesc = __webpack_require__(/*! ./_property-desc */ 404); -var toIObject = __webpack_require__(/*! ./_to-iobject */ 406); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 403); -var has = __webpack_require__(/*! ./_has */ 405); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 402); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(/*! ./_descriptors */ 232) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 504 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = {}.propertyIsEnumerable; - - -/***/ }), -/* 505 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-sap.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// most Object methods by ES6 should accept primitives -var $export = __webpack_require__(/*! ./_export */ 399); -var core = __webpack_require__(/*! ./_core */ 271); -var fails = __webpack_require__(/*! ./_fails */ 281); -module.exports = function (KEY, exec) { - var fn = (core.Object || {})[KEY] || Object[KEY]; - var exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); -}; - - -/***/ }), -/* 506 */ -/*!*****************************************!*\ - !*** ./node_modules/json3/lib/json3.js ***! - \*****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = true && __webpack_require__(/*! !webpack amd options */ 508); - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root.Object()); - exports || (exports = root.Object()); - - // Native constructor aliases. - var Number = context.Number || root.Number, - String = context.String || root.String, - Object = context.Object || root.Object, - Date = context.Date || root.Date, - SyntaxError = context.SyntaxError || root.SyntaxError, - TypeError = context.TypeError || root.TypeError, - Math = context.Math || root.Math, - nativeJSON = context.JSON || root.JSON; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty = objectProto.hasOwnProperty, - undefined; - - // Internal: Contains `try...catch` logic used by other functions. - // This prevents other functions from being deoptimized. - function attempt(func, errorFunc) { - try { - func(); - } catch (exception) { - if (errorFunc) { - errorFunc(); - } - } - } - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - attempt(function () { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - }); - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] != null) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("date-serialization") && has("json-parse"); - } else if (name == "date-serialization") { - // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`. - isSupported = has("json-stringify") && isExtended; - if (isSupported) { - var stringify = exports.stringify; - attempt(function () { - isSupported = - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - }); - } - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function"; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - attempt(function () { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undefined && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undefined) === undefined && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undefined && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undefined]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undefined, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]"; - }, function () { - stringifySupported = false; - }); - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse, parseSupported; - if (typeof parse == "function") { - attempt(function () { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - attempt(function () { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - }); - if (parseSupported) { - attempt(function () { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - }); - } - if (parseSupported) { - attempt(function () { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - }); - } - } - } - }, function () { - parseSupported = false; - }); - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - has["bug-string-char-index"] = has["date-serialization"] = has["json"] = has["json-stringify"] = has["json-parse"] = null; - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - var forOwn = function (object, callback) { - var size = 0, Properties, dontEnums, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - dontEnums = new Properties(); - for (property in dontEnums) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(dontEnums, property)) { - size++; - } - } - Properties = dontEnums = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - dontEnums = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forOwn = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = dontEnums.length; property = dontEnums[--length];) { - if (hasProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forOwn = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forOwn(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify") && !has("date-serialization")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Serializes a date object. - var serializeDate = function (value) { - var getData, year, month, date, time, hours, minutes, seconds, milliseconds; - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - getData = function (value) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - }; - } else { - getData = function (value) { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - }; - } - serializeDate = function (value) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - getData(value); - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - year = month = date = hours = minutes = seconds = milliseconds = null; - } else { - value = null; - } - return value; - }; - return serializeDate(value); - }; - - // For environments with `JSON.stringify` but buggy date serialization, - // we override the native `Date#toJSON` implementation with a - // spec-compliant one. - if (has("json-stringify") && !has("date-serialization")) { - // Internal: the `Date#toJSON` implementation used to override the native one. - function dateToJSON (key) { - return serializeDate(this); - } - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - var nativeStringify = exports.stringify; - exports.stringify = function (source, filter, width) { - var nativeToJSON = Date.prototype.toJSON; - Date.prototype.toJSON = dateToJSON; - var result = nativeStringify(source, filter, width); - Date.prototype.toJSON = nativeToJSON; - return result; - } - } else { - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var escapeChar = function (character) { - var charCode = character.charCodeAt(0), escaped = Escapes[charCode]; - if (escaped) { - return escaped; - } - return unicodePrefix + toPaddedString(2, charCode.toString(16)); - }; - var reEscape = /[\x00-\x1f\x22\x5c]/g; - var quote = function (value) { - reEscape.lastIndex = 0; - return '"' + - ( - reEscape.test(value) - ? value.replace(reEscape, escapeChar) - : value - ) + - '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, type, className, results, element, index, length, prefix, result; - attempt(function () { - // Necessary for host object support. - value = object[property]; - }); - if (typeof value == "object" && value) { - if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) { - value = serializeDate(value); - } else if (typeof value.toJSON == "function") { - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - // Exit early if value is `undefined` or `null`. - if (value == undefined) { - return value === undefined ? value : "null"; - } - type = typeof value; - // Only call `getClass` if the value is an object. - if (type == "object") { - className = getClass.call(value); - } - switch (className || type) { - case "boolean": - case booleanClass: - // Booleans are represented literally. - return "" + value; - case "number": - case numberClass: - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - case "string": - case stringClass: - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undefined ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forOwn(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undefined) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - className = getClass.call(filter); - if (className == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length;) { - value = filter[index++]; - className = getClass.call(value); - if (className == "[object String]" || className == "[object Number]") { - properties[value] = 1; - } - } - } - } - if (width) { - className = getClass.call(width); - if (className == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - if (width > 10) { - width = 10; - } - for (whitespace = ""; whitespace.length < width;) { - whitespace += " "; - } - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length; position++) { - charCode = source.charCodeAt(position); - if (charCode < 48 || charCode > 57) { - break; - } - } - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length; position++) { - charCode = source.charCodeAt(position); - if (charCode < 48 || charCode > 57) { - break; - } - } - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - var temp = source.slice(Index, Index + 4); - if (temp == "true") { - Index += 4; - return true; - } else if (temp == "fals" && source.charCodeAt(Index + 4 ) == 101) { - Index += 5; - return false; - } else if (temp == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;;) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } else { - hasMembers = true; - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;;) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } else { - hasMembers = true; - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undefined) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forOwn` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(getClass, forOwn, value, length, callback); - } - } else { - forOwn(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports.runInContext = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root.JSON3, - isRestored = false; - - var JSON3 = runInContext(root, (root.JSON3 = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root.JSON3 = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return JSON3; - }).call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}).call(this); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ 507)(module), __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) - -/***/ }), -/* 507 */ -/*!***********************************!*\ - !*** (webpack)/buildin/module.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if (!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if (!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 508 */ -/*!****************************************!*\ - !*** (webpack)/buildin/amd-options.js ***! - \****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ -module.exports = __webpack_amd_options__; - -/* WEBPACK VAR INJECTION */}.call(this, {})) - -/***/ }), -/* 509 */ -/*!*********************************************************************!*\ - !*** ./node_modules/intersection-observer/intersection-observer.js ***! - \*********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE. - * - * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document - * - */ -(function() { -'use strict'; - -// Exit early if we're not running in a browser. -if (typeof window !== 'object') { - return; -} - -// Exit early if all IntersectionObserver and IntersectionObserverEntry -// features are natively supported. -if ('IntersectionObserver' in window && - 'IntersectionObserverEntry' in window && - 'intersectionRatio' in window.IntersectionObserverEntry.prototype) { - - // Minimal polyfill for Edge 15's lack of `isIntersecting` - // See: https://github.com/w3c/IntersectionObserver/issues/211 - if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) { - Object.defineProperty(window.IntersectionObserverEntry.prototype, - 'isIntersecting', { - get: function () { - return this.intersectionRatio > 0; - } - }); - } - return; -} - - -/** - * A local reference to the document. - */ -var document = window.document; - - -/** - * An IntersectionObserver registry. This registry exists to hold a strong - * reference to IntersectionObserver instances currently observing a target - * element. Without this registry, instances without another reference may be - * garbage collected. - */ -var registry = []; - - -/** - * Creates the global IntersectionObserverEntry constructor. - * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry - * @param {Object} entry A dictionary of instance properties. - * @constructor - */ -function IntersectionObserverEntry(entry) { - this.time = entry.time; - this.target = entry.target; - this.rootBounds = entry.rootBounds; - this.boundingClientRect = entry.boundingClientRect; - this.intersectionRect = entry.intersectionRect || getEmptyRect(); - this.isIntersecting = !!entry.intersectionRect; - - // Calculates the intersection ratio. - var targetRect = this.boundingClientRect; - var targetArea = targetRect.width * targetRect.height; - var intersectionRect = this.intersectionRect; - var intersectionArea = intersectionRect.width * intersectionRect.height; - - // Sets intersection ratio. - if (targetArea) { - // Round the intersection ratio to avoid floating point math issues: - // https://github.com/w3c/IntersectionObserver/issues/324 - this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4)); - } else { - // If area is zero and is intersecting, sets to 1, otherwise to 0 - this.intersectionRatio = this.isIntersecting ? 1 : 0; - } -} - - -/** - * Creates the global IntersectionObserver constructor. - * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface - * @param {Function} callback The function to be invoked after intersection - * changes have queued. The function is not invoked if the queue has - * been emptied by calling the `takeRecords` method. - * @param {Object=} opt_options Optional configuration options. - * @constructor - */ -function IntersectionObserver(callback, opt_options) { - - var options = opt_options || {}; - - if (typeof callback != 'function') { - throw new Error('callback must be a function'); - } - - if (options.root && options.root.nodeType != 1) { - throw new Error('root must be an Element'); - } - - // Binds and throttles `this._checkForIntersections`. - this._checkForIntersections = throttle( - this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT); - - // Private properties. - this._callback = callback; - this._observationTargets = []; - this._queuedEntries = []; - this._rootMarginValues = this._parseRootMargin(options.rootMargin); - - // Public properties. - this.thresholds = this._initThresholds(options.threshold); - this.root = options.root || null; - this.rootMargin = this._rootMarginValues.map(function(margin) { - return margin.value + margin.unit; - }).join(' '); -} - - -/** - * The minimum interval within which the document will be checked for - * intersection changes. - */ -IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100; - - -/** - * The frequency in which the polyfill polls for intersection changes. - * this can be updated on a per instance basis and must be set prior to - * calling `observe` on the first target. - */ -IntersectionObserver.prototype.POLL_INTERVAL = null; - -/** - * Use a mutation observer on the root element - * to detect intersection changes. - */ -IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true; - - -/** - * Starts observing a target element for intersection changes based on - * the thresholds values. - * @param {Element} target The DOM element to observe. - */ -IntersectionObserver.prototype.observe = function(target) { - var isTargetAlreadyObserved = this._observationTargets.some(function(item) { - return item.element == target; - }); - - if (isTargetAlreadyObserved) { - return; - } - - if (!(target && target.nodeType == 1)) { - throw new Error('target must be an Element'); - } - - this._registerInstance(); - this._observationTargets.push({element: target, entry: null}); - this._monitorIntersections(); - this._checkForIntersections(); -}; - - -/** - * Stops observing a target element for intersection changes. - * @param {Element} target The DOM element to observe. - */ -IntersectionObserver.prototype.unobserve = function(target) { - this._observationTargets = - this._observationTargets.filter(function(item) { - - return item.element != target; - }); - if (!this._observationTargets.length) { - this._unmonitorIntersections(); - this._unregisterInstance(); - } -}; - - -/** - * Stops observing all target elements for intersection changes. - */ -IntersectionObserver.prototype.disconnect = function() { - this._observationTargets = []; - this._unmonitorIntersections(); - this._unregisterInstance(); -}; - - -/** - * Returns any queue entries that have not yet been reported to the - * callback and clears the queue. This can be used in conjunction with the - * callback to obtain the absolute most up-to-date intersection information. - * @return {Array} The currently queued entries. - */ -IntersectionObserver.prototype.takeRecords = function() { - var records = this._queuedEntries.slice(); - this._queuedEntries = []; - return records; -}; - - -/** - * Accepts the threshold value from the user configuration object and - * returns a sorted array of unique threshold values. If a value is not - * between 0 and 1 and error is thrown. - * @private - * @param {Array|number=} opt_threshold An optional threshold value or - * a list of threshold values, defaulting to [0]. - * @return {Array} A sorted list of unique and valid threshold values. - */ -IntersectionObserver.prototype._initThresholds = function(opt_threshold) { - var threshold = opt_threshold || [0]; - if (!Array.isArray(threshold)) threshold = [threshold]; - - return threshold.sort().filter(function(t, i, a) { - if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) { - throw new Error('threshold must be a number between 0 and 1 inclusively'); - } - return t !== a[i - 1]; - }); -}; - - -/** - * Accepts the rootMargin value from the user configuration object - * and returns an array of the four margin values as an object containing - * the value and unit properties. If any of the values are not properly - * formatted or use a unit other than px or %, and error is thrown. - * @private - * @param {string=} opt_rootMargin An optional rootMargin value, - * defaulting to '0px'. - * @return {Array} An array of margin objects with the keys - * value and unit. - */ -IntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) { - var marginString = opt_rootMargin || '0px'; - var margins = marginString.split(/\s+/).map(function(margin) { - var parts = /^(-?\d*\.?\d+)(px|%)$/.exec(margin); - if (!parts) { - throw new Error('rootMargin must be specified in pixels or percent'); - } - return {value: parseFloat(parts[1]), unit: parts[2]}; - }); - - // Handles shorthand. - margins[1] = margins[1] || margins[0]; - margins[2] = margins[2] || margins[0]; - margins[3] = margins[3] || margins[1]; - - return margins; -}; - - -/** - * Starts polling for intersection changes if the polling is not already - * happening, and if the page's visibility state is visible. - * @private - */ -IntersectionObserver.prototype._monitorIntersections = function() { - if (!this._monitoringIntersections) { - this._monitoringIntersections = true; - - // If a poll interval is set, use polling instead of listening to - // resize and scroll events or DOM mutations. - if (this.POLL_INTERVAL) { - this._monitoringInterval = setInterval( - this._checkForIntersections, this.POLL_INTERVAL); - } - else { - addEvent(window, 'resize', this._checkForIntersections, true); - addEvent(document, 'scroll', this._checkForIntersections, true); - - if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) { - this._domObserver = new MutationObserver(this._checkForIntersections); - this._domObserver.observe(document, { - attributes: true, - childList: true, - characterData: true, - subtree: true - }); - } - } - } -}; - - -/** - * Stops polling for intersection changes. - * @private - */ -IntersectionObserver.prototype._unmonitorIntersections = function() { - if (this._monitoringIntersections) { - this._monitoringIntersections = false; - - clearInterval(this._monitoringInterval); - this._monitoringInterval = null; - - removeEvent(window, 'resize', this._checkForIntersections, true); - removeEvent(document, 'scroll', this._checkForIntersections, true); - - if (this._domObserver) { - this._domObserver.disconnect(); - this._domObserver = null; - } - } -}; - - -/** - * Scans each observation target for intersection changes and adds them - * to the internal entries queue. If new entries are found, it - * schedules the callback to be invoked. - * @private - */ -IntersectionObserver.prototype._checkForIntersections = function() { - var rootIsInDom = this._rootIsInDom(); - var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect(); - - this._observationTargets.forEach(function(item) { - var target = item.element; - var targetRect = getBoundingClientRect(target); - var rootContainsTarget = this._rootContainsTarget(target); - var oldEntry = item.entry; - var intersectionRect = rootIsInDom && rootContainsTarget && - this._computeTargetAndRootIntersection(target, rootRect); - - var newEntry = item.entry = new IntersectionObserverEntry({ - time: now(), - target: target, - boundingClientRect: targetRect, - rootBounds: rootRect, - intersectionRect: intersectionRect - }); - - if (!oldEntry) { - this._queuedEntries.push(newEntry); - } else if (rootIsInDom && rootContainsTarget) { - // If the new entry intersection ratio has crossed any of the - // thresholds, add a new entry. - if (this._hasCrossedThreshold(oldEntry, newEntry)) { - this._queuedEntries.push(newEntry); - } - } else { - // If the root is not in the DOM or target is not contained within - // root but the previous entry for this target had an intersection, - // add a new record indicating removal. - if (oldEntry && oldEntry.isIntersecting) { - this._queuedEntries.push(newEntry); - } - } - }, this); - - if (this._queuedEntries.length) { - this._callback(this.takeRecords(), this); - } -}; - - -/** - * Accepts a target and root rect computes the intersection between then - * following the algorithm in the spec. - * TODO(philipwalton): at this time clip-path is not considered. - * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo - * @param {Element} target The target DOM element - * @param {Object} rootRect The bounding rect of the root after being - * expanded by the rootMargin value. - * @return {?Object} The final intersection rect object or undefined if no - * intersection is found. - * @private - */ -IntersectionObserver.prototype._computeTargetAndRootIntersection = - function(target, rootRect) { - - // If the element isn't displayed, an intersection can't happen. - if (window.getComputedStyle(target).display == 'none') return; - - var targetRect = getBoundingClientRect(target); - var intersectionRect = targetRect; - var parent = getParentNode(target); - var atRoot = false; - - while (!atRoot) { - var parentRect = null; - var parentComputedStyle = parent.nodeType == 1 ? - window.getComputedStyle(parent) : {}; - - // If the parent isn't displayed, an intersection can't happen. - if (parentComputedStyle.display == 'none') return; - - if (parent == this.root || parent == document) { - atRoot = true; - parentRect = rootRect; - } else { - // If the element has a non-visible overflow, and it's not the - // or element, update the intersection rect. - // Note: and cannot be clipped to a rect that's not also - // the document rect, so no need to compute a new intersection. - if (parent != document.body && - parent != document.documentElement && - parentComputedStyle.overflow != 'visible') { - parentRect = getBoundingClientRect(parent); - } - } - - // If either of the above conditionals set a new parentRect, - // calculate new intersection data. - if (parentRect) { - intersectionRect = computeRectIntersection(parentRect, intersectionRect); - - if (!intersectionRect) break; - } - parent = getParentNode(parent); - } - return intersectionRect; -}; - - -/** - * Returns the root rect after being expanded by the rootMargin value. - * @return {Object} The expanded root rect. - * @private - */ -IntersectionObserver.prototype._getRootRect = function() { - var rootRect; - if (this.root) { - rootRect = getBoundingClientRect(this.root); - } else { - // Use / instead of window since scroll bars affect size. - var html = document.documentElement; - var body = document.body; - rootRect = { - top: 0, - left: 0, - right: html.clientWidth || body.clientWidth, - width: html.clientWidth || body.clientWidth, - bottom: html.clientHeight || body.clientHeight, - height: html.clientHeight || body.clientHeight - }; - } - return this._expandRectByRootMargin(rootRect); -}; - - -/** - * Accepts a rect and expands it by the rootMargin value. - * @param {Object} rect The rect object to expand. - * @return {Object} The expanded rect. - * @private - */ -IntersectionObserver.prototype._expandRectByRootMargin = function(rect) { - var margins = this._rootMarginValues.map(function(margin, i) { - return margin.unit == 'px' ? margin.value : - margin.value * (i % 2 ? rect.width : rect.height) / 100; - }); - var newRect = { - top: rect.top - margins[0], - right: rect.right + margins[1], - bottom: rect.bottom + margins[2], - left: rect.left - margins[3] - }; - newRect.width = newRect.right - newRect.left; - newRect.height = newRect.bottom - newRect.top; - - return newRect; -}; - - -/** - * Accepts an old and new entry and returns true if at least one of the - * threshold values has been crossed. - * @param {?IntersectionObserverEntry} oldEntry The previous entry for a - * particular target element or null if no previous entry exists. - * @param {IntersectionObserverEntry} newEntry The current entry for a - * particular target element. - * @return {boolean} Returns true if a any threshold has been crossed. - * @private - */ -IntersectionObserver.prototype._hasCrossedThreshold = - function(oldEntry, newEntry) { - - // To make comparing easier, an entry that has a ratio of 0 - // but does not actually intersect is given a value of -1 - var oldRatio = oldEntry && oldEntry.isIntersecting ? - oldEntry.intersectionRatio || 0 : -1; - var newRatio = newEntry.isIntersecting ? - newEntry.intersectionRatio || 0 : -1; - - // Ignore unchanged ratios - if (oldRatio === newRatio) return; - - for (var i = 0; i < this.thresholds.length; i++) { - var threshold = this.thresholds[i]; - - // Return true if an entry matches a threshold or if the new ratio - // and the old ratio are on the opposite sides of a threshold. - if (threshold == oldRatio || threshold == newRatio || - threshold < oldRatio !== threshold < newRatio) { - return true; - } - } -}; - - -/** - * Returns whether or not the root element is an element and is in the DOM. - * @return {boolean} True if the root element is an element and is in the DOM. - * @private - */ -IntersectionObserver.prototype._rootIsInDom = function() { - return !this.root || containsDeep(document, this.root); -}; - - -/** - * Returns whether or not the target element is a child of root. - * @param {Element} target The target element to check. - * @return {boolean} True if the target element is a child of root. - * @private - */ -IntersectionObserver.prototype._rootContainsTarget = function(target) { - return containsDeep(this.root || document, target); -}; - - -/** - * Adds the instance to the global IntersectionObserver registry if it isn't - * already present. - * @private - */ -IntersectionObserver.prototype._registerInstance = function() { - if (registry.indexOf(this) < 0) { - registry.push(this); - } -}; - - -/** - * Removes the instance from the global IntersectionObserver registry. - * @private - */ -IntersectionObserver.prototype._unregisterInstance = function() { - var index = registry.indexOf(this); - if (index != -1) registry.splice(index, 1); -}; - - -/** - * Returns the result of the performance.now() method or null in browsers - * that don't support the API. - * @return {number} The elapsed time since the page was requested. - */ -function now() { - return window.performance && performance.now && performance.now(); -} - - -/** - * Throttles a function and delays its execution, so it's only called at most - * once within a given time period. - * @param {Function} fn The function to throttle. - * @param {number} timeout The amount of time that must pass before the - * function can be called again. - * @return {Function} The throttled function. - */ -function throttle(fn, timeout) { - var timer = null; - return function () { - if (!timer) { - timer = setTimeout(function() { - fn(); - timer = null; - }, timeout); - } - }; -} - - -/** - * Adds an event handler to a DOM node ensuring cross-browser compatibility. - * @param {Node} node The DOM node to add the event handler to. - * @param {string} event The event name. - * @param {Function} fn The event handler to add. - * @param {boolean} opt_useCapture Optionally adds the even to the capture - * phase. Note: this only works in modern browsers. - */ -function addEvent(node, event, fn, opt_useCapture) { - if (typeof node.addEventListener == 'function') { - node.addEventListener(event, fn, opt_useCapture || false); - } - else if (typeof node.attachEvent == 'function') { - node.attachEvent('on' + event, fn); - } -} - - -/** - * Removes a previously added event handler from a DOM node. - * @param {Node} node The DOM node to remove the event handler from. - * @param {string} event The event name. - * @param {Function} fn The event handler to remove. - * @param {boolean} opt_useCapture If the event handler was added with this - * flag set to true, it should be set to true here in order to remove it. - */ -function removeEvent(node, event, fn, opt_useCapture) { - if (typeof node.removeEventListener == 'function') { - node.removeEventListener(event, fn, opt_useCapture || false); - } - else if (typeof node.detatchEvent == 'function') { - node.detatchEvent('on' + event, fn); - } -} - - -/** - * Returns the intersection between two rect objects. - * @param {Object} rect1 The first rect. - * @param {Object} rect2 The second rect. - * @return {?Object} The intersection rect or undefined if no intersection - * is found. - */ -function computeRectIntersection(rect1, rect2) { - var top = Math.max(rect1.top, rect2.top); - var bottom = Math.min(rect1.bottom, rect2.bottom); - var left = Math.max(rect1.left, rect2.left); - var right = Math.min(rect1.right, rect2.right); - var width = right - left; - var height = bottom - top; - - return (width >= 0 && height >= 0) && { - top: top, - bottom: bottom, - left: left, - right: right, - width: width, - height: height - }; -} - - -/** - * Shims the native getBoundingClientRect for compatibility with older IE. - * @param {Element} el The element whose bounding rect to get. - * @return {Object} The (possibly shimmed) rect of the element. - */ -function getBoundingClientRect(el) { - var rect; - - try { - rect = el.getBoundingClientRect(); - } catch (err) { - // Ignore Windows 7 IE11 "Unspecified error" - // https://github.com/w3c/IntersectionObserver/pull/205 - } - - if (!rect) return getEmptyRect(); - - // Older IE - if (!(rect.width && rect.height)) { - rect = { - top: rect.top, - right: rect.right, - bottom: rect.bottom, - left: rect.left, - width: rect.right - rect.left, - height: rect.bottom - rect.top - }; - } - return rect; -} - - -/** - * Returns an empty rect object. An empty rect is returned when an element - * is not in the DOM. - * @return {Object} The empty rect. - */ -function getEmptyRect() { - return { - top: 0, - bottom: 0, - left: 0, - right: 0, - width: 0, - height: 0 - }; -} - -/** - * Checks to see if a parent element contains a child element (including inside - * shadow DOM). - * @param {Node} parent The parent element. - * @param {Node} child The child element. - * @return {boolean} True if the parent node contains the child node. - */ -function containsDeep(parent, child) { - var node = child; - while (node) { - if (node == parent) return true; - - node = getParentNode(node); - } - return false; -} - - -/** - * Gets the parent node of an element or its host element if the parent node - * is a shadow root. - * @param {Node} node The node whose parent to get. - * @return {Node|null} The parent node or null if no parent exists. - */ -function getParentNode(node) { - var parent = node.parentNode; - - if (parent && parent.nodeType == 11 && parent.host) { - // If the parent is a shadow root, return the host element. - return parent.host; - } - - if (parent && parent.assignedSlot) { - // If the parent is distributed in a , return the parent of a slot. - return parent.assignedSlot.parentNode; - } - - return parent; -} - - -// Exposes the constructors globally. -window.IntersectionObserver = IntersectionObserver; -window.IntersectionObserverEntry = IntersectionObserverEntry; - -}()); - - -/***/ }), -/* 510 */ -/*!***********************************************!*\ - !*** ./vendors/modernizr/modernizr-custom.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/*! - * modernizr v3.3.1 - * Build http://modernizr.com/download?-backgroundsize-boxshadow-cssanimations-csstransitions-rgba-textshadow-setclasses-dontmin - * - * Copyright (c) - * Faruk Ates - * Paul Irish - * Alex Sexton - * Ryan Seddon - * Patrick Kettner - * Stu Cox - * Richard Herrera - - * MIT License - */ - -/* - * Modernizr tests which native CSS3 and HTML5 features are available in the - * current UA and makes the results available to you in two ways: as properties on - * a global `Modernizr` object, and as classes on the `` element. This - * information allows you to progressively enhance your pages with a granular level - * of control over the experience. -*/ - -;(function(window, document, undefined){ - var classes = []; - - - var tests = []; - - - /** - * - * ModernizrProto is the constructor for Modernizr - * - * @class - * @access public - */ - - var ModernizrProto = { - // The current version, dummy - _version: '3.3.1', - - // Any settings that don't work as separate modules - // can go in here as configuration. - _config: { - 'classPrefix': '', - 'enableClasses': true, - 'enableJSClass': true, - 'usePrefixes': true - }, - - // Queue of tests - _q: [], - - // Stub these for people who are listening - on: function(test, cb) { - // I don't really think people should do this, but we can - // safe guard it a bit. - // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests. - // This is in case people listen to synchronous tests. I would leave it out, - // but the code to *disallow* sync tests in the real version of this - // function is actually larger than this. - var self = this; - setTimeout(function() { - cb(self[test]); - }, 0); - }, - - addTest: function(name, fn, options) { - tests.push({name: name, fn: fn, options: options}); - }, - - addAsyncTest: function(fn) { - tests.push({name: null, fn: fn}); - } - }; - - - - // Fake some of Object.create so we can force non test results to be non "own" properties. - var Modernizr = function() {}; - Modernizr.prototype = ModernizrProto; - - // Leak modernizr globally when you `require` it rather than force it here. - // Overwrite name so constructor name is nicer :D - Modernizr = new Modernizr(); - - - - /** - * is returns a boolean if the typeof an obj is exactly type. - * - * @access private - * @function is - * @param {*} obj - A thing we want to check the type of - * @param {string} type - A string to compare the typeof against - * @returns {boolean} - */ - - function is(obj, type) { - return typeof obj === type; - } - ; - - /** - * Run through all tests and detect their support in the current UA. - * - * @access private - */ - - function testRunner() { - var featureNames; - var feature; - var aliasIdx; - var result; - var nameIdx; - var featureName; - var featureNameSplit; - - for (var featureIdx in tests) { - if (tests.hasOwnProperty(featureIdx)) { - featureNames = []; - feature = tests[featureIdx]; - // run the test, throw the return value into the Modernizr, - // then based on that boolean, define an appropriate className - // and push it into an array of classes we'll join later. - // - // If there is no name, it's an 'async' test that is run, - // but not directly added to the object. That should - // be done with a post-run addTest call. - if (feature.name) { - featureNames.push(feature.name.toLowerCase()); - - if (feature.options && feature.options.aliases && feature.options.aliases.length) { - // Add all the aliases into the names list - for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) { - featureNames.push(feature.options.aliases[aliasIdx].toLowerCase()); - } - } - } - - // Run the test, or use the raw value if it's not a function - result = is(feature.fn, 'function') ? feature.fn() : feature.fn; - - - // Set each of the names on the Modernizr object - for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) { - featureName = featureNames[nameIdx]; - // Support dot properties as sub tests. We don't do checking to make sure - // that the implied parent tests have been added. You must call them in - // order (either in the test, or make the parent test a dependency). - // - // Cap it to TWO to make the logic simple and because who needs that kind of subtesting - // hashtag famous last words - featureNameSplit = featureName.split('.'); - - if (featureNameSplit.length === 1) { - Modernizr[featureNameSplit[0]] = result; - } else { - // cast to a Boolean, if not one already - /* jshint -W053 */ - if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) { - Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]); - } - - Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result; - } - - classes.push((result ? '' : 'no-') + featureNameSplit.join('-')); - } - } - } - } - ; - - /** - * docElement is a convenience wrapper to grab the root element of the document - * - * @access private - * @returns {HTMLElement|SVGElement} The root element of the document - */ - - var docElement = document.documentElement; - - - /** - * A convenience helper to check if the document we are running in is an SVG document - * - * @access private - * @returns {boolean} - */ - - var isSVG = docElement.nodeName.toLowerCase() === 'svg'; - - - /** - * setClasses takes an array of class names and adds them to the root element - * - * @access private - * @function setClasses - * @param {string[]} classes - Array of class names - */ - - // Pass in an and array of class names, e.g.: - // ['no-webp', 'borderradius', ...] - function setClasses(classes) { - var className = docElement.className; - var classPrefix = Modernizr._config.classPrefix || ''; - - if (isSVG) { - className = className.baseVal; - } - - // Change `no-js` to `js` (independently of the `enableClasses` option) - // Handle classPrefix on this too - if (Modernizr._config.enableJSClass) { - var reJS = new RegExp('(^|\\s)' + classPrefix + 'no-js(\\s|$)'); - className = className.replace(reJS, '$1' + classPrefix + 'js$2'); - } - - if (Modernizr._config.enableClasses) { - // Add the new classes - className += ' ' + classPrefix + classes.join(' ' + classPrefix); - isSVG ? docElement.className.baseVal = className : docElement.className = className; - } - - } - - ; - - /** - * createElement is a convenience wrapper around document.createElement. Since we - * use createElement all over the place, this allows for (slightly) smaller code - * as well as abstracting away issues with creating elements in contexts other than - * HTML documents (e.g. SVG documents). - * - * @access private - * @function createElement - * @returns {HTMLElement|SVGElement} An HTML or SVG element - */ - - function createElement() { - if (typeof document.createElement !== 'function') { - // This is the case in IE7, where the type of createElement is "object". - // For this reason, we cannot call apply() as Object is not a Function. - return document.createElement(arguments[0]); - } else if (isSVG) { - return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]); - } else { - return document.createElement.apply(document, arguments); - } - } - - ; -/*! -{ - "name": "CSS rgba", - "caniuse": "css3-colors", - "property": "rgba", - "tags": ["css"], - "notes": [{ - "name": "CSSTricks Tutorial", - "href": "https://css-tricks.com/rgba-browser-support/" - }] -} -!*/ - - Modernizr.addTest('rgba', function() { - var style = createElement('a').style; - style.cssText = 'background-color:rgba(150,255,150,.5)'; - - return ('' + style.backgroundColor).indexOf('rgba') > -1; - }); - - - - /** - * contains checks to see if a string contains another string - * - * @access private - * @function contains - * @param {string} str - The string we want to check for substrings - * @param {string} substr - The substring we want to search the first string for - * @returns {boolean} - */ - - function contains(str, substr) { - return !!~('' + str).indexOf(substr); - } - - ; - - /** - * cssToDOM takes a kebab-case string and converts it to camelCase - * e.g. box-sizing -> boxSizing - * - * @access private - * @function cssToDOM - * @param {string} name - String name of kebab-case prop we want to convert - * @returns {string} The camelCase version of the supplied name - */ - - function cssToDOM(name) { - return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) { - return m1 + m2.toUpperCase(); - }).replace(/^-/, ''); - } - ; - - /** - * If the browsers follow the spec, then they would expose vendor-specific style as: - * elem.style.WebkitBorderRadius - * instead of something like the following, which would be technically incorrect: - * elem.style.webkitBorderRadius - - * Webkit ghosts their properties in lowercase but Opera & Moz do not. - * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+ - * erik.eae.net/archives/2008/03/10/21.48.10/ - - * More here: github.com/Modernizr/Modernizr/issues/issue/21 - * - * @access private - * @returns {string} The string representing the vendor-specific style properties - */ - - var omPrefixes = 'Moz O ms Webkit'; - - - var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []); - ModernizrProto._cssomPrefixes = cssomPrefixes; - - - /** - * List of JavaScript DOM values used for tests - * - * @memberof Modernizr - * @name Modernizr._domPrefixes - * @optionName Modernizr._domPrefixes - * @optionProp domPrefixes - * @access public - * @example - * - * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather - * than kebab-case properties, all properties are their Capitalized variant - * - * ```js - * Modernizr._domPrefixes === [ "Moz", "O", "ms", "Webkit" ]; - * ``` - */ - - var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []); - ModernizrProto._domPrefixes = domPrefixes; - - - /** - * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill. - * - * @access private - * @function fnBind - * @param {function} fn - a function you want to change `this` reference to - * @param {object} that - the `this` you want to call the function with - * @returns {function} The wrapped version of the supplied function - */ - - function fnBind(fn, that) { - return function() { - return fn.apply(that, arguments); - }; - } - - ; - - /** - * testDOMProps is a generic DOM property test; if a browser supports - * a certain property, it won't return undefined for it. - * - * @access private - * @function testDOMProps - * @param {array.} props - An array of properties to test for - * @param {object} obj - An object or Element you want to use to test the parameters again - * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check - */ - function testDOMProps(props, obj, elem) { - var item; - - for (var i in props) { - if (props[i] in obj) { - - // return the property name as a string - if (elem === false) { - return props[i]; - } - - item = obj[props[i]]; - - // let's bind a function - if (is(item, 'function')) { - // bind to obj unless overriden - return fnBind(item, elem || obj); - } - - // return the unbound function or obj or value - return item; - } - } - return false; - } - - ; - - /** - * Create our "modernizr" element that we do most feature tests on. - * - * @access private - */ - - var modElem = { - elem: createElement('modernizr') - }; - - // Clean up this element - Modernizr._q.push(function() { - delete modElem.elem; - }); - - - - var mStyle = { - style: modElem.elem.style - }; - - // kill ref for gc, must happen before mod.elem is removed, so we unshift on to - // the front of the queue. - Modernizr._q.unshift(function() { - delete mStyle.style; - }); - - - - /** - * domToCSS takes a camelCase string and converts it to kebab-case - * e.g. boxSizing -> box-sizing - * - * @access private - * @function domToCSS - * @param {string} name - String name of camelCase prop we want to convert - * @returns {string} The kebab-case version of the supplied name - */ - - function domToCSS(name) { - return name.replace(/([A-Z])/g, function(str, m1) { - return '-' + m1.toLowerCase(); - }).replace(/^ms-/, '-ms-'); - } - ; - - /** - * getBody returns the body of a document, or an element that can stand in for - * the body if a real body does not exist - * - * @access private - * @function getBody - * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an - * artificially created element that stands in for the body - */ - - function getBody() { - // After page load injecting a fake body doesn't work so check if body exists - var body = document.body; - - if (!body) { - // Can't use the real body create a fake one. - body = createElement(isSVG ? 'svg' : 'body'); - body.fake = true; - } - - return body; - } - - ; - - /** - * injectElementWithStyles injects an element with style element and some CSS rules - * - * @access private - * @function injectElementWithStyles - * @param {string} rule - String representing a css rule - * @param {function} callback - A function that is used to test the injected element - * @param {number} [nodes] - An integer representing the number of additional nodes you want injected - * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes - * @returns {boolean} - */ - - function injectElementWithStyles(rule, callback, nodes, testnames) { - var mod = 'modernizr'; - var style; - var ret; - var node; - var docOverflow; - var div = createElement('div'); - var body = getBody(); - - if (parseInt(nodes, 10)) { - // In order not to give false positives we create a node for each test - // This also allows the method to scale for unspecified uses - while (nodes--) { - node = createElement('div'); - node.id = testnames ? testnames[nodes] : mod + (nodes + 1); - div.appendChild(node); - } - } - - style = createElement('style'); - style.type = 'text/css'; - style.id = 's' + mod; - - // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody. - // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270 - (!body.fake ? div : body).appendChild(style); - body.appendChild(div); - - if (style.styleSheet) { - style.styleSheet.cssText = rule; - } else { - style.appendChild(document.createTextNode(rule)); - } - div.id = mod; - - if (body.fake) { - //avoid crashing IE8, if background image is used - body.style.background = ''; - //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible - body.style.overflow = 'hidden'; - docOverflow = docElement.style.overflow; - docElement.style.overflow = 'hidden'; - docElement.appendChild(body); - } - - ret = callback(div, rule); - // If this is done after page load we don't want to remove the body so check if body exists - if (body.fake) { - body.parentNode.removeChild(body); - docElement.style.overflow = docOverflow; - // Trigger layout so kinetic scrolling isn't disabled in iOS6+ - docElement.offsetHeight; - } else { - div.parentNode.removeChild(div); - } - - return !!ret; - - } - - ; - - /** - * nativeTestProps allows for us to use native feature detection functionality if available. - * some prefixed form, or false, in the case of an unsupported rule - * - * @access private - * @function nativeTestProps - * @param {array} props - An array of property names - * @param {string} value - A string representing the value we want to check via @supports - * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise - */ - - // Accepts a list of property names and a single value - // Returns `undefined` if native detection not available - function nativeTestProps(props, value) { - var i = props.length; - // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface - if ('CSS' in window && 'supports' in window.CSS) { - // Try every prefixed variant of the property - while (i--) { - if (window.CSS.supports(domToCSS(props[i]), value)) { - return true; - } - } - return false; - } - // Otherwise fall back to at-rule (for Opera 12.x) - else if ('CSSSupportsRule' in window) { - // Build a condition string for every prefixed variant - var conditionText = []; - while (i--) { - conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')'); - } - conditionText = conditionText.join(' or '); - return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) { - return getComputedStyle(node, null).position == 'absolute'; - }); - } - return undefined; - } - ; - - // testProps is a generic CSS / DOM property test. - - // In testing support for a given CSS property, it's legit to test: - // `elem.style[styleName] !== undefined` - // If the property is supported it will return an empty string, - // if unsupported it will return undefined. - - // We'll take advantage of this quick test and skip setting a style - // on our modernizr element, but instead just testing undefined vs - // empty string. - - // Property names can be provided in either camelCase or kebab-case. - - function testProps(props, prefixed, value, skipValueTest) { - skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest; - - // Try native detect first - if (!is(value, 'undefined')) { - var result = nativeTestProps(props, value); - if (!is(result, 'undefined')) { - return result; - } - } - - // Otherwise do it properly - var afterInit, i, propsLength, prop, before; - - // If we don't have a style element, that means we're running async or after - // the core tests, so we'll need to create our own elements to use - - // inside of an SVG element, in certain browsers, the `style` element is only - // defined for valid tags. Therefore, if `modernizr` does not have one, we - // fall back to a less used element and hope for the best. - var elems = ['modernizr', 'tspan']; - while (!mStyle.style) { - afterInit = true; - mStyle.modElem = createElement(elems.shift()); - mStyle.style = mStyle.modElem.style; - } - - // Delete the objects if we created them. - function cleanElems() { - if (afterInit) { - delete mStyle.style; - delete mStyle.modElem; - } - } - - propsLength = props.length; - for (i = 0; i < propsLength; i++) { - prop = props[i]; - before = mStyle.style[prop]; - - if (contains(prop, '-')) { - prop = cssToDOM(prop); - } - - if (mStyle.style[prop] !== undefined) { - - // If value to test has been passed in, do a set-and-check test. - // 0 (integer) is a valid property value, so check that `value` isn't - // undefined, rather than just checking it's truthy. - if (!skipValueTest && !is(value, 'undefined')) { - - // Needs a try catch block because of old IE. This is slow, but will - // be avoided in most cases because `skipValueTest` will be used. - try { - mStyle.style[prop] = value; - } catch (e) {} - - // If the property value has changed, we assume the value used is - // supported. If `value` is empty string, it'll fail here (because - // it hasn't changed), which matches how browsers have implemented - // CSS.supports() - if (mStyle.style[prop] != before) { - cleanElems(); - return prefixed == 'pfx' ? prop : true; - } - } - // Otherwise just return true, or the property name if this is a - // `prefixed()` call - else { - cleanElems(); - return prefixed == 'pfx' ? prop : true; - } - } - } - cleanElems(); - return false; - } - - ; - - /** - * testProp() investigates whether a given style property is recognized - * Property names can be provided in either camelCase or kebab-case. - * - * @memberof Modernizr - * @name Modernizr.testProp - * @access public - * @optionName Modernizr.testProp() - * @optionProp testProp - * @function testProp - * @param {string} prop - Name of the CSS property to check - * @param {string} [value] - Name of the CSS value to check - * @param {boolean} [useValue] - Whether or not to check the value if @supports isn't supported - * @returns {boolean} - * @example - * - * Just like [testAllProps](#modernizr-testallprops), only it does not check any vendor prefixed - * version of the string. - * - * Note that the property name must be provided in camelCase (e.g. boxSizing not box-sizing) - * - * ```js - * Modernizr.testProp('pointerEvents') // true - * ``` - * - * You can also provide a value as an optional second argument to check if a - * specific value is supported - * - * ```js - * Modernizr.testProp('pointerEvents', 'none') // true - * Modernizr.testProp('pointerEvents', 'penguin') // false - * ``` - */ - - var testProp = ModernizrProto.testProp = function(prop, value, useValue) { - return testProps([prop], undefined, value, useValue); - }; - -/*! -{ - "name": "CSS textshadow", - "property": "textshadow", - "caniuse": "css-textshadow", - "tags": ["css"], - "knownBugs": ["FF3.0 will false positive on this test"] -} -!*/ - - Modernizr.addTest('textshadow', testProp('textShadow', '1px 1px')); - - - /** - * testPropsAll tests a list of DOM properties we want to check against. - * We specify literally ALL possible (known and/or likely) properties on - * the element including the non-vendor prefixed one, for forward- - * compatibility. - * - * @access private - * @function testPropsAll - * @param {string} prop - A string of the property to test for - * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip - * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against - * @param {string} [value] - A string of a css value - * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set - */ - function testPropsAll(prop, prefixed, elem, value, skipValueTest) { - - var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), - props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); - - // did they call .prefixed('boxSizing') or are we just testing a prop? - if (is(prefixed, 'string') || is(prefixed, 'undefined')) { - return testProps(props, prefixed, value, skipValueTest); - - // otherwise, they called .prefixed('requestAnimationFrame', window[, elem]) - } else { - props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); - return testDOMProps(props, prefixed, elem); - } - } - - // Modernizr.testAllProps() investigates whether a given style property, - // or any of its vendor-prefixed variants, is recognized - // - // Note that the property names must be provided in the camelCase variant. - // Modernizr.testAllProps('boxSizing') - ModernizrProto.testAllProps = testPropsAll; - - - - /** - * testAllProps determines whether a given CSS property is supported in the browser - * - * @memberof Modernizr - * @name Modernizr.testAllProps - * @optionName Modernizr.testAllProps() - * @optionProp testAllProps - * @access public - * @function testAllProps - * @param {string} prop - String naming the property to test (either camelCase or kebab-case) - * @param {string} [value] - String of the value to test - * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection - * @example - * - * testAllProps determines whether a given CSS property, in some prefixed form, - * is supported by the browser. - * - * ```js - * testAllProps('boxSizing') // true - * ``` - * - * It can optionally be given a CSS value in string form to test if a property - * value is valid - * - * ```js - * testAllProps('display', 'block') // true - * testAllProps('display', 'penguin') // false - * ``` - * - * A boolean can be passed as a third parameter to skip the value check when - * native detection (@supports) isn't available. - * - * ```js - * testAllProps('shapeOutside', 'content-box', true); - * ``` - */ - - function testAllProps(prop, value, skipValueTest) { - return testPropsAll(prop, undefined, undefined, value, skipValueTest); - } - ModernizrProto.testAllProps = testAllProps; - -/*! -{ - "name": "CSS Animations", - "property": "cssanimations", - "caniuse": "css-animation", - "polyfills": ["transformie", "csssandpaper"], - "tags": ["css"], - "warnings": ["Android < 4 will pass this test, but can only animate a single property at a time"], - "notes": [{ - "name" : "Article: 'Dispelling the Android CSS animation myths'", - "href": "https://goo.gl/OGw5Gm" - }] -} -!*/ -/* DOC -Detects whether or not elements can be animated using CSS -*/ - - Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true)); - -/*! -{ - "name": "Background Size", - "property": "backgroundsize", - "tags": ["css"], - "knownBugs": ["This will false positive in Opera Mini - https://github.com/Modernizr/Modernizr/issues/396"], - "notes": [{ - "name": "Related Issue", - "href": "https://github.com/Modernizr/Modernizr/issues/396" - }] -} -!*/ - - Modernizr.addTest('backgroundsize', testAllProps('backgroundSize', '100%', true)); - -/*! -{ - "name": "CSS Transitions", - "property": "csstransitions", - "caniuse": "css-transitions", - "tags": ["css"] -} -!*/ - - Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true)); - -/*! -{ - "name": "Box Shadow", - "property": "boxshadow", - "caniuse": "css-boxshadow", - "tags": ["css"], - "knownBugs": [ - "WebOS false positives on this test.", - "The Kindle Silk browser false positives" - ] -} -!*/ - - Modernizr.addTest('boxshadow', testAllProps('boxShadow', '1px 1px', true)); - - - // Run each test - testRunner(); - - // Remove the "no-js" class if it exists - setClasses(classes); - - delete ModernizrProto.addTest; - delete ModernizrProto.addAsyncTest; - - // Run the things that are supposed to run after the tests - for (var i = 0; i < Modernizr._q.length; i++) { - Modernizr._q[i](); - } - - // Leak Modernizr namespace - window.Modernizr = Modernizr; - - -; - -})(window, document); - -/***/ }), -/* 511 */ -/*!******************************!*\ - !*** ./dev/Common/Booter.js ***! - \******************************/ -/*! no exports provided */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! progressJs */ 98); -/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(progressJs__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Jassl */ 106); -/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/RainLoop */ 146); - - - - - - - - - - -var RL_APP_DATA_STORAGE = null; -/* eslint-disable camelcase,spaced-comment */ - -window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah = function () { - return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__[/* getHash */ "c"])(); -}; - -window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_set = function () { - return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__[/* setHash */ "e"])(); -}; - -window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_clear = function () { - return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__[/* clearHash */ "b"])(); -}; - -window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_data = function () { - return RL_APP_DATA_STORAGE; -}; - -var useJsNextBundle = function () { - // try { - // - // (function() { - // eval(` - // // let + const - //const x = 5; let y = 4; var z = 4; - // - // // Arrow Function - //const f = () => 'rainloop'; - // - // // Default + Rest + Spread - //const d = (test = 1, ...t) => 'rainloop'; - //d(...[1, 2, 3]); - // - //// Destructuring - //let [a, b] = [1, 2]; - //({a, b} = {a: 1, b: 2}); - // - //// Class - //class Q1 { constructor() {} } - // - //// Class extends + super - //class Q2 extends Q1 { constructor() { super() } } - // - //`); - // }()); - // - // return true; - // } - // catch (e) {} - return false; -}(); -/* eslint-enable */ - -/** - * @param {string} id - * @param {string} name - * @returns {string} - */ - - -function getComputedStyle(id, name) { - var element = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById(id); - return element && element.currentStyle ? element.currentStyle[name] : window__WEBPACK_IMPORTED_MODULE_6___default.a.getComputedStyle ? window__WEBPACK_IMPORTED_MODULE_6___default.a.getComputedStyle(element, null).getPropertyValue(name) : null; -} -/** - * @param {string} styles - * @returns {void} - */ - - -function includeStyle(styles) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.document.write(unescape('%3Csty' + 'le%3E' + styles + '"%3E%3C/' + 'sty' + 'le%3E')); // eslint-disable-line no-useless-concat -} -/** - * @param {string} src - * @returns {void} - */ - - -function includeScr(src) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.document.write(unescape('%3Csc' + 'ript type="text/jav' + 'ascr' + 'ipt" data-cfasync="false" sr' + 'c="' + src + '"%3E%3C/' + 'scr' + 'ipt%3E')); // eslint-disable-line no-useless-concat -} -/** - * @returns {boolean} - */ - - -function includeLayout() { - var app = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-app'); - - __webpack_require__(/*! Styles/@Boot.css */ 512); - - if (app) { - var layout = __webpack_require__(/*! Html/Layout.html */ 516); - - app.innerHTML = ((layout && layout.default ? layout.default : layout) || '').replace(/[\r\n\t]+/g, ''); - return true; - } - - return false; -} -/** - * @param {boolean} admin = false - * @param {boolean} mobile = false - * @param {boolean} mobileDevice = false - * @returns {void} - */ - - -function includeAppScr(_ref) { - var _ref$admin = _ref.admin, - admin = _ref$admin === void 0 ? false : _ref$admin, - _ref$mobile = _ref.mobile, - mobile = _ref$mobile === void 0 ? false : _ref$mobile, - _ref$mobileDevice = _ref.mobileDevice, - mobileDevice = _ref$mobileDevice === void 0 ? false : _ref$mobileDevice; - var src = './?/'; - src += admin ? 'Admin' : ''; - src += 'AppData@'; - src += mobile ? 'mobile' : 'no-mobile'; - src += mobileDevice ? '-1' : '-0'; - src += '/'; - includeScr(src + (window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah ? window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah() || '0' : '0') + '/' + window__WEBPACK_IMPORTED_MODULE_6___default.a.Math.random().toString().substr(2) + '/'); -} -/** - * @returns {object} - */ - - -function getRainloopBootData() { - var result = {}; - var meta = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('app-boot-data'); - - if (meta && meta.getAttribute) { - result = JSON.parse(meta.getAttribute('content')) || {}; - } - - return result; -} -/** - * @param {string} additionalError - * @returns {void} - */ - - -function showError(additionalError) { - var oR = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading'), - oL = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading-error'), - oLA = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading-error-additional'); - - if (oR) { - oR.style.display = 'none'; - } - - if (oL) { - oL.style.display = 'block'; - } - - if (oLA && additionalError) { - oLA.style.display = 'block'; - oLA.innerHTML = additionalError; - } - - if (progressJs__WEBPACK_IMPORTED_MODULE_7___default.a) { - progressJs__WEBPACK_IMPORTED_MODULE_7___default.a.set(100).end(); - } -} -/** - * @param {string} description - * @returns {void} - */ - - -function showDescriptionAndLoading(description) { - var oE = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading'), - oElDesc = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading-desc'); - - if (oElDesc && description) { - oElDesc.innerHTML = description; - } - - if (oE && oE.style) { - oE.style.opacity = 0; - window__WEBPACK_IMPORTED_MODULE_6___default.a.setTimeout(function () { - oE.style.opacity = 1; - }, 300); - } -} -/** - * @param {boolean} withError - * @param {string} additionalError - * @returns {void} - */ - - -function runMainBoot(withError, additionalError) { - if (window__WEBPACK_IMPORTED_MODULE_6___default.a.__APP_BOOT && !withError) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.__APP_BOOT(function () { - showError(additionalError); - }); - } else { - showError(additionalError); - } -} -/** - * @returns {void} - */ - - -function runApp() { - var appData = window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_data(); - - if (Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"] && progressJs__WEBPACK_IMPORTED_MODULE_7___default.a && appData && appData.TemplatesLink && appData.LangLink && appData.StaticLibJsLink && appData.StaticAppJsLink && appData.StaticAppJsNextLink && appData.StaticEditorJsLink) { - var p = progressJs__WEBPACK_IMPORTED_MODULE_7___default.a; - p.setOptions({ - theme: 'rainloop' - }); - p.start().set(5); - - var libs = function libs() { - return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.StaticLibJsLink).then(function () { - if (window__WEBPACK_IMPORTED_MODULE_6___default.a.$) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.$('#rl-check').remove(); - - if (appData.IncludeBackground) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.$('#rl-bg').attr('style', 'background-image: none !important;').backstretch(appData.IncludeBackground.replace('{{USER}}', window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah ? window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah() || '0' : '0'), { - fade: 100, - centeredX: true, - centeredY: true - }).removeAttr('style'); - } - } - }); - }; - - libs().then(function () { - p.set(20); - return window__WEBPACK_IMPORTED_MODULE_6___default.a.Promise.all([Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.TemplatesLink), Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.LangLink)]); - }).then(function () { - p.set(30); - return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(useJsNextBundle ? appData.StaticAppJsNextLink : appData.StaticAppJsLink); - }).then(function () { - p.set(50); - return appData.PluginsLink ? Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.PluginsLink) : window__WEBPACK_IMPORTED_MODULE_6___default.a.Promise.resolve(); - }).then(function () { - p.set(70); - runMainBoot(false); - }).catch(function (e) { - runMainBoot(true); - throw e; - }).then(function () { - return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.StaticEditorJsLink); - }).then(function () { - if (window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR && window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor(); - - window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor = null; - } - }); - } else { - runMainBoot(true); - } -} -/** - * @param {mixed} data - * @returns {void} - */ - - -window__WEBPACK_IMPORTED_MODULE_6___default.a.__initAppData = function (data) { - RL_APP_DATA_STORAGE = data; - - window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_set(); - - if (RL_APP_DATA_STORAGE) { - if (RL_APP_DATA_STORAGE.NewThemeLink) { - (window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('app-theme-link') || {}).href = RL_APP_DATA_STORAGE.NewThemeLink; - } - - if (RL_APP_DATA_STORAGE.IncludeCss) { - includeStyle(RL_APP_DATA_STORAGE.IncludeCss); - } - - showDescriptionAndLoading(RL_APP_DATA_STORAGE.LoadingDescriptionEsc || ''); - } - - runApp(); -}; -/** - * @returns {void} - */ - - -window__WEBPACK_IMPORTED_MODULE_6___default.a.__runBoot = function () { - if (!window__WEBPACK_IMPORTED_MODULE_6___default.a.navigator || !window__WEBPACK_IMPORTED_MODULE_6___default.a.navigator.cookieEnabled) { - window__WEBPACK_IMPORTED_MODULE_6___default.a.document.location.replace('./?/NoCookie'); - } - - var root = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.documentElement; - - if ('none' !== getComputedStyle('rl-check', 'display')) { - root.className += ' no-css'; - } - - if (useJsNextBundle) { - root.className += ' js-next'; - } - - if (includeLayout()) { - includeAppScr(getRainloopBootData()); - } -}; - -/***/ }), -/* 512 */ -/*!******************************!*\ - !*** ./dev/Styles/@Boot.css ***! - \******************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ 513); - var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!./@Boot.css */ 514); - - content = content.__esModule ? content.default : content; - - if (typeof content === 'string') { - content = [[module.i, content, '']]; - } - -var options = {}; - -options.insert = "head"; -options.singleton = false; - -var update = api(content, options); - -var exported = content.locals ? content.locals : {}; - - - -module.exports = exported; - -/***/ }), -/* 513 */ -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isOldIE = function isOldIE() { - var memo; - return function memorize() { - if (typeof memo === 'undefined') { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - memo = Boolean(window && document && document.all && !window.atob); - } - - return memo; - }; -}(); - -var getTarget = function getTarget() { - var memo = {}; - return function memorize(target) { - if (typeof memo[target] === 'undefined') { - var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself - - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; - } - } - - memo[target] = styleTarget; - } - - return memo[target]; - }; -}(); - -var stylesInDom = []; - -function getIndexByIdentifier(identifier) { - var result = -1; - - for (var i = 0; i < stylesInDom.length; i++) { - if (stylesInDom[i].identifier === identifier) { - result = i; - break; - } - } - - return result; -} - -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var index = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3] - }; - - if (index !== -1) { - stylesInDom[index].references++; - stylesInDom[index].updater(obj); - } else { - stylesInDom.push({ - identifier: identifier, - updater: addStyle(obj, options), - references: 1 - }); - } - - identifiers.push(identifier); - } - - return identifiers; -} - -function insertStyleElement(options) { - var style = document.createElement('style'); - var attributes = options.attributes || {}; - - if (typeof attributes.nonce === 'undefined') { - var nonce = true ? __webpack_require__.nc : undefined; - - if (nonce) { - attributes.nonce = nonce; - } - } - - Object.keys(attributes).forEach(function (key) { - style.setAttribute(key, attributes[key]); - }); - - if (typeof options.insert === 'function') { - options.insert(style); - } else { - var target = getTarget(options.insert || 'head'); - - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - - target.appendChild(style); - } - - return style; -} - -function removeStyleElement(style) { - // istanbul ignore if - if (style.parentNode === null) { - return false; - } - - style.parentNode.removeChild(style); -} -/* istanbul ignore next */ - - -var replaceText = function replaceText() { - var textStore = []; - return function replace(index, replacement) { - textStore[index] = replacement; - return textStore.filter(Boolean).join('\n'); - }; -}(); - -function applyToSingletonTag(style, index, remove, obj) { - var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE - - /* istanbul ignore if */ - - if (style.styleSheet) { - style.styleSheet.cssText = replaceText(index, css); - } else { - var cssNode = document.createTextNode(css); - var childNodes = style.childNodes; - - if (childNodes[index]) { - style.removeChild(childNodes[index]); - } - - if (childNodes.length) { - style.insertBefore(cssNode, childNodes[index]); - } else { - style.appendChild(cssNode); - } - } -} - -function applyToTag(style, options, obj) { - var css = obj.css; - var media = obj.media; - var sourceMap = obj.sourceMap; - - if (media) { - style.setAttribute('media', media); - } else { - style.removeAttribute('media'); - } - - if (sourceMap && btoa) { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } // For old IE - - /* istanbul ignore if */ - - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - while (style.firstChild) { - style.removeChild(style.firstChild); - } - - style.appendChild(document.createTextNode(css)); - } -} - -var singleton = null; -var singletonCounter = 0; - -function addStyle(obj, options) { - var style; - var update; - var remove; - - if (options.singleton) { - var styleIndex = singletonCounter++; - style = singleton || (singleton = insertStyleElement(options)); - update = applyToSingletonTag.bind(null, style, styleIndex, false); - remove = applyToSingletonTag.bind(null, style, styleIndex, true); - } else { - style = insertStyleElement(options); - update = applyToTag.bind(null, style, options); - - remove = function remove() { - removeStyleElement(style); - }; - } - - update(obj); - return function updateStyle(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { - return; - } - - update(obj = newObj); - } else { - remove(); - } - }; -} - -module.exports = function (list, options) { - options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of '),n.after(o),n.remove()),o&&o[0]&&ze(o,e[1])&&o.attr("data-href",r).attr("data-theme",e[0]),t(j.SaveSettingsStep.TrueResult))}).then(i,i))}function $e(s,c){return function(){var o=s(),e=c(),r=[],t=function(e,t,n){void 0===t&&(t=!0),void 0===n&&(n="");var i={current:e===o,name:""===n?e.toString():n.toString(),custom:""!==n,title:""===n?"":e.toString(),value:e.toString()};t?r.push(i):r.unshift(i)},n=0,i=0,a=2;if(1this.height?[this.width-this.height,0]:[0,this.height-this.width],n.fillStyle="#fff",n.fillRect(0,0,i,i),n.drawImage(this,e[0]/2,e[1]/2,this.width-e[0],this.height-e[1],0,0,i,i),o(t.toDataURL("image/jpeg"))},t.src=e}function tt(e,t){if(e&&"mailto:"===e.toString().substr(0,7).toLowerCase()){if(!t)return!0;var n,i=[],o=null,r=null,a=(e=e.toString().substr(7)).replace(/\?.+$/,""),s=e.replace(/^[^?]*\?/,""),c=v(80).default;return n=ne(s),i=M(n.to)?c.parseEmailLine(a):(i=c.parseEmailLine(Z(a+","+n.to)),l()(T.a).call(T.a,u()(i).call(i,function(e,t){return t&&(e[t.email]&&e[t.email].name||(e[t.email]=t)),e},{}))),M(n.cc)||(o=c.parseEmailLine(Z(n.cc))),M(n.bcc)||(r=c.parseEmailLine(Z(n.bcc))),v(7).showScreenPopup(t,[j.ComposeType.Empty,null,i,o,r,M(n.subject)?null:Y(Z(n.subject)),M(n.body)?null:ke(Y(Z(n.body)))]),!0}return!1}function nt(e){O()(function(){return e()})}var it=T.a.debounce(function(e){M(e)||F(e)?E.$win.resize():y.a.setTimeout(function(){E.$win.resize()},e)},50);function ot(){it()}var rt=y.a.String.substr;"b"!=="ab".substr(-1)&&(rt=function(e,t,n){return t=t<0?e.length+t:t,e.substr(t,n)},y.a.String.substr=rt)},function(e,t){e.exports=window._},function(e,t){e.exports=window},function(e,t,n){"use strict";n.r(t),n.d(t,"settingsGet",function(){return c}),n.d(t,"settingsSet",function(){return u}),n.d(t,"appSettingsGet",function(){return l}),n.d(t,"capa",function(){return d});var i=n(4),o=n.n(i),r=n(2),a=o.a.__rlah_data()||null,s=(a=Object(r.isNormal)(a)?a:{}).System||null;function c(e){return Object(r.isUnd)(a[e])?null:a[e]}function u(e,t){a[e]=t}function l(e){return Object(r.isUnd)(s[e])?null:s[e]}function d(e){var t=c("Capa");return Object(r.isArray)(t)&&Object(r.isNormal)(e)&&-1"),O=p()("
");O.attr("area","hidden").css({position:"absolute",left:-5e3}).appendTo(y);var A=(new c.a.Date).getTime(),T=!0,C=h.a.observable(!1).extend({rateLimit:0}),_=h.a.observable(!0),x="navigator"in c.a&&"userAgent"in c.a.navigator&&c.a.navigator.userAgent.toLowerCase()||"",E=-1").addClass("rl-view-model").addClass("RL-"+i.viewModelTemplateID).hide()).appendTo(r),i.viewModelDom=n,t.__dom=n,w.Popup===o&&(i.cancelCommand=i.closeCommand=A(function(){N(t)}),i.modalVisibility.subscribe(function(e){e?(i.viewModelDom.show(),i.storeAndSetKeyScope(),m.popupVisibilityNames.push(i.viewModelName),i.viewModelDom.css("z-index",3e3+Object(m.popupVisibilityNames)().length+10),i.onShowTrigger&&i.onShowTrigger(!i.onShowTrigger()),Object(b.delegateRun)(i,"onShowWithDelay",[],500)):(Object(b.delegateRun)(i,"onHide"),Object(b.delegateRun)(i,"onHideWithDelay",[],500),i.onHideTrigger&&i.onHideTrigger(!i.onHideTrigger()),i.restoreKeyScope(),R("view-model-on-hide",t),m.popupVisibilityNames.remove(i.viewModelName),i.viewModelDom.css("z-index",2e3),s.a.delay(function(){return i.viewModelDom.hide()},300))})),R("view-model-pre-build",t,n),u.a.applyBindingAccessorsToNode(n[0],{translatorInit:!0,template:function(){return{name:i.viewModelTemplateID}}},i),Object(b.delegateRun)(i,"onBuild",[n]),i&&w.Popup===o&&i.registerPopupKeyDown(),R("view-model-post-build",t,n)):Object(b.log)("Cannot find view model position: "+o)}return t?t.__vm:null}function P(e,t){void 0===t&&(t=[]);var n=D(e);n&&(I(n),n.__vm&&n.__dom&&(Object(b.delegateRun)(n.__vm,"onBeforeShow",t||[]),n.__vm.modalVisibility(!0),Object(b.delegateRun)(n.__vm,"onShow",t||[]),R("view-model-on-show",n,t||[])))}function k(e){var t=D(e);t&&(I(t),t.__vm&&t.__dom&&Object(b.delegateRun)(t.__vm,"onWarmUp"))}function L(e){var t=D(e);return!(!t||!t.__vm)&&t.__vm.modalVisibility()}function M(e,t){var n=null,i=!1,o=null;""===Object(b.pString)(e)&&(e=S),""!==e&&((n=j(e))||(n=j(S))&&(t=e+"/"+t,e=S),n&&n.__started&&(i=v&&n===v,n.__builded||(n.__builded=!0,Object(b.isNonEmptyArray)(n.viewModels())&&s.a.each(n.viewModels(),function(e){I(e,n)}),Object(b.delegateRun)(n,"onBuild")),s.a.defer(function(){v&&!i&&(Object(b.delegateRun)(v,"onHide"),Object(b.delegateRun)(v,"onHideWithDelay",[],500),v.onHideTrigger&&v.onHideTrigger(!v.onHideTrigger()),Object(b.isNonEmptyArray)(v.viewModels())&&s.a.each(v.viewModels(),function(e){e.__vm&&e.__dom&&w.Popup!==e.__vm.viewModelPosition&&(e.__dom.hide(),e.__vm.viewModelVisibility(!1),Object(b.delegateRun)(e.__vm,"onHide"),Object(b.delegateRun)(e.__vm,"onHideWithDelay",[],500),e.__vm.onHideTrigger&&e.__vm.onHideTrigger(!e.__vm.onHideTrigger()))})),(v=n)&&!i&&(Object(b.delegateRun)(v,"onShow"),v.onShowTrigger&&v.onShowTrigger(!v.onShowTrigger()),Object(h.f)("screen-on-show",[v.screenName(),v]),Object(b.isNonEmptyArray)(v.viewModels())&&s.a.each(v.viewModels(),function(e){e.__vm&&e.__dom&&w.Popup!==e.__vm.viewModelPosition&&(Object(b.delegateRun)(e.__vm,"onBeforeShow"),e.__dom.show(),e.__vm.viewModelVisibility(!0),Object(b.delegateRun)(e.__vm,"onShow"),e.__vm.onShowTrigger&&e.__vm.onShowTrigger(!e.__vm.onShowTrigger()),Object(b.delegateRun)(e.__vm,"onShowWithDelay",[],200),R("view-model-on-show",e))})),(o=n&&n.__cross?n.__cross():null)&&o.parse(t)})))}function F(e){s.a.each(e,function(e){if(e){var t=new e,n=t?t.screenName():"";t&&""!==n&&(""===S&&(S=n),y[n]=t)}}),s.a.each(y,function(e){e&&!e.__started&&e.__start&&(e.__started=!0,e.__start(),Object(h.f)("screen-pre-start",[e.screenName(),e]),Object(b.delegateRun)(e,"onStart"),Object(h.f)("screen-post-start",[e.screenName(),e]))});var t=f.a.create();t.addRoute(/^([a-zA-Z0-9-]*)\/?(.*)$/,M),d.a.initialized.add(t.parse,t),d.a.changed.add(t.parse,t),d.a.init(),s.a.delay(function(){return m.$html.removeClass("rl-started-trigger").addClass("rl-started")},100),s.a.delay(function(){return m.$html.addClass("rl-started-delay")},200)}function U(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1),e="/"===(e="#"===e.substr(0,1)?e.substr(1):e).substr(0,1)?e.substr(1):e;var i=n?"replaceHash":"setHash";t?(d.a.changed.active=!1,d.a[i](e),d.a.changed.active=!0):(d.a.changed.active=!0,d.a[i](e),d.a.setHash(e))}function G(e){var t=e.name,n=e.type,i=e.templateID;return function(e){e&&(t&&(Object(b.isArray)(t)?e.__names=t:e.__names=[t],e.__name=e.__names[0]),n&&(e.__type=n),i&&(e.__templateID=i))}}function H(e){var t=e.name,n=e.templateID;return G({name:t,type:w.Popup,templateID:n})}function B(r){return void 0===r&&(r=!0),function(e,t,n){if(!t||!t.match(/Command$/))throw new Error('name "'+t+'" should end with Command suffix');var i=n.value||n.initializer(),o=Object(b.isFunc)(r)?r:function(){return!!r};return n.value=function(){if(o.call(this,this)){for(var e=arguments.length,t=new Array(e),n=0;n",viewModel:{createViewModel:function(e,t){return(e=e||{}).element=null,t&&t.element&&(e.component=t,e.element=s()(t.element),Object(l.i18nToNodes)(e.element),!Object(u.isUnd)(e.inline)&&c.a.unwrap(e.inline)&&e.element.css("display","inline-block")),new n(e)}}}}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(44);e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},,function(e,t,n){"use strict";n.d(t,"a",function(){return d}),n.d(t,"f",function(){return p}),n.d(t,"d",function(){return f}),n.d(t,"e",function(){return g}),n.d(t,"b",function(){return h}),n.d(t,"c",function(){return m}),n.d(t,"g",function(){return b}),n.d(t,"h",function(){return v});var i=n(3),o=n.n(i),r=n(2),a=n(6),s=n(5),c={},u=[],l=[];function d(e,t){Object(r.isFunc)(t)&&(Object(r.isArray)(c[e])||(c[e]=[]),c[e].push(t))}function p(e,t){void 0===t&&(t=[]),Object(r.isArray)(c[e])&&o.a.each(c[e],function(e){e.apply(void 0,t)})}function f(e){return s.settingsGet(e)}function g(e,t,n,i){a.data.__APP__&&a.data.__APP__.remote().defaultRequest(e,"Plugin"+t,n,i)}function h(e,t,n,i){u.push([e,t,n,i])}function m(e,t,n,i){l.push([e,t,n,i])}function b(e){var t=n(7);o.a.each(e?l:u,function(e){t.addSettingsViewModel(e[0],e[1],e[2],e[3])})}function v(e,t){var n=s.settingsGet("Plugins");return(n=n&&!Object(r.isUnd)(n[e])?n[e]:null)?Object(r.isUnd)(n[t])?null:n[t]:null}},function(e,t,n){"use strict";var i=n(1);t.a=new function(){this.coreReal=i.a.observable(!0),this.coreChannel=i.a.observable("stable"),this.coreType=i.a.observable("stable"),this.coreUpdatable=i.a.observable(!0),this.coreAccess=i.a.observable(!0),this.coreWarning=i.a.observable(!1),this.coreChecking=i.a.observable(!1).extend({throttle:100}),this.coreUpdating=i.a.observable(!1).extend({throttle:100}),this.coreVersion=i.a.observable(""),this.coreRemoteVersion=i.a.observable(""),this.coreRemoteRelease=i.a.observable(""),this.coreVersionCompare=i.a.observable(-2)}},,function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";var b=n(75),v=n(235).f,S=n(289),y=n(96),w=n(238),O=n(83),A=n(95),T=function(i){var e=function(e,t,n){if(this instanceof i){switch(arguments.length){case 0:return new i;case 1:return new i(e);case 2:return new i(e,t)}return new i(e,t,n)}return i.apply(this,arguments)};return e.prototype=i.prototype,e};e.exports=function(e,t){var n,i,o,r,a,s,c,u,l=e.target,d=e.global,p=e.stat,f=e.proto,g=d?b:p?b[l]:(b[l]||{}).prototype,h=d?y:y[l]||(y[l]={}),m=h.prototype;for(o in t)n=!S(d?o:l+(p?".":"#")+o,e.forced)&&g&&A(g,o),a=h[o],n&&(s=e.noTargetGet?(u=v(g,o))&&u.value:g[o]),r=n&&s?s:t[o],n&&typeof a==typeof r||(c=e.bind&&n?w(r,b):e.wrap&&n?T(r):f&&"function"==typeof r?w(Function.call,r):r,(e.sham||r&&r.sham||a&&a.sham)&&O(c,"sham",!0),h[o]=c,f&&(A(y,i=l+"Prototype")||O(y,i,{}),y[i][o]=r,e.real&&m&&!m[o]&&O(m,o,r)))}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var i=n(48),o=n(110);i({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},,function(e,t,n){var i=n(36);e.exports=!i(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},function(e,t,n){var l=n(27),d=n(89).f,p=n(49),f=n(53),g=n(91),h=n(179),m=n(129);e.exports=function(e,t){var n,i,o,r,a,s=e.target,c=e.global,u=e.stat;if(n=c?l:u?l[s]||g(s,{}):(l[s]||{}).prototype)for(i in t){if(r=t[i],o=e.noTargetGet?(a=d(n,i))&&a.value:n[i],!m(c?i:s+(u?".":"#")+i,e.forced)&&void 0!==o){if(typeof r==typeof o)continue;h(r,o)}(e.sham||o&&o.sham)&&p(r,"sham",!0),f(n,i,r,e)}}},function(e,t,n){var i=n(47),o=n(52),r=n(90);e.exports=i?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(47),o=n(52).f,r=Function.prototype,a=r.toString,s=/^\s*function ([^ (]*)/;!i||"name"in r||o(r,"name",{configurable:!0,get:function(){try{return a.call(this).match(s)[1]}catch(e){return""}}})},function(e,t,n){var i=n(47),o=n(125),r=n(37),a=n(124),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(r(e),t=a(t,!0),r(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var s=n(27),c=n(49),u=n(42),l=n(91),i=n(92),o=n(86),r=o.get,d=o.enforce,p=String(String).split("String");(e.exports=function(e,t,n,i){var o=!!i&&!!i.unsafe,r=!!i&&!!i.enumerable,a=!!i&&!!i.noTargetGet;"function"==typeof n&&("string"!=typeof t||u(n,"name")||c(n,"name",t),d(n).source=p.join("string"==typeof t?t:"")),e!==s?(o?!a&&e[t]&&(r=!0):delete e[t],r?e[t]=n:c(e,t,n)):r?e[t]=n:l(t,n)})(Function.prototype,"toString",function(){return"function"==typeof this&&r(this).source||i(this)})},function(e,t,n){var i=n(96);e.exports=function(e){return i[e+"Prototype"]}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var i=n(134),x=n(37),p=n(119),E=n(72),j=n(79),r=n(55),D=n(152),N=n(135),R=Math.max,I=Math.min,f=Math.floor,g=/\$([$&'`]|\d\d?|<[^>]*>)/g,h=/\$([$&'`]|\d\d?)/g;i("replace",2,function(o,w,O,e){var A=e.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,T=e.REPLACE_KEEPS_$0,C=A?"$":"$0";return[function(e,t){var n=r(this),i=null==e?void 0:e[o];return void 0!==i?i.call(e,n,t):w.call(String(n),e,t)},function(e,t){if(!A&&T||"string"==typeof t&&-1===t.indexOf(C)){var n=O(w,e,this,t);if(n.done)return n.value}var i=x(e),o=String(this),r="function"==typeof t;r||(t=String(t));var a=i.global;if(a){var s=i.unicode;i.lastIndex=0}for(var c=[];;){var u=N(i,o);if(null===u)break;if(c.push(u),!a)break;""===String(u[0])&&(i.lastIndex=D(o,E(i.lastIndex),s))}for(var l,d="",p=0,f=0;f")+'" target="_blank" tabindex="-1">'+Object(g.encodeHtml)(this.name)+"":n?Object(g.encodeHtml)(this.name):this.name:(i=this.email,""!==this.name?t?i=Object(g.encodeHtml)('"'+this.name+'" <')+'")+'" target="_blank" tabindex="-1">'+Object(g.encodeHtml)(i)+""+Object(g.encodeHtml)(">"):(i='"'+this.name+'" <'+i+">",n&&(i=Object(g.encodeHtml)(i))):t&&(i=''+Object(g.encodeHtml)(this.email)+""))),i},o.splitEmailLine=function(e){var t=f()(e);if(Object(g.isNonEmptyArray)(t)){var n=[],i=!1;return a()(t).call(t,function(e){var t=e.address?new o(e.address.replace(/^[<]+(.*)[>]+$/g,"$1"),e.name||""):null;t&&t.email&&(i=!0),n.push(t?t.toLine(!1):e.name)}),i?n:null}return null},o.parseEmailLine=function(e){var t=f()(e);return Object(g.isNonEmptyArray)(t)?d.a.compact(r()(d.a).call(d.a,t,function(e){return e.address?new o(e.address.replace(/^[<]+(.*)[>]+$/g,"$1"),e.name||""):null})):[]},e.parse=function(e){if(""===(e=Object(g.trim)(e)))return!1;var t=f()(e);return!(!Object(g.isNonEmptyArray)(t)||!t[0])&&(this.name=t[0].name||"",this.email=t[0].address||"",this.clearDuplicateName(),!0)},o}()},,function(e,t,n){var i=n(57);e.exports=!i(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(82),o=n(136),r=n(153);e.exports=i?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){"use strict";n.d(t,"a",function(){return l});var i=n(12),o=n.n(i),r=n(33),a=n(10),s=n(1),c=n(2),u=n(0),l=function(i){function e(e){var t,n;((t=i.call(this)||this).value=e.value||"",t.size=e.size||0,t.label=e.label||"",t.preLabel=e.preLabel||"",t.enable=!!Object(c.isUnd)(e.enable)||e.enable,t.trigger=e.trigger&&e.trigger.subscribe?e.trigger:null,t.placeholder=e.placeholder||"",t.labeled=!Object(c.isUnd)(e.label),t.preLabeled=!Object(c.isUnd)(e.preLabel),t.triggered=!Object(c.isUnd)(e.trigger)&&!!t.trigger,t.classForTrigger=s.a.observable(""),t.className=s.a.computed(function(){var e=s.a.unwrap(t.size);return(0n;){var i,o,r,a=g[n++],s=t?a.ok:a.fail,c=a.resolve,u=a.reject,l=a.domain;try{s?(t||(2===p.rejection&&ne(d,p),p.rejection=1),!0===s?i=e:(l&&l.enter(),i=s(e),l&&(l.exit(),r=!0)),i===a.promise?u(G("Promise-chain cycle")):(o=J(i))?o.call(i,c,u):c(i)):u(e)}catch(e){l&&!r&&l.exit(),u(e)}}p.reactions=[],p.notified=!1,f&&!p.rejection&&ee(d,p)})}},Z=function(e,t,n){var i,o;W?((i=H.createEvent("Event")).promise=t,i.reason=n,i.initEvent(e,!1,!0),u.dispatchEvent(i)):i={promise:t,reason:n},(o=u["on"+e])?o(i):e===Y&&x("Unhandled promise rejection",n)},ee=function(n,i){T.call(u,function(){var e,t=i.value;if(te(i)&&(e=j(function(){K?B.emit("unhandledRejection",t,n):Z(Y,n,t)}),i.rejection=K||te(i)?2:1,e.error))throw e.value})},te=function(e){return 1!==e.rejection&&!e.parent},ne=function(e,t){T.call(u,function(){K?B.emit("rejectionHandled",e):Z("rejectionhandled",e,t.value)})},ie=function(t,n,i,o){return function(e){t(n,i,e,o)}},oe=function(e,t,n,i){t.done||(t.done=!0,i&&(t=i),t.value=n,t.state=2,Q(e,t,!0))},re=function(n,i,e,t){if(!i.done){i.done=!0,t&&(i=t);try{if(n===e)throw G("Promise can't be resolved itself");var o=J(e);o?C(function(){var t={done:!1};try{o.call(e,ie(re,n,t,i),ie(oe,n,t,i))}catch(e){oe(n,t,e,i)}}):(i.value=e,i.state=1,Q(n,i,!1))}catch(e){oe(n,{done:!1},e,i)}}};$&&(U=function(e){v(this,U,k),b(e),i.call(this);var t=L(this);try{e(ie(re,this,t),ie(oe,this,t))}catch(e){oe(this,t,e)}},(i=function(e){M(this,{type:k,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=f(U.prototype,{then:function(e,t){var n=F(this),i=q(A(this,U));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=K?B.domain:void 0,n.parent=!0,n.reactions.push(i),0!=n.state&&Q(this,n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new i,t=L(e);this.promise=e,this.resolve=ie(re,e,t),this.reject=ie(oe,e,t)},E.f=q=function(e){return e===U||e===r?new o(e):z(e)},c||"function"!=typeof d||(a=d.prototype.then,p(d.prototype,"then",function(e,t){var n=this;return new U(function(e,t){a.call(n,e,t)}).then(e,t)},{unsafe:!0}),"function"==typeof V&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return _(U,V.apply(u,arguments))}}))),s({global:!0,wrap:!0,forced:$},{Promise:U}),g(U,k,!1,!0),h(k),r=l(k),s({target:k,stat:!0,forced:$},{reject:function(e){var t=q(this);return t.reject.call(void 0,e),t.promise}}),s({target:k,stat:!0,forced:c||$},{resolve:function(e){return _(c&&this===r?U:this,e)}}),s({target:k,stat:!0,forced:X},{all:function(e){var s=this,t=q(s),c=t.resolve,u=t.reject,n=j(function(){var i=b(s.resolve),o=[],r=0,a=1;w(e,function(e){var t=r++,n=!1;o.push(void 0),a++,i.call(s,e).then(function(e){n||(n=!0,o[t]=e,--a||c(o))},u)}),--a||c(o)});return n.error&&u(n.value),t.promise},race:function(e){var n=this,i=q(n),o=i.reject,t=j(function(){var t=b(n.resolve);w(e,function(e){t.call(n,e).then(i.resolve,o)})});return t.error&&o(t.value),i.promise}})},function(e,t,n){var i=n(199);e.exports=function(e){return Object(i(e))}},,function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var o=n(44);e.exports=function(e,t){if(!o(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!o(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!o(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!o(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var i=n(47),o=n(36),r=n(101);e.exports=!i&&!o(function(){return 7!=Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(27),o=n(91),r="__core-js_shared__",a=i[r]||o(r,{});e.exports=a},function(e,t,n){var i=n(78),o=n(126);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.4",mode:i?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},function(e,t,n){var i=n(36),o=/#|\.prototype\./,r=function(e,t){var n=s[a(e)];return n==u||n!=c&&("function"==typeof t?i(t):!!t)},a=r.normalize=function(e){return String(e).replace(o,".").toLowerCase()},s=r.data={},c=r.NATIVE="N",u=r.POLYFILL="P";e.exports=r},function(e,t,n){var i=n(36);e.exports=!!Object.getOwnPropertySymbols&&!i(function(){return!String(Symbol())})},function(e,t,n){var i=n(93),o=n(50),r=n(32)("toStringTag"),a="Arguments"==o(function(){return arguments}());e.exports=i?o:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),r))?n:a?o(t):"Object"==(i=o(t))&&"function"==typeof t.callee?"Arguments":i}},function(e,t,n){var i,o,r,a=n(27),s=n(36),c=n(50),u=n(103),l=n(141),d=n(101),p=n(133),f=a.location,g=a.setImmediate,h=a.clearImmediate,m=a.process,b=a.MessageChannel,v=a.Dispatch,S=0,y={},w="onreadystatechange",O=function(e){if(y.hasOwnProperty(e)){var t=y[e];delete y[e],t()}},A=function(e){return function(){O(e)}},T=function(e){O(e.data)},C=function(e){a.postMessage(e+"",f.protocol+"//"+f.host)};g&&h||(g=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return y[++S]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(S),S},h=function(e){delete y[e]},"process"==c(m)?i=function(e){m.nextTick(A(e))}:v&&v.now?i=function(e){v.now(A(e))}:b&&!p?(r=(o=new b).port2,o.port1.onmessage=T,i=u(r.postMessage,r,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(C)?i=w in d("script")?function(e){l.appendChild(d("script"))[w]=function(){l.removeChild(this),O(e)}}:function(e){setTimeout(A(e),0)}:(i=C,a.addEventListener("message",T,!1))),e.exports={set:g,clear:h}},function(e,t,n){var i=n(104);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(i)},function(e,t,n){"use strict";n(45);var d=n(53),p=n(36),f=n(32),g=n(110),h=n(49),m=f("species"),b=!p(function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}),v="$0"==="a".replace(/./,"$0"),i=f("replace"),S=!!/./[i]&&""===/./[i]("a","$0"),y=!p(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]});e.exports=function(n,e,t,i){var o=f(n),r=!p(function(){var e={};return e[o]=function(){return 7},7!=""[n](e)}),a=r&&!p(function(){var e=!1,t=/a/;return"split"===n&&((t={constructor:{}}).constructor[m]=function(){return t},t.flags="",t[o]=/./[o]),t.exec=function(){return e=!0,null},t[o](""),!e});if(!r||!a||"replace"===n&&(!b||!v||S)||"split"===n&&!y){var s=/./[o],c=t(o,""[n],function(e,t,n,i,o){return t.exec===g?r&&!o?{done:!0,value:s.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}},{REPLACE_KEEPS_$0:v,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:S}),u=c[0],l=c[1];d(String.prototype,n,u),d(RegExp.prototype,o,2==e?function(e,t){return l.call(e,this,t)}:function(e){return l.call(e,this)})}i&&h(RegExp.prototype[o],"sham",!0)}},function(e,t,n){var o=n(50),r=n(110);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==o(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},function(e,t,n){var i=n(82),o=n(236),r=n(154),a=n(200),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(r(e),t=a(t,!0),r(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";n.d(t,"a",function(){return f});var i=n(69),o=n.n(i),r=n(26),a=n.n(r),s=n(17),c=n(3),u=n.n(c),l=n(161),d=n.n(l),p=n(2),f=function(){function e(e,t){void 0===t&&(t=[]),Object(s.a)(this,"oCross",null),Object(s.a)(this,"sScreenName",void 0),Object(s.a)(this,"aViewModels",void 0),this.sScreenName=e,this.aViewModels=Object(p.isArray)(t)?t:[]}var t=e.prototype;return t.viewModels=function(){return this.aViewModels},t.screenName=function(){return this.sScreenName},t.routes=function(){return null},t.__cross=function(){return this.oCross},t.__start=function(){var t=null,n=null,e=this.routes();Object(p.isNonEmptyArray)(e)&&(n=a()(u.a).call(u.a,this.onRoute||p.noop,this),t=d.a.create(),o()(e).call(e,function(e){e&&t&&(t.addRoute(e[0],n).rules=e[1])}),this.oCross=t)},e}()},function(e,t,n){e.exports=n(333)},function(e,t){e.exports=window.ssm},function(e,t,n){var a=n(42),s=n(71),c=n(165).indexOf,u=n(102);e.exports=function(e,t){var n,i=s(e),o=0,r=[];for(n in i)!a(u,n)&&a(i,n)&&r.push(n);for(;t.length>o;)a(i,n=t[o++])&&(~c(r,n)||r.push(n));return r}},function(e,t,n){var i=n(59);e.exports=i("document","documentElement")},function(e,t,n){var f=n(37),g=n(190),h=n(72),m=n(103),b=n(191),v=n(192),S=function(e,t){this.stopped=e,this.result=t};(e.exports=function(e,t,n,i,o){var r,a,s,c,u,l,d,p=m(t,n,i?2:1);if(o)r=e;else{if("function"!=typeof(a=b(e)))throw TypeError("Target is not iterable");if(g(a)){for(s=0,c=h(e.length);s"+e+""},m=function(){try{i=document.domain&&new ActiveXObject("htmlfile")}catch(e){}var e,t;m=i?function(e){e.write(h("")),e.close();var t=e.parentWindow.Object;return e=null,t}(i):((t=u("iframe")).style.display="none",c.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(h("document.F=Object")),e.close(),e.F);for(var n=a.length;n--;)delete m[d][a[n]];return m()};s[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(g[d]=o(e),n=new g,g[d]=null,n[f]=e):n=m(),void 0===t?n:r(n,t)}},function(e,t,n){var i=n(42),o=n(119),r=n(107),a=n(228),s=r("IE_PROTO"),c=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=o(e),i(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?c:null}},function(e,t,n){var i,o,r=n(27),a=n(104),s=r.process,c=s&&s.versions,u=c&&c.v8;u?o=(i=u.split("."))[0]+i[1]:a&&(!(i=a.match(/Edge\/(\d+)/))||74<=i[1])&&(i=a.match(/Chrome\/(\d+)/))&&(o=i[1]),e.exports=o&&+o},function(e,t,n){"use strict";var i=n(185).charAt;e.exports=function(e,t,n){return t+(n?i(e,t).length:1)}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var i=n(76);e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t){e.exports={}},function(e,t,n){var i=n(198);e.exports=Array.isArray||function(e){return"Array"==i(e)}},function(e,t,n){var i=n(57),o=n(68)("species");e.exports=function(t){return!i(function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo})}},function(e,t,n){var y=n(238),w=n(197),O=n(121),A=n(112),T=n(250),C=[].push,i=function(f){var g=1==f,h=2==f,m=3==f,b=4==f,v=6==f,S=5==f||v;return function(e,t,n,i){for(var o,r,a=O(e),s=w(a),c=y(t,n,3),u=A(s.length),l=0,d=i||T,p=g?d(e,u):h?d(e,0):void 0;l",",":"",":":";",";":""},r=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.str=(e||"").toString(),this.operatorCurrent="",this.operatorExpecting="",this.node=null,this.escaped=!1,this.list=[]}return i(t,[{key:"tokenize",value:function(){for(var e=void 0,t=[],n=0,i=this.str.length;n>>0;if(0===i)return[];if(void 0===e)return[n];if(!d(e))return m.call(n,e,i);for(var o,r,a,s=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),u=0,l=new RegExp(e.source,c+"g");(o=f.call(l,n))&&!(u<(r=l.lastIndex)&&(s.push(n.slice(u,o.index)),1=i));)l.lastIndex===o.index&&l.lastIndex++;return u===n.length?!a&&l.test("")||s.push(""):s.push(n.slice(u)),s.length>i?s.slice(0,i):s}:"0".split(void 0,0).length?function(e,t){return void 0===e&&0===t?[]:m.call(this,e,t)}:m,[function(e,t){var n=p(this),i=null==e?void 0:e[o];return void 0!==i?i.call(e,n,t):v.call(String(n),e,t)},function(e,t){var n=b(v,e,this,t,v!==m);if(n.done)return n.value;var i=S(e),o=String(this),r=y(i,RegExp),a=i.unicode,s=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(_?"y":"g"),c=new r(_?i:"^(?:"+i.source+")",s),u=void 0===t?C:t>>>0;if(0===u)return[];if(0===o.length)return null===A(c,o)?[o]:[];for(var l=0,d=0,p=[];d=t.length?{value:e.target=void 0,done:!0}:"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}},"values"),r.Arguments=r.Array,o("keys"),o("values"),o("entries")},function(e,t,n){var o=n(53);e.exports=function(e,t,n){for(var i in t)o(e,i,t[i],n);return e}},function(e,t,n){"use strict";var i=n(59),o=n(52),r=n(32),a=n(47),s=r("species");e.exports=function(e){var t=i(e),n=o.f;a&&t&&!t[s]&&n(t,s,{configurable:!0,get:function(){return this}})}},function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},function(e,t,n){var i=n(32),o=n(73),r=i("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[r]===e)}},function(e,t,n){var i=n(131),o=n(73),r=n(32)("iterator");e.exports=function(e){if(null!=e)return e[r]||e["@@iterator"]||o[i(e)]}},function(e,t,n){var r=n(37);e.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},function(e,t,n){var o=n(32)("iterator"),r=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){r=!0}};a[o]=function(){return this},Array.from(a,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var i={};i[o]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(e){}return n}},function(e,t,n){var i,o,r,a,s,c,u,l,d=n(27),p=n(89).f,f=n(50),g=n(132).set,h=n(133),m=d.MutationObserver||d.WebKitMutationObserver,b=d.process,v=d.Promise,S="process"==f(b),y=p(d,"queueMicrotask"),w=y&&y.value;w||(i=function(){var e,t;for(S&&(e=b.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?a():r=void 0,e}}r=void 0,e&&e.enter()},a=S?function(){b.nextTick(i)}:m&&!h?(s=!0,c=document.createTextNode(""),new m(i).observe(c,{characterData:!0}),function(){c.data=s=!s}):v&&v.resolve?(u=v.resolve(void 0),l=u.then,function(){l.call(u,i)}):function(){g.call(d,i)}),e.exports=w||function(e){var t={fn:e,next:void 0};r&&(r.next=t),o||(o=t,a()),r=t}},function(e,t,n){var i=n(27);e.exports=function(e,t){var n=i.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},function(e,t,n){"use strict";var i=n(134),d=n(37),p=n(72),o=n(55),f=n(152),g=n(135);i("match",1,function(i,u,l){return[function(e){var t=o(this),n=null==e?void 0:e[i];return void 0!==n?n.call(e,t):new RegExp(e)[i](String(t))},function(e){var t=l(u,e,this);if(t.done)return t.value;var n=d(e),i=String(this);if(!n.global)return g(n,i);for(var o,r=n.unicode,a=[],s=n.lastIndex=0;null!==(o=g(n,i));){var c=String(o[0]);""===(a[s]=c)&&(n.lastIndex=f(i,p(n.lastIndex),r)),s++}return 0===s?null:a}]})},function(e,t,n){var i=n(57),o=n(198),r="".split;e.exports=i(function(){return!Object("z").propertyIsEnumerable(0)})?function(e){return"String"==o(e)?r.call(e,""):Object(e)}:Object},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var o=n(76);e.exports=function(e,t){if(!o(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!o(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!o(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!o(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0'+this.editor.getData()+"":this.editor.getData()}catch(e){}return t},t.getDataWithHtmlMark=function(e){return void 0===e&&(e=!1),(this.isHtml()?":HTML:":"")+this.getData(e)},t.modeToggle=function(e,t){if(this.editor){try{e?"plain"===this.editor.mode&&this.editor.setMode("wysiwyg"):"wysiwyg"===this.editor.mode&&this.editor.setMode("plain")}catch(e){}t&&this.resize()}},t.setHtmlOrPlain=function(e,t){":HTML:"===e.substr(0,6)?this.setHtml(e.substr(6),t):this.setPlain(e,t)},t.setHtml=function(e,t){if(this.editor&&this.__inited){this.clearCachedSignature(),this.modeToggle(!0),e=e.replace(/]*><\/p>/gi,"");try{this.editor.setData(e)}catch(e){}t&&this.focus()}},t.replaceHtml=function(e,t){if(this.editor&&this.__inited&&"wysiwyg"===this.editor.mode)try{this.editor.setData(this.editor.getData().replace(e,t))}catch(e){}},t.setPlain=function(e,t){if(this.editor&&this.__inited){if(this.clearCachedSignature(),this.modeToggle(!1),"plain"===this.editor.mode&&this.editor.plugins.plain&&this.editor.__plain)this.editor.__plain.setRawData(e);else try{this.editor.setData(e)}catch(e){}t&&this.focus()}},t.init=function(){var o=this;if(this.element&&!this.editor){var e=function(){var e=p.htmlEditorDefaultConfig,t=g.settingsGet("Language"),n=!!g.appSettingsGet("allowHtmlEditorSourceButton"),i=!!g.appSettingsGet("allowHtmlEditorBitiButtons");!n&&i||e.toolbarGroups.__cfgInited||(e.toolbarGroups.__cfgInited=!0,n&&(e.removeButtons=e.removeButtons.replace(",Source","")),i||(e.removePlugins+=(e.removePlugins?",":"")+"bidi")),e.enterMode=s.a.CKEDITOR.ENTER_BR,e.shiftEnterMode=s.a.CKEDITOR.ENTER_P,e.language=p.htmlEditorLangsMap[(t||"en").toLowerCase()]||"en",s.a.CKEDITOR.env&&(s.a.CKEDITOR.env.isCompatible=!0),o.editor=s.a.CKEDITOR.appendTo(o.element,e),o.editor.on("key",function(e){return!e||!e.data||f.EventKeyCode.Tab!==e.data.keyCode}),o.editor.on("blur",function(){o.blurTrigger()}),o.editor.on("mode",function(){o.blurTrigger(),o.onModeChange&&o.onModeChange("plain"!==o.editor.mode)}),o.editor.on("focus",function(){o.focusTrigger()}),s.a.FileReader&&o.editor.on("drop",function(e){if(0')},i.readAsDataURL(t),e.data.dataTransfer.setData("text/html",n)}}}),o.editor.on("instanceReady",function(){o.editor.removeMenuItem&&(o.editor.removeMenuItem("cut"),o.editor.removeMenuItem("copy"),o.editor.removeMenuItem("paste")),o.__resizable=!0,o.__inited=!0,o.resize(),o.onReady&&o.onReady()})};s.a.CKEDITOR?e():s.a.__initEditor=e}},t.focus=function(){if(this.editor)try{this.editor.focus()}catch(e){}},t.hasFocus=function(){if(this.editor)try{return!!this.editor.focusManager.hasFocus}catch(e){}return!1},t.blur=function(){if(this.editor)try{this.editor.focusManager.blur(!0)}catch(e){}},t.resizeEditor=function(){if(this.editor&&this.__resizable)try{this.editor.resize(this.$element.width(),this.$element.innerHeight())}catch(e){}},t.setReadOnly=function(e){if(this.editor)try{this.editor.setReadOnly(!!e)}catch(e){}},t.clear=function(e){this.setHtml("",e)},e}()},function(e,t,n){e.exports=n(285)},function(e,t,n){e.exports=n(323)},function(e,t,n){"use strict";n.d(t,"a",function(){return o});var i=n(4),o=n.n(i).a.Opentip||{};o.styles=o.styles||{},o.styles.rainloop={extends:"standard",fixed:!0,target:!0,delay:.2,hideDelay:0,hideEffect:"fade",hideEffectDuration:.2,showEffect:"fade",showEffectDuration:.2,showOn:"mouseover click",removeElementsOnHide:!0,background:"#fff",shadow:!1,borderColor:"#999",borderRadius:2,borderWidth:1},o.styles.rainloopTip={extends:"rainloop",delay:.4,group:"rainloopTips"},o.styles.rainloopErrorTip={extends:"rainloop",className:"rainloopErrorTip"}},function(y,e,w){!function(e,t){"use strict";var n,r,a,s,p,u,c,i,l,f,g,b,U,G,H,B,d,o,h,m,V,q,v,S;try{n=w(97)}catch(e){}y.exports=(a="function"==typeof(r=n),s=!!window.addEventListener,p=window.document,u=window.setTimeout,c=function(e,t,n,i){s?e.addEventListener(t,n,!!i):e.attachEvent("on"+t,n)},i=function(e,t,n,i){s?e.removeEventListener(t,n,!!i):e.detachEvent("on"+t,n)},l=function(e,t){return-1!==(" "+e.className+" ").indexOf(" "+t+" ")},f=function(e,t){l(e,t)||(e.className=""===e.className?t:e.className+" "+t)},g=function(e,t){var n;e.className=(n=(" "+e.className+" ").replace(" "+t+" "," ")).trim?n.trim():n.replace(/^\s+|\s+$/g,"")},m={field:null,bound:void 0,ariaLabel:"Use the arrow keys to pick a date",position:"bottom left",reposition:!0,format:"YYYY-MM-DD",toString:null,parse:null,defaultDate:null,setDefaultDate:!(h=function(e){return e.month<0&&(e.year-=Math.ceil(Math.abs(e.month)/12),e.month+=12),11';t.push("is-outside-current-month"),e.enableSelectionDaysInNextAndPreviousMonths||t.push("is-selection-disabled")}return e.isDisabled&&t.push("is-disabled"),e.isToday&&t.push("is-today"),e.isSelected&&(t.push("is-selected"),n="true"),e.hasEvent&&t.push("has-event"),e.isInRange&&t.push("is-inrange"),e.isStartRange&&t.push("is-startrange"),e.isEndRange&&t.push("is-endrange"),'"},v=function(e,t,n,i,o,r){var a,s,c,u,l,d=e._o,p=n===d.minYear,f=n===d.maxYear,g='
',h=!0,m=!0;for(c=[],a=0;a<12;a++)c.push('");for(u='
'+d.i18n.months[i]+'
",s=b(d.yearRange)?(a=d.yearRange[0],d.yearRange[1]+1):(a=n-d.yearRange,1+n+d.yearRange),c=[];a=d.minYear&&c.push('");return l='
'+n+d.yearSuffix+'
",d.showMonthAfterYear?g+=l+u:g+=u+l,p&&(0===i||d.minMonth>=i)&&(h=!1),f&&(11===i||d.maxMonth<=i)&&(m=!1),0===t&&(g+='"),t===e._o.numberOfMonths-1&&(g+='"),g+="
"},(S=function(e){var i=this,o=i.config(e);i._onMouseDown=function(e){if(i._v){var t=(e=e||window.event).target||e.srcElement;if(t)if(l(t,"is-disabled")||(!l(t,"pika-button")||l(t,"is-empty")||l(t.parentNode,"is-disabled")?l(t,"pika-prev")?i.prevMonth():l(t,"pika-next")&&i.nextMonth():(i.setDate(new Date(t.getAttribute("data-pika-year"),t.getAttribute("data-pika-month"),t.getAttribute("data-pika-day"))),o.bound&&u(function(){i.hide(),o.blurFieldOnSelect&&o.field&&o.field.blur()},100))),l(t,"pika-select"))i._c=!0;else{if(!e.preventDefault)return e.returnValue=!1;e.preventDefault()}}},i._onChange=function(e){var t=(e=e||window.event).target||e.srcElement;t&&(l(t,"pika-select-month")?i.gotoMonth(t.value):l(t,"pika-select-year")&&i.gotoYear(t.value))},i._onKeyChange=function(e){if(e=e||window.event,i.isVisible())switch(e.keyCode){case 13:case 27:o.field&&o.field.blur();break;case 37:e.preventDefault(),i.adjustDate("subtract",1);break;case 38:i.adjustDate("subtract",7);break;case 39:i.adjustDate("add",1);break;case 40:i.adjustDate("add",7)}},i._onInputChange=function(e){var t;e.firedBy!==i&&(t=o.parse?o.parse(o.field.value,o.format):a?(t=r(o.field.value,o.format,o.formatStrict))&&t.isValid()?t.toDate():null:new Date(Date.parse(o.field.value)),U(t)&&i.setDate(t),i._v||i.show())},i._onInputFocus=function(){i.show()},i._onInputClick=function(){i.show()},i._onInputBlur=function(){var e=p.activeElement;do{if(l(e,"pika-single"))return}while(e=e.parentNode);i._c||(i._b=u(function(){i.hide()},50)),i._c=!1},i._onClick=function(e){var t=(e=e||window.event).target||e.srcElement,n=t;if(t){!s&&l(t,"pika-select")&&(t.onchange||(t.setAttribute("onchange","return;"),c(t,"change",i._onChange)));do{if(l(n,"pika-single")||n===o.trigger)return}while(n=n.parentNode);i._v&&t!==o.trigger&&n!==o.trigger&&i.hide()}},i.el=p.createElement("div"),i.el.className="pika-single"+(o.isRTL?" is-rtl":"")+(o.theme?" "+o.theme:""),c(i.el,"mousedown",i._onMouseDown,!0),c(i.el,"touchend",i._onMouseDown,!0),c(i.el,"change",i._onChange),o.keyboardInput&&c(p,"keydown",i._onKeyChange),o.field&&(o.container?o.container.appendChild(i.el):o.bound?p.body.appendChild(i.el):o.field.parentNode.insertBefore(i.el,o.field.nextSibling),c(o.field,"change",i._onInputChange),o.defaultDate||(a&&o.field.value?o.defaultDate=r(o.field.value,o.format).toDate():o.defaultDate=new Date(Date.parse(o.field.value)),o.setDefaultDate=!0));var t=o.defaultDate;U(t)?o.setDefaultDate?i.setDate(t,!0):i.gotoDate(t):i.gotoDate(new Date),o.bound?(this.hide(),i.el.className+=" is-bound",c(o.trigger,"click",i._onInputClick),c(o.trigger,"focus",i._onInputFocus),c(o.trigger,"blur",i._onInputBlur)):this.show()}).prototype={config:function(e){this._o||(this._o=d({},m,!0));var t=d(this._o,e,!0);t.isRTL=!!t.isRTL,t.field=t.field&&t.field.nodeName?t.field:null,t.theme="string"==typeof t.theme&&t.theme?t.theme:null,t.bound=!!(void 0!==t.bound?t.field&&t.bound:t.field),t.trigger=t.trigger&&t.trigger.nodeName?t.trigger:t.field,t.disableWeekends=!!t.disableWeekends,t.disableDayFn="function"==typeof t.disableDayFn?t.disableDayFn:null;var n=parseInt(t.numberOfMonths,10)||1;if(t.numberOfMonths=4=o&&(this._y=o,!isNaN(a)&&this._m>a&&(this._m=a)),t="pika-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2);for(var c=0;c'+v(this,c,this.calendars[c].year,this.calendars[c].month,this.calendars[0].year,t)+this.render(this.calendars[c].year,this.calendars[c].month,t)+"";this.el.innerHTML=s,n.bound&&"hidden"!==n.field.type&&u(function(){n.trigger.focus()},1),"function"==typeof this._o.onDraw&&this._o.onDraw(this),n.bound&&n.field.setAttribute("aria-label",n.ariaLabel)}},adjustPosition:function(){var e,t,n,i,o,r,a,s,c,u,l,d;if(!this._o.container){if(this.el.style.position="absolute",t=e=this._o.trigger,n=this.el.offsetWidth,i=this.el.offsetHeight,o=window.innerWidth||p.documentElement.clientWidth,r=window.innerHeight||p.documentElement.clientHeight,a=window.pageYOffset||p.body.scrollTop||p.documentElement.scrollTop,d=l=!0,"function"==typeof e.getBoundingClientRect)s=(u=e.getBoundingClientRect()).left+window.pageXOffset,c=u.bottom+window.pageYOffset;else for(s=t.offsetLeft,c=t.offsetTop+t.offsetHeight;t=t.offsetParent;)s+=t.offsetLeft,c+=t.offsetTop;(this._o.reposition&&oi.maxDate||i.disableWeekends&&(0===(O=x.getDay())||6===O)||i.disableDayFn&&i.disableDayFn(x),isEmpty:N,isStartRange:k,isEndRange:L,isInRange:M,showDaysInNextAndPreviousMonths:i.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:i.enableSelectionDaysInNextAndPreviousMonths};i.pickWholeWeek&&E&&(T=!0),c.push(q(F)),7==++_&&(i.showWeekNumber&&c.unshift((v=C-a,S=t,y=e,w=void 0,w=new Date(y,0,1),''+Math.ceil(((new Date(y,S,v)-w)/864e5+w.getDay()+1)/7)+"")),s.push((m=c,b=i.isRTL,''+(b?m.reverse():m).join("")+"")),_=0,T=!(c=[]))}return A=s,''+function(e){var t,n=[];for(e.showWeekNumber&&n.push(""),t=0;t<7;t++)n.push('");return""+(e.isRTL?n.reverse():n).join("")+""}(i)+""+A.join("")+"
'+V(e,t,!0)+"
"},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),g(this.el,"is-hidden"),this._o.bound&&(c(p,"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){var e=this._v;!1!==e&&(this._o.bound&&i(p,"click",this._onClick),this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto",f(this.el,"is-hidden"),this._v=!1,void 0!==e&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){var e=this._o;this.hide(),i(this.el,"mousedown",this._onMouseDown,!0),i(this.el,"touchend",this._onMouseDown,!0),i(this.el,"change",this._onChange),e.keyboardInput&&i(p,"keydown",this._onKeyChange),e.field&&(i(e.field,"change",this._onInputChange),e.bound&&(i(e.trigger,"click",this._onInputClick),i(e.trigger,"focus",this._onInputFocus),i(e.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},S)}()},function(e,t){e.exports=window.Autolinker},function(e,t,n){"use strict";n.d(t,"a",function(){return i});var i={eml:"message/rfc822",mime:"message/rfc822",txt:"text/plain",text:"text/plain",def:"text/plain",list:"text/plain",in:"text/plain",ini:"text/plain",log:"text/plain",sql:"text/plain",cfg:"text/plain",conf:"text/plain",asc:"text/plain",rtx:"text/richtext",vcard:"text/vcard",vcf:"text/vcard",htm:"text/html",html:"text/html",csv:"text/csv",ics:"text/calendar",ifb:"text/calendar",xml:"text/xml",json:"application/json",swf:"application/x-shockwave-flash",hlp:"application/winhlp",wgt:"application/widget",chm:"application/vnd.ms-htmlhelp",p10:"application/pkcs10",p7c:"application/pkcs7-mime",p7m:"application/pkcs7-mime",p7s:"application/pkcs7-signature",torrent:"application/x-bittorrent",js:"application/javascript",pl:"text/perl",css:"text/css",asp:"text/asp",php:"application/x-httpd-php",php3:"application/x-httpd-php",php4:"application/x-httpd-php",php5:"application/x-httpd-php",phtml:"application/x-httpd-php",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",jpe:"image/jpeg",jfif:"image/jpeg",gif:"image/gif",bmp:"image/bmp",cgm:"image/cgm",ief:"image/ief",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff",svg:"image/svg+xml",svgz:"image/svg+xml",djv:"image/vnd.djvu",djvu:"image/vnd.djvu",webp:"image/webp",zip:"application/zip","7z":"application/x-7z-compressed",rar:"application/x-rar-compressed",exe:"application/x-msdownload",dll:"application/x-msdownload",scr:"application/x-msdownload",com:"application/x-msdownload",bat:"application/x-msdownload",msi:"application/x-msdownload",cab:"application/vnd.ms-cab-compressed",gz:"application/x-gzip",tgz:"application/x-gzip",bz:"application/x-bzip",bz2:"application/x-bzip2",deb:"application/x-debian-package",psf:"application/x-font-linux-psf",otf:"application/x-font-otf",pcf:"application/x-font-pcf",snf:"application/x-font-snf",ttf:"application/x-font-ttf",ttc:"application/x-font-ttf",mp3:"audio/mpeg",amr:"audio/amr",aac:"audio/x-aac",aif:"audio/x-aiff",aifc:"audio/x-aiff",aiff:"audio/x-aiff",wav:"audio/x-wav",wma:"audio/x-ms-wma",wax:"audio/x-ms-wax",midi:"audio/midi",mp4a:"audio/mp4",ogg:"audio/ogg",weba:"audio/webm",ra:"audio/x-pn-realaudio",ram:"audio/x-pn-realaudio",rmp:"audio/x-pn-realaudio-plugin",m3u:"audio/x-mpegurl",flv:"video/x-flv",qt:"video/quicktime",mov:"video/quicktime",wmv:"video/windows-media",avi:"video/x-msvideo",mpg:"video/mpeg",mpeg:"video/mpeg",mpe:"video/mpeg",m1v:"video/mpeg",m2v:"video/mpeg","3gp":"video/3gpp","3g2":"video/3gpp2",h261:"video/h261",h263:"video/h263",h264:"video/h264",jpgv:"video/jpgv",mp4:"video/mp4",mp4v:"video/mp4",mpg4:"video/mp4",ogv:"video/ogg",webm:"video/webm",m4v:"video/x-m4v",asf:"video/x-ms-asf",asx:"video/x-ms-asf",wm:"video/x-ms-wm",wmx:"video/x-ms-wmx",wvx:"video/x-ms-wvx",movie:"video/x-sgi-movie",pdf:"application/pdf",psd:"image/vnd.adobe.photoshop",ai:"application/postscript",eps:"application/postscript",ps:"application/postscript",doc:"application/msword",dot:"application/msword",rtf:"application/rtf",xls:"application/vnd.ms-excel",ppt:"application/vnd.ms-powerpoint",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",dotx:"application/vnd.openxmlformats-officedocument.wordprocessingml.template",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",odt:"application/vnd.oasis.opendocument.text",ods:"application/vnd.oasis.opendocument.spreadsheet"}},,function(e,t,n){var i=n(140),o=n(108);e.exports=Object.keys||function(e){return i(e,o)}},function(e,t,n){var i=n(32),o=n(149),r=n(52),a=i("unscopables"),s=Array.prototype;null==s[a]&&r.f(s,a,{configurable:!0,value:o(null)}),e.exports=function(e){s[a][e]=!0}},function(e,t,n){"use strict";var b=n(48),v=n(227),S=n(150),y=n(218),w=n(109),O=n(49),A=n(53),i=n(32),T=n(78),C=n(73),o=n(167),_=o.IteratorPrototype,x=o.BUGGY_SAFARI_ITERATORS,E=i("iterator"),j="values",D=function(){return this};e.exports=function(e,t,n,i,o,r,a){v(n,t,i);var s,c,u,l=function(e){if(e===o&&h)return h;if(!x&&e in f)return f[e];switch(e){case"keys":case j:case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},d=t+" Iterator",p=!1,f=e.prototype,g=f[E]||f["@@iterator"]||o&&f[o],h=!x&&g||l(o),m="Array"==t&&f.entries||g;if(m&&(s=S(m.call(new e)),_!==Object.prototype&&s.next&&(T||S(s)===_||(y?y(s,_):"function"!=typeof s[E]&&O(s,E,D)),w(s,d,!0,!0),T&&(C[d]=D))),o==j&&g&&g.name!==j&&(p=!0,h=function(){return g.call(this)}),T&&!a||f[E]===h||O(f,E,h),C[t]=h,o)if(c={values:l(j),keys:r?h:l("keys"),entries:l("entries")},a)for(u in c)!x&&!p&&u in f||A(f,u,c[u]);else b({target:t,proto:!0,forced:x||p},c);return c}},function(e,t,n){var o=n(37),r=n(229);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var n,i=!1,e={};try{(n=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(e,[]),i=e instanceof Array}catch(e){}return function(e,t){return o(e),r(t),i?n.call(e,t):e.__proto__=t,e}}():void 0)},function(e,t,n){n(220);var i=n(308),o=n(75),r=n(83),a=n(155),s=n(68)("toStringTag");for(var c in i){var u=o[c],l=u&&u.prototype;l&&!l[s]&&r(l,s,c),a[c]=a.Array}},function(e,t,n){"use strict";var i=n(94),o=n(239),r=n(155),a=n(292),s=n(296),c="Array Iterator",u=a.set,l=a.getterFor(c);e.exports=s(Array,"Array",function(e,t){u(this,{type:c,target:i(e),index:0,kind:t})},function(){var e=l(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?{value:e.target=void 0,done:!0}:"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}},"values"),r.Arguments=r.Array,o("keys"),o("values"),o("entries")},function(e,t,n){"use strict";n.r(t),n.d(t,"AskPopupView",function(){return f}),n.d(t,"default",function(){return f});var i,o=n(10),r=n(1),a=n(21),s=n.n(a),c=n(0),u=n(2),l=n(9),d=n(7),p=n(28),f=Object(d.popup)({name:"View/Popup/Ask",templateID:"PopupsAsk"})(i=function(t){function e(){var e;return(e=t.call(this)||this).askDesc=r.a.observable(""),e.yesButton=r.a.observable(""),e.noButton=r.a.observable(""),e.yesFocus=r.a.observable(!1),e.noFocus=r.a.observable(!1),e.fYesAction=null,e.fNoAction=null,e.bFocusYesOnShow=!0,e.bDisabeCloseOnEsc=!0,e.sDefaultKeyScope=c.KeyState.PopupAsk,e}Object(o.a)(e,t);var n=e.prototype;return n.clearPopup=function(){this.askDesc(""),this.yesButton(Object(l.i18n)("POPUPS_ASK/BUTTON_YES")),this.noButton(Object(l.i18n)("POPUPS_ASK/BUTTON_NO")),this.yesFocus(!1),this.noFocus(!1),this.fYesAction=null,this.fNoAction=null},n.yesClick=function(){this.cancelCommand(),Object(u.isFunc)(this.fYesAction)&&this.fYesAction.call(null)},n.noClick=function(){this.cancelCommand(),Object(u.isFunc)(this.fNoAction)&&this.fNoAction.call(null)},n.onShow=function(e,t,n,i,o,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===i&&(i=""),void 0===o&&(o=""),void 0===r&&(r=!0),this.clearPopup(),this.fYesAction=t||null,this.fNoAction=n||null,this.askDesc(e||""),i&&this.yesButton(i),o&&this.noButton(o),this.bFocusYesOnShow=!!r},n.onShowWithDelay=function(){this.bFocusYesOnShow&&this.yesFocus(!0)},n.onBuild=function(){var e=this;s()("tab, shift+tab, right, left",c.KeyState.PopupAsk,function(){return e.yesFocus()?e.noFocus(!0):e.yesFocus(!0),!1}),s()("esc",c.KeyState.PopupAsk,function(){return e.noClick(),!1})},e}(p.a))||i},,,function(e,t,n){var i=n(47),a=n(52),s=n(37),c=n(215);e.exports=i?Object.defineProperties:function(e,t){s(e);for(var n,i=c(t),o=i.length,r=0;rdocument.F=Object<\/script>"),e.close(),p=e.F;n--;)delete p[l][r[n]];return p()};e.exports=Object.create||function(e,t){var n;return null!==e?(d[l]=i(e),n=new d,d[l]=null,n[u]=e):n=p(),void 0===t?n:o(n,t)},a[u]=!0},function(e,t,n){var i=n(301),o=n(247);e.exports=Object.keys||function(e){return i(e,o)}},function(e,t,n){var c=n(94),u=n(112),l=n(246),i=function(s){return function(e,t,n){var i,o=c(e),r=u(o.length),a=l(n,r);if(s&&t!=t){for(;a(new l.a.Date).getTime()-c),e&&e.UpdateToken&&g.data.__APP__&&g.data.__APP__.setClientSideToken&&g.data.__APP__.setClientSideToken(e.UpdateToken),a&&r.oRequests[a]&&(r.oRequests[a].__aborted&&(t="abort"),r.oRequests[a]=null),r.defaultResponse(i,a,t,e,n,o)}),a&&0").addClass("rl-settings-view-model").hide()).appendTo(o),n.viewModelDom=r,n.__rlSettingsData=i.__rlSettingsData,i.__dom=r,i.__builded=!0,i.__vm=n;var a={name:i.__rlSettingsData.Template};l.a.applyBindingAccessorsToNode(r[0],{translatorInit:!0,template:function(){return a}},n),Object(p.delegateRun)(n,"onBuild",[r])}else Object(p.log)("Cannot find sub settings view model position: SettingsSubScreen");n&&c.a.defer(function(){e.oCurrentSubScreen&&(Object(p.delegateRun)(e.oCurrentSubScreen,"onHide"),e.oCurrentSubScreen.viewModelDom.hide()),e.oCurrentSubScreen=n,e.oCurrentSubScreen&&(Object(p.delegateRun)(e.oCurrentSubScreen,"onBeforeShow"),e.oCurrentSubScreen.viewModelDom.show(),Object(p.delegateRun)(e.oCurrentSubScreen,"onShow"),Object(p.delegateRun)(e.oCurrentSubScreen,"onShowWithDelay",[],200),c.a.each(e.menu(),function(e){e.selected(n&&n.__rlSettingsData&&e.route===n.__rlSettingsData.Route)}),u()("#rl-content .b-settings .b-content .content").scrollTop(0)),Object(p.windowResize)()})}else Object(g.setHash)(Object(f.z)(),!1,!0)},t.onHide=function(){this.oCurrentSubScreen&&this.oCurrentSubScreen.viewModelDom&&(Object(p.delegateRun)(this.oCurrentSubScreen,"onHide"),this.oCurrentSubScreen.viewModelDom.hide())},t.onBuild=function(){var e=this;c.a.each(d.VIEW_MODELS.settings,function(t){t&&t.__rlSettingsData&&!s()(c.a).call(c.a,d.VIEW_MODELS["settings-removed"],function(e){return e&&e===t})&&e.menu.push({route:t.__rlSettingsData.Route,label:t.__rlSettingsData.Label,selected:l.a.observable(!1),disabled:!!s()(c.a).call(c.a,d.VIEW_MODELS["settings-disabled"],function(e){return e&&e===t})})}),this.oViewModelPlace=u()("#rl-content #rl-settings-subscreen")},t.routes=function(){var e=s()(c.a).call(c.a,d.VIEW_MODELS.settings,function(e){return e&&e.__rlSettingsData&&e.__rlSettingsData.IsDefault}),n=e&&e.__rlSettingsData?e.__rlSettingsData.Route:"general",t={subname:/^(.*)$/,normalize_:function(e,t){return t.subname=Object(p.isUnd)(t.subname)?n:Object(p.pString)(t.subname),[t.subname]}};return[["{subname}/",t],["{subname}",t],["",t]]},e}(n(137).a)},function(e,t,i){"use strict";i.d(t,"a",function(){return E});var n=i(30),o=i.n(n),r=i(10),a=i(4),s=i.n(a),c=i(8),u=i.n(c),l=i(3),d=i.n(l),p=i(1),f=i(21),g=i.n(f),h=i(139),m=i.n(h),b=i(6),v=i(2),S=i(0),y=i(15),w=i(9),O=i(24),A=i(5),T=i(70),C=i(114),_=i(29),x=i(7),E=function(t){function e(){var e;return(e=t.call(this)||this).googlePreviewSupportedCache=null,e.isLocalAutocomplete=!0,e.iframe=null,e.lastErrorTime=0,e.iframe=u()('');else if(c){var p;p=f&&f.youtube?"lg-has-youtube":f&&f.vimeo?"lg-has-vimeo":"lg-has-html5",u.$slide.eq(e).prepend('
')}else f?(u.$slide.eq(e).prepend('
'),u.$el.trigger("hasVideo.lg",[e,a,l])):u.$slide.eq(e).prepend('
');if(u.$el.trigger("onAferAppendSlide.lg",[e]),n=u.$slide.eq(e).find(".lg-object"),r&&n.attr("sizes",r),s){n.attr("srcset",s);try{picturefill({elements:[n[0]]})}catch(t){console.error("Make sure you have included Picturefill version 2")}}".lg-sub-html"!==this.s.appendSubHtmlTo&&u.addHtml(e),u.$slide.eq(e).addClass("lg-loaded")}u.$slide.eq(e).find(".lg-object").on("load.lg error.lg",function(){var t=0;i&&!g("body").hasClass("lg-from-hash")&&(t=i),setTimeout(function(){u.$slide.eq(e).addClass("lg-complete"),u.$el.trigger("onSlideItemLoad.lg",[e,i||0])},t)}),f&&f.html5&&!c&&u.$slide.eq(e).addClass("lg-complete"),!0===t&&(u.$slide.eq(e).hasClass("lg-complete")?u.preload(e):u.$slide.eq(e).find(".lg-object").on("load.lg error.lg",function(){u.preload(e)}))},e.prototype.slide=function(t,e,i){var n=this.$outer.find(".lg-current").index(),o=this;if(!o.lGalleryOn||n!==t){var s=this.$slide.length,r=o.lGalleryOn?this.s.speed:0,a=!1,l=!1;if(!o.lgBusy){var u;if(this.s.download)(u=o.s.dynamic?!1!==o.s.dynamicEl[t].downloadUrl&&(o.s.dynamicEl[t].downloadUrl||o.s.dynamicEl[t].src):"false"!==o.$items.eq(t).attr("data-download-url")&&(o.$items.eq(t).attr("data-download-url")||o.$items.eq(t).attr("href")||o.$items.eq(t).attr("data-src")))?(g("#lg-download").attr("href",u),o.$outer.removeClass("lg-hide-download")):o.$outer.addClass("lg-hide-download");if(this.$el.trigger("onBeforeSlide.lg",[n,t,e,i]),o.lgBusy=!0,clearTimeout(o.hideBartimeout),".lg-sub-html"===this.s.appendSubHtmlTo&&setTimeout(function(){o.addHtml(t)},r),this.arrowDisable(t),e){var c=t-1,h=t+1;0===t&&n===s-1?(h=0,c=s-1):t===s-1&&0===n&&(h=0,c=s-1),this.$slide.removeClass("lg-prev-slide lg-current lg-next-slide"),o.$slide.eq(c).addClass("lg-prev-slide"),o.$slide.eq(h).addClass("lg-next-slide"),o.$slide.eq(t).addClass("lg-current")}else o.$outer.addClass("lg-no-trans"),this.$slide.removeClass("lg-prev-slide lg-next-slide"),te.s.swipeThreshold?e.goToNextSlide(!0):0e.s.swipeThreshold?e.goToPrevSlide(!0):Math.abs(t)<5&&e.$el.trigger("onSlideClick.lg"),e.$slide.removeAttr("style")}),setTimeout(function(){e.$outer.hasClass("lg-dragging")||"lg-slide"===e.s.mode||e.$outer.removeClass("lg-slide")},e.s.speed+100)},e.prototype.enableSwipe=function(){var e=this,i=0,n=0,o=!1;e.s.enableSwipe&&e.isTouch&&e.doCss()&&(e.$slide.on("touchstart.lg",function(t){e.$outer.hasClass("lg-zoomed")||e.lgBusy||(t.preventDefault(),e.manageSwipeClass(),i=t.originalEvent.targetTouches[0].pageX)}),e.$slide.on("touchmove.lg",function(t){e.$outer.hasClass("lg-zoomed")||(t.preventDefault(),n=t.originalEvent.targetTouches[0].pageX,e.touchMove(i,n),o=!0)}),e.$slide.on("touchend.lg",function(){e.$outer.hasClass("lg-zoomed")||(o?(o=!1,e.touchEnd(n-i)):e.$el.trigger("onSlideClick.lg"))}))},e.prototype.enableDrag=function(){var e=this,i=0,n=0,o=!1,s=!1;e.s.enableDrag&&!e.isTouch&&e.doCss()&&(e.$slide.on("mousedown.lg",function(t){e.$outer.hasClass("lg-zoomed")||(g(t.target).hasClass("lg-object")||g(t.target).hasClass("lg-video-play"))&&(t.preventDefault(),e.lgBusy||(e.manageSwipeClass(),i=t.pageX,o=!0,e.$outer.scrollLeft+=1,e.$outer.scrollLeft-=1,e.$outer.removeClass("lg-grab").addClass("lg-grabbing"),e.$el.trigger("onDragstart.lg")))}),g(m).on("mousemove.lg",function(t){o&&(s=!0,n=t.pageX,e.touchMove(i,n),e.$el.trigger("onDragmove.lg"))}),g(m).on("mouseup.lg",function(t){s?(s=!1,e.touchEnd(n-i),e.$el.trigger("onDragend.lg")):(g(t.target).hasClass("lg-object")||g(t.target).hasClass("lg-video-play"))&&e.$el.trigger("onSlideClick.lg"),o&&(o=!1,e.$outer.removeClass("lg-grabbing").addClass("lg-grab"))}))},e.prototype.manageSwipeClass=function(){var t=this.index+1,e=this.index-1,i=this.$slide.length;this.s.loop&&(0===this.index?e=i-1:this.index===i-1&&(t=0)),this.$slide.removeClass("lg-next-slide lg-prev-slide"),-1',s=""}var t,r=this,a="",l="";switch(this.core.s.vimeoThumbSize){case"thumbnail_large":l="640";break;case"thumbnail_medium":l="200x150";break;case"thumbnail_small":l="100x75"}if(r.core.$outer.addClass("lg-has-thumb"),r.core.$outer.find(".lg").append('
'),r.$thumbOuter=r.core.$outer.find(".lg-thumb-outer"),r.thumbOuterWidth=r.$thumbOuter.width(),r.core.s.animateThumb&&r.core.$outer.find(".lg-thumb").css({width:r.thumbTotalWidth+"px",position:"relative"}),this.core.s.animateThumb&&r.$thumbOuter.css("height",r.core.s.thumbContHeight+"px"),r.core.s.dynamic)for(var i=0;ithis.thumbTotalWidth-this.thumbOuterWidth&&(this.left=this.thumbTotalWidth-this.thumbOuterWidth),this.left<0&&(this.left=0),this.core.lGalleryOn?(e.hasClass("on")||this.core.$outer.find(".lg-thumb").css("transition-duration",this.core.s.speed+"ms"),this.core.doCss()||e.animate({left:-this.left+"px"},this.core.s.speed)):this.core.doCss()||e.css("left",-this.left+"px"),this.setTranslate(this.left)}},n.prototype.enableThumbDrag=function(){var e=this,i=0,n=0,o=!1,s=!1,r=0;e.$thumbOuter.addClass("lg-grab"),e.core.$outer.find(".lg-thumb").on("mousedown.lg.thumb",function(t){e.thumbTotalWidth>e.thumbOuterWidth&&(t.preventDefault(),i=t.pageX,o=!0,e.core.$outer.scrollLeft+=1,e.core.$outer.scrollLeft-=1,e.thumbClickable=!1,e.$thumbOuter.removeClass("lg-grab").addClass("lg-grabbing"))}),u(c).on("mousemove.lg.thumb",function(t){o&&(r=e.left,s=!0,n=t.pageX,e.$thumbOuter.addClass("lg-dragging"),(r-=n-i)>e.thumbTotalWidth-e.thumbOuterWidth&&(r=e.thumbTotalWidth-e.thumbOuterWidth),r<0&&(r=0),e.setTranslate(r))}),u(c).on("mouseup.lg.thumb",function(){s?(s=!1,e.$thumbOuter.removeClass("lg-dragging"),e.left=r,Math.abs(n-i)e.thumbOuterWidth&&(t.preventDefault(),i=t.originalEvent.targetTouches[0].pageX,e.thumbClickable=!1)}),e.core.$outer.find(".lg-thumb").on("touchmove.lg",function(t){e.thumbTotalWidth>e.thumbOuterWidth&&(t.preventDefault(),n=t.originalEvent.targetTouches[0].pageX,o=!0,e.$thumbOuter.addClass("lg-dragging"),s=e.left,(s-=n-i)>e.thumbTotalWidth-e.thumbOuterWidth&&(s=e.thumbTotalWidth-e.thumbOuterWidth),s<0&&(s=0),e.setTranslate(s))}),e.core.$outer.find(".lg-thumb").on("touchend.lg",function(){e.thumbTotalWidth>e.thumbOuterWidth&&o?(o=!1,e.$thumbOuter.removeClass("lg-dragging"),Math.abs(n-i)'),t.core.$outer.find(".lg-toogle-thumb").on("click.lg",function(){t.core.$outer.toggleClass("lg-thumb-open")}))},n.prototype.thumbkeyPress=function(){var e=this;u(c).on("keydown.lg.thumb",function(t){38===t.keyCode?(t.preventDefault(),e.core.$outer.addClass("lg-thumb-open")):40===t.keyCode&&(t.preventDefault(),e.core.$outer.removeClass("lg-thumb-open"))})},n.prototype.destroy=function(){this.core.s.thumbnail&&1';r.core.s.actualSize&&(t+=''),this.core.$outer.find(".lg-toolbar").append(t),r.core.$el.on("onSlideItemLoad.lg.tm.zoom",function(t,e,i){var n=r.core.s.enableZoomAfter+i;h("body").hasClass("lg-from-hash")&&i?n=0:h("body").removeClass("lg-from-hash"),r.zoomabletimeout=setTimeout(function(){r.core.$slide.eq(e).addClass("lg-zoomable")},n+30)});var a=1,e=function(t){var e=r.core.$outer.find(".lg-current .lg-image"),i=(h(d).width()-e.width())/2,n=(h(d).height()-e.height())/2+h(d).scrollTop(),o=(t-1)*(r.pageX-i),s=(t-1)*(r.pageY-n);e.css("transform","scale3d("+t+", "+t+", 1)").attr("data-scale",t),e.parent().css({left:-o+"px",top:-s+"px"}).attr("data-x",o).attr("data-y",s)},l=function(){1o.core.$outer.find(".lg").height(),((l=e.outerWidth()*e.attr("data-scale")>o.core.$outer.find(".lg").width())||u)&&(t.preventDefault(),s={x:t.originalEvent.targetTouches[0].pageX,y:t.originalEvent.targetTouches[0].pageY})}}),o.core.$slide.on("touchmove.lg",function(t){if(o.core.$outer.hasClass("lg-zoomed")){var e,i,n=o.core.$slide.eq(o.core.index).find(".lg-img-wrap");t.preventDefault(),a=!0,r={x:t.originalEvent.targetTouches[0].pageX,y:t.originalEvent.targetTouches[0].pageY},o.core.$outer.addClass("lg-zoom-dragging"),i=u?-Math.abs(n.attr("data-y"))+(r.y-s.y):-Math.abs(n.attr("data-y")),e=l?-Math.abs(n.attr("data-x"))+(r.x-s.x):-Math.abs(n.attr("data-x")),(15o.core.$outer.find(".lg").height(),u=e.outerWidth()*e.attr("data-scale")>o.core.$outer.find(".lg").width(),o.core.$outer.hasClass("lg-zoomed")&&h(t.target).hasClass("lg-object")&&(u||c)&&(t.preventDefault(),s={x:t.pageX,y:t.pageY},a=!0,o.core.$outer.scrollLeft+=1,o.core.$outer.scrollLeft-=1,o.core.$outer.removeClass("lg-grab").addClass("lg-grabbing"))}),h(d).on("mousemove.lg.zoom",function(t){if(a){var e,i,n=o.core.$slide.eq(o.core.index).find(".lg-img-wrap");l=!0,r={x:t.pageX,y:t.pageY},o.core.$outer.addClass("lg-zoom-dragging"),i=c?-Math.abs(n.attr("data-y"))+(r.y-s.y):-Math.abs(n.attr("data-y")),e=u?-Math.abs(n.attr("data-x"))+(r.x-s.x):-Math.abs(n.attr("data-x")),n.css({left:e+"px",top:i+"px"})}}),h(d).on("mouseup.lg.zoom",function(t){a&&(a=!1,o.core.$outer.removeClass("lg-zoom-dragging"),!l||s.x===r.x&&s.y===r.y||(r={x:t.pageX,y:t.pageY},o.touchendZoom(s,r,u,c)),l=!1),o.core.$outer.removeClass("lg-grabbing").addClass("lg-grab")})},n.prototype.touchendZoom=function(t,e,i,n){var o=this.core.$slide.eq(this.core.index).find(".lg-img-wrap"),s=this.core.$slide.eq(this.core.index).find(".lg-object"),r=-Math.abs(o.attr("data-x"))+(e.x-t.x),a=-Math.abs(o.attr("data-y"))+(e.y-t.y),l=(this.core.$outer.find(".lg").height()-s.outerHeight())/2,u=Math.abs(s.outerHeight()*Math.abs(s.attr("data-scale"))-this.core.$outer.find(".lg").height()+l),c=(this.core.$outer.find(".lg").width()-s.outerWidth())/2,h=Math.abs(s.outerWidth()*Math.abs(s.attr("data-scale"))-this.core.$outer.find(".lg").width()+c);(15
'),t.progress(),t.core.s.autoplay&&t.startlAuto(),t.$el.on("onDragstart.lg.tm touchstart.lg.tm",function(){t.interval&&(t.cancelAuto(),t.canceledOnTouch=!0)}),t.$el.on("onDragend.lg.tm touchend.lg.tm onSlideClick.lg.tm",function(){!t.interval&&t.canceledOnTouch&&(t.startlAuto(),t.canceledOnTouch=!1)})},s.prototype.progress=function(){var t,e,i=this;i.$el.on("onBeforeSlide.lg.tm",function(){i.core.s.progressBar&&i.fromAuto&&(t=i.core.$outer.find(".lg-progress-bar"),e=i.core.$outer.find(".lg-progress"),i.interval&&(e.removeAttr("style"),t.removeClass("lg-start"),setTimeout(function(){e.css("transition","width "+(i.core.s.speed+i.core.s.pause)+"ms ease 0s"),t.addClass("lg-start")},20))),i.fromAuto||i.core.s.fourceAutoplay||i.cancelAuto(),i.fromAuto=!1})},s.prototype.controls=function(){var t=this;e(this.core.s.appendAutoplayControlsTo).append(''),t.core.$outer.find(".lg-autoplay-button").on("click.lg",function(){e(t.core.$outer).hasClass("lg-show-autoplay")?(t.cancelAuto(),t.core.s.fourceAutoplay=!1):t.interval||(t.startlAuto(),t.core.s.fourceAutoplay=t.fourceAutoplayTemp)})},s.prototype.startlAuto=function(){var t=this;t.core.$outer.find(".lg-progress").css("transition","width "+(t.core.s.speed+t.core.s.pause)+"ms ease 0s"),t.core.$outer.addClass("lg-show-autoplay"),t.core.$outer.find(".lg-progress-bar").addClass("lg-start"),t.interval=setInterval(function(){t.core.index+1r;){var e,o,i,c=h[r++],u=n?c.ok:c.fail,a=c.resolve,f=c.reject,s=c.domain;try{u?(n||(2===p.rejection&&rt(l,p),p.rejection=1),!0===u?e=t:(s&&s.enter(),e=u(t),s&&(s.exit(),i=!0)),e===c.promise?f(q("Promise-chain cycle")):(o=Q(e))?o.call(e,a,f):a(e)):f(t)}catch(t){s&&!i&&s.exit(),f(t)}}p.reactions=[],p.notified=!1,v&&!p.rejection&&tt(l,p)})}},$=function(t,n,r){var e,o;Y?((e=V.createEvent("Event")).promise=n,e.reason=r,e.initEvent(t,!1,!0),f.dispatchEvent(e)):e={promise:n,reason:r},(o=f["on"+t])?o(e):t===K&&P("Unhandled promise rejection",r)},tt=function(r,e){O.call(f,function(){var t,n=e.value;if(nt(e)&&(t=L(function(){U?z.emit("unhandledRejection",n,r):$(K,r,n)}),e.rejection=U||nt(e)?2:1,t.error))throw t.value})},nt=function(t){return 1!==t.rejection&&!t.parent},rt=function(t,n){O.call(f,function(){U?z.emit("rejectionHandled",t):$("rejectionhandled",t,n.value)})},et=function(n,r,e,o){return function(t){n(r,e,t,o)}},ot=function(t,n,r,e){n.done||(n.done=!0,e&&(n=e),n.value=r,n.state=2,Z(t,n,!0))},it=function(r,e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(r===t)throw q("Promise can't be resolved itself");var o=Q(t);o?T(function(){var n={done:!1};try{o.call(t,et(it,r,n,e),et(ot,r,n,e))}catch(t){ot(r,n,t,e)}}):(e.value=t,e.state=1,Z(r,e,!1))}catch(t){ot(r,{done:!1},t,e)}}};X&&(N=function(t){m(this,N,R),g(t),e.call(this);var n=F(this);try{t(et(it,this,n),et(ot,this,n))}catch(t){ot(this,n,t)}},(e=function(t){D(this,{type:R,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=v(N.prototype,{then:function(t,n){var r=G(this),e=W(j(this,N));return e.ok="function"!=typeof t||t,e.fail="function"==typeof n&&n,e.domain=U?z.domain:void 0,r.parent=!0,r.reactions.push(e),0!=r.state&&Z(this,r,!1),e.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new e,n=F(t);this.promise=t,this.resolve=et(it,t,n),this.reject=et(ot,t,n)},A.f=W=function(t){return t===N||t===i?new o(t):B(t)},a||"function"!=typeof l||(c=l.prototype.then,p(l.prototype,"then",function(t,n){var r=this;return new N(function(t,n){c.call(r,t,n)}).then(t,n)},{unsafe:!0}),"function"==typeof H&&u({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return E(N,H.apply(f,arguments))}}))),u({global:!0,wrap:!0,forced:X},{Promise:N}),h(N,R,!1,!0),y(R),i=s(R),u({target:R,stat:!0,forced:X},{reject:function(t){var n=W(this);return n.reject.call(void 0,t),n.promise}}),u({target:R,stat:!0,forced:a||X},{resolve:function(t){return E(a&&this===i?N:this,t)}}),u({target:R,stat:!0,forced:J},{all:function(t){var u=this,n=W(u),a=n.resolve,f=n.reject,r=L(function(){var e=g(u.resolve),o=[],i=0,c=1;w(t,function(t){var n=i++,r=!1;o.push(void 0),c++,e.call(u,t).then(function(t){r||(r=!0,o[n]=t,--c||a(o))},f)}),--c||a(o)});return r.error&&f(r.value),n.promise},race:function(t){var r=this,e=W(r),o=e.reject,n=L(function(){var n=g(r.resolve);w(t,function(t){n.call(r,t).then(e.resolve,o)})});return n.error&&o(n.value),e.promise}})},,,function(t,n){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,n,r){var o=r(44);t.exports=function(t,n){if(!o(t))return t;var r,e;if(n&&"function"==typeof(r=t.toString)&&!o(e=r.call(t)))return e;if("function"==typeof(r=t.valueOf)&&!o(e=r.call(t)))return e;if(!n&&"function"==typeof(r=t.toString)&&!o(e=r.call(t)))return e;throw TypeError("Can't convert object to primitive value")}},function(t,n,r){var e=r(47),o=r(36),i=r(101);t.exports=!e&&!o(function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(27),o=r(91),i="__core-js_shared__",c=e[i]||o(i,{});t.exports=c},function(t,n,r){var e=r(78),o=r(126);(t.exports=function(t,n){return o[t]||(o[t]=void 0!==n?n:{})})("versions",[]).push({version:"3.6.4",mode:e?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(t,n){var r=0,e=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++r+e).toString(36)}},function(t,n,r){var e=r(36),o=/#|\.prototype\./,i=function(t,n){var r=u[c(t)];return r==f||r!=a&&("function"==typeof n?e(n):!!n)},c=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},u=i.data={},a=i.NATIVE="N",f=i.POLYFILL="P";t.exports=i},function(t,n,r){var e=r(36);t.exports=!!Object.getOwnPropertySymbols&&!e(function(){return!String(Symbol())})},function(t,n,r){var e=r(93),o=r(50),i=r(32)("toStringTag"),c="Arguments"==o(function(){return arguments}());t.exports=e?o:function(t){var n,r,e;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),i))?r:c?o(n):"Object"==(e=o(n))&&"function"==typeof n.callee?"Arguments":e}},function(t,n,r){var e,o,i,c=r(27),u=r(36),a=r(50),f=r(103),s=r(141),l=r(101),p=r(133),v=c.location,h=c.setImmediate,y=c.clearImmediate,d=c.process,g=c.MessageChannel,m=c.Dispatch,x=0,b={},w="onreadystatechange",S=function(t){if(b.hasOwnProperty(t)){var n=b[t];delete b[t],n()}},j=function(t){return function(){S(t)}},O=function(t){S(t.data)},T=function(t){c.postMessage(t+"",v.protocol+"//"+v.host)};h&&y||(h=function(t){for(var n=[],r=1;arguments.length>r;)n.push(arguments[r++]);return b[++x]=function(){("function"==typeof t?t:Function(t)).apply(void 0,n)},e(x),x},y=function(t){delete b[t]},"process"==a(d)?e=function(t){d.nextTick(j(t))}:m&&m.now?e=function(t){m.now(j(t))}:g&&!p?(i=(o=new g).port2,o.port1.onmessage=O,e=f(i.postMessage,i,1)):!c.addEventListener||"function"!=typeof postMessage||c.importScripts||u(T)?e=w in l("script")?function(t){s.appendChild(l("script"))[w]=function(){s.removeChild(this),S(t)}}:function(t){setTimeout(j(t),0)}:(e=T,c.addEventListener("message",O,!1))),t.exports={set:h,clear:y}},function(t,n,r){var e=r(104);t.exports=/(iphone|ipod|ipad).*applewebkit/i.test(e)},,,,,,,function(t,n,r){var c=r(42),u=r(71),a=r(165).indexOf,f=r(102);t.exports=function(t,n){var r,e=u(t),o=0,i=[];for(r in e)!c(f,r)&&c(e,r)&&i.push(r);for(;n.length>o;)c(e,r=n[o++])&&(~a(i,r)||i.push(r));return i}},function(t,n,r){var e=r(59);t.exports=e("document","documentElement")},function(t,n,r){var v=r(37),h=r(190),y=r(72),d=r(103),g=r(191),m=r(192),x=function(t,n){this.stopped=t,this.result=n};(t.exports=function(t,n,r,e,o){var i,c,u,a,f,s,l,p=d(n,r,e?2:1);if(o)i=t;else{if("function"!=typeof(c=g(t)))throw TypeError("Target is not iterable");if(h(c)){for(u=0,a=y(t.length);u"+t+""},d=function(){try{e=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,n;d=e?function(t){t.write(y("")),t.close();var n=t.parentWindow.Object;return t=null,n}(e):((n=f("iframe")).style.display="none",a.appendChild(n),n.src=String("javascript:"),(t=n.contentWindow.document).open(),t.write(y("document.F=Object")),t.close(),t.F);for(var r=c.length;r--;)delete d[l][c[r]];return d()};u[v]=!0,t.exports=Object.create||function(t,n){var r;return null!==t?(h[l]=o(t),r=new h,h[l]=null,r[v]=t):r=d(),void 0===n?r:i(r,n)}},function(t,n,r){var e=r(42),o=r(119),i=r(107),c=r(228),u=i("IE_PROTO"),a=Object.prototype;t.exports=c?Object.getPrototypeOf:function(t){return t=o(t),e(t,u)?t[u]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,n,r){var e,o,i=r(27),c=r(104),u=i.process,a=u&&u.versions,f=a&&a.v8;f?o=(e=f.split("."))[0]+e[1]:c&&(!(e=c.match(/Edge\/(\d+)/))||74<=e[1])&&(e=c.match(/Chrome\/(\d+)/))&&(o=e[1]),t.exports=o&&+o},,,,,,,,,,,,,function(t,n,r){"use strict";var e={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!e.call({1:2},1);n.f=i?function(t){var n=o(this,t);return!!n&&n.enumerable}:e},function(t,n,r){var a=r(71),f=r(72),s=r(182),e=function(u){return function(t,n,r){var e,o=a(t),i=f(o.length),c=s(r,i);if(u&&n!=n){for(;c=n.length?{value:t.target=void 0,done:!0}:"keys"==r?{value:e,done:!1}:"values"==r?{value:n[e],done:!1}:{value:[e,n[e]],done:!1}},"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(t,n,r){var o=r(53);t.exports=function(t,n,r){for(var e in n)o(t,e,n[e],r);return t}},function(t,n,r){"use strict";var e=r(59),o=r(52),i=r(32),c=r(47),u=i("species");t.exports=function(t){var n=e(t),r=o.f;c&&n&&!n[u]&&r(n,u,{configurable:!0,get:function(){return this}})}},function(t,n){t.exports=function(t,n,r){if(!(t instanceof n))throw TypeError("Incorrect "+(r?r+" ":"")+"invocation");return t}},function(t,n,r){var e=r(32),o=r(73),i=e("iterator"),c=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||c[i]===t)}},function(t,n,r){var e=r(131),o=r(73),i=r(32)("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[e(t)]}},function(t,n,r){var i=r(37);t.exports=function(n,t,r,e){try{return e?t(i(r)[0],r[1]):t(r)}catch(t){var o=n.return;throw void 0!==o&&i(o.call(n)),t}}},function(t,n,r){var o=r(32)("iterator"),i=!1;try{var e=0,c={next:function(){return{done:!!e++}},return:function(){i=!0}};c[o]=function(){return this},Array.from(c,function(){throw 2})}catch(t){}t.exports=function(t,n){if(!n&&!i)return!1;var r=!1;try{var e={};e[o]=function(){return{next:function(){return{done:r=!0}}}},t(e)}catch(t){}return r}},function(t,n,r){var e,o,i,c,u,a,f,s,l=r(27),p=r(89).f,v=r(50),h=r(132).set,y=r(133),d=l.MutationObserver||l.WebKitMutationObserver,g=l.process,m=l.Promise,x="process"==v(g),b=p(l,"queueMicrotask"),w=b&&b.value;w||(e=function(){var t,n;for(x&&(t=g.domain)&&t.exit();o;){n=o.fn,o=o.next;try{n()}catch(t){throw o?c():i=void 0,t}}i=void 0,t&&t.enter()},c=x?function(){g.nextTick(e)}:d&&!y?(u=!0,a=document.createTextNode(""),new d(e).observe(a,{characterData:!0}),function(){a.data=u=!u}):m&&m.resolve?(f=m.resolve(void 0),s=f.then,function(){s.call(f,e)}):function(){h.call(l,e)}),t.exports=w||function(t){var n={fn:t,next:void 0};i&&(i.next=n),o||(o=n,c()),i=n}},function(t,n,r){var e=r(27);t.exports=function(t,n){var r=e.console;r&&r.error&&(1===arguments.length?r.error(t):r.error(t,n))}},,,,,,,,,,,,,,,,,,,,function(t,n,r){var e=r(140),o=r(108);t.exports=Object.keys||function(t){return e(t,o)}},function(t,n,r){var e=r(32),o=r(149),i=r(52),c=e("unscopables"),u=Array.prototype;null==u[c]&&i.f(u,c,{configurable:!0,value:o(null)}),t.exports=function(t){u[c][t]=!0}},function(t,n,r){"use strict";var g=r(48),m=r(227),x=r(150),b=r(218),w=r(109),S=r(49),j=r(53),e=r(32),O=r(78),T=r(73),o=r(167),E=o.IteratorPrototype,P=o.BUGGY_SAFARI_ITERATORS,A=e("iterator"),L="values",M="entries",k=function(){return this};t.exports=function(t,n,r,e,o,i,c){m(r,n,e);var u,a,f,s=function(t){if(t===o&&y)return y;if(!P&&t in v)return v[t];switch(t){case"keys":case L:case M:return function(){return new r(this,t)}}return function(){return new r(this)}},l=n+" Iterator",p=!1,v=t.prototype,h=v[A]||v["@@iterator"]||o&&v[o],y=!P&&h||s(o),d="Array"==n&&v.entries||h;if(d&&(u=x(d.call(new t)),E!==Object.prototype&&u.next&&(O||x(u)===E||(b?b(u,E):"function"!=typeof u[A]&&S(u,A,k)),w(u,l,!0,!0),O&&(T[l]=k))),o==L&&h&&h.name!==L&&(p=!0,y=function(){return h.call(this)}),O&&!c||v[A]===y||S(v,A,y),T[n]=y,o)if(a={values:s(L),keys:i?y:s("keys"),entries:s(M)},c)for(f in a)!P&&!p&&f in v||j(v,f,a[f]);else g({target:n,proto:!0,forced:P||p},a);return a}},function(t,n,r){var o=r(37),i=r(229);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var r,e=!1,t={};try{(r=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(t,[]),e=t instanceof Array}catch(t){}return function(t,n){return o(t),i(n),e?r.call(t,n):t.__proto__=n,t}}():void 0)},,,,,,function(t,n,r){var e=r(47),c=r(52),u=r(37),a=r(215);t.exports=e?Object.defineProperties:function(t,n){u(t);for(var r,e=a(n),o=e.length,i=0;i=r.length?{value:void 0,done:!0}:(t=o(r,e),n.index+=t.length,{value:t,done:!1})})},function(t,n,r){"use strict";var e=r(48),o=r(78),i=r(168),c=r(36),u=r(59),a=r(143),f=r(169),s=r(53);e({target:"Promise",proto:!0,real:!0,forced:!!i&&c(function(){i.prototype.finally.call({then:function(){}},function(){})})},{finally:function(n){var r=a(this,u("Promise")),t="function"==typeof n;return this.then(t?function(t){return f(r,n()).then(function(){return t})}:n,t?function(t){return f(r,n()).then(function(){throw t})}:n)}}),o||"function"!=typeof i||i.prototype.finally||s(i.prototype,"finally",u("Promise").prototype.finally)},function(t,n,r){"use strict";var e=r(48),o=r(47),i=r(150),c=r(218),u=r(149),a=r(52),f=r(90),s=r(142),l=r(49),p=r(86),v=p.set,h=p.getterFor("AggregateError"),y=function(t,n){var r=this;if(!(r instanceof y))return new y(t,n);c&&(r=c(new Error(n),i(r)));var e=[];return s(t,e.push,e),o?v(r,{errors:e,type:"AggregateError"}):r.errors=e,void 0!==n&&l(r,"message",String(n)),r};y.prototype=u(Error.prototype,{constructor:f(5,y),message:f(5,""),name:f(5,"AggregateError")}),o&&a.f(y.prototype,"errors",{get:function(){return h(this).errors},configurable:!0}),e({global:!0},{AggregateError:y})},function(t,n,r){r(398)},function(t,n,r){"use strict";var e=r(48),o=r(105),i=r(144);e({target:"Promise",stat:!0},{try:function(t){var n=o.f(this),r=i(t);return(r.error?n.reject:n.resolve)(r.value),n.promise}})},function(t,n,r){"use strict";var e=r(48),l=r(66),p=r(59),o=r(105),i=r(144),v=r(142),h="No one promise resolved";e({target:"Promise",stat:!0},{any:function(t){var a=this,n=o.f(a),f=n.resolve,s=n.reject,r=i(function(){var e=l(a.resolve),o=[],i=0,c=1,u=!1;v(t,function(t){var n=i++,r=!1;o.push(void 0),c++,e.call(a,t).then(function(t){r||u||(u=!0,f(t))},function(t){r||u||(r=!0,o[n]=t,--c||s(new(p("AggregateError"))(o,h)))})}),--c||s(new(p("AggregateError"))(o,h))});return r.error&&s(r.value),n.promise}})},function(t,n,r){r(487).polyfill()},function(l,t,p){(function(t){for(var e=p(488),n="undefined"==typeof window?t:window,r=["moz","webkit"],o="AnimationFrame",i=n["request"+o],c=n["cancel"+o]||n["cancelRequest"+o],u=0;!i&&u 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - - -/***/ }), -/* 73 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/iterators.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 74 */, -/* 75 */, -/* 76 */, -/* 77 */, -/* 78 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), -/* 79 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/to-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var ceil = Math.ceil; -var floor = Math.floor; - -// `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger -module.exports = function (argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); -}; - - -/***/ }), -/* 80 */, -/* 81 */, -/* 82 */, -/* 83 */, -/* 84 */, -/* 85 */, -/* 86 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/internal-state.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 178); -var global = __webpack_require__(/*! ../internals/global */ 27); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var objectHas = __webpack_require__(/*! ../internals/has */ 42); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); - -var WeakMap = global.WeakMap; -var set, get, has; - -var enforce = function (it) { - return has(it) ? get(it) : set(it, {}); -}; - -var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject(it) || (state = get(it)).type !== TYPE) { - throw TypeError('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; -}; - -if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; - set = function (it, metadata) { - wmset.call(store, it, metadata); - return metadata; - }; - get = function (it) { - return wmget.call(store, it) || {}; - }; - has = function (it) { - return wmhas.call(store, it); - }; -} else { - var STATE = sharedKey('state'); - hiddenKeys[STATE] = true; - set = function (it, metadata) { - createNonEnumerableProperty(it, STATE, metadata); - return metadata; - }; - get = function (it) { - return objectHas(it, STATE) ? it[STATE] : {}; - }; - has = function (it) { - return objectHas(it, STATE); - }; -} - -module.exports = { - set: set, - get: get, - has: has, - enforce: enforce, - getterFor: getterFor -}; - - -/***/ }), -/* 87 */, -/* 88 */, -/* 89 */ -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! - \******************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 164); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); -var has = __webpack_require__(/*! ../internals/has */ 42); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); - -var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor -exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 90 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 91 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); - -module.exports = function (key, value) { - try { - createNonEnumerableProperty(global, key, value); - } catch (error) { - global[key] = value; - } return value; -}; - - -/***/ }), -/* 92 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/inspect-source.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var store = __webpack_require__(/*! ../internals/shared-store */ 126); - -var functionToString = Function.toString; - -// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper -if (typeof store.inspectSource != 'function') { - store.inspectSource = function (it) { - return functionToString.call(it); - }; -} - -module.exports = store.inspectSource; - - -/***/ }), -/* 93 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; - -module.exports = String(test) === '[object z]'; - - -/***/ }), -/* 94 */, -/* 95 */, -/* 96 */, -/* 97 */, -/* 98 */, -/* 99 */, -/* 100 */, -/* 101 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/document-create-element.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -var document = global.document; -// typeof document.createElement is 'object' in old IE -var EXISTS = isObject(document) && isObject(document.createElement); - -module.exports = function (it) { - return EXISTS ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 102 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/hidden-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 103 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/function-bind-context.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); - -// optional / simple context binding -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 0: return function () { - return fn.call(that); - }; - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 104 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/engine-user-agent.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); - -module.exports = getBuiltIn('navigator', 'userAgent') || ''; - - -/***/ }), -/* 105 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/new-promise-capability.js ***! - \******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); - -var PromiseCapability = function (C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); -}; - -// 25.4.1.5 NewPromiseCapability(C) -module.exports.f = function (C) { - return new PromiseCapability(C); -}; - - -/***/ }), -/* 106 */, -/* 107 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/shared-key.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ../internals/shared */ 127); -var uid = __webpack_require__(/*! ../internals/uid */ 128); - -var keys = shared('keys'); - -module.exports = function (key) { - return keys[key] || (keys[key] = uid(key)); -}; - - -/***/ }), -/* 108 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// IE8- don't enum bug keys -module.exports = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' -]; - - -/***/ }), -/* 109 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; -var has = __webpack_require__(/*! ../internals/has */ 42); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - -module.exports = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } -}; - - -/***/ }), -/* 110 */, -/* 111 */, -/* 112 */, -/* 113 */, -/* 114 */, -/* 115 */, -/* 116 */, -/* 117 */, -/* 118 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/indexed-object.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); - -var split = ''.split; - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -module.exports = fails(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins - return !Object('z').propertyIsEnumerable(0); -}) ? function (it) { - return classof(it) == 'String' ? split.call(it, '') : Object(it); -} : Object; - - -/***/ }), -/* 119 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); - -// `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject -module.exports = function (argument) { - return Object(requireObjectCoercible(argument)); -}; - - -/***/ }), -/* 120 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/es.promise.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var global = __webpack_require__(/*! ../internals/global */ 27); -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 168); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 187); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 188); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 189); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 193); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var task = __webpack_require__(/*! ../internals/task */ 132).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 194); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 169); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 195); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); - -var SPECIES = wellKnownSymbol('species'); -var PROMISE = 'Promise'; -var getInternalState = InternalStateModule.get; -var setInternalState = InternalStateModule.set; -var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); -var PromiseConstructor = NativePromise; -var TypeError = global.TypeError; -var document = global.document; -var process = global.process; -var $fetch = getBuiltIn('fetch'); -var newPromiseCapability = newPromiseCapabilityModule.f; -var newGenericPromiseCapability = newPromiseCapability; -var IS_NODE = classof(process) == 'process'; -var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); -var UNHANDLED_REJECTION = 'unhandledrejection'; -var REJECTION_HANDLED = 'rejectionhandled'; -var PENDING = 0; -var FULFILLED = 1; -var REJECTED = 2; -var HANDLED = 1; -var UNHANDLED = 2; -var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; - -var FORCED = isForced(PROMISE, function () { - var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); - if (!GLOBAL_CORE_JS_PROMISE) { - // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables - // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // We can't detect it synchronously, so just check versions - if (V8_VERSION === 66) return true; - // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test - if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true; - } - // We need Promise#finally in the pure version for preventing prototype pollution - if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; - // We can't use @@species feature detection in V8 since it causes - // deoptimization and performance degradation - // https://github.com/zloirock/core-js/issues/679 - if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; - // Detect correctness of subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var FakePromise = function (exec) { - exec(function () { /* empty */ }, function () { /* empty */ }); - }; - var constructor = promise.constructor = {}; - constructor[SPECIES] = FakePromise; - return !(promise.then(function () { /* empty */ }) instanceof FakePromise); -}); - -var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { - PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); -}); - -// helpers -var isThenable = function (it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; -}; - -var notify = function (promise, state, isReject) { - if (state.notified) return; - state.notified = true; - var chain = state.reactions; - microtask(function () { - var value = state.value; - var ok = state.state == FULFILLED; - var index = 0; - // variable length - can't use forEach - while (chain.length > index) { - var reaction = chain[index++]; - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - try { - if (handler) { - if (!ok) { - if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); - state.rejection = HANDLED; - } - if (handler === true) result = value; - else { - if (domain) domain.enter(); - result = handler(value); // can throw - if (domain) { - domain.exit(); - exited = true; - } - } - if (result === reaction.promise) { - reject(TypeError('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (error) { - if (domain && !exited) domain.exit(); - reject(error); - } - } - state.reactions = []; - state.notified = false; - if (isReject && !state.rejection) onUnhandled(promise, state); - }); -}; - -var dispatchEvent = function (name, promise, reason) { - var event, handler; - if (DISPATCH_EVENT) { - event = document.createEvent('Event'); - event.promise = promise; - event.reason = reason; - event.initEvent(name, false, true); - global.dispatchEvent(event); - } else event = { promise: promise, reason: reason }; - if (handler = global['on' + name]) handler(event); - else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); -}; - -var onUnhandled = function (promise, state) { - task.call(global, function () { - var value = state.value; - var IS_UNHANDLED = isUnhandled(state); - var result; - if (IS_UNHANDLED) { - result = perform(function () { - if (IS_NODE) { - process.emit('unhandledRejection', value, promise); - } else dispatchEvent(UNHANDLED_REJECTION, promise, value); - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; - if (result.error) throw result.value; - } - }); -}; - -var isUnhandled = function (state) { - return state.rejection !== HANDLED && !state.parent; -}; - -var onHandleUnhandled = function (promise, state) { - task.call(global, function () { - if (IS_NODE) { - process.emit('rejectionHandled', promise); - } else dispatchEvent(REJECTION_HANDLED, promise, state.value); - }); -}; - -var bind = function (fn, promise, state, unwrap) { - return function (value) { - fn(promise, state, value, unwrap); - }; -}; - -var internalReject = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - state.value = value; - state.state = REJECTED; - notify(promise, state, true); -}; - -var internalResolve = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - try { - if (promise === value) throw TypeError("Promise can't be resolved itself"); - var then = isThenable(value); - if (then) { - microtask(function () { - var wrapper = { done: false }; - try { - then.call(value, - bind(internalResolve, promise, wrapper, state), - bind(internalReject, promise, wrapper, state) - ); - } catch (error) { - internalReject(promise, wrapper, error, state); - } - }); - } else { - state.value = value; - state.state = FULFILLED; - notify(promise, state, false); - } - } catch (error) { - internalReject(promise, { done: false }, error, state); - } -}; - -// constructor polyfill -if (FORCED) { - // 25.4.3.1 Promise(executor) - PromiseConstructor = function Promise(executor) { - anInstance(this, PromiseConstructor, PROMISE); - aFunction(executor); - Internal.call(this); - var state = getInternalState(this); - try { - executor(bind(internalResolve, this, state), bind(internalReject, this, state)); - } catch (error) { - internalReject(this, state, error); - } - }; - // eslint-disable-next-line no-unused-vars - Internal = function Promise(executor) { - setInternalState(this, { - type: PROMISE, - done: false, - notified: false, - parent: false, - reactions: [], - rejection: false, - state: PENDING, - value: undefined - }); - }; - Internal.prototype = redefineAll(PromiseConstructor.prototype, { - // `Promise.prototype.then` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.then - then: function then(onFulfilled, onRejected) { - var state = getInternalPromiseState(this); - var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE ? process.domain : undefined; - state.parent = true; - state.reactions.push(reaction); - if (state.state != PENDING) notify(this, state, false); - return reaction.promise; - }, - // `Promise.prototype.catch` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.catch - 'catch': function (onRejected) { - return this.then(undefined, onRejected); - } - }); - OwnPromiseCapability = function () { - var promise = new Internal(); - var state = getInternalState(promise); - this.promise = promise; - this.resolve = bind(internalResolve, promise, state); - this.reject = bind(internalReject, promise, state); - }; - newPromiseCapabilityModule.f = newPromiseCapability = function (C) { - return C === PromiseConstructor || C === PromiseWrapper - ? new OwnPromiseCapability(C) - : newGenericPromiseCapability(C); - }; - - if (!IS_PURE && typeof NativePromise == 'function') { - nativeThen = NativePromise.prototype.then; - - // wrap native Promise#then for native async functions - redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { - var that = this; - return new PromiseConstructor(function (resolve, reject) { - nativeThen.call(that, resolve, reject); - }).then(onFulfilled, onRejected); - // https://github.com/zloirock/core-js/issues/640 - }, { unsafe: true }); - - // wrap fetch result - if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { - // eslint-disable-next-line no-unused-vars - fetch: function fetch(input /* , init */) { - return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); - } - }); - } -} - -$({ global: true, wrap: true, forced: FORCED }, { - Promise: PromiseConstructor -}); - -setToStringTag(PromiseConstructor, PROMISE, false, true); -setSpecies(PROMISE); - -PromiseWrapper = getBuiltIn(PROMISE); - -// statics -$({ target: PROMISE, stat: true, forced: FORCED }, { - // `Promise.reject` method - // https://tc39.github.io/ecma262/#sec-promise.reject - reject: function reject(r) { - var capability = newPromiseCapability(this); - capability.reject.call(undefined, r); - return capability.promise; - } -}); - -$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { - // `Promise.resolve` method - // https://tc39.github.io/ecma262/#sec-promise.resolve - resolve: function resolve(x) { - return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); - } -}); - -$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { - // `Promise.all` method - // https://tc39.github.io/ecma262/#sec-promise.all - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - var values = []; - var counter = 0; - var remaining = 1; - iterate(iterable, function (promise) { - var index = counter++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - $promiseResolve.call(C, promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.error) reject(result.value); - return capability.promise; - }, - // `Promise.race` method - // https://tc39.github.io/ecma262/#sec-promise.race - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - iterate(iterable, function (promise) { - $promiseResolve.call(C, promise).then(capability.resolve, reject); - }); - }); - if (result.error) reject(result.value); - return capability.promise; - } -}); - - -/***/ }), -/* 121 */, -/* 122 */, -/* 123 */ -/*!***********************************!*\ - !*** (webpack)/buildin/global.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || new Function("return this")(); -} catch (e) { - // This works if the window reference is available - if (typeof window === "object") g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 124 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/to-primitive.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -// `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (input, PREFERRED_STRING) { - if (!isObject(input)) return input; - var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 125 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); - -// Thank's IE8 for his funny defineProperty -module.exports = !DESCRIPTORS && !fails(function () { - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; -}); - - -/***/ }), -/* 126 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/shared-store.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); - -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); - -module.exports = store; - - -/***/ }), -/* 127 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/shared.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var store = __webpack_require__(/*! ../internals/shared-store */ 126); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.6.4', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), -/* 128 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/uid.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var id = 0; -var postfix = Math.random(); - -module.exports = function (key) { - return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); -}; - - -/***/ }), -/* 129 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-forced.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -var replacement = /#|\.prototype\./; - -var isForced = function (feature, detection) { - var value = data[normalize(feature)]; - return value == POLYFILL ? true - : value == NATIVE ? false - : typeof detection == 'function' ? fails(detection) - : !!detection; -}; - -var normalize = isForced.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); -}; - -var data = isForced.data = {}; -var NATIVE = isForced.NATIVE = 'N'; -var POLYFILL = isForced.POLYFILL = 'P'; - -module.exports = isForced; - - -/***/ }), -/* 130 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/native-symbol.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion - // eslint-disable-next-line no-undef - return !String(Symbol()); -}); - - -/***/ }), -/* 131 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/classof.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 50); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; -}; - - -/***/ }), -/* 132 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/task.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var html = __webpack_require__(/*! ../internals/html */ 141); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); - -var location = global.location; -var set = global.setImmediate; -var clear = global.clearImmediate; -var process = global.process; -var MessageChannel = global.MessageChannel; -var Dispatch = global.Dispatch; -var counter = 0; -var queue = {}; -var ONREADYSTATECHANGE = 'onreadystatechange'; -var defer, channel, port; - -var run = function (id) { - // eslint-disable-next-line no-prototype-builtins - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } -}; - -var runner = function (id) { - return function () { - run(id); - }; -}; - -var listener = function (event) { - run(event.data); -}; - -var post = function (id) { - // old engines have not location.origin - global.postMessage(id + '', location.protocol + '//' + location.host); -}; - -// Node.js 0.9+ & IE10+ has setImmediate, otherwise: -if (!set || !clear) { - set = function setImmediate(fn) { - var args = []; - var i = 1; - while (arguments.length > i) args.push(arguments[i++]); - queue[++counter] = function () { - // eslint-disable-next-line no-new-func - (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); - }; - defer(counter); - return counter; - }; - clear = function clearImmediate(id) { - delete queue[id]; - }; - // Node.js 0.8- - if (classof(process) == 'process') { - defer = function (id) { - process.nextTick(runner(id)); - }; - // Sphere (JS game engine) Dispatch API - } else if (Dispatch && Dispatch.now) { - defer = function (id) { - Dispatch.now(runner(id)); - }; - // Browsers with MessageChannel, includes WebWorkers - // except iOS - https://github.com/zloirock/core-js/issues/624 - } else if (MessageChannel && !IS_IOS) { - channel = new MessageChannel(); - port = channel.port2; - channel.port1.onmessage = listener; - defer = bind(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post)) { - defer = post; - global.addEventListener('message', listener, false); - // IE8- - } else if (ONREADYSTATECHANGE in createElement('script')) { - defer = function (id) { - html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { - html.removeChild(this); - run(id); - }; - }; - // Rest old browsers - } else { - defer = function (id) { - setTimeout(runner(id), 0); - }; - } -} - -module.exports = { - set: set, - clear: clear -}; - - -/***/ }), -/* 133 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/engine-is-ios.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); - -module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); - - -/***/ }), -/* 134 */, -/* 135 */, -/* 136 */, -/* 137 */, -/* 138 */, -/* 139 */, -/* 140 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys-internal.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 42); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 165).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); - -module.exports = function (object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key; - for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), -/* 141 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/html.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); - -module.exports = getBuiltIn('document', 'documentElement'); - - -/***/ }), -/* 142 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/iterate.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 190); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 191); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 192); - -var Result = function (stopped, result) { - this.stopped = stopped; - this.result = result; -}; - -var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, next, step; - - if (IS_ITERATOR) { - iterator = iterable; - } else { - iterFn = getIteratorMethod(iterable); - if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); - // optimisation for array iterators - if (isArrayIteratorMethod(iterFn)) { - for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = AS_ENTRIES - ? boundFunction(anObject(step = iterable[index])[0], step[1]) - : boundFunction(iterable[index]); - if (result && result instanceof Result) return result; - } return new Result(false); - } - iterator = iterFn.call(iterable); - } - - next = iterator.next; - while (!(step = next.call(iterator)).done) { - result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); - if (typeof result == 'object' && result && result instanceof Result) return result; - } return new Result(false); -}; - -iterate.stop = function (result) { - return new Result(true, result); -}; - - -/***/ }), -/* 143 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/species-constructor.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var SPECIES = wellKnownSymbol('species'); - -// `SpeciesConstructor` abstract operation -// https://tc39.github.io/ecma262/#sec-speciesconstructor -module.exports = function (O, defaultConstructor) { - var C = anObject(O).constructor; - var S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); -}; - - -/***/ }), -/* 144 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/perform.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return { error: false, value: exec() }; - } catch (error) { - return { error: true, value: error }; - } -}; - - -/***/ }), -/* 145 */, -/* 146 */, -/* 147 */, -/* 148 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/path.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = global; - - -/***/ }), -/* 149 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/object-create.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 224); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); -var html = __webpack_require__(/*! ../internals/html */ 141); -var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 101); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); - -var GT = '>'; -var LT = '<'; -var PROTOTYPE = 'prototype'; -var SCRIPT = 'script'; -var IE_PROTO = sharedKey('IE_PROTO'); - -var EmptyConstructor = function () { /* empty */ }; - -var scriptTag = function (content) { - return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; -}; - -// Create object with fake `null` prototype: use ActiveX Object with cleared prototype -var NullProtoObjectViaActiveX = function (activeXDocument) { - activeXDocument.write(scriptTag('')); - activeXDocument.close(); - var temp = activeXDocument.parentWindow.Object; - activeXDocument = null; // avoid memory leak - return temp; -}; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var NullProtoObjectViaIFrame = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = documentCreateElement('iframe'); - var JS = 'java' + SCRIPT + ':'; - var iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - // https://github.com/zloirock/core-js/issues/475 - iframe.src = String(JS); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(scriptTag('document.F=Object')); - iframeDocument.close(); - return iframeDocument.F; -}; - -// Check for document.domain and active x support -// No need to use active x approach when document.domain is not set -// see https://github.com/es-shims/es5-shim/issues/150 -// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 -// avoid IE GC bug -var activeXDocument; -var NullProtoObject = function () { - try { - /* global ActiveXObject */ - activeXDocument = document.domain && new ActiveXObject('htmlfile'); - } catch (error) { /* ignore */ } - NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); - var length = enumBugKeys.length; - while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; - return NullProtoObject(); -}; - -hiddenKeys[IE_PROTO] = true; - -// `Object.create` method -// https://tc39.github.io/ecma262/#sec-object.create -module.exports = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - EmptyConstructor[PROTOTYPE] = anObject(O); - result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = NullProtoObject(); - return Properties === undefined ? result : defineProperties(result, Properties); -}; - - -/***/ }), -/* 150 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 42); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 228); - -var IE_PROTO = sharedKey('IE_PROTO'); -var ObjectPrototype = Object.prototype; - -// `Object.getPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.getprototypeof -module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } return O instanceof Object ? ObjectPrototype : null; -}; - - -/***/ }), -/* 151 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/engine-v8-version.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); - -var process = global.process; -var versions = process && process.versions; -var v8 = versions && versions.v8; -var match, version; - -if (v8) { - match = v8.split('.'); - version = match[0] + match[1]; -} else if (userAgent) { - match = userAgent.match(/Edge\/(\d+)/); - if (!match || match[1] >= 74) { - match = userAgent.match(/Chrome\/(\d+)/); - if (match) version = match[1]; - } -} - -module.exports = version && +version; - - -/***/ }), -/* 152 */, -/* 153 */, -/* 154 */, -/* 155 */, -/* 156 */, -/* 157 */, -/* 158 */, -/* 159 */, -/* 160 */, -/* 161 */, -/* 162 */, -/* 163 */, -/* 164 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var nativePropertyIsEnumerable = {}.propertyIsEnumerable; -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// Nashorn ~ JDK8 bug -var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - -// `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable -exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; -} : nativePropertyIsEnumerable; - - -/***/ }), -/* 165 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/array-includes.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 182); - -// `Array.prototype.{ indexOf, includes }` methods implementation -var createMethod = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -module.exports = { - // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) -}; - - -/***/ }), -/* 166 */ -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! - \***************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), -/* 167 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/iterators-core.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var has = __webpack_require__(/*! ../internals/has */ 42); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); - -var ITERATOR = wellKnownSymbol('iterator'); -var BUGGY_SAFARI_ITERATORS = false; - -var returnThis = function () { return this; }; - -// `%IteratorPrototype%` object -// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object -var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; - -if ([].keys) { - arrayIterator = [].keys(); - // Safari 8 has buggy iterators w/o `next` - if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; - else { - PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); - if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; - } -} - -if (IteratorPrototype == undefined) IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { - createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); -} - -module.exports = { - IteratorPrototype: IteratorPrototype, - BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS -}; - - -/***/ }), -/* 168 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = global.Promise; - - -/***/ }), -/* 169 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/promise-resolve.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 105); - -module.exports = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; -}; - - -/***/ }), -/* 170 */, -/* 171 */, -/* 172 */, -/* 173 */, -/* 174 */, -/* 175 */, -/* 176 */, -/* 177 */, -/* 178 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/native-weak-map.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); - -var WeakMap = global.WeakMap; - -module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); - - -/***/ }), -/* 179 */ -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! - \***********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 42); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 180); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); - -module.exports = function (target, source) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } -}; - - -/***/ }), -/* 180 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/own-keys.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 181); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 166); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// all object keys, includes non-enumerable and symbols -module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; -}; - - -/***/ }), -/* 181 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); - -var hiddenKeys = enumBugKeys.concat('length', 'prototype'); - -// `Object.getOwnPropertyNames` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertynames -exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys(O, hiddenKeys); -}; - - -/***/ }), -/* 182 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-absolute-index.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); - -var max = Math.max; -var min = Math.min; - -// Helper for a popular repeating case of the spec: -// Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). -module.exports = function (index, length) { - var integer = toInteger(index); - return integer < 0 ? max(integer + length, 0) : min(integer, length); -}; - - -/***/ }), -/* 183 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); - -module.exports = NATIVE_SYMBOL - // eslint-disable-next-line no-undef - && !Symbol.sham - // eslint-disable-next-line no-undef - && typeof Symbol.iterator == 'symbol'; - - -/***/ }), -/* 184 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/object-to-string.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classof = __webpack_require__(/*! ../internals/classof */ 131); - -// `Object.prototype.toString` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { - return '[object ' + classof(this) + ']'; -}; - - -/***/ }), -/* 185 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/string-multibyte.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); - -// `String.prototype.{ codePointAt, at }` methods implementation -var createMethod = function (CONVERT_TO_STRING) { - return function ($this, pos) { - var S = String(requireObjectCoercible($this)); - var position = toInteger(pos); - var size = S.length; - var first, second; - if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; - first = S.charCodeAt(position); - return first < 0xD800 || first > 0xDBFF || position + 1 === size - || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF - ? CONVERT_TO_STRING ? S.charAt(position) : first - : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; - }; -}; - -module.exports = { - // `String.prototype.codePointAt` method - // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat - codeAt: createMethod(false), - // `String.prototype.at` method - // https://github.com/mathiasbynens/String.prototype.at - charAt: createMethod(true) -}; - - -/***/ }), -/* 186 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/modules/es.array.iterator.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 216); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 217); - -var ARRAY_ITERATOR = 'Array Iterator'; -var setInternalState = InternalStateModule.set; -var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); - -// `Array.prototype.entries` method -// https://tc39.github.io/ecma262/#sec-array.prototype.entries -// `Array.prototype.keys` method -// https://tc39.github.io/ecma262/#sec-array.prototype.keys -// `Array.prototype.values` method -// https://tc39.github.io/ecma262/#sec-array.prototype.values -// `Array.prototype[@@iterator]` method -// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator -// `CreateArrayIterator` internal method -// https://tc39.github.io/ecma262/#sec-createarrayiterator -module.exports = defineIterator(Array, 'Array', function (iterated, kind) { - setInternalState(this, { - type: ARRAY_ITERATOR, - target: toIndexedObject(iterated), // target - index: 0, // next index - kind: kind // kind - }); -// `%ArrayIteratorPrototype%.next` method -// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next -}, function () { - var state = getInternalState(this); - var target = state.target; - var kind = state.kind; - var index = state.index++; - if (!target || index >= target.length) { - state.target = undefined; - return { value: undefined, done: true }; - } - if (kind == 'keys') return { value: index, done: false }; - if (kind == 'values') return { value: target[index], done: false }; - return { value: [index, target[index]], done: false }; -}, 'values'); - -// argumentsList[@@iterator] is %ArrayProto_values% -// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject -// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject -Iterators.Arguments = Iterators.Array; - -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables -addToUnscopables('keys'); -addToUnscopables('values'); -addToUnscopables('entries'); - - -/***/ }), -/* 187 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/redefine-all.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); - -module.exports = function (target, src, options) { - for (var key in src) redefine(target, key, src[key], options); - return target; -}; - - -/***/ }), -/* 188 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/set-species.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); - -var SPECIES = wellKnownSymbol('species'); - -module.exports = function (CONSTRUCTOR_NAME) { - var Constructor = getBuiltIn(CONSTRUCTOR_NAME); - var defineProperty = definePropertyModule.f; - - if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { - defineProperty(Constructor, SPECIES, { - configurable: true, - get: function () { return this; } - }); - } -}; - - -/***/ }), -/* 189 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/an-instance.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name) { - if (!(it instanceof Constructor)) { - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); - } return it; -}; - - -/***/ }), -/* 190 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); - -var ITERATOR = wellKnownSymbol('iterator'); -var ArrayPrototype = Array.prototype; - -// check on default Array iterator -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); -}; - - -/***/ }), -/* 191 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/get-iterator-method.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof */ 131); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); - -module.exports = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), -/* 192 */ -/*!****************************************************************************!*\ - !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! - \****************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// call something on iterator step with safe closing on error -module.exports = function (iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (error) { - var returnMethod = iterator['return']; - if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); - throw error; - } -}; - - -/***/ }), -/* 193 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); -var SAFE_CLOSING = false; - -try { - var called = 0; - var iteratorWithReturn = { - next: function () { - return { done: !!called++ }; - }, - 'return': function () { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR] = function () { - return this; - }; - // eslint-disable-next-line no-throw-literal - Array.from(iteratorWithReturn, function () { throw 2; }); -} catch (error) { /* empty */ } - -module.exports = function (exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR] = function () { - return { - next: function () { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { /* empty */ } - return ITERATION_SUPPORT; -}; - - -/***/ }), -/* 194 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/microtask.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var macrotask = __webpack_require__(/*! ../internals/task */ 132).set; -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); - -var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; -var process = global.process; -var Promise = global.Promise; -var IS_NODE = classof(process) == 'process'; -// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` -var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); -var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; - -var flush, head, last, notify, toggle, node, promise, then; - -// modern engines have queueMicrotask method -if (!queueMicrotask) { - flush = function () { - var parent, fn; - if (IS_NODE && (parent = process.domain)) parent.exit(); - while (head) { - fn = head.fn; - head = head.next; - try { - fn(); - } catch (error) { - if (head) notify(); - else last = undefined; - throw error; - } - } last = undefined; - if (parent) parent.enter(); - }; - - // Node.js - if (IS_NODE) { - notify = function () { - process.nextTick(flush); - }; - // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver && !IS_IOS) { - toggle = true; - node = document.createTextNode(''); - new MutationObserver(flush).observe(node, { characterData: true }); - notify = function () { - node.data = toggle = !toggle; - }; - // environments with maybe non-completely correct, but existent Promise - } else if (Promise && Promise.resolve) { - // Promise.resolve without an argument throws an error in LG WebOS 2 - promise = Promise.resolve(undefined); - then = promise.then; - notify = function () { - then.call(promise, flush); - }; - // for other environments - macrotask based on: - // - setImmediate - // - MessageChannel - // - window.postMessag - // - onreadystatechange - // - setTimeout - } else { - notify = function () { - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); - }; - } -} - -module.exports = queueMicrotask || function (fn) { - var task = { fn: fn, next: undefined }; - if (last) last.next = task; - if (!head) { - head = task; - notify(); - } last = task; -}; - - -/***/ }), -/* 195 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/host-report-errors.js ***! - \**************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = function (a, b) { - var console = global.console; - if (console && console.error) { - arguments.length === 1 ? console.error(a) : console.error(a, b); - } -}; - - -/***/ }), -/* 196 */, -/* 197 */, -/* 198 */, -/* 199 */, -/* 200 */, -/* 201 */, -/* 202 */, -/* 203 */, -/* 204 */, -/* 205 */, -/* 206 */, -/* 207 */, -/* 208 */, -/* 209 */, -/* 210 */, -/* 211 */, -/* 212 */, -/* 213 */, -/* 214 */, -/* 215 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); - -// `Object.keys` method -// https://tc39.github.io/ecma262/#sec-object.keys -module.exports = Object.keys || function keys(O) { - return internalObjectKeys(O, enumBugKeys); -}; - - -/***/ }), -/* 216 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/add-to-unscopables.js ***! - \**************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var create = __webpack_require__(/*! ../internals/object-create */ 149); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); - -var UNSCOPABLES = wellKnownSymbol('unscopables'); -var ArrayPrototype = Array.prototype; - -// Array.prototype[@@unscopables] -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables -if (ArrayPrototype[UNSCOPABLES] == undefined) { - definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { - configurable: true, - value: create(null) - }); -} - -// add a key to Array.prototype[@@unscopables] -module.exports = function (key) { - ArrayPrototype[UNSCOPABLES][key] = true; -}; - - -/***/ }), -/* 217 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/define-iterator.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 227); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 218); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 167); - -var IteratorPrototype = IteratorsCore.IteratorPrototype; -var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; -var ITERATOR = wellKnownSymbol('iterator'); -var KEYS = 'keys'; -var VALUES = 'values'; -var ENTRIES = 'entries'; - -var returnThis = function () { return this; }; - -module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { - createIteratorConstructor(IteratorConstructor, NAME, next); - - var getIterationMethod = function (KIND) { - if (KIND === DEFAULT && defaultIterator) return defaultIterator; - if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; - switch (KIND) { - case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; - case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; - case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; - } return function () { return new IteratorConstructor(this); }; - }; - - var TO_STRING_TAG = NAME + ' Iterator'; - var INCORRECT_VALUES_NAME = false; - var IterablePrototype = Iterable.prototype; - var nativeIterator = IterablePrototype[ITERATOR] - || IterablePrototype['@@iterator'] - || DEFAULT && IterablePrototype[DEFAULT]; - var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); - var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; - var CurrentIteratorPrototype, methods, KEY; - - // fix native - if (anyNativeIterator) { - CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); - if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { - if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { - if (setPrototypeOf) { - setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); - } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { - createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); - } - } - // Set @@toStringTag to native iterators - setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); - if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; - } - } - - // fix Array#{values, @@iterator}.name in V8 / FF - if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { - INCORRECT_VALUES_NAME = true; - defaultIterator = function values() { return nativeIterator.call(this); }; - } - - // define iterator - if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { - createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); - } - Iterators[NAME] = defaultIterator; - - // export additional methods - if (DEFAULT) { - methods = { - values: getIterationMethod(VALUES), - keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), - entries: getIterationMethod(ENTRIES) - }; - if (FORCED) for (KEY in methods) { - if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { - redefine(IterablePrototype, KEY, methods[KEY]); - } - } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); - } - - return methods; -}; - - -/***/ }), -/* 218 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 229); - -// `Object.setPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.setprototypeof -// Works with __proto__ only. Old v8 can't work with null proto objects. -/* eslint-disable no-proto */ -module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { - var CORRECT_SETTER = false; - var test = {}; - var setter; - try { - setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; - setter.call(test, []); - CORRECT_SETTER = test instanceof Array; - } catch (error) { /* empty */ } - return function setPrototypeOf(O, proto) { - anObject(O); - aPossiblePrototype(proto); - if (CORRECT_SETTER) setter.call(O, proto); - else O.__proto__ = proto; - return O; - }; -}() : undefined); - - -/***/ }), -/* 219 */, -/* 220 */, -/* 221 */, -/* 222 */, -/* 223 */, -/* 224 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-properties.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 215); - -// `Object.defineProperties` method -// https://tc39.github.io/ecma262/#sec-object.defineproperties -module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = objectKeys(Properties); - var length = keys.length; - var index = 0; - var key; - while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); - return O; -}; - - -/***/ }), -/* 225 */ -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/array-method-uses-to-length.js ***! - \***********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var has = __webpack_require__(/*! ../internals/has */ 42); - -var defineProperty = Object.defineProperty; -var cache = {}; - -var thrower = function (it) { throw it; }; - -module.exports = function (METHOD_NAME, options) { - if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; - if (!options) options = {}; - var method = [][METHOD_NAME]; - var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; - var argument0 = has(options, 0) ? options[0] : thrower; - var argument1 = has(options, 1) ? options[1] : undefined; - - return cache[METHOD_NAME] = !!method && !fails(function () { - if (ACCESSORS && !DESCRIPTORS) return true; - var O = { length: -1 }; - - if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); - else O[1] = 1; - - method.call(O, argument0, argument1); - }); -}; - - -/***/ }), -/* 226 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-regexp.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var MATCH = wellKnownSymbol('match'); - -// `IsRegExp` abstract operation -// https://tc39.github.io/ecma262/#sec-isregexp -module.exports = function (it) { - var isRegExp; - return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp'); -}; - - -/***/ }), -/* 227 */ -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***! - \***********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 167).IteratorPrototype; -var create = __webpack_require__(/*! ../internals/object-create */ 149); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); - -var returnThis = function () { return this; }; - -module.exports = function (IteratorConstructor, NAME, next) { - var TO_STRING_TAG = NAME + ' Iterator'; - IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); - setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); - Iterators[TO_STRING_TAG] = returnThis; - return IteratorConstructor; -}; - - -/***/ }), -/* 228 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -module.exports = !fails(function () { - function F() { /* empty */ } - F.prototype.constructor = null; - return Object.getPrototypeOf(new F()) !== F.prototype; -}); - - -/***/ }), -/* 229 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/a-possible-prototype.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -module.exports = function (it) { - if (!isObject(it) && it !== null) { - throw TypeError("Can't set " + String(it) + ' as a prototype'); - } return it; -}; - - -/***/ }), -/* 230 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/modules/web.dom-collections.iterator.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 231); -var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 186); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var ArrayValues = ArrayIteratorMethods.values; - -for (var COLLECTION_NAME in DOMIterables) { - var Collection = global[COLLECTION_NAME]; - var CollectionPrototype = Collection && Collection.prototype; - if (CollectionPrototype) { - // some Chrome versions have non-configurable methods on DOMTokenList - if (CollectionPrototype[ITERATOR] !== ArrayValues) try { - createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues); - } catch (error) { - CollectionPrototype[ITERATOR] = ArrayValues; - } - if (!CollectionPrototype[TO_STRING_TAG]) { - createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); - } - if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { - // some Chrome versions have non-configurable methods on DOMTokenList - if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { - createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); - } catch (error) { - CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; - } - } - } -} - - -/***/ }), -/* 231 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/dom-iterables.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// iterable DOM collections -// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods -module.exports = { - CSSRuleList: 0, - CSSStyleDeclaration: 0, - CSSValueList: 0, - ClientRectList: 0, - DOMRectList: 0, - DOMStringList: 0, - DOMTokenList: 1, - DataTransferItemList: 0, - FileList: 0, - HTMLAllCollection: 0, - HTMLCollection: 0, - HTMLFormElement: 0, - HTMLSelectElement: 0, - MediaList: 0, - MimeTypeArray: 0, - NamedNodeMap: 0, - NodeList: 1, - PaintRequestList: 0, - Plugin: 0, - PluginArray: 0, - SVGLengthList: 0, - SVGNumberList: 0, - SVGPathSegList: 0, - SVGPointList: 0, - SVGStringList: 0, - SVGTransformList: 0, - SourceBufferList: 0, - StyleSheetList: 0, - TextTrackCueList: 0, - TextTrackList: 0, - TouchList: 0 -}; - - -/***/ }), -/* 232 */, -/* 233 */, -/* 234 */, -/* 235 */, -/* 236 */, -/* 237 */, -/* 238 */, -/* 239 */, -/* 240 */, -/* 241 */, -/* 242 */, -/* 243 */, -/* 244 */, -/* 245 */, -/* 246 */, -/* 247 */, -/* 248 */, -/* 249 */, -/* 250 */, -/* 251 */, -/* 252 */, -/* 253 */, -/* 254 */, -/* 255 */, -/* 256 */, -/* 257 */, -/* 258 */, -/* 259 */, -/* 260 */, -/* 261 */, -/* 262 */, -/* 263 */, -/* 264 */, -/* 265 */, -/* 266 */, -/* 267 */, -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */, -/* 272 */, -/* 273 */, -/* 274 */, -/* 275 */, -/* 276 */, -/* 277 */, -/* 278 */, -/* 279 */, -/* 280 */, -/* 281 */, -/* 282 */, -/* 283 */, -/* 284 */, -/* 285 */, -/* 286 */, -/* 287 */, -/* 288 */, -/* 289 */, -/* 290 */, -/* 291 */, -/* 292 */, -/* 293 */, -/* 294 */, -/* 295 */, -/* 296 */, -/* 297 */, -/* 298 */, -/* 299 */, -/* 300 */, -/* 301 */, -/* 302 */, -/* 303 */, -/* 304 */, -/* 305 */, -/* 306 */, -/* 307 */, -/* 308 */, -/* 309 */, -/* 310 */, -/* 311 */, -/* 312 */, -/* 313 */, -/* 314 */, -/* 315 */, -/* 316 */, -/* 317 */, -/* 318 */, -/* 319 */, -/* 320 */, -/* 321 */, -/* 322 */, -/* 323 */, -/* 324 */, -/* 325 */, -/* 326 */, -/* 327 */, -/* 328 */, -/* 329 */, -/* 330 */, -/* 331 */, -/* 332 */, -/* 333 */, -/* 334 */, -/* 335 */, -/* 336 */, -/* 337 */, -/* 338 */, -/* 339 */, -/* 340 */, -/* 341 */, -/* 342 */, -/* 343 */, -/* 344 */, -/* 345 */, -/* 346 */, -/* 347 */, -/* 348 */, -/* 349 */, -/* 350 */, -/* 351 */, -/* 352 */, -/* 353 */, -/* 354 */, -/* 355 */, -/* 356 */, -/* 357 */, -/* 358 */, -/* 359 */, -/* 360 */, -/* 361 */, -/* 362 */, -/* 363 */, -/* 364 */, -/* 365 */, -/* 366 */, -/* 367 */, -/* 368 */, -/* 369 */, -/* 370 */, -/* 371 */, -/* 372 */, -/* 373 */, -/* 374 */, -/* 375 */, -/* 376 */, -/* 377 */, -/* 378 */, -/* 379 */, -/* 380 */, -/* 381 */, -/* 382 */, -/* 383 */, -/* 384 */, -/* 385 */, -/* 386 */, -/* 387 */, -/* 388 */, -/* 389 */, -/* 390 */, -/* 391 */, -/* 392 */, -/* 393 */, -/* 394 */, -/* 395 */, -/* 396 */, -/* 397 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/entry-unbind.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); - -var call = Function.call; - -module.exports = function (CONSTRUCTOR, METHOD, length) { - return bind(call, global[CONSTRUCTOR].prototype[METHOD], length); -}; - - -/***/ }), -/* 398 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/modules/es.promise.all-settled.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); - -// `Promise.allSettled` method -// https://github.com/tc39/proposal-promise-allSettled -$({ target: 'Promise', stat: true }, { - allSettled: function allSettled(iterable) { - var C = this; - var capability = newPromiseCapabilityModule.f(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var promiseResolve = aFunction(C.resolve); - var values = []; - var counter = 0; - var remaining = 1; - iterate(iterable, function (promise) { - var index = counter++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - promiseResolve.call(C, promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = { status: 'fulfilled', value: value }; - --remaining || resolve(values); - }, function (e) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = { status: 'rejected', reason: e }; - --remaining || resolve(values); - }); - }); - --remaining || resolve(values); - }); - if (result.error) reject(result.value); - return capability.promise; - } -}); - - -/***/ }), -/* 399 */, -/* 400 */, -/* 401 */, -/* 402 */, -/* 403 */, -/* 404 */, -/* 405 */, -/* 406 */, -/* 407 */, -/* 408 */, -/* 409 */, -/* 410 */, -/* 411 */, -/* 412 */, -/* 413 */, -/* 414 */, -/* 415 */, -/* 416 */, -/* 417 */, -/* 418 */, -/* 419 */, -/* 420 */, -/* 421 */, -/* 422 */, -/* 423 */, -/* 424 */, -/* 425 */, -/* 426 */, -/* 427 */, -/* 428 */, -/* 429 */, -/* 430 */, -/* 431 */, -/* 432 */, -/* 433 */, -/* 434 */, -/* 435 */, -/* 436 */, -/* 437 */, -/* 438 */, -/* 439 */, -/* 440 */, -/* 441 */, -/* 442 */, -/* 443 */, -/* 444 */, -/* 445 */, -/* 446 */, -/* 447 */, -/* 448 */, -/* 449 */, -/* 450 */, -/* 451 */, -/* 452 */, -/* 453 */, -/* 454 */, -/* 455 */, -/* 456 */, -/* 457 */, -/* 458 */, -/* 459 */, -/* 460 */, -/* 461 */, -/* 462 */, -/* 463 */, -/* 464 */, -/* 465 */ -/*!**************************!*\ - !*** ./dev/polyfills.js ***! - \**************************/ -/*! no exports provided */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_features_object_assign__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/features/object/assign */ 466); -/* harmony import */ var core_js_features_object_assign__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_features_object_assign__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_features_array_includes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/features/array/includes */ 470); -/* harmony import */ var core_js_features_array_includes__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_features_array_includes__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_features_string_includes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/features/string/includes */ 473); -/* harmony import */ var core_js_features_string_includes__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_features_string_includes__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_features_promise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/features/promise */ 478); -/* harmony import */ var core_js_features_promise__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_features_promise__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var raf_polyfill__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! raf/polyfill */ 486); -/* harmony import */ var raf_polyfill__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(raf_polyfill__WEBPACK_IMPORTED_MODULE_4__); - - - - - - -/***/ }), -/* 466 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/features/object/assign.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var parent = __webpack_require__(/*! ../../es/object/assign */ 467); - -module.exports = parent; - - -/***/ }), -/* 467 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/es/object/assign.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es.object.assign */ 468); -var path = __webpack_require__(/*! ../../internals/path */ 148); - -module.exports = path.Object.assign; - - -/***/ }), -/* 468 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/es.object.assign.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var assign = __webpack_require__(/*! ../internals/object-assign */ 469); - -// `Object.assign` method -// https://tc39.github.io/ecma262/#sec-object.assign -$({ target: 'Object', stat: true, forced: Object.assign !== assign }, { - assign: assign -}); - - -/***/ }), -/* 469 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/object-assign.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 215); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 166); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 164); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); - -var nativeAssign = Object.assign; -var defineProperty = Object.defineProperty; - -// `Object.assign` method -// https://tc39.github.io/ecma262/#sec-object.assign -module.exports = !nativeAssign || fails(function () { - // should have correct order of operations (Edge bug) - if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', { - enumerable: true, - get: function () { - defineProperty(this, 'b', { - value: 3, - enumerable: false - }); - } - }), { b: 2 })).b !== 1) return true; - // should work with symbols and should have deterministic property order (V8 bug) - var A = {}; - var B = {}; - // eslint-disable-next-line no-undef - var symbol = Symbol(); - var alphabet = 'abcdefghijklmnopqrst'; - A[symbol] = 7; - alphabet.split('').forEach(function (chr) { B[chr] = chr; }); - return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; -}) ? function assign(target, source) { // eslint-disable-line no-unused-vars - var T = toObject(target); - var argumentsLength = arguments.length; - var index = 1; - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - var propertyIsEnumerable = propertyIsEnumerableModule.f; - while (argumentsLength > index) { - var S = IndexedObject(arguments[index++]); - var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); - var length = keys.length; - var j = 0; - var key; - while (length > j) { - key = keys[j++]; - if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key]; - } - } return T; -} : nativeAssign; - - -/***/ }), -/* 470 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/features/array/includes.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var parent = __webpack_require__(/*! ../../es/array/includes */ 471); - -module.exports = parent; - - -/***/ }), -/* 471 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/es/array/includes.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es.array.includes */ 472); -var entryUnbind = __webpack_require__(/*! ../../internals/entry-unbind */ 397); - -module.exports = entryUnbind('Array', 'includes'); - - -/***/ }), -/* 472 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/modules/es.array.includes.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var $includes = __webpack_require__(/*! ../internals/array-includes */ 165).includes; -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 216); -var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 225); - -var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); - -// `Array.prototype.includes` method -// https://tc39.github.io/ecma262/#sec-array.prototype.includes -$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, { - includes: function includes(el /* , fromIndex = 0 */) { - return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); - } -}); - -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables -addToUnscopables('includes'); - - -/***/ }), -/* 473 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/features/string/includes.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var parent = __webpack_require__(/*! ../../es/string/includes */ 474); - -module.exports = parent; - - -/***/ }), -/* 474 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/es/string/includes.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es.string.includes */ 475); -var entryUnbind = __webpack_require__(/*! ../../internals/entry-unbind */ 397); - -module.exports = entryUnbind('String', 'includes'); - - -/***/ }), -/* 475 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/es.string.includes.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ 476); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ 477); - -// `String.prototype.includes` method -// https://tc39.github.io/ecma262/#sec-string.prototype.includes -$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { - includes: function includes(searchString /* , position = 0 */) { - return !!~String(requireObjectCoercible(this)) - .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined); - } -}); - - -/***/ }), -/* 476 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/not-a-regexp.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 226); - -module.exports = function (it) { - if (isRegExp(it)) { - throw TypeError("The method doesn't accept regular expressions"); - } return it; -}; - - -/***/ }), -/* 477 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/correct-is-regexp-logic.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var MATCH = wellKnownSymbol('match'); - -module.exports = function (METHOD_NAME) { - var regexp = /./; - try { - '/./'[METHOD_NAME](regexp); - } catch (e) { - try { - regexp[MATCH] = false; - return '/./'[METHOD_NAME](regexp); - } catch (f) { /* empty */ } - } return false; -}; - - -/***/ }), -/* 478 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/features/promise/index.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var parent = __webpack_require__(/*! ../../es/promise */ 479); -__webpack_require__(/*! ../../modules/esnext.aggregate-error */ 482); -// TODO: Remove from `core-js@4` -__webpack_require__(/*! ../../modules/esnext.promise.all-settled */ 483); -__webpack_require__(/*! ../../modules/esnext.promise.try */ 484); -__webpack_require__(/*! ../../modules/esnext.promise.any */ 485); - -module.exports = parent; - - -/***/ }), -/* 479 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/es/promise/index.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es.object.to-string */ 63); -__webpack_require__(/*! ../../modules/es.string.iterator */ 480); -__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 230); -__webpack_require__(/*! ../../modules/es.promise */ 120); -__webpack_require__(/*! ../../modules/es.promise.all-settled */ 398); -__webpack_require__(/*! ../../modules/es.promise.finally */ 481); -var path = __webpack_require__(/*! ../../internals/path */ 148); - -module.exports = path.Promise; - - -/***/ }), -/* 480 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/es.string.iterator.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 185).charAt; -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 217); - -var STRING_ITERATOR = 'String Iterator'; -var setInternalState = InternalStateModule.set; -var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); - -// `String.prototype[@@iterator]` method -// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator -defineIterator(String, 'String', function (iterated) { - setInternalState(this, { - type: STRING_ITERATOR, - string: String(iterated), - index: 0 - }); -// `%StringIteratorPrototype%.next` method -// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next -}, function next() { - var state = getInternalState(this); - var string = state.string; - var index = state.index; - var point; - if (index >= string.length) return { value: undefined, done: true }; - point = charAt(string, index); - state.index += point.length; - return { value: point, done: false }; -}); - - -/***/ }), -/* 481 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/es.promise.finally.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 168); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 169); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); - -// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 -var NON_GENERIC = !!NativePromise && fails(function () { - NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); -}); - -// `Promise.prototype.finally` method -// https://tc39.github.io/ecma262/#sec-promise.prototype.finally -$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { - 'finally': function (onFinally) { - var C = speciesConstructor(this, getBuiltIn('Promise')); - var isFunction = typeof onFinally == 'function'; - return this.then( - isFunction ? function (x) { - return promiseResolve(C, onFinally()).then(function () { return x; }); - } : onFinally, - isFunction ? function (e) { - return promiseResolve(C, onFinally()).then(function () { throw e; }); - } : onFinally - ); - } -}); - -// patch native Promise.prototype for native async functions -if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) { - redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); -} - - -/***/ }), -/* 482 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.aggregate-error.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 218); -var create = __webpack_require__(/*! ../internals/object-create */ 149); -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); - -var setInternalState = InternalStateModule.set; -var getInternalAggregateErrorState = InternalStateModule.getterFor('AggregateError'); - -var $AggregateError = function AggregateError(errors, message) { - var that = this; - if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message); - if (setPrototypeOf) { - that = setPrototypeOf(new Error(message), getPrototypeOf(that)); - } - var errorsArray = []; - iterate(errors, errorsArray.push, errorsArray); - if (DESCRIPTORS) setInternalState(that, { errors: errorsArray, type: 'AggregateError' }); - else that.errors = errorsArray; - if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message)); - return that; -}; - -$AggregateError.prototype = create(Error.prototype, { - constructor: createPropertyDescriptor(5, $AggregateError), - message: createPropertyDescriptor(5, ''), - name: createPropertyDescriptor(5, 'AggregateError') -}); - -if (DESCRIPTORS) defineProperty.f($AggregateError.prototype, 'errors', { - get: function () { - return getInternalAggregateErrorState(this).errors; - }, - configurable: true -}); - -$({ global: true }, { - AggregateError: $AggregateError -}); - - -/***/ }), -/* 483 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.promise.all-settled.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// TODO: Remove from `core-js@4` -__webpack_require__(/*! ./es.promise.all-settled.js */ 398); - - -/***/ }), -/* 484 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.promise.try.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); - -// `Promise.try` method -// https://github.com/tc39/proposal-promise-try -$({ target: 'Promise', stat: true }, { - 'try': function (callbackfn) { - var promiseCapability = newPromiseCapabilityModule.f(this); - var result = perform(callbackfn); - (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value); - return promiseCapability.promise; - } -}); - - -/***/ }), -/* 485 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.promise.any.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); - -var PROMISE_ANY_ERROR = 'No one promise resolved'; - -// `Promise.any` method -// https://github.com/tc39/proposal-promise-any -$({ target: 'Promise', stat: true }, { - any: function any(iterable) { - var C = this; - var capability = newPromiseCapabilityModule.f(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var promiseResolve = aFunction(C.resolve); - var errors = []; - var counter = 0; - var remaining = 1; - var alreadyResolved = false; - iterate(iterable, function (promise) { - var index = counter++; - var alreadyRejected = false; - errors.push(undefined); - remaining++; - promiseResolve.call(C, promise).then(function (value) { - if (alreadyRejected || alreadyResolved) return; - alreadyResolved = true; - resolve(value); - }, function (e) { - if (alreadyRejected || alreadyResolved) return; - alreadyRejected = true; - errors[index] = e; - --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); - }); - }); - --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); - }); - if (result.error) reject(result.value); - return capability.promise; - } -}); - - -/***/ }), -/* 486 */ -/*!**************************************!*\ - !*** ./node_modules/raf/polyfill.js ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ./ */ 487).polyfill() - - -/***/ }), -/* 487 */ -/*!***********************************!*\ - !*** ./node_modules/raf/index.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var now = __webpack_require__(/*! performance-now */ 488) - , root = typeof window === 'undefined' ? global : window - , vendors = ['moz', 'webkit'] - , suffix = 'AnimationFrame' - , raf = root['request' + suffix] - , caf = root['cancel' + suffix] || root['cancelRequest' + suffix] - -for(var i = 0; !raf && i < vendors.length; i++) { - raf = root[vendors[i] + 'Request' + suffix] - caf = root[vendors[i] + 'Cancel' + suffix] - || root[vendors[i] + 'CancelRequest' + suffix] -} - -// Some versions of FF have rAF but not cAF -if(!raf || !caf) { - var last = 0 - , id = 0 - , queue = [] - , frameDuration = 1000 / 60 - - raf = function(callback) { - if(queue.length === 0) { - var _now = now() - , next = Math.max(0, frameDuration - (_now - last)) - last = next + _now - setTimeout(function() { - var cp = queue.slice(0) - // Clear queue here to prevent - // callbacks from appending listeners - // to the current frame's queue - queue.length = 0 - for(var i = 0; i < cp.length; i++) { - if(!cp[i].cancelled) { - try{ - cp[i].callback(last) - } catch(e) { - setTimeout(function() { throw e }, 0) - } - } - } - }, Math.round(next)) - } - queue.push({ - handle: ++id, - callback: callback, - cancelled: false - }) - return id - } - - caf = function(handle) { - for(var i = 0; i < queue.length; i++) { - if(queue[i].handle === handle) { - queue[i].cancelled = true - } - } - } -} - -module.exports = function(fn) { - // Wrap in a new function to prevent - // `cancel` potentially being assigned - // to the native rAF function - return raf.call(root, fn) -} -module.exports.cancel = function() { - caf.apply(root, arguments) -} -module.exports.polyfill = function(object) { - if (!object) { - object = root; - } - object.requestAnimationFrame = raf - object.cancelAnimationFrame = caf -} - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ 123))) - -/***/ }), -/* 488 */ -/*!*************************************************************!*\ - !*** ./node_modules/performance-now/lib/performance-now.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(process) {// Generated by CoffeeScript 1.12.2 -(function() { - var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime; - - if ((typeof performance !== "undefined" && performance !== null) && performance.now) { - module.exports = function() { - return performance.now(); - }; - } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) { - module.exports = function() { - return (getNanoSeconds() - nodeLoadTime) / 1e6; - }; - hrtime = process.hrtime; - getNanoSeconds = function() { - var hr; - hr = hrtime(); - return hr[0] * 1e9 + hr[1]; - }; - moduleLoadTime = getNanoSeconds(); - upTime = process.uptime() * 1e9; - nodeLoadTime = moduleLoadTime - upTime; - } else if (Date.now) { - module.exports = function() { - return Date.now() - loadTime; - }; - loadTime = Date.now(); - } else { - module.exports = function() { - return new Date().getTime() - loadTime; - }; - loadTime = new Date().getTime(); - } - -}).call(this); - -//# sourceMappingURL=performance-now.js.map - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ 489))) - -/***/ }), -/* 489 */ -/*!*****************************************!*\ - !*** ./node_modules/process/browser.js ***! - \*****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - - -/***/ }) -/******/ ])); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudHJ5LXVuYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L3BvbHlmaWxscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mZWF0dXJlcy9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZlYXR1cmVzL2FycmF5L2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL2FycmF5L2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZmVhdHVyZXMvc3RyaW5nL2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL3N0cmluZy9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYWxsLXNldHRsZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JhZi9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmFmL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wZXJmb3JtYW5jZS1ub3cvbGliL3BlcmZvcm1hbmNlLW5vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVUiLCJmaWxlIjoianMvcG9seWZpbGxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJyYWlubG9vcC92LzAuMC4wL3N0YXRpYy9qcy9cIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQ2NSk7XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhcyhXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgaWYgKE5BVElWRV9TWU1CT0wgJiYgaGFzKFN5bWJvbCwgbmFtZSkpIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IFN5bWJvbFtuYW1lXTtcbiAgICBlbHNlIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZURlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnICYmICFoYXModmFsdWUsICduYW1lJykpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBrZXkpO1xuICAgIGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAnJyk7XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIHJlZGVmaW5lKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVApIHtcbiAgdmFyIHN0b3JlID0gbmV3IFdlYWtNYXAoKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKHR5cGVvZiBzdG9yZS5pbnNwZWN0U291cmNlICE9ICdmdW5jdGlvbicpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgc3BsaXQgPSAnJy5zcGxpdDtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0LmNhbGwoaXQsICcnKSA6IE9iamVjdChpdCk7XG59IDogT2JqZWN0O1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkZmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKFBST01JU0UsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBpbnNwZWN0U291cmNlKFByb21pc2VDb25zdHJ1Y3RvcikgIT09IFN0cmluZyhQcm9taXNlQ29uc3RydWN0b3IpO1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UpIHtcbiAgICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICBpZiAoVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAgIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICBpZiAoIUlTX05PREUgJiYgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCAhPSAnZnVuY3Rpb24nKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBXZSBuZWVkIFByb21pc2UjZmluYWxseSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGVbJ2ZpbmFsbHknXSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmIChWOF9WRVJTSU9OID49IDUxICYmIC9uYXRpdmUgY29kZS8udGVzdChQcm9taXNlQ29uc3RydWN0b3IpKSByZXR1cm4gZmFsc2U7XG4gIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoMSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgcmV0dXJuICEocHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSk7XG59KTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSBGT1JDRUQgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSlbJ2NhdGNoJ10oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHByb21pc2UsIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHByb21pc2UsIHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkocHJvbWlzZSwgc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgdGhpcywgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCB0aGlzLCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdCh0aGlzLCBzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeSh0aGlzLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgcHJvbWlzZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgcHJvbWlzZSwgc3RhdGUpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgdHlwZW9mIE5hdGl2ZVByb21pc2UgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlLnByb3RvdHlwZS50aGVuO1xuXG4gICAgLy8gd3JhcCBuYXRpdmUgUHJvbWlzZSN0aGVuIGZvciBuYXRpdmUgYXN5bmMgZnVuY3Rpb25zXG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBuYXRpdmVUaGVuLmNhbGwodGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgIC8vIHdyYXAgZmV0Y2ggcmVzdWx0XG4gICAgaWYgKHR5cGVvZiAkZmV0Y2ggPT0gJ2Z1bmN0aW9uJykgJCh7IGdsb2JhbDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoUHJvbWlzZUNvbnN0cnVjdG9yLCAkZmV0Y2guYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcblxuUHJvbWlzZVdyYXBwZXIgPSBnZXRCdWlsdEluKFBST01JU0UpO1xuXG4vLyBzdGF0aWNzXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIGNhcGFiaWxpdHkucmVqZWN0LmNhbGwodW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyBgUHJvbWlzZS5yYWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjYuNCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xuXG52YXIgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJiAhZmFpbHMocG9zdCkpIHtcbiAgICBkZWZlciA9IHBvc3Q7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzKGhpZGRlbktleXMsIGtleSkgJiYgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgaXRlcmF0ZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBmbiwgdGhhdCwgQVNfRU5UUklFUywgSVNfSVRFUkFUT1IpIHtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGZuLCB0aGF0LCBBU19FTlRSSUVTID8gMiA6IDEpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gQVNfRU5UUklFU1xuICAgICAgICAgID8gYm91bmRGdW5jdGlvbihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSlcbiAgICAgICAgICA6IGJvdW5kRnVuY3Rpb24oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBib3VuZEZ1bmN0aW9uLCBzdGVwLnZhbHVlLCBBU19FTlRSSUVTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG5cbml0ZXJhdGUuc3RvcCA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgcmVzdWx0KTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0ICovXG4gICAgYWN0aXZlWERvY3VtZW50ID0gZG9jdW1lbnQuZG9tYWluICYmIG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSBhY3RpdmVYRG9jdW1lbnQgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKTtcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIHZlcnNpb24gPSBtYXRjaFswXSArIG1hdGNoWzFdO1xufSBlbHNlIGlmICh1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb24gJiYgK3ZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5pZiAoIUlTX1BVUkUgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIUlTX0lPUykge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY2FjaGUgPSB7fTtcblxudmFyIHRocm93ZXIgPSBmdW5jdGlvbiAoaXQpIHsgdGhyb3cgaXQ7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBvcHRpb25zKSB7XG4gIGlmIChoYXMoY2FjaGUsIE1FVEhPRF9OQU1FKSkgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXTtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHZhciBBQ0NFU1NPUlMgPSBoYXMob3B0aW9ucywgJ0FDQ0VTU09SUycpID8gb3B0aW9ucy5BQ0NFU1NPUlMgOiBmYWxzZTtcbiAgdmFyIGFyZ3VtZW50MCA9IGhhcyhvcHRpb25zLCAwKSA/IG9wdGlvbnNbMF0gOiB0aHJvd2VyO1xuICB2YXIgYXJndW1lbnQxID0gaGFzKG9wdGlvbnMsIDEpID8gb3B0aW9uc1sxXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdID0gISFtZXRob2QgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoQUNDRVNTT1JTICYmICFERVNDUklQVE9SUykgcmV0dXJuIHRydWU7XG4gICAgdmFyIE8gPSB7IGxlbmd0aDogLTEgfTtcblxuICAgIGlmIChBQ0NFU1NPUlMpIGRlZmluZVByb3BlcnR5KE8sIDEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiB0aHJvd2VyIH0pO1xuICAgIGVsc2UgT1sxXSA9IDE7XG5cbiAgICBtZXRob2QuY2FsbChPLCBhcmd1bWVudDAsIGFyZ3VtZW50MSk7XG4gIH0pO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gQXJyYXlWYWx1ZXMpIHRyeSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gPSBBcnJheVZhbHVlcztcbiAgICB9XG4gICAgaWYgKCFDb2xsZWN0aW9uUHJvdG90eXBlW1RPX1NUUklOR19UQUddKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICB9XG4gICAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSBmb3IgKHZhciBNRVRIT0RfTkFNRSBpbiBBcnJheUl0ZXJhdG9yTWV0aG9kcykge1xuICAgICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gIT09IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSkgdHJ5IHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUiwgTUVUSE9ELCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJpbmQoY2FsbCwgZ2xvYmFsW0NPTlNUUlVDVE9SXS5wcm90b3R5cGVbTUVUSE9EXSwgbGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFByb21pc2UuYWxsU2V0dGxlZGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWFsbFNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCJpbXBvcnQgJ2NvcmUtanMvZmVhdHVyZXMvb2JqZWN0L2Fzc2lnbic7XG5pbXBvcnQgJ2NvcmUtanMvZmVhdHVyZXMvYXJyYXkvaW5jbHVkZXMnO1xuaW1wb3J0ICdjb3JlLWpzL2ZlYXR1cmVzL3N0cmluZy9pbmNsdWRlcyc7XG5pbXBvcnQgJ2NvcmUtanMvZmVhdHVyZXMvcHJvbWlzZSc7XG5pbXBvcnQgJ3JhZi9wb2x5ZmlsbCc7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2Fzc2lnbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbnZhciBuYXRpdmVBc3NpZ24gPSBPYmplY3QuYXNzaWduO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICFuYXRpdmVBc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgbmF0aXZlQXNzaWduKHsgYjogMSB9LCBuYXRpdmVBc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gbmF0aXZlQXNzaWduKHt9LCBBKVtzeW1ib2xdICE9IDcgfHwgb2JqZWN0S2V5cyhuYXRpdmVBc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IG9iamVjdEtleXMoUykuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogbmF0aXZlQXNzaWduO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2luY2x1ZGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcycpO1xudmFyIGVudHJ5VW5iaW5kID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXVuYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VW5iaW5kKCdBcnJheScsICdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2luZGV4T2YnLCB7IEFDQ0VTU09SUzogdHJ1ZSwgMTogMCB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnaW5jbHVkZXMnKTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zdHJpbmcvaW5jbHVkZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGVudHJ5VW5iaW5kID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXVuYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VW5iaW5kKCdTdHJpbmcnLCAnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSlcbiAgICAgIC5pbmRleE9mKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzUmVnRXhwKGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlByb21pc2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiBTdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgTmF0aXZlUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXS5jYWxsKHsgdGhlbjogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9IH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBwYXRjaCBuYXRpdmUgUHJvbWlzZS5wcm90b3R5cGUgZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbmlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nICYmICFOYXRpdmVQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddKSB7XG4gIHJlZGVmaW5lKE5hdGl2ZVByb21pc2UucHJvdG90eXBlLCAnZmluYWxseScsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsQWdncmVnYXRlRXJyb3JTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKCdBZ2dyZWdhdGVFcnJvcicpO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgaWYgKCEodGhhdCBpbnN0YW5jZW9mICRBZ2dyZWdhdGVFcnJvcikpIHJldHVybiBuZXcgJEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSk7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgRXJyb3IobWVzc2FnZSksIGdldFByb3RvdHlwZU9mKHRoYXQpKTtcbiAgfVxuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIGVycm9yc0FycmF5LnB1c2gsIGVycm9yc0FycmF5KTtcbiAgaWYgKERFU0NSSVBUT1JTKSBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHsgZXJyb3JzOiBlcnJvcnNBcnJheSwgdHlwZTogJ0FnZ3JlZ2F0ZUVycm9yJyB9KTtcbiAgZWxzZSB0aGF0LmVycm9ycyA9IGVycm9yc0FycmF5O1xuICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCBTdHJpbmcobWVzc2FnZSkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbiRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoNSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDUsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDUsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eS5mKCRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUsICdlcnJvcnMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbEFnZ3JlZ2F0ZUVycm9yU3RhdGUodGhpcykuZXJyb3JzO1xuICB9LFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCIvLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG5cbi8vIGBQcm9taXNlLnRyeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIHZhciBhbHJlYWR5UmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICBlcnJvcnMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi8nKS5wb2x5ZmlsbCgpXG4iLCJ2YXIgbm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93JylcbiAgLCByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3dcbiAgLCB2ZW5kb3JzID0gWydtb3onLCAnd2Via2l0J11cbiAgLCBzdWZmaXggPSAnQW5pbWF0aW9uRnJhbWUnXG4gICwgcmFmID0gcm9vdFsncmVxdWVzdCcgKyBzdWZmaXhdXG4gICwgY2FmID0gcm9vdFsnY2FuY2VsJyArIHN1ZmZpeF0gfHwgcm9vdFsnY2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG5cbmZvcih2YXIgaSA9IDA7ICFyYWYgJiYgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspIHtcbiAgcmFmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ1JlcXVlc3QnICsgc3VmZml4XVxuICBjYWYgPSByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsJyArIHN1ZmZpeF1cbiAgICAgIHx8IHJvb3RbdmVuZG9yc1tpXSArICdDYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cbn1cblxuLy8gU29tZSB2ZXJzaW9ucyBvZiBGRiBoYXZlIHJBRiBidXQgbm90IGNBRlxuaWYoIXJhZiB8fCAhY2FmKSB7XG4gIHZhciBsYXN0ID0gMFxuICAgICwgaWQgPSAwXG4gICAgLCBxdWV1ZSA9IFtdXG4gICAgLCBmcmFtZUR1cmF0aW9uID0gMTAwMCAvIDYwXG5cbiAgcmFmID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBpZihxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBfbm93ID0gbm93KClcbiAgICAgICAgLCBuZXh0ID0gTWF0aC5tYXgoMCwgZnJhbWVEdXJhdGlvbiAtIChfbm93IC0gbGFzdCkpXG4gICAgICBsYXN0ID0gbmV4dCArIF9ub3dcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjcCA9IHF1ZXVlLnNsaWNlKDApXG4gICAgICAgIC8vIENsZWFyIHF1ZXVlIGhlcmUgdG8gcHJldmVudFxuICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBhcHBlbmRpbmcgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGZyYW1lJ3MgcXVldWVcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZighY3BbaV0uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgIGNwW2ldLmNhbGxiYWNrKGxhc3QpXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZSB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5yb3VuZChuZXh0KSlcbiAgICB9XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBoYW5kbGU6ICsraWQsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIGNhZiA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYocXVldWVbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcXVldWVbaV0uY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7XG4gIC8vIFdyYXAgaW4gYSBuZXcgZnVuY3Rpb24gdG8gcHJldmVudFxuICAvLyBgY2FuY2VsYCBwb3RlbnRpYWxseSBiZWluZyBhc3NpZ25lZFxuICAvLyB0byB0aGUgbmF0aXZlIHJBRiBmdW5jdGlvblxuICByZXR1cm4gcmFmLmNhbGwocm9vdCwgZm4pXG59XG5tb2R1bGUuZXhwb3J0cy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgY2FmLmFwcGx5KHJvb3QsIGFyZ3VtZW50cylcbn1cbm1vZHVsZS5leHBvcnRzLnBvbHlmaWxsID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgb2JqZWN0ID0gcm9vdDtcbiAgfVxuICBvYmplY3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmFmXG4gIG9iamVjdC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNhZlxufVxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjJcbihmdW5jdGlvbigpIHtcbiAgdmFyIGdldE5hbm9TZWNvbmRzLCBocnRpbWUsIGxvYWRUaW1lLCBtb2R1bGVMb2FkVGltZSwgbm9kZUxvYWRUaW1lLCB1cFRpbWU7XG5cbiAgaWYgKCh0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcGVyZm9ybWFuY2UgIT09IG51bGwpICYmIHBlcmZvcm1hbmNlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2VzcyAhPT0gbnVsbCkgJiYgcHJvY2Vzcy5ocnRpbWUpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIChnZXROYW5vU2Vjb25kcygpIC0gbm9kZUxvYWRUaW1lKSAvIDFlNjtcbiAgICB9O1xuICAgIGhydGltZSA9IHByb2Nlc3MuaHJ0aW1lO1xuICAgIGdldE5hbm9TZWNvbmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaHI7XG4gICAgICBociA9IGhydGltZSgpO1xuICAgICAgcmV0dXJuIGhyWzBdICogMWU5ICsgaHJbMV07XG4gICAgfTtcbiAgICBtb2R1bGVMb2FkVGltZSA9IGdldE5hbm9TZWNvbmRzKCk7XG4gICAgdXBUaW1lID0gcHJvY2Vzcy51cHRpbWUoKSAqIDFlOTtcbiAgICBub2RlTG9hZFRpbWUgPSBtb2R1bGVMb2FkVGltZSAtIHVwVGltZTtcbiAgfSBlbHNlIGlmIChEYXRlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxufSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVyZm9ybWFuY2Utbm93LmpzLm1hcFxuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/app/rainloop/v/1.14.0/app/domains/default.ini.dist b/app/rainloop/v/1.15.0/app/domains/default.ini.dist similarity index 100% rename from app/rainloop/v/1.14.0/app/domains/default.ini.dist rename to app/rainloop/v/1.15.0/app/domains/default.ini.dist diff --git a/app/rainloop/v/1.14.0/app/domains/disabled b/app/rainloop/v/1.15.0/app/domains/disabled similarity index 100% rename from app/rainloop/v/1.14.0/app/domains/disabled rename to app/rainloop/v/1.15.0/app/domains/disabled diff --git a/app/rainloop/v/1.14.0/app/domains/gmail.com.ini b/app/rainloop/v/1.15.0/app/domains/gmail.com.ini similarity index 100% rename from app/rainloop/v/1.14.0/app/domains/gmail.com.ini rename to app/rainloop/v/1.15.0/app/domains/gmail.com.ini diff --git a/app/rainloop/v/1.14.0/app/domains/outlook.com.ini b/app/rainloop/v/1.15.0/app/domains/outlook.com.ini similarity index 100% rename from app/rainloop/v/1.14.0/app/domains/outlook.com.ini rename to app/rainloop/v/1.15.0/app/domains/outlook.com.ini diff --git a/app/rainloop/v/1.14.0/app/domains/qq.com.ini b/app/rainloop/v/1.15.0/app/domains/qq.com.ini similarity index 100% rename from app/rainloop/v/1.14.0/app/domains/qq.com.ini rename to app/rainloop/v/1.15.0/app/domains/qq.com.ini diff --git a/app/rainloop/v/1.14.0/app/domains/yahoo.com.ini b/app/rainloop/v/1.15.0/app/domains/yahoo.com.ini similarity index 100% rename from app/rainloop/v/1.14.0/app/domains/yahoo.com.ini rename to app/rainloop/v/1.15.0/app/domains/yahoo.com.ini diff --git a/app/rainloop/v/1.14.0/app/handle.php b/app/rainloop/v/1.15.0/app/handle.php similarity index 93% rename from app/rainloop/v/1.14.0/app/handle.php rename to app/rainloop/v/1.15.0/app/handle.php index f763f20c..ff70c576 100644 --- a/app/rainloop/v/1.14.0/app/handle.php +++ b/app/rainloop/v/1.15.0/app/handle.php @@ -60,7 +60,7 @@ function rainLoopSplAutoloadRegisterFunction($sClassName) return false; } - \spl_autoload_register('rainLoopSplAutoloadRegisterFunction', false); + \spl_autoload_register('rainLoopSplAutoloadRegisterFunction'); } if (\class_exists('RainLoop\Api')) diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Authentication/AccessToken.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Authentication/AccessToken.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Authentication/AccessToken.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Authentication/AccessToken.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Authentication/AccessTokenMetadata.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Authentication/AccessTokenMetadata.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Authentication/AccessTokenMetadata.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Authentication/AccessTokenMetadata.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Authentication/OAuth2Client.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Authentication/OAuth2Client.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Authentication/OAuth2Client.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Authentication/OAuth2Client.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookAuthenticationException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookAuthenticationException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookAuthenticationException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookAuthenticationException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookAuthorizationException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookAuthorizationException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookAuthorizationException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookAuthorizationException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookClientException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookClientException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookClientException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookClientException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookOtherException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookOtherException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookOtherException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookOtherException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookResponseException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookSDKException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookSDKException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookSDKException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookSDKException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookServerException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookServerException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookServerException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookServerException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookThrottleException.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookThrottleException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Exceptions/FacebookThrottleException.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Exceptions/FacebookThrottleException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Facebook.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Facebook.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Facebook.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Facebook.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookApp.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookApp.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookApp.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookApp.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookBatchRequest.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookBatchRequest.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookBatchRequest.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookBatchRequest.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookBatchResponse.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookBatchResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookBatchResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookBatchResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookClient.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookClient.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookRequest.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookRequest.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookRequest.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookRequest.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookResponse.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FacebookResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FacebookResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FileUpload/FacebookFile.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FileUpload/FacebookFile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FileUpload/FacebookFile.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FileUpload/FacebookFile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FileUpload/FacebookVideo.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FileUpload/FacebookVideo.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FileUpload/FacebookVideo.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FileUpload/FacebookVideo.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/FileUpload/Mimetypes.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/FileUpload/Mimetypes.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/FileUpload/Mimetypes.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/FileUpload/Mimetypes.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/Collection.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/Collection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/Collection.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/Collection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphAchievement.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphAchievement.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphAchievement.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphAchievement.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphAlbum.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphAlbum.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphAlbum.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphAlbum.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphApplication.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphApplication.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphApplication.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphApplication.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphCoverPhoto.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphCoverPhoto.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphCoverPhoto.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphCoverPhoto.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphEdge.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphEdge.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphEdge.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphEdge.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphEvent.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphEvent.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphEvent.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphEvent.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphGroup.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphGroup.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphGroup.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphGroup.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphList.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphList.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphList.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphList.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphLocation.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphLocation.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphLocation.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphLocation.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphNode.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphNode.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphNode.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphNode.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphNodeFactory.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphNodeFactory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphNodeFactory.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphNodeFactory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphObject.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphObject.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphObject.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphObject.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphObjectFactory.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphObjectFactory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphObjectFactory.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphObjectFactory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphPage.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphPage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphPage.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphPage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphPicture.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphPicture.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphPicture.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphPicture.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphSessionInfo.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphSessionInfo.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphSessionInfo.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphSessionInfo.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphUser.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphUser.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/GraphNodes/GraphUser.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/GraphNodes/GraphUser.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookCanvasHelper.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookCanvasHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookCanvasHelper.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookCanvasHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookJavaScriptHelper.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookJavaScriptHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookJavaScriptHelper.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookJavaScriptHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookPageTabHelper.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookPageTabHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookPageTabHelper.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookPageTabHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookRedirectLoginHelper.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookRedirectLoginHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookRedirectLoginHelper.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookRedirectLoginHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Http/GraphRawResponse.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Http/GraphRawResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Http/GraphRawResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Http/GraphRawResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Http/RequestBodyInterface.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Http/RequestBodyInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Http/RequestBodyInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Http/RequestBodyInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Http/RequestBodyMultipart.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Http/RequestBodyMultipart.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Http/RequestBodyMultipart.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Http/RequestBodyMultipart.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Http/RequestBodyUrlEncoded.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Http/RequestBodyUrlEncoded.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Http/RequestBodyUrlEncoded.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Http/RequestBodyUrlEncoded.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookCurl.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookCurl.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookCurl.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookCurl.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookCurlHttpClient.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookCurlHttpClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookCurlHttpClient.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookCurlHttpClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookGuzzleHttpClient.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookGuzzleHttpClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookGuzzleHttpClient.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookGuzzleHttpClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookHttpClientInterface.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookHttpClientInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookHttpClientInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookHttpClientInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookStream.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookStream.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookStream.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookStream.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookStreamHttpClient.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookStreamHttpClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/FacebookStreamHttpClient.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/FacebookStreamHttpClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem b/app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem rename to app/rainloop/v/1.15.0/app/libraries/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PersistentData/PersistentDataInterface.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PersistentData/PersistentDataInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PersistentData/PersistentDataInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PersistentData/PersistentDataInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/SignedRequest.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/SignedRequest.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/SignedRequest.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/SignedRequest.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Url/FacebookUrlDetectionHandler.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Url/FacebookUrlDetectionHandler.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Url/FacebookUrlDetectionHandler.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Url/FacebookUrlDetectionHandler.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Url/FacebookUrlManipulator.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Url/FacebookUrlManipulator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Url/FacebookUrlManipulator.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Url/FacebookUrlManipulator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/Url/UrlDetectionInterface.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/Url/UrlDetectionInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/Url/UrlDetectionInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/Url/UrlDetectionInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Facebook/autoload.php b/app/rainloop/v/1.15.0/app/libraries/Facebook/autoload.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Facebook/autoload.php rename to app/rainloop/v/1.15.0/app/libraries/Facebook/autoload.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Draw/DrawerInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Draw/DrawerInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Draw/DrawerInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Draw/DrawerInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Effects/EffectsInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Effects/EffectsInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Effects/EffectsInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Effects/EffectsInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/Exception.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/InvalidArgumentException.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/InvalidArgumentException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/InvalidArgumentException.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/InvalidArgumentException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/NotSupportedException.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/NotSupportedException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/NotSupportedException.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/NotSupportedException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/OutOfBoundsException.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/OutOfBoundsException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/OutOfBoundsException.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/OutOfBoundsException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Exception/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Exception/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/Border.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/Border.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/Border.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/Border.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/Canvas.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/Canvas.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/Canvas.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/Canvas.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/Grayscale.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/Grayscale.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/Grayscale.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/Grayscale.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/OnPixelBased.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/OnPixelBased.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/OnPixelBased.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/OnPixelBased.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/RelativeResize.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/RelativeResize.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Advanced/RelativeResize.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Advanced/RelativeResize.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/ApplyMask.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/ApplyMask.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/ApplyMask.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/ApplyMask.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Autorotate.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Autorotate.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Autorotate.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Autorotate.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Copy.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Copy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Copy.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Copy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Crop.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Crop.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Crop.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Crop.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Fill.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Fill.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Fill.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Fill.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/FlipHorizontally.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/FlipHorizontally.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/FlipHorizontally.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/FlipHorizontally.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/FlipVertically.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/FlipVertically.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/FlipVertically.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/FlipVertically.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Paste.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Paste.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Paste.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Paste.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Resize.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Resize.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Resize.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Resize.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Rotate.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Rotate.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Rotate.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Rotate.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Save.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Save.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Save.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Save.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Show.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Show.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Show.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Show.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Strip.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Strip.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Strip.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Strip.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Thumbnail.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Thumbnail.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/Thumbnail.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/Thumbnail.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/WebOptimization.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/WebOptimization.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Basic/WebOptimization.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Basic/WebOptimization.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/FilterInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/FilterInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/FilterInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/FilterInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/ImagineAware.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/ImagineAware.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/ImagineAware.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/ImagineAware.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Transformation.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Transformation.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Filter/Transformation.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Filter/Transformation.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Drawer.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Drawer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Drawer.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Drawer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Effects.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Effects.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Effects.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Effects.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Font.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Font.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Font.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Font.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Image.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Image.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Image.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Image.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Imagine.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Imagine.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Imagine.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Imagine.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Layers.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Layers.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gd/Layers.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gd/Layers.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Drawer.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Drawer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Drawer.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Drawer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Effects.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Effects.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Effects.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Effects.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Font.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Font.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Font.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Font.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Image.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Image.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Image.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Image.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Imagine.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Imagine.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Imagine.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Imagine.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Layers.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Layers.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Gmagick/Layers.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Gmagick/Layers.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractFont.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractFont.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractFont.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractFont.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractImage.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractImage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractImage.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractImage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractImagine.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractImagine.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractImagine.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractImagine.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractLayers.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractLayers.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/AbstractLayers.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/AbstractLayers.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Box.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Box.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Box.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Box.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/BoxInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/BoxInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/BoxInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/BoxInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/FillInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/FillInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/FillInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/FillInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/Gradient/Horizontal.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/Gradient/Horizontal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/Gradient/Horizontal.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/Gradient/Horizontal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/Gradient/Linear.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/Gradient/Linear.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/Gradient/Linear.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/Gradient/Linear.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/Gradient/Vertical.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/Gradient/Vertical.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Fill/Gradient/Vertical.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Fill/Gradient/Vertical.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/FontInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/FontInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/FontInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/FontInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Histogram/Bucket.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Histogram/Bucket.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Histogram/Bucket.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Histogram/Bucket.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Histogram/Range.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Histogram/Range.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Histogram/Range.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Histogram/Range.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ImageInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ImageInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ImageInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ImageInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ImagineInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ImagineInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ImagineInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ImagineInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/LayersInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/LayersInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/LayersInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/LayersInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ManipulatorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ManipulatorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ManipulatorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ManipulatorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/AbstractMetadataReader.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/AbstractMetadataReader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/AbstractMetadataReader.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/AbstractMetadataReader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/DefaultMetadataReader.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/DefaultMetadataReader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/DefaultMetadataReader.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/DefaultMetadataReader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/ExifMetadataReader.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/ExifMetadataReader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/ExifMetadataReader.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/ExifMetadataReader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/MetadataBag.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/MetadataBag.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/MetadataBag.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/MetadataBag.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/MetadataReaderInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/MetadataReaderInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Metadata/MetadataReaderInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Metadata/MetadataReaderInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/CMYK.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/CMYK.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/CMYK.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/CMYK.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/CMYK.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/CMYK.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/CMYK.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/CMYK.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/ColorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/ColorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/ColorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/ColorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/Gray.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/Gray.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/Gray.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/Gray.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/RGB.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/RGB.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Color/RGB.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Color/RGB.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/ColorParser.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/ColorParser.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/ColorParser.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/ColorParser.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Grayscale.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Grayscale.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/Grayscale.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/Grayscale.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/PaletteInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/PaletteInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/PaletteInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/PaletteInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/RGB.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/RGB.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Palette/RGB.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Palette/RGB.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Point.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Point.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Point.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Point.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Point/Center.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Point/Center.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Point/Center.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Point/Center.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/PointInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/PointInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/PointInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/PointInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Profile.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Profile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/Profile.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/Profile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ProfileInterface.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ProfileInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Image/ProfileInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Image/ProfileInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Drawer.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Drawer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Drawer.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Drawer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Effects.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Effects.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Effects.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Effects.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Font.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Font.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Font.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Font.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Image.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Image.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Image.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Image.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Imagine.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Imagine.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Imagine.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Imagine.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Layers.php b/app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Layers.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Imagine/Imagick/Layers.php rename to app/rainloop/v/1.15.0/app/libraries/Imagine/Imagick/Layers.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Collection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Collection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Collection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Collection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Crypt.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Crypt.php similarity index 90% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Crypt.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Crypt.php index f21bdbca..152a0c90 100644 --- a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Crypt.php +++ b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Crypt.php @@ -31,6 +31,10 @@ public static function XxteaEncrypt($sString, $sKey) return ''; } + if (\is_callable('xxtea_encrypt')) { + return xxtea_encrypt($sString, $sKey); + } + $aV = self::str2long($sString, true); $aK = self::str2long($sKey, false); if (\count($aK) < 4) @@ -80,6 +84,10 @@ public static function XxteaDecrypt($sEncriptedString, $sKey) return ''; } + if (\is_callable('xxtea_decrypt')) { + return xxtea_decrypt($sEncriptedString, $sKey); + } + $aV = self::str2long($sEncriptedString, false); $aK = self::str2long($sKey, false); @@ -186,4 +194,4 @@ private static function int32($iN) } return (int) $iN; } -} \ No newline at end of file +} diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/DateTimeHelper.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/DateTimeHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/DateTimeHelper.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/DateTimeHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Enumerations/Charset.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Enumerations/Charset.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Enumerations/Charset.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Enumerations/Charset.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Enumerations/Encoding.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Enumerations/Encoding.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Enumerations/Encoding.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Enumerations/Encoding.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Exceptions/InvalidArgumentException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Exceptions/InvalidArgumentException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Exceptions/InvalidArgumentException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Exceptions/InvalidArgumentException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/HtmlUtils.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/HtmlUtils.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/HtmlUtils.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/HtmlUtils.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Http.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Http.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Http.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Http.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/LinkFinder.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/LinkFinder.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/LinkFinder.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/LinkFinder.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Loader.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Loader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Loader.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Loader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/ResourceRegistry.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/ResourceRegistry.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/ResourceRegistry.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/ResourceRegistry.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/Binary.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/Literal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/TempFile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/Test.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/Test.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/StreamWrappers/Test.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/StreamWrappers/Test.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Utils.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Utils.php similarity index 95% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Utils.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Utils.php index 35ee6505..39c35352 100644 --- a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Utils.php +++ b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Utils.php @@ -2249,21 +2249,6 @@ public static function FunctionExistsAndEnabled($mFunctionNameOrNames) $aCache = \explode(',', $sDisableFunctions); $aCache = \is_array($aCache) && 0 < \count($aCache) ? $aCache : array(); - - if (\extension_loaded('suhosin')) - { - $sSuhosin = @\ini_get('suhosin.executor.func.blacklist'); - $sSuhosin = \is_string($sSuhosin) && 0 < \strlen($sSuhosin) ? $sSuhosin : ''; - - $aSuhosinCache = \explode(',', $sSuhosin); - $aSuhosinCache = \is_array($aSuhosinCache) && 0 < \count($aSuhosinCache) ? $aSuhosinCache : array(); - - if (0 < \count($aSuhosinCache)) - { - $aCache = \array_merge($aCache, $aSuhosinCache); - $aCache = \array_unique($aCache); - } - } } return !\in_array($mFunctionNameOrNames, $aCache); diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Validator.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Validator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Base/Validator.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Base/Validator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/CacheClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/CacheClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/CacheClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/CacheClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/DriverInterface.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/DriverInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/DriverInterface.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/DriverInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/APC.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/APC.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/APC.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/APC.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/File.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/File.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/Memcache.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/Memcache.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/Memcache.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/Memcache.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/Redis.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/Redis.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Cache/Drivers/Redis.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Cache/Drivers/Redis.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Config.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Config.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Config.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Config.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Hooks.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Hooks.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Hooks.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Hooks.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/BodyStructure.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/BodyStructure.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/BodyStructure.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/BodyStructure.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FetchType.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FetchType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FetchType.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FetchType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FolderType.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FolderType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/FolderType.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/FolderType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/ResponseType.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/ResponseType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/ResponseType.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/ResponseType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/LoginException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/LoginException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/LoginException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/LoginException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/ResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/ResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/ResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/ResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/FetchResponse.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/FetchResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/FetchResponse.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/FetchResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Folder.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Folder.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Folder.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Folder.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/FolderInformation.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/FolderInformation.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/FolderInformation.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/FolderInformation.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/ImapClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/ImapClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/ImapClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/ImapClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/NamespaceResult.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/NamespaceResult.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/NamespaceResult.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/NamespaceResult.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Response.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Response.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Imap/Response.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Imap/Response.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/LICENSE b/app/rainloop/v/1.15.0/app/libraries/MailSo/LICENSE similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/LICENSE rename to app/rainloop/v/1.15.0/app/libraries/MailSo/LICENSE diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Driver.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Driver.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Driver.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Driver.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/Callback.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/Callback.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/Callback.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/Callback.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/File.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/File.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/Inline.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/Inline.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/Inline.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/Inline.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/Syslog.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/Syslog.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Drivers/Syslog.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Drivers/Syslog.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Enumerations/Type.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Enumerations/Type.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Enumerations/Type.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Enumerations/Type.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Logger.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Logger.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Log/Logger.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Log/Logger.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Attachment.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Attachment.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Attachment.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Attachment.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/AttachmentCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/AttachmentCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/AttachmentCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/AttachmentCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Folder.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Folder.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Folder.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Folder.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/FolderCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/FolderCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/FolderCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/FolderCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/MailClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/MailClient.php similarity index 96% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/MailClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/MailClient.php index 2803d219..2a8f7e85 100644 --- a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/MailClient.php +++ b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/MailClient.php @@ -1865,7 +1865,7 @@ public function GetUids($oCacher, $sSearch, $sFilter, $sFolderName, $sFolderHash if (!\is_array($aResultUids)) { $aResultUids = $bUseSortIfSupported ? - $this->oImapClient->MessageSimpleSort(array('REVERSE ARRIVAL'), $sSearchCriterias, true) : + $this->oImapClient->MessageSimpleSort(array('REVERSE DATE'), $sSearchCriterias, true) : $this->oImapClient->MessageSimpleSearch($sSearchCriterias, true, \MailSo\Base\Utils::IsAscii($sSearchCriterias) ? '' : 'UTF-8') ; diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Message.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Message.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/Message.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/Message.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/MessageCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/MessageCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mail/MessageCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mail/MessageCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/MailSo.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/MailSo.php similarity index 98% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/MailSo.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/MailSo.php index aa294dca..921982c2 100644 --- a/app/rainloop/v/1.14.0/app/libraries/MailSo/MailSo.php +++ b/app/rainloop/v/1.15.0/app/libraries/MailSo/MailSo.php @@ -27,7 +27,7 @@ function MailSoSplAutoloadRegisterFunction($sClassName) include MAILSO_LIBRARY_ROOT_PATH.\str_replace('\\', '/', \substr($sClassName, 7)).'.php' : false; } - \spl_autoload_register('MailSo\MailSoSplAutoloadRegisterFunction', false); + \spl_autoload_register('MailSo\MailSoSplAutoloadRegisterFunction'); if (\class_exists('MailSo\Base\Loader')) { diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Attachment.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Attachment.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Attachment.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Attachment.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/AttachmentCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/AttachmentCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/AttachmentCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/AttachmentCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Email.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Email.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Email.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Email.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/EmailCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/EmailCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/EmailCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/EmailCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/EmailDep.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/EmailDep.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/EmailDep.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/EmailDep.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Constants.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Constants.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Constants.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Constants.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/DkimStatus.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/DkimStatus.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/DkimStatus.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/DkimStatus.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Header.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Header.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Header.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Header.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/MimeType.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/MimeType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/MimeType.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/MimeType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Parameter.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Parameter.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Parameter.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Parameter.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Header.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Header.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Header.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Header.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/HeaderCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/HeaderCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/HeaderCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/HeaderCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Message.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Message.php similarity index 97% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Message.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Message.php index 44dfa80b..de3845c3 100644 --- a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Message.php +++ b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Message.php @@ -493,15 +493,20 @@ public function AddText($sHtmlOrPlainText, $bIsHtml = false) /** * @param string $sContentType - * @param string|resource $mData + * @param string $sData * @param string $sContentTransferEncoding = '' * @param array $aCustomContentTypeParams = array() * * @return \MailSo\Mime\Message */ - public function AddAlternative($sContentType, $mData, $sContentTransferEncoding = '', $aCustomContentTypeParams = array()) + public function AddAlternative($sContentType, $sData, $sContentTransferEncoding = '') { - $this->aAlternativeParts[] = array($sContentType, $mData, $sContentTransferEncoding, $aCustomContentTypeParams); + $this->aAlternativeParts[] = array( + $sContentType, + \preg_replace('/\\r?\\n/', Enumerations\Constants::CRLF, \trim($sData)), + $sContentTransferEncoding, + array() + ); return $this; } @@ -712,7 +717,7 @@ private function createNewMessageAlternativePartBody($aAlternativeData) private function createNewMessageSimpleOrAlternativeBody() { $oResultPart = null; - if (1 < count($this->aAlternativeParts)) + if (1 < \count($this->aAlternativeParts)) { $oResultPart = Part::NewInstance(); @@ -739,7 +744,7 @@ private function createNewMessageSimpleOrAlternativeBody() } } - else if (1 === count($this->aAlternativeParts)) + else if (1 === \count($this->aAlternativeParts)) { $oAlternativePart = $this->createNewMessageAlternativePartBody($this->aAlternativeParts[0]); if ($oAlternativePart) @@ -759,7 +764,7 @@ private function createNewMessageSimpleOrAlternativeBody() else { $aAttachments = $this->oAttachmentCollection->CloneAsArray(); - if (\is_array($aAttachments) && 1 === count($aAttachments) && isset($aAttachments[0])) + if (\is_array($aAttachments) && 1 === \count($aAttachments) && isset($aAttachments[0])) { $this->oAttachmentCollection->Clear(); @@ -784,7 +789,7 @@ private function createNewMessageRelatedBody($oIncPart) $oResultPart = null; $aAttachments = $this->oAttachmentCollection->LinkedAttachments(); - if (0 < count($aAttachments)) + if (0 < \count($aAttachments)) { $oResultPart = Part::NewInstance(); @@ -824,7 +829,7 @@ private function createNewMessageMixedBody($oIncPart) $oResultPart = null; $aAttachments = $this->oAttachmentCollection->UnlinkedAttachments(); - if (0 < count($aAttachments)) + if (0 < \count($aAttachments)) { $oResultPart = Part::NewInstance(); diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parameter.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parameter.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parameter.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parameter.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/ParameterCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/ParameterCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/ParameterCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/ParameterCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parser/ParserEmpty.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parser/ParserEmpty.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parser/ParserEmpty.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parser/ParserEmpty.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parser/ParserInterface.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parser/ParserInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parser/ParserInterface.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parser/ParserInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parser/ParserMemory.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parser/ParserMemory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Parser/ParserMemory.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Parser/ParserMemory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Part.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Part.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/Part.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/Part.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/PartCollection.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/PartCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Mime/PartCollection.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Mime/PartCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/ConnectionException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/ConnectionException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/ConnectionException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/ConnectionException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketReadException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketReadException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketReadException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketReadException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Net/NetClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Net/NetClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Net/NetClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Net/NetClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Pop3Client.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Pop3Client.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Pop3/Pop3Client.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Pop3/Pop3Client.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/PoppassdClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/PoppassdClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Poppassd/PoppassdClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Poppassd/PoppassdClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/LoginException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/LoginException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/LoginException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/LoginException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/ManageSieveClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/ManageSieveClient.php similarity index 95% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/ManageSieveClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/ManageSieveClient.php index cd4e1798..f715a312 100644 --- a/app/rainloop/v/1.14.0/app/libraries/MailSo/Sieve/ManageSieveClient.php +++ b/app/rainloop/v/1.15.0/app/libraries/MailSo/Sieve/ManageSieveClient.php @@ -325,7 +325,7 @@ public function GetScript($sScriptName) $sScript = ''; if (\is_array($mResponse) && 0 < \count($mResponse)) { - if ('{' === $mResponse[0]{0}) + if ('{' === $mResponse[0][0]) { \array_shift($mResponse); } diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/LoginException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/LoginException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/LoginException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/LoginException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/SmtpClient.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/SmtpClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Smtp/SmtpClient.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Smtp/SmtpClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Vendors/Net/IDNA2.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Vendors/Net/IDNA2.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Vendors/Net/IDNA2.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Vendors/Net/IDNA2.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Vendors/Net/IDNA2CustomExceptions.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Vendors/Net/IDNA2CustomExceptions.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Vendors/Net/IDNA2CustomExceptions.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Vendors/Net/IDNA2CustomExceptions.php diff --git a/app/rainloop/v/1.14.0/app/libraries/MailSo/Version.php b/app/rainloop/v/1.15.0/app/libraries/MailSo/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/MailSo/Version.php rename to app/rainloop/v/1.15.0/app/libraries/MailSo/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/LICENSE.txt b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/LICENSE.txt similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/LICENSE.txt rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/LICENSE.txt diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/Mobile_Detect.json b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/Mobile_Detect.json similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/Mobile_Detect.json rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/Mobile_Detect.json diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/Mobile_Detect.php b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/Mobile_Detect.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/Mobile_Detect.php rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/Mobile_Detect.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/README.md b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/README.md similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/README.md rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/README.md diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/composer.json b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/composer.json similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/composer.json rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/composer.json diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/namespaced/Detection/MobileDetect.php b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/namespaced/Detection/MobileDetect.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/namespaced/Detection/MobileDetect.php rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/namespaced/Detection/MobileDetect.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/ruleset.xml b/app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/ruleset.xml similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Mobile_Detect/ruleset.xml rename to app/rainloop/v/1.15.0/app/libraries/Mobile_Detect/ruleset.xml diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/Client.php b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/Client.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/Client.php rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/Client.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/IGrantType.php b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/IGrantType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/IGrantType.php rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/IGrantType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/Password.php b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/Password.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/Password.php rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/Password.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/README b/app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/README similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHP-OAuth2/README rename to app/rainloop/v/1.15.0/app/libraries/PHP-OAuth2/README diff --git a/app/rainloop/v/1.14.0/app/libraries/PHPGangsta/GoogleAuthenticator.php b/app/rainloop/v/1.15.0/app/libraries/PHPGangsta/GoogleAuthenticator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHPGangsta/GoogleAuthenticator.php rename to app/rainloop/v/1.15.0/app/libraries/PHPGangsta/GoogleAuthenticator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHPThumb/GD.php b/app/rainloop/v/1.15.0/app/libraries/PHPThumb/GD.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHPThumb/GD.php rename to app/rainloop/v/1.15.0/app/libraries/PHPThumb/GD.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHPThumb/PHPThumb.php b/app/rainloop/v/1.15.0/app/libraries/PHPThumb/PHPThumb.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHPThumb/PHPThumb.php rename to app/rainloop/v/1.15.0/app/libraries/PHPThumb/PHPThumb.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHPThumb/PluginInterface.php b/app/rainloop/v/1.15.0/app/libraries/PHPThumb/PluginInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHPThumb/PluginInterface.php rename to app/rainloop/v/1.15.0/app/libraries/PHPThumb/PluginInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/PHPThumb/Plugins/Reflection.php b/app/rainloop/v/1.15.0/app/libraries/PHPThumb/Plugins/Reflection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/PHPThumb/Plugins/Reflection.php rename to app/rainloop/v/1.15.0/app/libraries/PHPThumb/Plugins/Reflection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Autoloader.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Autoloader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Autoloader.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Autoloader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Client.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Client.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Client.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Client.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/ClientContextInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/ClientContextInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/ClientContextInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/ClientContextInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/ClientException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/ClientException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/ClientException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/ClientException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/ClientInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/ClientInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/ClientInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/ClientInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/ClusterStrategy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/ClusterStrategy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/ClusterStrategy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/ClusterStrategy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/DistributorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/DistributorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/DistributorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/DistributorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/EmptyRingException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/EmptyRingException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/EmptyRingException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/EmptyRingException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/HashRing.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/HashRing.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/HashRing.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/HashRing.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/KetamaRing.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/KetamaRing.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Distributor/KetamaRing.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Distributor/KetamaRing.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Hash/CRC16.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Hash/CRC16.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Hash/CRC16.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Hash/CRC16.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Hash/HashGeneratorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Hash/HashGeneratorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/Hash/HashGeneratorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/Hash/HashGeneratorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/PredisStrategy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/PredisStrategy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/PredisStrategy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/PredisStrategy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/RedisStrategy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/RedisStrategy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/RedisStrategy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/RedisStrategy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/StrategyInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/StrategyInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Cluster/StrategyInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Cluster/StrategyInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/CursorBasedIterator.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/CursorBasedIterator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/CursorBasedIterator.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/CursorBasedIterator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/HashKey.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/HashKey.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/HashKey.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/HashKey.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/Keyspace.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/Keyspace.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/Keyspace.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/Keyspace.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/ListKey.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/ListKey.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/ListKey.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/ListKey.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/SetKey.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/SetKey.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/SetKey.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/SetKey.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/SortedSetKey.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/SortedSetKey.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Collection/Iterator/SortedSetKey.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Collection/Iterator/SortedSetKey.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/Command.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/Command.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/Command.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/Command.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/CommandInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/CommandInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/CommandInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/CommandInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionAuth.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionAuth.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionEcho.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionEcho.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionEcho.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionEcho.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionPing.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionPing.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionPing.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionPing.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionQuit.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionQuit.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionQuit.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionQuit.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionSelect.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionSelect.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ConnectionSelect.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ConnectionSelect.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashDelete.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashDelete.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashDelete.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashDelete.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashExists.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashExists.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashExists.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashExists.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashGet.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashGet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashGet.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashGet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashGetAll.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashGetAll.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashGetAll.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashGetAll.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashGetMultiple.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashGetMultiple.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashGetMultiple.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashGetMultiple.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashIncrementBy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashIncrementBy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashIncrementBy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashIncrementBy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashIncrementByFloat.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashIncrementByFloat.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashIncrementByFloat.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashIncrementByFloat.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashKeys.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashKeys.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashKeys.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashKeys.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashLength.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashLength.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashLength.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashLength.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashScan.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashScan.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashScan.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashScan.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashSet.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashSet.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashSetMultiple.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashSetMultiple.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashSetMultiple.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashSetMultiple.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashSetPreserve.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashSetPreserve.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashSetPreserve.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashSetPreserve.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashStringLength.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashStringLength.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashStringLength.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashStringLength.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashValues.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashValues.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HashValues.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HashValues.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HyperLogLogAdd.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HyperLogLogAdd.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HyperLogLogAdd.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HyperLogLogAdd.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HyperLogLogCount.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HyperLogLogCount.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HyperLogLogCount.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HyperLogLogCount.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/HyperLogLogMerge.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/HyperLogLogMerge.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/HyperLogLogMerge.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/HyperLogLogMerge.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyDelete.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyDelete.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyDelete.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyDelete.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyDump.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyDump.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyDump.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyDump.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyExists.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyExists.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyExists.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyExists.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyExpire.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyExpire.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyExpire.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyExpire.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyExpireAt.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyExpireAt.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyExpireAt.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyExpireAt.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyKeys.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyKeys.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyKeys.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyKeys.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyMigrate.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyMigrate.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyMigrate.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyMigrate.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyMove.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyMove.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyMove.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyMove.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPersist.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPersist.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPersist.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPersist.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPreciseExpire.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPreciseExpire.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPreciseExpire.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPreciseExpire.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPreciseExpireAt.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPreciseExpireAt.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPreciseExpireAt.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPreciseExpireAt.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPreciseTimeToLive.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPreciseTimeToLive.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyPreciseTimeToLive.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyPreciseTimeToLive.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRandom.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRandom.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRandom.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRandom.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRename.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRename.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRename.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRename.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRenamePreserve.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRenamePreserve.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRenamePreserve.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRenamePreserve.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRestore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRestore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyRestore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyRestore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyScan.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyScan.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyScan.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyScan.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeySort.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeySort.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeySort.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeySort.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyTimeToLive.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyTimeToLive.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyTimeToLive.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyTimeToLive.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyType.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/KeyType.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/KeyType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListIndex.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListIndex.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListIndex.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListIndex.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListInsert.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListInsert.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListInsert.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListInsert.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListLength.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListLength.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListLength.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListLength.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopFirst.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopFirst.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopFirst.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopFirst.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopFirstBlocking.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopFirstBlocking.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopFirstBlocking.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopFirstBlocking.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLast.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLast.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLast.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLast.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLastBlocking.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLastBlocking.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLastBlocking.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLastBlocking.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLastPushHead.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLastPushHead.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLastPushHead.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLastPushHead.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLastPushHeadBlocking.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLastPushHeadBlocking.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPopLastPushHeadBlocking.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPopLastPushHeadBlocking.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushHead.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushHead.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushHead.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushHead.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushHeadX.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushHeadX.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushHeadX.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushHeadX.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushTail.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushTail.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushTail.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushTail.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushTailX.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushTailX.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListPushTailX.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListPushTailX.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListRange.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListRange.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListRange.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListRange.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListRemove.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListRemove.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListRemove.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListRemove.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListSet.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListSet.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListTrim.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListTrim.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ListTrim.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ListTrim.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PrefixableCommandInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PrefixableCommandInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PrefixableCommandInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PrefixableCommandInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/Processor/KeyPrefixProcessor.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/Processor/KeyPrefixProcessor.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/Processor/KeyPrefixProcessor.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/Processor/KeyPrefixProcessor.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/Processor/ProcessorChain.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/Processor/ProcessorChain.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/Processor/ProcessorChain.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/Processor/ProcessorChain.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/Processor/ProcessorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/Processor/ProcessorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/Processor/ProcessorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/Processor/ProcessorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubPublish.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubPublish.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubPublish.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubPublish.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubPubsub.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubPubsub.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubPubsub.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubPubsub.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubSubscribe.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubSubscribe.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubSubscribe.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubSubscribe.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubSubscribeByPattern.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubSubscribeByPattern.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubSubscribeByPattern.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubSubscribeByPattern.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubUnsubscribe.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubUnsubscribe.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubUnsubscribe.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubUnsubscribe.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubUnsubscribeByPattern.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubUnsubscribeByPattern.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/PubSubUnsubscribeByPattern.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/PubSubUnsubscribeByPattern.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/RawCommand.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/RawCommand.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/RawCommand.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/RawCommand.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ScriptCommand.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ScriptCommand.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ScriptCommand.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ScriptCommand.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerBackgroundRewriteAOF.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerBackgroundRewriteAOF.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerBackgroundRewriteAOF.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerBackgroundRewriteAOF.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerBackgroundSave.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerBackgroundSave.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerBackgroundSave.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerBackgroundSave.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerClient.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerClient.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerClient.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerClient.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerCommand.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerCommand.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerCommand.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerCommand.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerConfig.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerConfig.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerConfig.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerConfig.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerDatabaseSize.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerDatabaseSize.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerDatabaseSize.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerDatabaseSize.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerEval.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerEval.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerEval.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerEval.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerEvalSHA.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerEvalSHA.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerEvalSHA.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerEvalSHA.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerFlushAll.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerFlushAll.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerFlushAll.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerFlushAll.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerFlushDatabase.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerFlushDatabase.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerFlushDatabase.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerFlushDatabase.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerInfo.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerInfo.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerInfo.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerInfo.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerInfoV26x.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerInfoV26x.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerInfoV26x.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerInfoV26x.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerLastSave.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerLastSave.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerLastSave.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerLastSave.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerMonitor.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerMonitor.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerMonitor.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerMonitor.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerObject.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerObject.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerObject.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerObject.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSave.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSave.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSave.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSave.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerScript.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerScript.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerScript.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerScript.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSentinel.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSentinel.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSentinel.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSentinel.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerShutdown.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerShutdown.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerShutdown.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerShutdown.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSlaveOf.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSlaveOf.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSlaveOf.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSlaveOf.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSlowlog.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSlowlog.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerSlowlog.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerSlowlog.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerTime.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerTime.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ServerTime.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ServerTime.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetAdd.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetAdd.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetAdd.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetAdd.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetCardinality.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetCardinality.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetCardinality.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetCardinality.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetDifference.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetDifference.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetDifference.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetDifference.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetDifferenceStore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetDifferenceStore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetDifferenceStore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetDifferenceStore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetIntersection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetIntersection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetIntersection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetIntersection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetIntersectionStore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetIntersectionStore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetIntersectionStore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetIntersectionStore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetIsMember.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetIsMember.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetIsMember.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetIsMember.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetMembers.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetMembers.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetMembers.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetMembers.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetMove.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetMove.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetMove.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetMove.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetPop.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetPop.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetPop.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetPop.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetRandomMember.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetRandomMember.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetRandomMember.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetRandomMember.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetRemove.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetRemove.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetRemove.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetRemove.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetScan.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetScan.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetScan.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetScan.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetUnion.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetUnion.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetUnion.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetUnion.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetUnionStore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetUnionStore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/SetUnionStore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/SetUnionStore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringAppend.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringAppend.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringAppend.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringAppend.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringBitCount.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringBitCount.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringBitCount.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringBitCount.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringBitOp.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringBitOp.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringBitOp.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringBitOp.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringBitPos.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringBitPos.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringBitPos.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringBitPos.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringDecrement.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringDecrement.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringDecrement.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringDecrement.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringDecrementBy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringDecrementBy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringDecrementBy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringDecrementBy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGet.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGet.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetBit.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetBit.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetBit.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetBit.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetMultiple.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetMultiple.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetMultiple.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetMultiple.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetRange.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetRange.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetRange.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetRange.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetSet.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringGetSet.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringGetSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringIncrement.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringIncrement.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringIncrement.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringIncrement.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringIncrementBy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringIncrementBy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringIncrementBy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringIncrementBy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringIncrementByFloat.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringIncrementByFloat.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringIncrementByFloat.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringIncrementByFloat.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringPreciseSetExpire.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringPreciseSetExpire.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringPreciseSetExpire.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringPreciseSetExpire.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSet.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSet.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetBit.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetBit.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetBit.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetBit.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetExpire.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetExpire.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetExpire.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetExpire.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetMultiple.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetMultiple.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetMultiple.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetMultiple.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetMultiplePreserve.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetMultiplePreserve.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetMultiplePreserve.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetMultiplePreserve.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetPreserve.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetPreserve.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetPreserve.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetPreserve.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetRange.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetRange.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSetRange.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSetRange.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringStrlen.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringStrlen.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringStrlen.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringStrlen.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSubstr.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSubstr.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/StringSubstr.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/StringSubstr.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionDiscard.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionDiscard.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionDiscard.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionDiscard.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionExec.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionExec.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionExec.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionExec.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionMulti.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionMulti.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionMulti.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionMulti.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionUnwatch.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionUnwatch.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionUnwatch.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionUnwatch.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionWatch.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionWatch.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/TransactionWatch.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/TransactionWatch.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetAdd.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetAdd.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetAdd.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetAdd.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetCardinality.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetCardinality.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetCardinality.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetCardinality.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetCount.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetCount.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetCount.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetCount.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetIncrementBy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetIncrementBy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetIncrementBy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetIncrementBy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetIntersectionStore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetIntersectionStore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetIntersectionStore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetIntersectionStore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetLexCount.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetLexCount.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetLexCount.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetLexCount.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRange.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRange.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRange.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRange.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRangeByLex.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRangeByLex.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRangeByLex.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRangeByLex.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRangeByScore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRangeByScore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRangeByScore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRangeByScore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRank.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRank.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRank.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRank.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemove.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemove.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemove.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemove.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemoveRangeByLex.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemoveRangeByLex.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemoveRangeByLex.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemoveRangeByLex.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemoveRangeByRank.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemoveRangeByRank.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemoveRangeByRank.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemoveRangeByRank.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemoveRangeByScore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemoveRangeByScore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetRemoveRangeByScore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetRemoveRangeByScore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRange.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRange.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRange.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRange.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRangeByLex.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRangeByLex.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRangeByLex.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRangeByLex.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRangeByScore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRangeByScore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRangeByScore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRangeByScore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRank.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRank.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetReverseRank.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetReverseRank.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetScan.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetScan.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetScan.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetScan.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetScore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetScore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetScore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetScore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetUnionStore.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetUnionStore.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Command/ZSetUnionStore.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Command/ZSetUnionStore.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/CommunicationException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/CommunicationException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/CommunicationException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/CommunicationException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ClusterOption.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ClusterOption.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ClusterOption.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ClusterOption.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ConnectionFactoryOption.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ConnectionFactoryOption.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ConnectionFactoryOption.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ConnectionFactoryOption.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ExceptionsOption.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ExceptionsOption.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ExceptionsOption.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ExceptionsOption.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/OptionInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/OptionInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/OptionInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/OptionInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/Options.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/Options.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/Options.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/Options.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/OptionsInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/OptionsInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/OptionsInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/OptionsInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/PrefixOption.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/PrefixOption.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/PrefixOption.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/PrefixOption.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ProfileOption.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ProfileOption.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ProfileOption.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ProfileOption.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ReplicationOption.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ReplicationOption.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Configuration/ReplicationOption.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Configuration/ReplicationOption.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/AbstractConnection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/AbstractConnection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/AbstractConnection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/AbstractConnection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/ClusterInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/ClusterInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/ClusterInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/ClusterInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/MasterSlaveReplication.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/MasterSlaveReplication.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/MasterSlaveReplication.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/MasterSlaveReplication.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/PredisCluster.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/PredisCluster.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/PredisCluster.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/PredisCluster.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/RedisCluster.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/RedisCluster.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/RedisCluster.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/RedisCluster.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/ReplicationInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/ReplicationInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Aggregate/ReplicationInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Aggregate/ReplicationInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/AggregateConnectionInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/AggregateConnectionInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/AggregateConnectionInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/AggregateConnectionInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/CompositeConnectionInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/CompositeConnectionInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/CompositeConnectionInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/CompositeConnectionInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/CompositeStreamConnection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/CompositeStreamConnection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/CompositeStreamConnection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/CompositeStreamConnection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/ConnectionException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/ConnectionException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/ConnectionException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/ConnectionException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/ConnectionInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/ConnectionInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/ConnectionInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/ConnectionInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Factory.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Factory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Factory.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Factory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/FactoryInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/FactoryInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/FactoryInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/FactoryInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/NodeConnectionInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/NodeConnectionInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/NodeConnectionInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/NodeConnectionInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Parameters.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Parameters.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/Parameters.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/Parameters.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/ParametersInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/ParametersInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/ParametersInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/ParametersInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/PhpiredisSocketConnection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/PhpiredisSocketConnection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/PhpiredisSocketConnection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/PhpiredisSocketConnection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/PhpiredisStreamConnection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/PhpiredisStreamConnection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/PhpiredisStreamConnection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/PhpiredisStreamConnection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/StreamConnection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/StreamConnection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/StreamConnection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/StreamConnection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Connection/WebdisConnection.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Connection/WebdisConnection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Connection/WebdisConnection.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Connection/WebdisConnection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Monitor/Consumer.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Monitor/Consumer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Monitor/Consumer.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Monitor/Consumer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/NotSupportedException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/NotSupportedException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/NotSupportedException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/NotSupportedException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/Atomic.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/Atomic.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/Atomic.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/Atomic.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/ConnectionErrorProof.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/ConnectionErrorProof.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/ConnectionErrorProof.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/ConnectionErrorProof.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/FireAndForget.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/FireAndForget.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/FireAndForget.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/FireAndForget.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/Pipeline.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/Pipeline.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Pipeline/Pipeline.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Pipeline/Pipeline.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/PredisException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/PredisException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/PredisException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/PredisException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/Factory.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/Factory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/Factory.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/Factory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/ProfileInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/ProfileInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/ProfileInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/ProfileInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisProfile.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisProfile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisProfile.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisProfile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisUnstable.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisUnstable.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisUnstable.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisUnstable.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion200.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion200.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion200.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion200.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion220.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion220.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion220.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion220.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion240.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion240.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion240.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion240.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion260.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion260.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion260.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion260.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion280.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion280.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion280.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion280.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion300.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion300.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Profile/RedisVersion300.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Profile/RedisVersion300.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/ProtocolException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/ProtocolException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/ProtocolException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/ProtocolException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/ProtocolProcessorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/ProtocolProcessorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/ProtocolProcessorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/ProtocolProcessorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/RequestSerializerInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/RequestSerializerInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/RequestSerializerInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/RequestSerializerInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/ResponseReaderInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/ResponseReaderInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/ResponseReaderInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/ResponseReaderInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/CompositeProtocolProcessor.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/CompositeProtocolProcessor.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/CompositeProtocolProcessor.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/CompositeProtocolProcessor.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/BulkResponse.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/BulkResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/BulkResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/BulkResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/ErrorResponse.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/ErrorResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/ErrorResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/ErrorResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/IntegerResponse.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/IntegerResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/IntegerResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/IntegerResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/MultiBulkResponse.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/MultiBulkResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/MultiBulkResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/MultiBulkResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/ResponseHandlerInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/ResponseHandlerInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/ResponseHandlerInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/ResponseHandlerInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/StatusResponse.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/StatusResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/StatusResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/StatusResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/StreamableMultiBulkResponse.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/StreamableMultiBulkResponse.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/Handler/StreamableMultiBulkResponse.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/Handler/StreamableMultiBulkResponse.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/ProtocolProcessor.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/ProtocolProcessor.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/ProtocolProcessor.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/ProtocolProcessor.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/RequestSerializer.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/RequestSerializer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/RequestSerializer.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/RequestSerializer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/ResponseReader.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/ResponseReader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Protocol/Text/ResponseReader.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Protocol/Text/ResponseReader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/PubSub/AbstractConsumer.php b/app/rainloop/v/1.15.0/app/libraries/Predis/PubSub/AbstractConsumer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/PubSub/AbstractConsumer.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/PubSub/AbstractConsumer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/PubSub/Consumer.php b/app/rainloop/v/1.15.0/app/libraries/Predis/PubSub/Consumer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/PubSub/Consumer.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/PubSub/Consumer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/PubSub/DispatcherLoop.php b/app/rainloop/v/1.15.0/app/libraries/Predis/PubSub/DispatcherLoop.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/PubSub/DispatcherLoop.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/PubSub/DispatcherLoop.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Replication/ReplicationStrategy.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Replication/ReplicationStrategy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Replication/ReplicationStrategy.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Replication/ReplicationStrategy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/Error.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/Error.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/Error.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/Error.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/ErrorInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/ErrorInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/ErrorInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/ErrorInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/Iterator/MultiBulk.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/Iterator/MultiBulk.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/Iterator/MultiBulk.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/Iterator/MultiBulk.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/Iterator/MultiBulkIterator.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/Iterator/MultiBulkIterator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/Iterator/MultiBulkIterator.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/Iterator/MultiBulkIterator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/Iterator/MultiBulkTuple.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/Iterator/MultiBulkTuple.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/Iterator/MultiBulkTuple.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/Iterator/MultiBulkTuple.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/ResponseInterface.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/ResponseInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/ResponseInterface.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/ResponseInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/ServerException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/ServerException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/ServerException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/ServerException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Response/Status.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Response/Status.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Response/Status.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Response/Status.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Session/Handler.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Session/Handler.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Session/Handler.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Session/Handler.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Transaction/AbortedMultiExecException.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Transaction/AbortedMultiExecException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Transaction/AbortedMultiExecException.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Transaction/AbortedMultiExecException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Transaction/MultiExec.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Transaction/MultiExec.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Transaction/MultiExec.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Transaction/MultiExec.php diff --git a/app/rainloop/v/1.14.0/app/libraries/Predis/Transaction/MultiExecState.php b/app/rainloop/v/1.15.0/app/libraries/Predis/Transaction/MultiExecState.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/Predis/Transaction/MultiExecState.php rename to app/rainloop/v/1.15.0/app/libraries/Predis/Transaction/MultiExecState.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Actions.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Actions.php similarity index 99% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Actions.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Actions.php index a1b2e209..ed427a3e 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Actions.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Actions.php @@ -1154,8 +1154,7 @@ public function Logger() $sPdo = empty($sPdo) ? '~' : $sPdo; $this->oLogger->Write('['. - 'Suhosin:'.(\extension_loaded('suhosin') || @\ini_get('suhosin.get.max_value_length') ? 'on' : 'off'). - '][APC:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_fetch') ? 'on' : 'off'). + 'APC:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_fetch') ? 'on' : 'off'). '][MB:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('mb_convert_encoding') ? 'on' : 'off'). '][PDO:'.$sPdo. (\RainLoop\Utils::IsOwnCloud() ? '][cloud:true' : ''). @@ -1845,7 +1844,7 @@ public function AppData($bAdmin, $bMobile = false, $bMobileDevice = false, $sAut $aResult['AllowLanguagesOnSettings'] = (bool) $oConfig->Get('webmail', 'allow_languages_on_settings', true); $aResult['AllowLanguagesOnLogin'] = (bool) $oConfig->Get('login', 'allow_languages_on_login', true); $aResult['AttachmentLimit'] = ((int) $oConfig->Get('webmail', 'attachment_size_limit', 10)) * 1024 * 1024; - $aResult['SignMe'] = (string) $oConfig->Get('login', 'sign_me_auto', \RainLoop\Enumerations\SignMeType::DEFAILT_OFF); + $aResult['SignMe'] = (string) $oConfig->Get('login', 'sign_me_auto', \RainLoop\Enumerations\SignMeType::DEFAULT_OFF); $aResult['UseLocalProxyForExternalImages'] = (bool) $oConfig->Get('labs', 'use_local_proxy_for_external_images', false); // user @@ -1973,7 +1972,7 @@ public function AppData($bAdmin, $bMobile = false, $bMobileDevice = false, $sAut $aResult['LangLink'] = './?/Lang/0/'.($bAdmin ? 'Admin' : 'App').'/'. ($bAdmin ? $aResult['LanguageAdmin'] : $aResult['Language']).'/'.$sStaticCache.'/'; - $aResult['TemplatesLink'] = './?/Templates/0/'.($bAdmin ? 'Admin' : 'App').'/'.$sStaticCache.'/'; + // $aResult['TemplatesLink'] = './?/Templates/0/'.($bAdmin ? 'Admin' : 'App').'/'.$sStaticCache.'/'; $bAppJsDebug = !!$this->Config()->Get('labs', 'use_app_debug_js', false); @@ -1997,7 +1996,7 @@ public function AppData($bAdmin, $bMobile = false, $bMobileDevice = false, $sAut // Mobile override if ($bMobile) { - $aResult['Layout'] = \RainLoop\Enumerations\Layout::NO_PREVIW; + $aResult['Layout'] = \RainLoop\Enumerations\Layout::NO_PREVIEW; $aResult['SoundNotification'] = false; $aResult['DesktopNotifications'] = false; @@ -5086,7 +5085,7 @@ public function DoSettingsUpdate() }); $this->setSettingsFromParams($oSettings, 'Layout', 'int', function ($iValue) { - return (int) (\in_array((int) $iValue, array(\RainLoop\Enumerations\Layout::NO_PREVIW, + return (int) (\in_array((int) $iValue, array(\RainLoop\Enumerations\Layout::NO_PREVIEW, \RainLoop\Enumerations\Layout::SIDE_PREVIEW, \RainLoop\Enumerations\Layout::BOTTOM_PREVIEW)) ? $iValue : \RainLoop\Enumerations\Layout::SIDE_PREVIEW); }); diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Api.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Api.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Api.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Api.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/BackwardCapability/Account.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/BackwardCapability/Account.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/BackwardCapability/Account.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/BackwardCapability/Account.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/FacebookRainLoopPersistentDataHandler.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/FacebookRainLoopPersistentDataHandler.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/FacebookRainLoopPersistentDataHandler.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/FacebookRainLoopPersistentDataHandler.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/MbStringFix.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/MbStringFix.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/MbStringFix.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/MbStringFix.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/PdoAbstract.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/PdoAbstract.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/PdoAbstract.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/PdoAbstract.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/RainLoopFacebookRedirectLoginHelper.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/RainLoopFacebookRedirectLoginHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Common/RainLoopFacebookRedirectLoginHelper.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Common/RainLoopFacebookRedirectLoginHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/AbstractConfig.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/AbstractConfig.php similarity index 93% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/AbstractConfig.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/AbstractConfig.php index 5fe2ca2f..96fe7776 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/AbstractConfig.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/AbstractConfig.php @@ -97,10 +97,13 @@ public function Set($sSectionKey, $sParamKey, $mParamValue) switch ($sType) { default: - case 'float': case 'string': $this->aData[$sSectionKey][$sParamKey][0] = (string) $mParamValue; break; + case 'float': + case 'double': + $this->aData[$sSectionKey][$sParamKey][0] = (float) $mParamValue; + break; case 'int': case 'integer': $this->aData[$sSectionKey][$sParamKey][0] = (int) $mParamValue; @@ -321,6 +324,7 @@ public function Save() break; case 'int': case 'integer': + case 'double': $sValue = $mParamValue[0]; break; case 'bool': diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/Application.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/Application.php similarity index 93% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/Application.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/Application.php index d190475e..374264a5 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/Application.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/Application.php @@ -99,6 +99,10 @@ public function Get($sSection, $sName, $mDefault = null) */ public function SetPassword($sPassword) { + if (function_exists('password_hash')) + { + return $this->Set('security', 'admin_password', password_hash($sPassword, PASSWORD_DEFAULT)); + } return $this->Set('security', 'admin_password', \md5(APP_SALT.$sPassword.APP_SALT)); } @@ -112,8 +116,22 @@ public function ValidatePassword($sPassword) $sPassword = (string) $sPassword; $sConfigPassword = (string) $this->Get('security', 'admin_password', ''); - return 0 < \strlen($sPassword) && - (($sPassword === $sConfigPassword && '12345' === $sConfigPassword) || \md5(APP_SALT.$sPassword.APP_SALT) === $sConfigPassword); + if (0 < strlen($sConfigPassword)) + { + if (($sPassword === $sConfigPassword) && ('12345' === $sConfigPassword)) // password has not been set + { + return true; + } + if (32 == strlen($sConfigPassword)) // legacy md5 hash + { + return (\md5(APP_SALT.$sPassword.APP_SALT) === $sConfigPassword); + } + if (function_exists('password_verify')) // secure hash + { + return password_verify($sPassword, $sConfigPassword); + } + } + return false; } /** @@ -258,7 +276,7 @@ protected function defaultValues() 'login_lowercase' => array(true, ''), - 'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF, + 'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAULT_OFF, 'This option allows webmail to remember the logged in user once they closed the browser window. diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Config/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Config/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/Capa.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/Capa.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/Capa.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/Capa.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/Layout.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/Layout.php similarity index 82% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/Layout.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/Layout.php index 21cf9734..32af1fe4 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/Layout.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/Layout.php @@ -4,7 +4,7 @@ class Layout { - const NO_PREVIW = 0; + const NO_PREVIEW = 0; const SIDE_PREVIEW = 1; const BOTTOM_PREVIEW = 2; } diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/PluginPropertyType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/PluginPropertyType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/PluginPropertyType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/PluginPropertyType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/SignMeType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/SignMeType.php similarity index 56% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/SignMeType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/SignMeType.php index 4334f242..98ed99f7 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/SignMeType.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/SignMeType.php @@ -4,7 +4,7 @@ class SignMeType { - const DEFAILT_OFF = 'DefaultOff'; - const DEFAILT_ON = 'DefaultOn'; + const DEFAULT_OFF = 'DefaultOff'; + const DEFAULT_ON = 'DefaultOn'; const UNUSED = 'Unused'; } \ No newline at end of file diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/TimeFormat.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/TimeFormat.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/TimeFormat.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/TimeFormat.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/UploadClientError.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/UploadClientError.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/UploadClientError.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/UploadClientError.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/UploadError.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/UploadError.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Enumerations/UploadError.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Enumerations/UploadError.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/ClientException.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/ClientException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/ClientException.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/ClientException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/Exception.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/RuntimeException.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/RuntimeException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Exceptions/RuntimeException.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Exceptions/RuntimeException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/KeyPathHelper.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/KeyPathHelper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/KeyPathHelper.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/KeyPathHelper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Account.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Account.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Account.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Account.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Domain.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Domain.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Domain.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Domain.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Identity.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Identity.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Identity.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Identity.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Template.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Template.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Model/Template.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Model/Template.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Notifications.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Notifications.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Notifications.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Notifications.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/AbstractPlugin.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/AbstractPlugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/AbstractPlugin.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/AbstractPlugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/Helper.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/Helper.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/Helper.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/Helper.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/Manager.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/Manager.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/Manager.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/Manager.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/Property.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/Property.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Plugins/Property.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Plugins/Property.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AbstractProvider.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AbstractProvider.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AbstractProvider.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AbstractProvider.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/AddressBookInterface.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/AddressBookInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/AddressBookInterface.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/AddressBookInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Property.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Property.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Property.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Property.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Tag.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Tag.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Tag.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Tag.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Enumerations/PropertyType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Enumerations/PropertyType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/Enumerations/PropertyType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/Enumerations/PropertyType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/ChangePassword.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/ChangePassword.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/ChangePassword.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/ChangePassword.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain/DomainInterface.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain/DomainInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Domain/DomainInterface.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Domain/DomainInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Files.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Files.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Files.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Files.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Files/FileStorage.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Files/FileStorage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Files/FileStorage.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Files/FileStorage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Files/IFiles.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Files/IFiles.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Files/IFiles.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Files/IFiles.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Classes/Filter.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Classes/Filter.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Classes/Filter.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Classes/Filter.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Classes/FilterCondition.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Classes/FilterCondition.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Classes/FilterCondition.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Classes/FilterCondition.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ActionType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ActionType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ActionType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ActionType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionField.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionField.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionField.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionField.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionsType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionsType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionsType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/Enumerations/ConditionsType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/FiltersInterface.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/FiltersInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/FiltersInterface.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/FiltersInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Settings.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Settings.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Settings.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Settings.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Settings/ISettings.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Settings/ISettings.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Settings/ISettings.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Settings/ISettings.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/IStorage.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/IStorage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/IStorage.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/IStorage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/TemproryApcStorage.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/TemproryApcStorage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Storage/TemproryApcStorage.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Storage/TemproryApcStorage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions/ISuggestions.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions/ISuggestions.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions/ISuggestions.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions/ISuggestions.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions/OwnCloudSuggestions.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions/OwnCloudSuggestions.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions/OwnCloudSuggestions.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions/OwnCloudSuggestions.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions/TestSuggestions.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions/TestSuggestions.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/Suggestions/TestSuggestions.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/Suggestions/TestSuggestions.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth/AbstractTwoFactorAuth.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth/AbstractTwoFactorAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth/AbstractTwoFactorAuth.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth/AbstractTwoFactorAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth/GoogleTwoFactorAuth.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth/GoogleTwoFactorAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth/GoogleTwoFactorAuth.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth/GoogleTwoFactorAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth/TwoFactorAuthInterface.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth/TwoFactorAuthInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Providers/TwoFactorAuth/TwoFactorAuthInterface.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Providers/TwoFactorAuth/TwoFactorAuthInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Service.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Service.php similarity index 95% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Service.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Service.php index 9d80121a..8fffce1b 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Service.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Service.php @@ -213,7 +213,7 @@ private function localHandle() if (0 === \strlen($sResult)) { -// $aTemplateParameters['{{BaseTemplates}}'] = $this->oServiceActions->compileTemplates($bAdmin, false); + $aTemplateParameters['{{BaseTemplates}}'] = $this->oServiceActions->compileTemplates($bAdmin, false); $sResult = \strtr(\file_get_contents(APP_VERSION_ROOT_PATH.'app/templates/Index.html'), $aTemplateParameters); $sResult = \RainLoop\Utils::ClearHtmlOutput($sResult); diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/ServiceActions.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/ServiceActions.php similarity index 95% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/ServiceActions.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/ServiceActions.php index 873934e8..d95935e6 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/ServiceActions.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/ServiceActions.php @@ -506,7 +506,7 @@ public function ServiceRaw() if (\method_exists($this->oActions, $sMethodName)) { @\header('X-Raw-Action: '.$sMethodName, true); - @\header('Content-Security-Policy: script-src \'none\'; frame-src \'none\'; child-src \'none\'', true); + @\header('Content-Security-Policy: script-src \'none\'; child-src \'none\'', true); $sRawError = ''; $this->oActions->SetActionParams(array( @@ -1302,7 +1302,7 @@ public function compileTemplates($bAdmin = false, $bJsOutput = true) $this->oActions->Plugins()->CompileTemplate($aTemplates, $bAdmin); - $sHtml = ''; + $sHtml = ''; foreach ($aTemplates as $sName => $sFile) { $sName = \preg_replace('/[^a-zA-Z0-9]/', '', $sName); diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Settings.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Settings.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Settings.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Settings.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Social.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Social.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Social.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Social.php diff --git a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Utils.php b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Utils.php similarity index 95% rename from app/rainloop/v/1.14.0/app/libraries/RainLoop/Utils.php rename to app/rainloop/v/1.15.0/app/libraries/RainLoop/Utils.php index b23a6e46..ad0ede5a 100644 --- a/app/rainloop/v/1.14.0/app/libraries/RainLoop/Utils.php +++ b/app/rainloop/v/1.15.0/app/libraries/RainLoop/Utils.php @@ -562,10 +562,10 @@ public static function WebPath() $sAppPath = ''; if (\RainLoop\Utils::IsOwnCloud()) { - $sAppPath = \OC::$server->getURLGenerator()->linkToRoute('rainloop.page.appGet'); - // TODO: Fix this ugly hack. Is there a "modern" way to return - // a URL that doesn't include index.php, which breaks things? - $sAppPath = preg_replace('/index\.php\//', '', $sAppPath); + if (\class_exists('OC_App')) + { + $sAppPath = \rtrim(\trim(\OC_App::getAppWebPath('rainloop')), '\\/').'/app/'; + } if (empty($sAppPath)) { @@ -577,18 +577,9 @@ public static function WebPath() } } } - /*Now trying to detect the apps folder to give the right URL for assets */ - $re = '/\/([a-zA-Z0-9-_\.]*)\/rainloop\/app\//m'; - $str = __FILE__; - preg_match($re, $str, $matches); - - if ($matches[1] == "apps") { - return $sAppPath; - } else { - return str_replace("/apps/rainloop/app", "/".$matches[1]."/rainloop/app", $sAppPath); - } + + return $sAppPath; } - /** * @return string */ @@ -696,4 +687,4 @@ public static function CustomBaseConvert($sNumberInput, $sFromBaseInput = '01234 return $mRetVal; } -} +} \ No newline at end of file diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/AbstractBackend.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/AbstractBackend.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/AbstractBackend.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/AbstractBackend.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/BackendInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/BackendInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/BackendInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/BackendInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/NotificationSupport.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/NotificationSupport.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/NotificationSupport.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/NotificationSupport.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/PDO.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/PDO.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/PDO.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/PDO.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/SharingSupport.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/SharingSupport.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Backend/SharingSupport.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Backend/SharingSupport.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Calendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Calendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Calendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Calendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarObject.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarObject.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarObject.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarObject.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryParser.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryParser.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryParser.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryParser.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryValidator.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryValidator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryValidator.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarQueryValidator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarRootNode.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarRootNode.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/CalendarRootNode.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/CalendarRootNode.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Exception/InvalidComponentType.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Exception/InvalidComponentType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Exception/InvalidComponentType.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Exception/InvalidComponentType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ICSExportPlugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ICSExportPlugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ICSExportPlugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ICSExportPlugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ICalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ICalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ICalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ICalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ICalendarObject.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ICalendarObject.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ICalendarObject.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ICalendarObject.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/IShareableCalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/IShareableCalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/IShareableCalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/IShareableCalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ISharedCalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ISharedCalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ISharedCalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ISharedCalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Collection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Collection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Collection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Collection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/ICollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/ICollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/ICollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/ICollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INode.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INode.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INode.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INode.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INotificationType.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INotificationType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INotificationType.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/INotificationType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Node.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Node.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Node.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Node.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/Invite.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/Invite.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/Invite.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/Invite.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/InviteReply.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/InviteReply.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/InviteReply.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/InviteReply.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/SystemStatus.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/SystemStatus.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/SystemStatus.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Notifications/Notification/SystemStatus.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/Collection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/Collection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/Collection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/Collection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyRead.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyRead.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyRead.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyRead.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyWrite.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyWrite.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyWrite.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/IProxyWrite.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyRead.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyRead.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyRead.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyRead.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyWrite.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyWrite.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyWrite.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/ProxyWrite.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/User.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/User.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Principal/User.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Principal/User.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/AllowedSharingModes.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/AllowedSharingModes.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/AllowedSharingModes.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/AllowedSharingModes.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/Invite.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/Invite.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/Invite.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/Invite.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/ScheduleCalendarTransp.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/ScheduleCalendarTransp.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/ScheduleCalendarTransp.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/ScheduleCalendarTransp.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarComponentSet.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarComponentSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarComponentSet.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarComponentSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarData.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarData.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarData.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCalendarData.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCollationSet.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCollationSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCollationSet.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Property/SupportedCollationSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IMip.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IMip.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IMip.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IMip.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IOutbox.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IOutbox.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IOutbox.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/IOutbox.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/Outbox.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/Outbox.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/Outbox.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Schedule/Outbox.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ShareableCalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ShareableCalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/ShareableCalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/ShareableCalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/SharedCalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/SharedCalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/SharedCalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/SharedCalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/SharingPlugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/SharingPlugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/SharingPlugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/SharingPlugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/UserCalendars.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/UserCalendars.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/UserCalendars.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/UserCalendars.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Version.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CalDAV/Version.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CalDAV/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/AddressBook.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/AddressBook.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/AddressBook.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/AddressBook.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookQueryParser.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookQueryParser.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookQueryParser.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookQueryParser.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookRoot.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookRoot.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookRoot.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/AddressBookRoot.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Backend/AbstractBackend.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Backend/AbstractBackend.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Backend/AbstractBackend.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Backend/AbstractBackend.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Backend/BackendInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Backend/BackendInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Backend/BackendInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Backend/BackendInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Backend/PDO.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Backend/PDO.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Backend/PDO.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Backend/PDO.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Card.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Card.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Card.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Card.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/IAddressBook.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/IAddressBook.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/IAddressBook.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/IAddressBook.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/ICard.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/ICard.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/ICard.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/ICard.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/IDirectory.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/IDirectory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/IDirectory.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/IDirectory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Property/SupportedAddressData.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Property/SupportedAddressData.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Property/SupportedAddressData.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Property/SupportedAddressData.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/UserAddressBooks.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/UserAddressBooks.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/UserAddressBooks.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/UserAddressBooks.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/VCFExportPlugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/VCFExportPlugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/VCFExportPlugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/VCFExportPlugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Version.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/CardDAV/Version.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/CardDAV/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractBasic.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractBasic.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractBasic.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractBasic.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractDigest.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractDigest.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractDigest.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/AbstractDigest.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/Apache.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/Apache.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/Apache.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/Apache.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/BackendInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/BackendInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/BackendInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/BackendInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/File.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/File.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/PDO.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/PDO.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/PDO.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Backend/PDO.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Auth/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Auth/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/GuessContentType.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/GuessContentType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/GuessContentType.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/GuessContentType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/MapGetToPropFind.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/MapGetToPropFind.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/MapGetToPropFind.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/MapGetToPropFind.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/favicon.ico b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/favicon.ico similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/favicon.ico rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/favicon.ico diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/addressbook.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/addressbook.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/addressbook.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/addressbook.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/calendar.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/calendar.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/calendar.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/calendar.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/card.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/card.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/card.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/card.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/collection.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/collection.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/collection.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/collection.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/file.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/file.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/file.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/file.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/parent.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/parent.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/parent.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/parent.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/principal.png b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/principal.png similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/principal.png rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Browser/assets/icons/principal.png diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Client.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Client.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Client.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Client.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Collection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Collection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Collection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Collection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/BadRequest.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/BadRequest.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/BadRequest.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/BadRequest.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/Conflict.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/Conflict.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/Conflict.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/Conflict.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/ConflictingLock.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/ConflictingLock.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/ConflictingLock.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/ConflictingLock.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/FileNotFound.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/FileNotFound.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/FileNotFound.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/FileNotFound.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/Forbidden.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/Forbidden.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/Forbidden.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/Forbidden.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/InsufficientStorage.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/InsufficientStorage.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/InsufficientStorage.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/InsufficientStorage.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/InvalidResourceType.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/InvalidResourceType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/InvalidResourceType.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/InvalidResourceType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/LockTokenMatchesRequestUri.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/LockTokenMatchesRequestUri.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/LockTokenMatchesRequestUri.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/LockTokenMatchesRequestUri.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/Locked.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/Locked.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/Locked.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/Locked.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/MethodNotAllowed.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/MethodNotAllowed.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/MethodNotAllowed.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/MethodNotAllowed.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/NotAuthenticated.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/NotAuthenticated.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/NotAuthenticated.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/NotAuthenticated.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/NotFound.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/NotFound.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/NotFound.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/NotFound.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/NotImplemented.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/NotImplemented.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/NotImplemented.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/NotImplemented.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/PaymentRequired.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/PaymentRequired.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/PaymentRequired.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/PaymentRequired.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/PreconditionFailed.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/PreconditionFailed.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/PreconditionFailed.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/PreconditionFailed.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/ReportNotSupported.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/ReportNotSupported.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/ReportNotSupported.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/ReportNotSupported.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/RequestedRangeNotSatisfiable.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/RequestedRangeNotSatisfiable.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/RequestedRangeNotSatisfiable.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/RequestedRangeNotSatisfiable.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/ServiceUnavailable.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/ServiceUnavailable.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/ServiceUnavailable.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/ServiceUnavailable.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/UnsupportedMediaType.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/UnsupportedMediaType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Exception/UnsupportedMediaType.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Exception/UnsupportedMediaType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FS/Directory.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FS/Directory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FS/Directory.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FS/Directory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FS/File.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FS/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FS/File.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FS/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FS/Node.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FS/Node.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FS/Node.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FS/Node.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FSExt/Directory.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FSExt/Directory.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FSExt/Directory.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FSExt/Directory.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FSExt/File.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FSExt/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FSExt/File.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FSExt/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FSExt/Node.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FSExt/Node.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/FSExt/Node.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/FSExt/Node.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/File.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/File.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/ICollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/ICollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/ICollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/ICollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IExtendedCollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IExtendedCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IExtendedCollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IExtendedCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IFile.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IFile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IFile.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IFile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/INode.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/INode.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/INode.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/INode.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IProperties.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IProperties.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IProperties.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IProperties.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IQuota.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IQuota.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/IQuota.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/IQuota.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/AbstractBackend.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/AbstractBackend.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/AbstractBackend.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/AbstractBackend.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/BackendInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/BackendInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/BackendInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/BackendInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/FS.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/FS.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/FS.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/FS.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/File.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/File.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/File.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/File.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/PDO.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/PDO.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/PDO.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Backend/PDO.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/LockInfo.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/LockInfo.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/LockInfo.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/LockInfo.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Locks/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Locks/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Mount/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Mount/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Mount/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Mount/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Node.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Node.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Node.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Node.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/ObjectTree.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/ObjectTree.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/ObjectTree.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/ObjectTree.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/IFile.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/IFile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/IFile.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/IFile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/PartialUpdate/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/GetLastModified.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/GetLastModified.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/GetLastModified.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/GetLastModified.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/Href.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/Href.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/Href.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/Href.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/HrefList.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/HrefList.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/HrefList.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/HrefList.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/IHref.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/IHref.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/IHref.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/IHref.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/LockDiscovery.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/LockDiscovery.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/LockDiscovery.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/LockDiscovery.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/ResourceType.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/ResourceType.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/ResourceType.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/ResourceType.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/Response.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/Response.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/Response.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/Response.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/ResponseList.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/ResponseList.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/ResponseList.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/ResponseList.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedLock.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedLock.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedLock.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedLock.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedReportSet.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedReportSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedReportSet.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Property/SupportedReportSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/PropertyInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/PropertyInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/PropertyInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/PropertyInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Server.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Server.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Server.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Server.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/ServerPlugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/ServerPlugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/ServerPlugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/ServerPlugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/SimpleCollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/SimpleCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/SimpleCollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/SimpleCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/SimpleFile.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/SimpleFile.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/SimpleFile.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/SimpleFile.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/StringUtil.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/StringUtil.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/StringUtil.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/StringUtil.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/TemporaryFileFilterPlugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/TemporaryFileFilterPlugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/TemporaryFileFilterPlugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/TemporaryFileFilterPlugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Tree.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Tree.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Tree.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Tree.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Tree/Filesystem.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Tree/Filesystem.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Tree/Filesystem.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Tree/Filesystem.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/URLUtil.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/URLUtil.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/URLUtil.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/URLUtil.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/UUIDUtil.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/UUIDUtil.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/UUIDUtil.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/UUIDUtil.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Version.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/Version.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/XMLUtil.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/XMLUtil.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAV/XMLUtil.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAV/XMLUtil.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/AbstractPrincipalCollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/AbstractPrincipalCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/AbstractPrincipalCollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/AbstractPrincipalCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/AceConflict.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/AceConflict.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/AceConflict.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/AceConflict.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NeedPrivileges.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NeedPrivileges.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NeedPrivileges.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NeedPrivileges.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NoAbstract.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NoAbstract.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NoAbstract.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NoAbstract.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotRecognizedPrincipal.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotRecognizedPrincipal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotRecognizedPrincipal.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotRecognizedPrincipal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotSupportedPrivilege.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotSupportedPrivilege.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotSupportedPrivilege.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Exception/NotSupportedPrivilege.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/IACL.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/IACL.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/IACL.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/IACL.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipal.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipal.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipalCollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipalCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipalCollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/IPrincipalCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Plugin.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Plugin.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Plugin.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Plugin.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Principal.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Principal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Principal.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Principal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/AbstractBackend.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/AbstractBackend.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/AbstractBackend.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/AbstractBackend.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/BackendInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/BackendInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/BackendInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/BackendInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/PDO.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/PDO.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/PDO.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalBackend/PDO.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalCollection.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalCollection.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalCollection.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/PrincipalCollection.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/Acl.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/Acl.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/Acl.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/Acl.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/AclRestrictions.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/AclRestrictions.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/AclRestrictions.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/AclRestrictions.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/CurrentUserPrivilegeSet.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/CurrentUserPrivilegeSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/CurrentUserPrivilegeSet.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/CurrentUserPrivilegeSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/Principal.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/Principal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/Principal.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/Principal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/SupportedPrivilegeSet.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/SupportedPrivilegeSet.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Property/SupportedPrivilegeSet.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Property/SupportedPrivilegeSet.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Version.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/DAVACL/Version.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/DAVACL/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/AWSAuth.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/AWSAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/AWSAuth.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/AWSAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/AbstractAuth.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/AbstractAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/AbstractAuth.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/AbstractAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/BasicAuth.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/BasicAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/BasicAuth.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/BasicAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/DigestAuth.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/DigestAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/DigestAuth.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/DigestAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Request.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Request.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Request.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Request.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Response.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Response.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Response.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Response.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Util.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Util.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Util.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Util.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Version.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/HTTP/Version.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/HTTP/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Cli.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Cli.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Cli.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Cli.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VAlarm.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VAlarm.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VAlarm.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VAlarm.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VCalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VCalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VCalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VCalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VCard.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VCard.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VCard.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VCard.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VEvent.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VEvent.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VEvent.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VEvent.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VFreeBusy.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VFreeBusy.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VFreeBusy.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VFreeBusy.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VJournal.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VJournal.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VJournal.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VJournal.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VTodo.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VTodo.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Component/VTodo.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Component/VTodo.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/DateTimeParser.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/DateTimeParser.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/DateTimeParser.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/DateTimeParser.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Document.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Document.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Document.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Document.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/ElementList.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/ElementList.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/ElementList.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/ElementList.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/EofException.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/EofException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/EofException.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/EofException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/FreeBusyGenerator.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/FreeBusyGenerator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/FreeBusyGenerator.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/FreeBusyGenerator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Node.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Node.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Node.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Node.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parameter.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parameter.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parameter.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parameter.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/ParseException.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/ParseException.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/ParseException.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/ParseException.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parser/Json.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parser/Json.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parser/Json.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parser/Json.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parser/MimeDir.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parser/MimeDir.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parser/MimeDir.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parser/MimeDir.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parser/Parser.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parser/Parser.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Parser/Parser.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Parser/Parser.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Binary.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Binary.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Binary.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Binary.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Boolean.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Boolean.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Boolean.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Boolean.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/FlatText.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/FlatText.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/FlatText.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/FlatText.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Float.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Float.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Float.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Float.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/CalAddress.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/CalAddress.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/CalAddress.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/CalAddress.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Date.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Date.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Date.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Date.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/DateTime.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/DateTime.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/DateTime.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/DateTime.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Duration.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Duration.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Duration.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Duration.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Period.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Period.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Period.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Period.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Recur.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Recur.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Recur.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/ICalendar/Recur.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Integer.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Integer.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Integer.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Integer.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Text.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Text.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Text.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Text.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Time.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Time.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Time.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Time.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Unknown.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Unknown.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Unknown.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Unknown.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Uri.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Uri.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/Uri.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/Uri.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/UtcOffset.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/UtcOffset.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/UtcOffset.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/UtcOffset.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/Date.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/Date.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/Date.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/Date.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateAndOrTime.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateAndOrTime.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateAndOrTime.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateAndOrTime.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateTime.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateTime.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateTime.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/DateTime.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/LanguageTag.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/LanguageTag.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/LanguageTag.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/LanguageTag.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/TimeStamp.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/TimeStamp.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/TimeStamp.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Property/VCard/TimeStamp.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Reader.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Reader.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Reader.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Reader.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/RecurrenceIterator.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/RecurrenceIterator.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/RecurrenceIterator.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/RecurrenceIterator.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Splitter/ICalendar.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Splitter/ICalendar.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Splitter/ICalendar.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Splitter/ICalendar.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Splitter/SplitterInterface.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Splitter/SplitterInterface.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Splitter/SplitterInterface.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Splitter/SplitterInterface.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Splitter/VCard.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Splitter/VCard.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Splitter/VCard.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Splitter/VCard.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/StringUtil.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/StringUtil.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/StringUtil.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/StringUtil.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/TimeZoneUtil.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/TimeZoneUtil.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/TimeZoneUtil.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/TimeZoneUtil.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/VCardConverter.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/VCardConverter.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/VCardConverter.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/VCardConverter.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Version.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Version.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/Version.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/Version.php diff --git a/app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/includes.php b/app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/includes.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/SabreForRainLoop/VObject/includes.php rename to app/rainloop/v/1.15.0/app/libraries/SabreForRainLoop/VObject/includes.php diff --git a/app/rainloop/v/1.14.0/app/libraries/lessphp/LICENSE b/app/rainloop/v/1.15.0/app/libraries/lessphp/LICENSE similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/lessphp/LICENSE rename to app/rainloop/v/1.15.0/app/libraries/lessphp/LICENSE diff --git a/app/rainloop/v/1.14.0/app/libraries/lessphp/README.md b/app/rainloop/v/1.15.0/app/libraries/lessphp/README.md similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/lessphp/README.md rename to app/rainloop/v/1.15.0/app/libraries/lessphp/README.md diff --git a/app/rainloop/v/1.14.0/app/libraries/lessphp/ctype.php b/app/rainloop/v/1.15.0/app/libraries/lessphp/ctype.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/lessphp/ctype.php rename to app/rainloop/v/1.15.0/app/libraries/lessphp/ctype.php diff --git a/app/rainloop/v/1.14.0/app/libraries/lessphp/lessc.inc.php b/app/rainloop/v/1.15.0/app/libraries/lessphp/lessc.inc.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/lessphp/lessc.inc.php rename to app/rainloop/v/1.15.0/app/libraries/lessphp/lessc.inc.php diff --git a/app/rainloop/v/1.14.0/app/libraries/pclzip/_pclzip.lib.php b/app/rainloop/v/1.15.0/app/libraries/pclzip/_pclzip.lib.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/pclzip/_pclzip.lib.php rename to app/rainloop/v/1.15.0/app/libraries/pclzip/_pclzip.lib.php diff --git a/app/rainloop/v/1.14.0/app/libraries/pclzip/gnu-lgpl.txt b/app/rainloop/v/1.15.0/app/libraries/pclzip/gnu-lgpl.txt similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/pclzip/gnu-lgpl.txt rename to app/rainloop/v/1.15.0/app/libraries/pclzip/gnu-lgpl.txt diff --git a/app/rainloop/v/1.14.0/app/libraries/pclzip/pclzip.lib.php b/app/rainloop/v/1.15.0/app/libraries/pclzip/pclzip.lib.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/pclzip/pclzip.lib.php rename to app/rainloop/v/1.15.0/app/libraries/pclzip/pclzip.lib.php diff --git a/app/rainloop/v/1.14.0/app/libraries/pclzip/readme.txt b/app/rainloop/v/1.15.0/app/libraries/pclzip/readme.txt similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/pclzip/readme.txt rename to app/rainloop/v/1.15.0/app/libraries/pclzip/readme.txt diff --git a/app/rainloop/v/1.14.0/app/libraries/spyc/COPYING b/app/rainloop/v/1.15.0/app/libraries/spyc/COPYING similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/spyc/COPYING rename to app/rainloop/v/1.15.0/app/libraries/spyc/COPYING diff --git a/app/rainloop/v/1.14.0/app/libraries/spyc/README.md b/app/rainloop/v/1.15.0/app/libraries/spyc/README.md similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/spyc/README.md rename to app/rainloop/v/1.15.0/app/libraries/spyc/README.md diff --git a/app/rainloop/v/1.14.0/app/libraries/spyc/Spyc.php b/app/rainloop/v/1.15.0/app/libraries/spyc/Spyc.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/spyc/Spyc.php rename to app/rainloop/v/1.15.0/app/libraries/spyc/Spyc.php diff --git a/app/rainloop/v/1.14.0/app/libraries/spyc/composer.json b/app/rainloop/v/1.15.0/app/libraries/spyc/composer.json similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/spyc/composer.json rename to app/rainloop/v/1.15.0/app/libraries/spyc/composer.json diff --git a/app/rainloop/v/1.14.0/app/libraries/tmhOAuth/LICENSE b/app/rainloop/v/1.15.0/app/libraries/tmhOAuth/LICENSE similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/tmhOAuth/LICENSE rename to app/rainloop/v/1.15.0/app/libraries/tmhOAuth/LICENSE diff --git a/app/rainloop/v/1.14.0/app/libraries/tmhOAuth/README.md b/app/rainloop/v/1.15.0/app/libraries/tmhOAuth/README.md similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/tmhOAuth/README.md rename to app/rainloop/v/1.15.0/app/libraries/tmhOAuth/README.md diff --git a/app/rainloop/v/1.14.0/app/libraries/tmhOAuth/cacert.pem b/app/rainloop/v/1.15.0/app/libraries/tmhOAuth/cacert.pem similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/tmhOAuth/cacert.pem rename to app/rainloop/v/1.15.0/app/libraries/tmhOAuth/cacert.pem diff --git a/app/rainloop/v/1.14.0/app/libraries/tmhOAuth/tmhOAuth.php b/app/rainloop/v/1.15.0/app/libraries/tmhOAuth/tmhOAuth.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/tmhOAuth/tmhOAuth.php rename to app/rainloop/v/1.15.0/app/libraries/tmhOAuth/tmhOAuth.php diff --git a/app/rainloop/v/1.14.0/app/libraries/tmhOAuth/tmhUtilities.php b/app/rainloop/v/1.15.0/app/libraries/tmhOAuth/tmhUtilities.php similarity index 100% rename from app/rainloop/v/1.14.0/app/libraries/tmhOAuth/tmhUtilities.php rename to app/rainloop/v/1.15.0/app/libraries/tmhOAuth/tmhUtilities.php diff --git a/app/rainloop/v/1.14.0/app/localization/README b/app/rainloop/v/1.15.0/app/localization/README similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/README rename to app/rainloop/v/1.15.0/app/localization/README diff --git a/app/rainloop/v/1.14.0/app/localization/admin/README b/app/rainloop/v/1.15.0/app/localization/admin/README similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/README rename to app/rainloop/v/1.15.0/app/localization/admin/README diff --git a/app/rainloop/v/1.14.0/app/localization/admin/_source.en.yml b/app/rainloop/v/1.15.0/app/localization/admin/_source.en.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/_source.en.yml rename to app/rainloop/v/1.15.0/app/localization/admin/_source.en.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/cs_CZ.yml b/app/rainloop/v/1.15.0/app/localization/admin/cs_CZ.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/cs_CZ.yml rename to app/rainloop/v/1.15.0/app/localization/admin/cs_CZ.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/da_DK.yml b/app/rainloop/v/1.15.0/app/localization/admin/da_DK.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/da_DK.yml rename to app/rainloop/v/1.15.0/app/localization/admin/da_DK.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/de_DE.yml b/app/rainloop/v/1.15.0/app/localization/admin/de_DE.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/de_DE.yml rename to app/rainloop/v/1.15.0/app/localization/admin/de_DE.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/en_US.yml b/app/rainloop/v/1.15.0/app/localization/admin/en_US.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/en_US.yml rename to app/rainloop/v/1.15.0/app/localization/admin/en_US.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/es_ES.yml b/app/rainloop/v/1.15.0/app/localization/admin/es_ES.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/es_ES.yml rename to app/rainloop/v/1.15.0/app/localization/admin/es_ES.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/fa_IR.yml b/app/rainloop/v/1.15.0/app/localization/admin/fa_IR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/fa_IR.yml rename to app/rainloop/v/1.15.0/app/localization/admin/fa_IR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/fi_FI.yml b/app/rainloop/v/1.15.0/app/localization/admin/fi_FI.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/fi_FI.yml rename to app/rainloop/v/1.15.0/app/localization/admin/fi_FI.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/fr_FR.yml b/app/rainloop/v/1.15.0/app/localization/admin/fr_FR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/fr_FR.yml rename to app/rainloop/v/1.15.0/app/localization/admin/fr_FR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/hu_HU.yml b/app/rainloop/v/1.15.0/app/localization/admin/hu_HU.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/hu_HU.yml rename to app/rainloop/v/1.15.0/app/localization/admin/hu_HU.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/id_ID.yml b/app/rainloop/v/1.15.0/app/localization/admin/id_ID.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/id_ID.yml rename to app/rainloop/v/1.15.0/app/localization/admin/id_ID.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/it_IT.yml b/app/rainloop/v/1.15.0/app/localization/admin/it_IT.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/it_IT.yml rename to app/rainloop/v/1.15.0/app/localization/admin/it_IT.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/ja_JP.yml b/app/rainloop/v/1.15.0/app/localization/admin/ja_JP.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/ja_JP.yml rename to app/rainloop/v/1.15.0/app/localization/admin/ja_JP.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/lt_LT.yml b/app/rainloop/v/1.15.0/app/localization/admin/lt_LT.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/lt_LT.yml rename to app/rainloop/v/1.15.0/app/localization/admin/lt_LT.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/nb_NO.yml b/app/rainloop/v/1.15.0/app/localization/admin/nb_NO.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/nb_NO.yml rename to app/rainloop/v/1.15.0/app/localization/admin/nb_NO.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/nl_NL.yml b/app/rainloop/v/1.15.0/app/localization/admin/nl_NL.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/nl_NL.yml rename to app/rainloop/v/1.15.0/app/localization/admin/nl_NL.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/pl_PL.yml b/app/rainloop/v/1.15.0/app/localization/admin/pl_PL.yml similarity index 97% rename from app/rainloop/v/1.14.0/app/localization/admin/pl_PL.yml rename to app/rainloop/v/1.15.0/app/localization/admin/pl_PL.yml index 9186a5ad..db55fcfc 100644 --- a/app/rainloop/v/1.14.0/app/localization/admin/pl_PL.yml +++ b/app/rainloop/v/1.15.0/app/localization/admin/pl_PL.yml @@ -82,7 +82,7 @@ pl_PL: LABEL_STORAGE_USER: "Użytkownik" LABEL_STORAGE_PASSWORD: "Hasło" BUTTON_TEST: "Testuj" - ALERT_NOTICE: "Ostrzeżenie!" + ALERT_NOTICE: "Powiadomienie!" HTML_ALERT_DO_NOT_USE_THIS_DATABASE: "Nie używaj tej bazy danych z dużą ilością aktywnych użytkowników." HTML_ALERT_DOES_NOT_SUPPORTED: | Twój system nie zawiera wsparcia dla obsługi kontaktów. @@ -102,17 +102,17 @@ pl_PL: LABEL_ALLOW_TWO_STEP: "Zezwól na autoryzację 2-etapową" LABEL_FORCE_TWO_STEP: "Wymuś autoryzację 2-etapową" LABEL_USE_IMAGE_PROXY: "Użyj lokalnego serwera proxy dla zewnętrznych obrazów" - LABEL_ALLOW_OPEN_PGP: "Zezwól na używanie OpenPGP" + LABEL_ALLOW_OPEN_PGP: "Zezwalaj na używanie OpenPGP" LABEL_SHOW_PHP_INFO: "Pokaż informacje o wersji PHP" - LEGEND_ADMIN_PANEL_ACCESS_CREDENTIALS: "Poświadczenia dostępu do panelu administracyjnego" + LEGEND_ADMIN_PANEL_ACCESS_CREDENTIALS: "Dane dostępowe panelu administracyjnego" LABEL_CURRENT_PASSWORD: "Bieżące hasło" LABEL_NEW_LOGIN: "Nowy login" LABEL_NEW_PASSWORD: "Nowe hasło" LABEL_REPEAT_PASSWORD: "Powtórz hasło" BUTTON_UPDATE_PASSWORD: "Zaktualizuj hasło" LEGEND_SSL: "SSL" - LABEL_REQUIRE_VERIFICATION: "Wymagaj weryfikacji używanego certyfikatu SSL (IMAP/SMTP)" - LABEL_ALLOW_SELF_SIGNED: "Zezwól na certyfikaty z podpisem własnym" + LABEL_REQUIRE_VERIFICATION: "Wymagaj sprawdzania poprawności certyfikatów SSL (IMAP/SMTP)" + LABEL_ALLOW_SELF_SIGNED: "Zezwól na używanie certyfikatów podpisanych samodzielnie" TAB_INTEGRATIONS: LEGEND_GOOGLE: "Google" LABEL_ENABLE_GOOGLE: "Włącz integrację z Google" @@ -164,7 +164,7 @@ pl_PL: BUTTON_TRIAL: "Wersja testowa" TAB_ABOUT: LEGEND_ABOUT: "O programie" - LABEL_TAG_HINT: "Prosty, nowoczesny i szybki klient poczty elektronicznej" + LABEL_TAG_HINT: "Prosty, nowoczesny i szybki klient pocztowy" LABEL_ALL_RIGHTS_RESERVED: "Wszystkie prawa zastrzeżone." HINT_READ_CHANGE_LOG: "Przed aktualizacją przeczytaj proszę listę zmian." HINT_IS_UP_TO_DATE: "RainLoop jest aktualny." diff --git a/app/rainloop/v/1.14.0/app/localization/admin/pt_BR.yml b/app/rainloop/v/1.15.0/app/localization/admin/pt_BR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/pt_BR.yml rename to app/rainloop/v/1.15.0/app/localization/admin/pt_BR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/ru_RU.yml b/app/rainloop/v/1.15.0/app/localization/admin/ru_RU.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/ru_RU.yml rename to app/rainloop/v/1.15.0/app/localization/admin/ru_RU.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/sk_SK.yml b/app/rainloop/v/1.15.0/app/localization/admin/sk_SK.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/sk_SK.yml rename to app/rainloop/v/1.15.0/app/localization/admin/sk_SK.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/sl_SI.yml b/app/rainloop/v/1.15.0/app/localization/admin/sl_SI.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/sl_SI.yml rename to app/rainloop/v/1.15.0/app/localization/admin/sl_SI.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/sv_SE.yml b/app/rainloop/v/1.15.0/app/localization/admin/sv_SE.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/sv_SE.yml rename to app/rainloop/v/1.15.0/app/localization/admin/sv_SE.yml diff --git a/app/rainloop/v/1.14.0/app/localization/admin/zh_CN.yml b/app/rainloop/v/1.15.0/app/localization/admin/zh_CN.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/admin/zh_CN.yml rename to app/rainloop/v/1.15.0/app/localization/admin/zh_CN.yml diff --git a/app/rainloop/v/1.14.0/app/localization/langs.yml b/app/rainloop/v/1.15.0/app/localization/langs.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/langs.yml rename to app/rainloop/v/1.15.0/app/localization/langs.yml diff --git a/app/rainloop/v/1.14.0/app/localization/moment/af.js b/app/rainloop/v/1.15.0/app/localization/moment/af.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/af.js rename to app/rainloop/v/1.15.0/app/localization/moment/af.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar-dz.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-dz.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar-dz.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar-dz.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar-kw.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-kw.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar-kw.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar-kw.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar-ly.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-ly.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar-ly.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar-ly.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar-ma.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-ma.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar-ma.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar-ma.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar-sa.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-sa.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar-sa.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar-sa.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar-tn.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-tn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar-tn.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar-tn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ar.js b/app/rainloop/v/1.15.0/app/localization/moment/ar.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ar.js rename to app/rainloop/v/1.15.0/app/localization/moment/ar.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/az.js b/app/rainloop/v/1.15.0/app/localization/moment/az.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/az.js rename to app/rainloop/v/1.15.0/app/localization/moment/az.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/be.js b/app/rainloop/v/1.15.0/app/localization/moment/be.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/be.js rename to app/rainloop/v/1.15.0/app/localization/moment/be.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/bg.js b/app/rainloop/v/1.15.0/app/localization/moment/bg.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/bg.js rename to app/rainloop/v/1.15.0/app/localization/moment/bg.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/bm.js b/app/rainloop/v/1.15.0/app/localization/moment/bm.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/bm.js rename to app/rainloop/v/1.15.0/app/localization/moment/bm.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/bn.js b/app/rainloop/v/1.15.0/app/localization/moment/bn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/bn.js rename to app/rainloop/v/1.15.0/app/localization/moment/bn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/bo.js b/app/rainloop/v/1.15.0/app/localization/moment/bo.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/bo.js rename to app/rainloop/v/1.15.0/app/localization/moment/bo.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/br.js b/app/rainloop/v/1.15.0/app/localization/moment/br.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/br.js rename to app/rainloop/v/1.15.0/app/localization/moment/br.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/bs.js b/app/rainloop/v/1.15.0/app/localization/moment/bs.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/bs.js rename to app/rainloop/v/1.15.0/app/localization/moment/bs.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ca.js b/app/rainloop/v/1.15.0/app/localization/moment/ca.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ca.js rename to app/rainloop/v/1.15.0/app/localization/moment/ca.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/cs.js b/app/rainloop/v/1.15.0/app/localization/moment/cs.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/cs.js rename to app/rainloop/v/1.15.0/app/localization/moment/cs.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/cv.js b/app/rainloop/v/1.15.0/app/localization/moment/cv.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/cv.js rename to app/rainloop/v/1.15.0/app/localization/moment/cv.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/cy.js b/app/rainloop/v/1.15.0/app/localization/moment/cy.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/cy.js rename to app/rainloop/v/1.15.0/app/localization/moment/cy.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/da.js b/app/rainloop/v/1.15.0/app/localization/moment/da.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/da.js rename to app/rainloop/v/1.15.0/app/localization/moment/da.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/de-at.js b/app/rainloop/v/1.15.0/app/localization/moment/de-at.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/de-at.js rename to app/rainloop/v/1.15.0/app/localization/moment/de-at.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/de-ch.js b/app/rainloop/v/1.15.0/app/localization/moment/de-ch.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/de-ch.js rename to app/rainloop/v/1.15.0/app/localization/moment/de-ch.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/de.js b/app/rainloop/v/1.15.0/app/localization/moment/de.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/de.js rename to app/rainloop/v/1.15.0/app/localization/moment/de.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/dv.js b/app/rainloop/v/1.15.0/app/localization/moment/dv.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/dv.js rename to app/rainloop/v/1.15.0/app/localization/moment/dv.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/el.js b/app/rainloop/v/1.15.0/app/localization/moment/el.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/el.js rename to app/rainloop/v/1.15.0/app/localization/moment/el.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-SG.js b/app/rainloop/v/1.15.0/app/localization/moment/en-SG.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-SG.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-SG.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-au.js b/app/rainloop/v/1.15.0/app/localization/moment/en-au.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-au.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-au.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-ca.js b/app/rainloop/v/1.15.0/app/localization/moment/en-ca.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-ca.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-ca.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-gb.js b/app/rainloop/v/1.15.0/app/localization/moment/en-gb.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-gb.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-gb.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-ie.js b/app/rainloop/v/1.15.0/app/localization/moment/en-ie.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-ie.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-ie.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-il.js b/app/rainloop/v/1.15.0/app/localization/moment/en-il.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-il.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-il.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/en-nz.js b/app/rainloop/v/1.15.0/app/localization/moment/en-nz.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/en-nz.js rename to app/rainloop/v/1.15.0/app/localization/moment/en-nz.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/eo.js b/app/rainloop/v/1.15.0/app/localization/moment/eo.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/eo.js rename to app/rainloop/v/1.15.0/app/localization/moment/eo.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/es-do.js b/app/rainloop/v/1.15.0/app/localization/moment/es-do.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/es-do.js rename to app/rainloop/v/1.15.0/app/localization/moment/es-do.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/es-us.js b/app/rainloop/v/1.15.0/app/localization/moment/es-us.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/es-us.js rename to app/rainloop/v/1.15.0/app/localization/moment/es-us.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/es.js b/app/rainloop/v/1.15.0/app/localization/moment/es.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/es.js rename to app/rainloop/v/1.15.0/app/localization/moment/es.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/et.js b/app/rainloop/v/1.15.0/app/localization/moment/et.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/et.js rename to app/rainloop/v/1.15.0/app/localization/moment/et.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/eu.js b/app/rainloop/v/1.15.0/app/localization/moment/eu.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/eu.js rename to app/rainloop/v/1.15.0/app/localization/moment/eu.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fa.js b/app/rainloop/v/1.15.0/app/localization/moment/fa.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fa.js rename to app/rainloop/v/1.15.0/app/localization/moment/fa.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fi.js b/app/rainloop/v/1.15.0/app/localization/moment/fi.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fi.js rename to app/rainloop/v/1.15.0/app/localization/moment/fi.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fo.js b/app/rainloop/v/1.15.0/app/localization/moment/fo.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fo.js rename to app/rainloop/v/1.15.0/app/localization/moment/fo.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fr-ca.js b/app/rainloop/v/1.15.0/app/localization/moment/fr-ca.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fr-ca.js rename to app/rainloop/v/1.15.0/app/localization/moment/fr-ca.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fr-ch.js b/app/rainloop/v/1.15.0/app/localization/moment/fr-ch.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fr-ch.js rename to app/rainloop/v/1.15.0/app/localization/moment/fr-ch.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fr.js b/app/rainloop/v/1.15.0/app/localization/moment/fr.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fr.js rename to app/rainloop/v/1.15.0/app/localization/moment/fr.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/fy.js b/app/rainloop/v/1.15.0/app/localization/moment/fy.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/fy.js rename to app/rainloop/v/1.15.0/app/localization/moment/fy.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ga.js b/app/rainloop/v/1.15.0/app/localization/moment/ga.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ga.js rename to app/rainloop/v/1.15.0/app/localization/moment/ga.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/gd.js b/app/rainloop/v/1.15.0/app/localization/moment/gd.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/gd.js rename to app/rainloop/v/1.15.0/app/localization/moment/gd.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/gl.js b/app/rainloop/v/1.15.0/app/localization/moment/gl.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/gl.js rename to app/rainloop/v/1.15.0/app/localization/moment/gl.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/gom-latn.js b/app/rainloop/v/1.15.0/app/localization/moment/gom-latn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/gom-latn.js rename to app/rainloop/v/1.15.0/app/localization/moment/gom-latn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/gu.js b/app/rainloop/v/1.15.0/app/localization/moment/gu.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/gu.js rename to app/rainloop/v/1.15.0/app/localization/moment/gu.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/he.js b/app/rainloop/v/1.15.0/app/localization/moment/he.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/he.js rename to app/rainloop/v/1.15.0/app/localization/moment/he.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/hi.js b/app/rainloop/v/1.15.0/app/localization/moment/hi.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/hi.js rename to app/rainloop/v/1.15.0/app/localization/moment/hi.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/hr.js b/app/rainloop/v/1.15.0/app/localization/moment/hr.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/hr.js rename to app/rainloop/v/1.15.0/app/localization/moment/hr.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/hu.js b/app/rainloop/v/1.15.0/app/localization/moment/hu.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/hu.js rename to app/rainloop/v/1.15.0/app/localization/moment/hu.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/hy-am.js b/app/rainloop/v/1.15.0/app/localization/moment/hy-am.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/hy-am.js rename to app/rainloop/v/1.15.0/app/localization/moment/hy-am.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/id.js b/app/rainloop/v/1.15.0/app/localization/moment/id.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/id.js rename to app/rainloop/v/1.15.0/app/localization/moment/id.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/is.js b/app/rainloop/v/1.15.0/app/localization/moment/is.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/is.js rename to app/rainloop/v/1.15.0/app/localization/moment/is.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/it-ch.js b/app/rainloop/v/1.15.0/app/localization/moment/it-ch.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/it-ch.js rename to app/rainloop/v/1.15.0/app/localization/moment/it-ch.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/it.js b/app/rainloop/v/1.15.0/app/localization/moment/it.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/it.js rename to app/rainloop/v/1.15.0/app/localization/moment/it.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ja.js b/app/rainloop/v/1.15.0/app/localization/moment/ja.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ja.js rename to app/rainloop/v/1.15.0/app/localization/moment/ja.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/jv.js b/app/rainloop/v/1.15.0/app/localization/moment/jv.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/jv.js rename to app/rainloop/v/1.15.0/app/localization/moment/jv.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ka.js b/app/rainloop/v/1.15.0/app/localization/moment/ka.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ka.js rename to app/rainloop/v/1.15.0/app/localization/moment/ka.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/kk.js b/app/rainloop/v/1.15.0/app/localization/moment/kk.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/kk.js rename to app/rainloop/v/1.15.0/app/localization/moment/kk.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/km.js b/app/rainloop/v/1.15.0/app/localization/moment/km.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/km.js rename to app/rainloop/v/1.15.0/app/localization/moment/km.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/kn.js b/app/rainloop/v/1.15.0/app/localization/moment/kn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/kn.js rename to app/rainloop/v/1.15.0/app/localization/moment/kn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ko.js b/app/rainloop/v/1.15.0/app/localization/moment/ko.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ko.js rename to app/rainloop/v/1.15.0/app/localization/moment/ko.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ku.js b/app/rainloop/v/1.15.0/app/localization/moment/ku.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ku.js rename to app/rainloop/v/1.15.0/app/localization/moment/ku.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ky.js b/app/rainloop/v/1.15.0/app/localization/moment/ky.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ky.js rename to app/rainloop/v/1.15.0/app/localization/moment/ky.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/lb.js b/app/rainloop/v/1.15.0/app/localization/moment/lb.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/lb.js rename to app/rainloop/v/1.15.0/app/localization/moment/lb.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/lo.js b/app/rainloop/v/1.15.0/app/localization/moment/lo.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/lo.js rename to app/rainloop/v/1.15.0/app/localization/moment/lo.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/lt.js b/app/rainloop/v/1.15.0/app/localization/moment/lt.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/lt.js rename to app/rainloop/v/1.15.0/app/localization/moment/lt.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/lv.js b/app/rainloop/v/1.15.0/app/localization/moment/lv.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/lv.js rename to app/rainloop/v/1.15.0/app/localization/moment/lv.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/me.js b/app/rainloop/v/1.15.0/app/localization/moment/me.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/me.js rename to app/rainloop/v/1.15.0/app/localization/moment/me.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/mi.js b/app/rainloop/v/1.15.0/app/localization/moment/mi.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/mi.js rename to app/rainloop/v/1.15.0/app/localization/moment/mi.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/mk.js b/app/rainloop/v/1.15.0/app/localization/moment/mk.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/mk.js rename to app/rainloop/v/1.15.0/app/localization/moment/mk.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ml.js b/app/rainloop/v/1.15.0/app/localization/moment/ml.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ml.js rename to app/rainloop/v/1.15.0/app/localization/moment/ml.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/mn.js b/app/rainloop/v/1.15.0/app/localization/moment/mn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/mn.js rename to app/rainloop/v/1.15.0/app/localization/moment/mn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/mr.js b/app/rainloop/v/1.15.0/app/localization/moment/mr.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/mr.js rename to app/rainloop/v/1.15.0/app/localization/moment/mr.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ms-my.js b/app/rainloop/v/1.15.0/app/localization/moment/ms-my.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ms-my.js rename to app/rainloop/v/1.15.0/app/localization/moment/ms-my.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ms.js b/app/rainloop/v/1.15.0/app/localization/moment/ms.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ms.js rename to app/rainloop/v/1.15.0/app/localization/moment/ms.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/mt.js b/app/rainloop/v/1.15.0/app/localization/moment/mt.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/mt.js rename to app/rainloop/v/1.15.0/app/localization/moment/mt.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/my.js b/app/rainloop/v/1.15.0/app/localization/moment/my.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/my.js rename to app/rainloop/v/1.15.0/app/localization/moment/my.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/nb.js b/app/rainloop/v/1.15.0/app/localization/moment/nb.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/nb.js rename to app/rainloop/v/1.15.0/app/localization/moment/nb.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ne.js b/app/rainloop/v/1.15.0/app/localization/moment/ne.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ne.js rename to app/rainloop/v/1.15.0/app/localization/moment/ne.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/nl-be.js b/app/rainloop/v/1.15.0/app/localization/moment/nl-be.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/nl-be.js rename to app/rainloop/v/1.15.0/app/localization/moment/nl-be.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/nl.js b/app/rainloop/v/1.15.0/app/localization/moment/nl.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/nl.js rename to app/rainloop/v/1.15.0/app/localization/moment/nl.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/nn.js b/app/rainloop/v/1.15.0/app/localization/moment/nn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/nn.js rename to app/rainloop/v/1.15.0/app/localization/moment/nn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/pa-in.js b/app/rainloop/v/1.15.0/app/localization/moment/pa-in.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/pa-in.js rename to app/rainloop/v/1.15.0/app/localization/moment/pa-in.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/pl.js b/app/rainloop/v/1.15.0/app/localization/moment/pl.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/pl.js rename to app/rainloop/v/1.15.0/app/localization/moment/pl.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/pt-br.js b/app/rainloop/v/1.15.0/app/localization/moment/pt-br.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/pt-br.js rename to app/rainloop/v/1.15.0/app/localization/moment/pt-br.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/pt.js b/app/rainloop/v/1.15.0/app/localization/moment/pt.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/pt.js rename to app/rainloop/v/1.15.0/app/localization/moment/pt.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ro.js b/app/rainloop/v/1.15.0/app/localization/moment/ro.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ro.js rename to app/rainloop/v/1.15.0/app/localization/moment/ro.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ru.js b/app/rainloop/v/1.15.0/app/localization/moment/ru.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ru.js rename to app/rainloop/v/1.15.0/app/localization/moment/ru.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sd.js b/app/rainloop/v/1.15.0/app/localization/moment/sd.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sd.js rename to app/rainloop/v/1.15.0/app/localization/moment/sd.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/se.js b/app/rainloop/v/1.15.0/app/localization/moment/se.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/se.js rename to app/rainloop/v/1.15.0/app/localization/moment/se.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/si.js b/app/rainloop/v/1.15.0/app/localization/moment/si.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/si.js rename to app/rainloop/v/1.15.0/app/localization/moment/si.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sk.js b/app/rainloop/v/1.15.0/app/localization/moment/sk.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sk.js rename to app/rainloop/v/1.15.0/app/localization/moment/sk.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sl.js b/app/rainloop/v/1.15.0/app/localization/moment/sl.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sl.js rename to app/rainloop/v/1.15.0/app/localization/moment/sl.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sq.js b/app/rainloop/v/1.15.0/app/localization/moment/sq.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sq.js rename to app/rainloop/v/1.15.0/app/localization/moment/sq.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sr-cyrl.js b/app/rainloop/v/1.15.0/app/localization/moment/sr-cyrl.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sr-cyrl.js rename to app/rainloop/v/1.15.0/app/localization/moment/sr-cyrl.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sr.js b/app/rainloop/v/1.15.0/app/localization/moment/sr.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sr.js rename to app/rainloop/v/1.15.0/app/localization/moment/sr.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ss.js b/app/rainloop/v/1.15.0/app/localization/moment/ss.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ss.js rename to app/rainloop/v/1.15.0/app/localization/moment/ss.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sv.js b/app/rainloop/v/1.15.0/app/localization/moment/sv.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sv.js rename to app/rainloop/v/1.15.0/app/localization/moment/sv.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/sw.js b/app/rainloop/v/1.15.0/app/localization/moment/sw.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/sw.js rename to app/rainloop/v/1.15.0/app/localization/moment/sw.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ta.js b/app/rainloop/v/1.15.0/app/localization/moment/ta.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ta.js rename to app/rainloop/v/1.15.0/app/localization/moment/ta.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/te.js b/app/rainloop/v/1.15.0/app/localization/moment/te.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/te.js rename to app/rainloop/v/1.15.0/app/localization/moment/te.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tet.js b/app/rainloop/v/1.15.0/app/localization/moment/tet.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tet.js rename to app/rainloop/v/1.15.0/app/localization/moment/tet.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tg.js b/app/rainloop/v/1.15.0/app/localization/moment/tg.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tg.js rename to app/rainloop/v/1.15.0/app/localization/moment/tg.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/th.js b/app/rainloop/v/1.15.0/app/localization/moment/th.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/th.js rename to app/rainloop/v/1.15.0/app/localization/moment/th.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tl-ph.js b/app/rainloop/v/1.15.0/app/localization/moment/tl-ph.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tl-ph.js rename to app/rainloop/v/1.15.0/app/localization/moment/tl-ph.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tlh.js b/app/rainloop/v/1.15.0/app/localization/moment/tlh.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tlh.js rename to app/rainloop/v/1.15.0/app/localization/moment/tlh.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tr.js b/app/rainloop/v/1.15.0/app/localization/moment/tr.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tr.js rename to app/rainloop/v/1.15.0/app/localization/moment/tr.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tzl.js b/app/rainloop/v/1.15.0/app/localization/moment/tzl.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tzl.js rename to app/rainloop/v/1.15.0/app/localization/moment/tzl.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tzm-latn.js b/app/rainloop/v/1.15.0/app/localization/moment/tzm-latn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tzm-latn.js rename to app/rainloop/v/1.15.0/app/localization/moment/tzm-latn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/tzm.js b/app/rainloop/v/1.15.0/app/localization/moment/tzm.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/tzm.js rename to app/rainloop/v/1.15.0/app/localization/moment/tzm.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ug-cn.js b/app/rainloop/v/1.15.0/app/localization/moment/ug-cn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ug-cn.js rename to app/rainloop/v/1.15.0/app/localization/moment/ug-cn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/uk.js b/app/rainloop/v/1.15.0/app/localization/moment/uk.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/uk.js rename to app/rainloop/v/1.15.0/app/localization/moment/uk.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/ur.js b/app/rainloop/v/1.15.0/app/localization/moment/ur.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/ur.js rename to app/rainloop/v/1.15.0/app/localization/moment/ur.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/uz-latn.js b/app/rainloop/v/1.15.0/app/localization/moment/uz-latn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/uz-latn.js rename to app/rainloop/v/1.15.0/app/localization/moment/uz-latn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/uz.js b/app/rainloop/v/1.15.0/app/localization/moment/uz.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/uz.js rename to app/rainloop/v/1.15.0/app/localization/moment/uz.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/vi.js b/app/rainloop/v/1.15.0/app/localization/moment/vi.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/vi.js rename to app/rainloop/v/1.15.0/app/localization/moment/vi.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/x-pseudo.js b/app/rainloop/v/1.15.0/app/localization/moment/x-pseudo.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/x-pseudo.js rename to app/rainloop/v/1.15.0/app/localization/moment/x-pseudo.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/yo.js b/app/rainloop/v/1.15.0/app/localization/moment/yo.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/yo.js rename to app/rainloop/v/1.15.0/app/localization/moment/yo.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/zh-cn.js b/app/rainloop/v/1.15.0/app/localization/moment/zh-cn.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/zh-cn.js rename to app/rainloop/v/1.15.0/app/localization/moment/zh-cn.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/zh-hk.js b/app/rainloop/v/1.15.0/app/localization/moment/zh-hk.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/zh-hk.js rename to app/rainloop/v/1.15.0/app/localization/moment/zh-hk.js diff --git a/app/rainloop/v/1.14.0/app/localization/moment/zh-tw.js b/app/rainloop/v/1.15.0/app/localization/moment/zh-tw.js similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/moment/zh-tw.js rename to app/rainloop/v/1.15.0/app/localization/moment/zh-tw.js diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/README b/app/rainloop/v/1.15.0/app/localization/webmail/README similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/README rename to app/rainloop/v/1.15.0/app/localization/webmail/README diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/_source.en.yml b/app/rainloop/v/1.15.0/app/localization/webmail/_source.en.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/_source.en.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/_source.en.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/ar_SA.yml b/app/rainloop/v/1.15.0/app/localization/webmail/ar_SA.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/ar_SA.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/ar_SA.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/bg_BG.yml b/app/rainloop/v/1.15.0/app/localization/webmail/bg_BG.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/bg_BG.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/bg_BG.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/cs_CZ.yml b/app/rainloop/v/1.15.0/app/localization/webmail/cs_CZ.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/cs_CZ.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/cs_CZ.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/da_DK.yml b/app/rainloop/v/1.15.0/app/localization/webmail/da_DK.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/da_DK.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/da_DK.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/de_DE.yml b/app/rainloop/v/1.15.0/app/localization/webmail/de_DE.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/de_DE.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/de_DE.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/el_GR.yml b/app/rainloop/v/1.15.0/app/localization/webmail/el_GR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/el_GR.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/el_GR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/en_GB.yml b/app/rainloop/v/1.15.0/app/localization/webmail/en_GB.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/en_GB.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/en_GB.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/en_US.yml b/app/rainloop/v/1.15.0/app/localization/webmail/en_US.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/en_US.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/en_US.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/es_ES.yml b/app/rainloop/v/1.15.0/app/localization/webmail/es_ES.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/es_ES.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/es_ES.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/et_EE.yml b/app/rainloop/v/1.15.0/app/localization/webmail/et_EE.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/et_EE.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/et_EE.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/fa_IR.yml b/app/rainloop/v/1.15.0/app/localization/webmail/fa_IR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/fa_IR.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/fa_IR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/fi_FI.yml b/app/rainloop/v/1.15.0/app/localization/webmail/fi_FI.yml similarity index 99% rename from app/rainloop/v/1.14.0/app/localization/webmail/fi_FI.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/fi_FI.yml index 02abf710..a8716590 100644 --- a/app/rainloop/v/1.14.0/app/localization/webmail/fi_FI.yml +++ b/app/rainloop/v/1.15.0/app/localization/webmail/fi_FI.yml @@ -85,7 +85,7 @@ fi_FI: MENU_SELECT_SEEN: "Luetut" MENU_SELECT_FLAGGED: "Merkityt" MENU_SELECT_UNFLAGGED: "Merkkaamattomat" - EMPTY_LIST: "Tyhjennä lista" + EMPTY_LIST: "Tyhjä lista" EMPTY_SEARCH_LIST: "Yhtään viestiä ei löytynyt ehdoillasi." SEARCH_RESULT_FOR: "Hakutulokset haulle \"%SEARCH%\"" BACK_TO_MESSAGE_LIST: "Takaisin viestilistaan" @@ -429,7 +429,7 @@ fi_FI: LABEL_TEMPLATES_NAME: "Mallipohjat" LABEL_SECURITY_NAME: "Turvallisuus" LABEL_SOCIAL_NAME: "Sosiaalinen" - LABEL_THEMES_NAME: "emat" + LABEL_THEMES_NAME: "Teemat" LABEL_CHANGE_PASSWORD_NAME: "Salasana" LABEL_OPEN_PGP_NAME: "OpenPGP" BUTTON_BACK: "Takaisin" diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/fr_FR.yml b/app/rainloop/v/1.15.0/app/localization/webmail/fr_FR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/fr_FR.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/fr_FR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/hu_HU.yml b/app/rainloop/v/1.15.0/app/localization/webmail/hu_HU.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/hu_HU.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/hu_HU.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/id_ID.yml b/app/rainloop/v/1.15.0/app/localization/webmail/id_ID.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/id_ID.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/id_ID.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/is_IS.yml b/app/rainloop/v/1.15.0/app/localization/webmail/is_IS.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/is_IS.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/is_IS.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/it_IT.yml b/app/rainloop/v/1.15.0/app/localization/webmail/it_IT.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/it_IT.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/it_IT.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/ja_JP.yml b/app/rainloop/v/1.15.0/app/localization/webmail/ja_JP.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/ja_JP.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/ja_JP.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/ko_KR.yml b/app/rainloop/v/1.15.0/app/localization/webmail/ko_KR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/ko_KR.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/ko_KR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/lt_LT.yml b/app/rainloop/v/1.15.0/app/localization/webmail/lt_LT.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/lt_LT.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/lt_LT.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/lv_LV.yml b/app/rainloop/v/1.15.0/app/localization/webmail/lv_LV.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/lv_LV.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/lv_LV.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/nb_NO.yml b/app/rainloop/v/1.15.0/app/localization/webmail/nb_NO.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/nb_NO.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/nb_NO.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/nl_NL.yml b/app/rainloop/v/1.15.0/app/localization/webmail/nl_NL.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/nl_NL.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/nl_NL.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/pl_PL.yml b/app/rainloop/v/1.15.0/app/localization/webmail/pl_PL.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/pl_PL.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/pl_PL.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/pt_BR.yml b/app/rainloop/v/1.15.0/app/localization/webmail/pt_BR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/pt_BR.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/pt_BR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/pt_PT.yml b/app/rainloop/v/1.15.0/app/localization/webmail/pt_PT.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/pt_PT.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/pt_PT.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/ro_RO.yml b/app/rainloop/v/1.15.0/app/localization/webmail/ro_RO.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/ro_RO.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/ro_RO.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/ru_RU.yml b/app/rainloop/v/1.15.0/app/localization/webmail/ru_RU.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/ru_RU.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/ru_RU.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/sk_SK.yml b/app/rainloop/v/1.15.0/app/localization/webmail/sk_SK.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/sk_SK.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/sk_SK.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/sl_SI.yml b/app/rainloop/v/1.15.0/app/localization/webmail/sl_SI.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/sl_SI.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/sl_SI.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/sv_SE.yml b/app/rainloop/v/1.15.0/app/localization/webmail/sv_SE.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/sv_SE.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/sv_SE.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/tr_TR.yml b/app/rainloop/v/1.15.0/app/localization/webmail/tr_TR.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/tr_TR.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/tr_TR.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/uk_UA.yml b/app/rainloop/v/1.15.0/app/localization/webmail/uk_UA.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/uk_UA.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/uk_UA.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/zh_CN.yml b/app/rainloop/v/1.15.0/app/localization/webmail/zh_CN.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/zh_CN.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/zh_CN.yml diff --git a/app/rainloop/v/1.14.0/app/localization/webmail/zh_TW.yml b/app/rainloop/v/1.15.0/app/localization/webmail/zh_TW.yml similarity index 100% rename from app/rainloop/v/1.14.0/app/localization/webmail/zh_TW.yml rename to app/rainloop/v/1.15.0/app/localization/webmail/zh_TW.yml diff --git a/app/rainloop/v/1.14.0/app/resources/RainLoop.asc b/app/rainloop/v/1.15.0/app/resources/RainLoop.asc similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/RainLoop.asc rename to app/rainloop/v/1.15.0/app/resources/RainLoop.asc diff --git a/app/rainloop/v/1.14.0/app/resources/images/empty-contact.png b/app/rainloop/v/1.15.0/app/resources/images/empty-contact.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/empty-contact.png rename to app/rainloop/v/1.15.0/app/resources/images/empty-contact.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/amazon.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/amazon.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/amazon.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/amazon.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/apple.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/apple.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/apple.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/apple.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/asana.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/asana.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/asana.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/asana.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/battle.net.png b/app/rainloop/v/1.15.0/app/resources/images/services/battle.net.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/battle.net.png rename to app/rainloop/v/1.15.0/app/resources/images/services/battle.net.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/blizzard.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/blizzard.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/blizzard.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/blizzard.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/cnet.online.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/cnet.online.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/cnet.online.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/cnet.online.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/connect.asana.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/connect.asana.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/connect.asana.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/connect.asana.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/e.paypal.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/e.paypal.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/e.paypal.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/e.paypal.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/ea.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/ea.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/ea.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/ea.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/ebay.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/ebay.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/ebay.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/ebay.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/em.ea.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/em.ea.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/em.ea.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/em.ea.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/email.blizzard.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/email.blizzard.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/email.blizzard.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/email.blizzard.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/email.microsoft.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/email.microsoft.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/email.microsoft.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/email.microsoft.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/email.skype.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/email.skype.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/email.skype.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/email.skype.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/facebook.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/facebook.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/facebook.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/facebook.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/facebookmail.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/facebookmail.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/facebookmail.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/facebookmail.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/github.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/github.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/github.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/github.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/google.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/google.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/google.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/google.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/id.apple.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/id.apple.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/id.apple.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/id.apple.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/intl.paypal.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/intl.paypal.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/intl.paypal.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/intl.paypal.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/microsoft.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/microsoft.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/microsoft.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/microsoft.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/microsoftonline.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/microsoftonline.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/microsoftonline.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/microsoftonline.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/myspace.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/myspace.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/myspace.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/myspace.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/news.myspace.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/news.myspace.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/news.myspace.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/news.myspace.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/news.onlive.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/news.onlive.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/news.onlive.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/news.onlive.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/onlive.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/onlive.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/onlive.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/onlive.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/paypal.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/paypal.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/paypal.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/paypal.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/plus.google.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/plus.google.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/plus.google.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/plus.google.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/postmaster.twitter.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/postmaster.twitter.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/postmaster.twitter.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/postmaster.twitter.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/reply.ebay.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/reply.ebay.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/reply.ebay.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/reply.ebay.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/reply1.ebay.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/reply1.ebay.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/reply1.ebay.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/reply1.ebay.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/reply2.ebay.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/reply2.ebay.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/reply2.ebay.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/reply2.ebay.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/reply3.ebay.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/reply3.ebay.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/reply3.ebay.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/reply3.ebay.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/skype.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/skype.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/skype.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/skype.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/steampowered.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/steampowered.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/steampowered.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/steampowered.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/ted.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/ted.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/ted.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/ted.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/twitter.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/twitter.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/twitter.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/twitter.com.png diff --git a/app/rainloop/v/1.14.0/app/resources/images/services/youtube.com.png b/app/rainloop/v/1.15.0/app/resources/images/services/youtube.com.png similarity index 100% rename from app/rainloop/v/1.14.0/app/resources/images/services/youtube.com.png rename to app/rainloop/v/1.15.0/app/resources/images/services/youtube.com.png diff --git a/app/rainloop/v/1.14.0/app/templates/BadBrowser.html b/app/rainloop/v/1.15.0/app/templates/BadBrowser.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/BadBrowser.html rename to app/rainloop/v/1.15.0/app/templates/BadBrowser.html diff --git a/app/rainloop/v/1.14.0/app/templates/Error.html b/app/rainloop/v/1.15.0/app/templates/Error.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Error.html rename to app/rainloop/v/1.15.0/app/templates/Error.html diff --git a/app/rainloop/v/1.15.0/app/templates/Index.html b/app/rainloop/v/1.15.0/app/templates/Index.html new file mode 100644 index 00000000..b659d154 --- /dev/null +++ b/app/rainloop/v/1.15.0/app/templates/Index.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + {{BaseContentSecurityPolicy}} + + {{BaseAppHeadScriptLink}} + {{BaseAppFaviconPngLinkTag}} + {{BaseAppFaviconTouchLinkTag}} + + + + + + +
+
+ {{BaseTemplates}} + {{BaseAppBodyScript}} + + + + \ No newline at end of file diff --git a/app/rainloop/v/1.14.0/app/templates/Social.html b/app/rainloop/v/1.15.0/app/templates/Social.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Social.html rename to app/rainloop/v/1.15.0/app/templates/Social.html diff --git a/app/rainloop/v/1.14.0/app/templates/Themes/template.less b/app/rainloop/v/1.15.0/app/templates/Themes/template.less similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Themes/template.less rename to app/rainloop/v/1.15.0/app/templates/Themes/template.less diff --git a/app/rainloop/v/1.14.0/app/templates/Themes/values.less b/app/rainloop/v/1.15.0/app/templates/Themes/values.less similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Themes/values.less rename to app/rainloop/v/1.15.0/app/templates/Themes/values.less diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminLogin.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminLogin.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminLogin.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminLogin.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminMenu.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminMenu.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminMenu.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminMenu.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminPane.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminPane.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminPane.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminPane.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsAbout.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsAbout.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsAbout.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsAbout.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsBranding.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsBranding.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsBranding.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsBranding.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsContacts.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsContacts.html similarity index 97% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsContacts.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsContacts.html index a6bac5d5..92693b68 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsContacts.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsContacts.html @@ -65,7 +65,7 @@

-
diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsDomainListItem.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsDomainListItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsDomainListItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsDomainListItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsDomains.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsDomains.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsDomains.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsDomains.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsGeneral.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsGeneral.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsGeneral.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsGeneral.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsLicensing.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsLicensing.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsLicensing.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsLicensing.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsLogin.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsLogin.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsLogin.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsLogin.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPackages.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPackages.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPackages.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPackages.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPackagesListItem.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPackagesListItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPackagesListItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPackagesListItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPackagesTable.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPackagesTable.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPackagesTable.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPackagesTable.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPluginListItem.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPluginListItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPluginListItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPluginListItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPluginProperty.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPluginProperty.html similarity index 90% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPluginProperty.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPluginProperty.html index f245ecf6..913919d3 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPluginProperty.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPluginProperty.html @@ -8,7 +8,7 @@ data-bind="value: value, attr: {placeholder: placeholder}" /> - diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPlugins.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPlugins.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsPlugins.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsPlugins.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsSecurity.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsSecurity.html similarity index 90% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsSecurity.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsSecurity.html index fb6e1ca4..d25bb665 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsSecurity.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsSecurity.html @@ -78,7 +78,7 @@
-
@@ -86,21 +86,21 @@
-
-
-
diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsSocial.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsSocial.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/AdminSettingsSocial.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/AdminSettingsSocial.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsActivate.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsActivate.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsActivate.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsActivate.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsDomain.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsDomain.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsDomain.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsDomain.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsDomainAlias.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsDomainAlias.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsDomainAlias.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsDomainAlias.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsPlugin.html b/app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsPlugin.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Admin/PopupsPlugin.html rename to app/rainloop/v/1.15.0/app/templates/Views/Admin/PopupsPlugin.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Common/Cmd.html b/app/rainloop/v/1.15.0/app/templates/Views/Common/Cmd.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Common/Cmd.html rename to app/rainloop/v/1.15.0/app/templates/Views/Common/Cmd.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Common/Pagenator.html b/app/rainloop/v/1.15.0/app/templates/Views/Common/Pagenator.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Common/Pagenator.html rename to app/rainloop/v/1.15.0/app/templates/Views/Common/Pagenator.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsAsk.html b/app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsAsk.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsAsk.html rename to app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsAsk.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html b/app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html rename to app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsLanguages.html b/app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsLanguages.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsLanguages.html rename to app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsLanguages.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsWelcomePage.html b/app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsWelcomePage.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Common/PopupsWelcomePage.html rename to app/rainloop/v/1.15.0/app/templates/Views/Common/PopupsWelcomePage.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/Checkbox.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/Checkbox.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/Checkbox.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/Checkbox.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/CheckboxClassic.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/CheckboxClassic.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/CheckboxClassic.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/CheckboxClassic.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/CheckboxMaterialDesign.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/CheckboxMaterialDesign.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/CheckboxMaterialDesign.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/CheckboxMaterialDesign.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/Date.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/Date.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/Date.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/Date.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/Input.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/Input.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/Input.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/Input.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/Radio.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/Radio.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/Radio.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/Radio.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/SaveTrigger.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/SaveTrigger.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/SaveTrigger.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/SaveTrigger.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/Select.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/Select.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/Select.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/Select.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/Components/TextArea.html b/app/rainloop/v/1.15.0/app/templates/Views/Components/TextArea.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/Components/TextArea.html rename to app/rainloop/v/1.15.0/app/templates/Views/Components/TextArea.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/About.html b/app/rainloop/v/1.15.0/app/templates/Views/User/About.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/About.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/About.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/ComposeAttachment.html b/app/rainloop/v/1.15.0/app/templates/Views/User/ComposeAttachment.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/ComposeAttachment.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/ComposeAttachment.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/Login.html b/app/rainloop/v/1.15.0/app/templates/Views/User/Login.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/Login.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/Login.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/LoginWelcome.html b/app/rainloop/v/1.15.0/app/templates/Views/User/LoginWelcome.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/LoginWelcome.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/LoginWelcome.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailFolderList.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailFolderList.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailFolderList.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailFolderList.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailFolderListItem.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailFolderListItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailFolderListItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailFolderListItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailFolderListSystemItem.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailFolderListSystemItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailFolderListSystemItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailFolderListSystemItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageList.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageList.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageList.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageList.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageListItem.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageListItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageListItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageListItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageListItemNoPreviewPane.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageListItemNoPreviewPane.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageListItemNoPreviewPane.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageListItemNoPreviewPane.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageView.html b/app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageView.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/MailMessageView.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/MailMessageView.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PhotoSwipe.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PhotoSwipe.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PhotoSwipe.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PhotoSwipe.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAccount.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAccount.html similarity index 94% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAccount.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAccount.html index 8cc8c387..3827149d 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAccount.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAccount.html @@ -30,7 +30,7 @@

-
diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAddOpenPgpKey.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAddOpenPgpKey.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAddOpenPgpKey.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAddOpenPgpKey.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAdvancedSearch.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAdvancedSearch.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsAdvancedSearch.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsAdvancedSearch.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsCompose.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsCompose.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsCompose.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsCompose.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsComposeOpenPgp.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsComposeOpenPgp.html similarity index 98% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsComposeOpenPgp.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsComposeOpenPgp.html index 49c65a51..8cedd364 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsComposeOpenPgp.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsComposeOpenPgp.html @@ -85,7 +85,7 @@

diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsContacts.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsContacts.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsContacts.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsContacts.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFilter.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFilter.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFilter.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFilter.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFolderClear.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFolderClear.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFolderClear.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFolderClear.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFolderCreate.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFolderCreate.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFolderCreate.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFolderCreate.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFolderSystem.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFolderSystem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsFolderSystem.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsFolderSystem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsIdentity.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsIdentity.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsIdentity.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsIdentity.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsMessageOpenPgp.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsMessageOpenPgp.html similarity index 95% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsMessageOpenPgp.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsMessageOpenPgp.html index 41b5b2ea..abca830d 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsMessageOpenPgp.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsMessageOpenPgp.html @@ -36,7 +36,7 @@

-
diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsNewOpenPgpKey.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsNewOpenPgpKey.html similarity index 96% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsNewOpenPgpKey.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsNewOpenPgpKey.html index f377f128..a492b392 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsNewOpenPgpKey.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsNewOpenPgpKey.html @@ -34,7 +34,7 @@

diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsTemplate.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsTemplate.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsTemplate.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsTemplate.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsTwoFactorConfiguration.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsTwoFactorConfiguration.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsTwoFactorConfiguration.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsTwoFactorConfiguration.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsTwoFactorTest.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsTwoFactorTest.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsTwoFactorTest.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsTwoFactorTest.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsViewOpenPgpKey.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsViewOpenPgpKey.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsViewOpenPgpKey.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsViewOpenPgpKey.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/PopupsWindowSimpleMessage.html b/app/rainloop/v/1.15.0/app/templates/Views/User/PopupsWindowSimpleMessage.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/PopupsWindowSimpleMessage.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/PopupsWindowSimpleMessage.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsAccounts.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsAccounts.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsAccounts.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsAccounts.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsChangePassword.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsChangePassword.html similarity index 84% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsChangePassword.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsChangePassword.html index 810e3c4d..f0d08fe2 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsChangePassword.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsChangePassword.html @@ -10,7 +10,7 @@
-
@@ -19,7 +19,7 @@
-
@@ -28,7 +28,7 @@
-

diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsContacts.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsContacts.html similarity index 82% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsContacts.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsContacts.html index 7ace99ae..fd2e3f9a 100644 --- a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsContacts.html +++ b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsContacts.html @@ -36,9 +36,8 @@
- +
@@ -55,10 +54,10 @@
- +
- + \ No newline at end of file diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsCustom.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsCustom.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsCustom.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsCustom.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFilters.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFilters.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFilters.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFilters.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionDiscard.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionDiscard.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionDiscard.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionDiscard.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionForward.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionForward.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionForward.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionForward.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionMoveToFolder.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionMoveToFolder.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionMoveToFolder.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionMoveToFolder.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionNone.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionNone.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionNone.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionNone.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionReject.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionReject.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionReject.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionReject.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionVacation.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionVacation.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersActionVacation.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersActionVacation.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersConditionDefault.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersConditionDefault.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersConditionDefault.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersConditionDefault.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersConditionMore.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersConditionMore.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersConditionMore.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersConditionMore.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersConditionSize.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersConditionSize.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFiltersConditionSize.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFiltersConditionSize.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFolderItem.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFolderItem.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFolderItem.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFolderItem.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFolders.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFolders.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsFolders.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsFolders.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsGeneral.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsGeneral.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsGeneral.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsGeneral.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsMenu.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsMenu.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsMenu.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsMenu.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsOpenPGP.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsOpenPGP.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsOpenPGP.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsOpenPGP.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsPane.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsPane.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsPane.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsPane.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsSecurity.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsSecurity.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsSecurity.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsSecurity.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsSocial.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsSocial.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsSocial.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsSocial.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsTemplates.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsTemplates.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsTemplates.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsTemplates.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SettingsThemes.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SettingsThemes.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SettingsThemes.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SettingsThemes.html diff --git a/app/rainloop/v/1.14.0/app/templates/Views/User/SystemDropDown.html b/app/rainloop/v/1.15.0/app/templates/Views/User/SystemDropDown.html similarity index 100% rename from app/rainloop/v/1.14.0/app/templates/Views/User/SystemDropDown.html rename to app/rainloop/v/1.15.0/app/templates/Views/User/SystemDropDown.html diff --git a/app/rainloop/v/1.14.0/check.php b/app/rainloop/v/1.15.0/check.php similarity index 100% rename from app/rainloop/v/1.14.0/check.php rename to app/rainloop/v/1.15.0/check.php diff --git a/app/rainloop/v/1.14.0/include.php b/app/rainloop/v/1.15.0/include.php similarity index 89% rename from app/rainloop/v/1.14.0/include.php rename to app/rainloop/v/1.15.0/include.php index 5b51731d..9d7fdc2e 100644 --- a/app/rainloop/v/1.14.0/include.php +++ b/app/rainloop/v/1.15.0/include.php @@ -124,15 +124,30 @@ unset($sCheckName, $sCheckFilePath, $sCheckFolder, $sTest); } - if (false === $sSalt) - { - // random salt - $sSalt = '<'.'?php //' - .md5(microtime(true).rand(1000, 5000)) - .md5(microtime(true).rand(5000, 9999)) - .md5(microtime(true).rand(1000, 5000)); + if (false === $sSalt) { + if (function_exists('random_bytes')) + { // secure random salt + try + { + $sSalt = bin2hex(random_bytes(48)); + } + catch (\Exception $oException) + { + $sSalt = false; + } + } + if ((false === $sSalt) && (function_exists('openssl_random_pseudo_bytes'))) + { // not-quite as secure random salt + $sSalt = bin2hex(openssl_random_pseudo_bytes(48)); + } + if (false === $sSalt) + { // pseudo-random salt + $sSalt = md5(microtime(true).rand(1000, 5000)) + .md5(microtime(true).rand(5000, 9999)) + .md5(microtime(true).rand(1000, 5000)); + } - @file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', $sSalt); + @file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', '<'.'?php //'.$sSalt); } define('APP_SALT', md5($sSalt.APP_PRIVATE_DATA_NAME.$sSalt)); diff --git a/app/rainloop/v/1.14.0/index.php b/app/rainloop/v/1.15.0/index.php similarity index 100% rename from app/rainloop/v/1.14.0/index.php rename to app/rainloop/v/1.15.0/index.php diff --git a/app/rainloop/v/1.14.0/index.php.root b/app/rainloop/v/1.15.0/index.php.root similarity index 89% rename from app/rainloop/v/1.14.0/index.php.root rename to app/rainloop/v/1.15.0/index.php.root index 91faf80f..2dfa4e7f 100644 --- a/app/rainloop/v/1.14.0/index.php.root +++ b/app/rainloop/v/1.15.0/index.php.root @@ -2,7 +2,7 @@ if (!defined('APP_VERSION')) { - define('APP_VERSION', '1.14.0'); + define('APP_VERSION', '1.15.0'); define('APP_VERSION_TYPE', 'community'); define('APP_INDEX_ROOT_FILE', __FILE__); define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/')); diff --git a/app/rainloop/v/1.14.0/static/android-icon.png b/app/rainloop/v/1.15.0/static/android-icon.png similarity index 100% rename from app/rainloop/v/1.14.0/static/android-icon.png rename to app/rainloop/v/1.15.0/static/android-icon.png diff --git a/app/rainloop/v/1.14.0/static/apple-touch-icon.png b/app/rainloop/v/1.15.0/static/apple-touch-icon.png similarity index 100% rename from app/rainloop/v/1.14.0/static/apple-touch-icon.png rename to app/rainloop/v/1.15.0/static/apple-touch-icon.png diff --git a/app/rainloop/v/1.14.0/static/browsers/chrome.gif b/app/rainloop/v/1.15.0/static/browsers/chrome.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/browsers/chrome.gif rename to app/rainloop/v/1.15.0/static/browsers/chrome.gif diff --git a/app/rainloop/v/1.14.0/static/browsers/firefox.gif b/app/rainloop/v/1.15.0/static/browsers/firefox.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/browsers/firefox.gif rename to app/rainloop/v/1.15.0/static/browsers/firefox.gif diff --git a/app/rainloop/v/1.14.0/static/browsers/opera.gif b/app/rainloop/v/1.15.0/static/browsers/opera.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/browsers/opera.gif rename to app/rainloop/v/1.15.0/static/browsers/opera.gif diff --git a/app/rainloop/v/1.14.0/static/browsers/safari.gif b/app/rainloop/v/1.15.0/static/browsers/safari.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/browsers/safari.gif rename to app/rainloop/v/1.15.0/static/browsers/safari.gif diff --git a/app/rainloop/v/1.14.0/static/ckeditor/FIXES.txt b/app/rainloop/v/1.15.0/static/ckeditor/FIXES.txt similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/FIXES.txt rename to app/rainloop/v/1.15.0/static/ckeditor/FIXES.txt diff --git a/app/rainloop/v/1.14.0/static/ckeditor/build-config.js b/app/rainloop/v/1.15.0/static/ckeditor/build-config.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/build-config.js rename to app/rainloop/v/1.15.0/static/ckeditor/build-config.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/ckeditor.js b/app/rainloop/v/1.15.0/static/ckeditor/ckeditor.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/ckeditor.js rename to app/rainloop/v/1.15.0/static/ckeditor/ckeditor.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/ckeditor.orig.js b/app/rainloop/v/1.15.0/static/ckeditor/ckeditor.orig.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/ckeditor.orig.js rename to app/rainloop/v/1.15.0/static/ckeditor/ckeditor.orig.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/config.js b/app/rainloop/v/1.15.0/static/ckeditor/config.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/config.js rename to app/rainloop/v/1.15.0/static/ckeditor/config.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/contents.css b/app/rainloop/v/1.15.0/static/ckeditor/contents.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/contents.css rename to app/rainloop/v/1.15.0/static/ckeditor/contents.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/af.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/af.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/af.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/af.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ar.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ar.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ar.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ar.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/az.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/az.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/az.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/az.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/bg.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/bg.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/bg.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/bg.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/bn.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/bn.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/bn.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/bn.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/bs.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/bs.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/bs.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/bs.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ca.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ca.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ca.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ca.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/cs.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/cs.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/cs.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/cs.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/cy.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/cy.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/cy.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/cy.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/da.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/da.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/da.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/da.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/de-ch.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/de-ch.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/de-ch.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/de-ch.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/de.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/de.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/de.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/de.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/el.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/el.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/el.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/el.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/en-au.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/en-au.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/en-au.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/en-au.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/en-ca.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/en-ca.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/en-ca.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/en-ca.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/en-gb.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/en-gb.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/en-gb.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/en-gb.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/en.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/en.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/en.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/en.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/eo.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/eo.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/eo.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/eo.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/es.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/es.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/es.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/es.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/et.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/et.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/et.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/et.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/eu.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/eu.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/eu.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/eu.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/fa.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/fa.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/fa.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/fa.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/fi.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/fi.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/fi.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/fi.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/fo.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/fo.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/fo.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/fo.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/fr-ca.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/fr-ca.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/fr-ca.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/fr-ca.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/fr.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/fr.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/fr.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/fr.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/gl.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/gl.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/gl.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/gl.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/gu.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/gu.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/gu.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/gu.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/he.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/he.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/he.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/he.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/hi.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/hi.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/hi.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/hi.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/hr.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/hr.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/hr.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/hr.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/hu.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/hu.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/hu.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/hu.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/id.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/id.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/id.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/id.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/is.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/is.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/is.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/is.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/it.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/it.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/it.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/it.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ja.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ja.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ja.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ja.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ka.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ka.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ka.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ka.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/km.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/km.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/km.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/km.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ko.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ko.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ko.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ko.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ku.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ku.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ku.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ku.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/lt.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/lt.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/lt.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/lt.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/lv.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/lv.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/lv.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/lv.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/mk.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/mk.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/mk.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/mk.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/mn.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/mn.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/mn.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/mn.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ms.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ms.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ms.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ms.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/nb.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/nb.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/nb.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/nb.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/nl.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/nl.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/nl.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/nl.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/no.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/no.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/no.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/no.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/oc.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/oc.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/oc.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/oc.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/pl.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/pl.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/pl.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/pl.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/pt-br.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/pt-br.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/pt-br.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/pt-br.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/pt.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/pt.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/pt.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/pt.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ro.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ro.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ro.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ro.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ru.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ru.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ru.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ru.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/si.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/si.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/si.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/si.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/sk.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/sk.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/sk.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/sk.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/sl.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/sl.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/sl.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/sl.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/sq.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/sq.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/sq.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/sq.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/sr-latn.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/sr-latn.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/sr-latn.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/sr-latn.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/sr.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/sr.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/sr.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/sr.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/sv.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/sv.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/sv.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/sv.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/th.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/th.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/th.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/th.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/tr.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/tr.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/tr.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/tr.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/tt.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/tt.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/tt.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/tt.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/ug.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/ug.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/ug.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/ug.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/uk.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/uk.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/uk.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/uk.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/vi.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/vi.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/vi.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/vi.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/zh-cn.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/zh-cn.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/zh-cn.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/zh-cn.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/lang/zh.js b/app/rainloop/v/1.15.0/static/ckeditor/lang/zh.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/lang/zh.js rename to app/rainloop/v/1.15.0/static/ckeditor/lang/zh.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/about/dialogs/about.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/about/dialogs/about.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/about/dialogs/about.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/about/dialogs/about.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/base64image/LICENSE.md b/app/rainloop/v/1.15.0/static/ckeditor/plugins/base64image/LICENSE.md similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/base64image/LICENSE.md rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/base64image/LICENSE.md diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/base64image/README.md b/app/rainloop/v/1.15.0/static/ckeditor/plugins/base64image/README.md similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/base64image/README.md rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/base64image/README.md diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/base64image/dialogs/base64image.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/base64image/dialogs/base64image.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/base64image/dialogs/base64image.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/base64image/dialogs/base64image.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/clipboard/dialogs/paste.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/clipboard/dialogs/paste.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/clipboard/dialogs/paste.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/clipboard/dialogs/paste.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.css b/app/rainloop/v/1.15.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.css rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/colordialog/dialogs/colordialog.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/dialog/dialogDefinition.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/dialog/dialogDefinition.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/dialog/dialogDefinition.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/dialog/dialogDefinition.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/icons.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/icons.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/icons.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/icons.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/icons_hidpi.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/icons_hidpi.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/icons_hidpi.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/icons_hidpi.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/image/dialogs/image.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/image/dialogs/image.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/image/dialogs/image.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/image/dialogs/image.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/image/images/noimage.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/image/images/noimage.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/image/images/noimage.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/image/images/noimage.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/image2/dialogs/image2.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/image2/dialogs/image2.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/image2/dialogs/image2.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/image2/dialogs/image2.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/link/dialogs/anchor.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/link/dialogs/anchor.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/link/dialogs/anchor.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/link/dialogs/anchor.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/link/dialogs/link.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/link/dialogs/link.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/link/dialogs/link.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/link/dialogs/link.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/link/images/anchor.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/link/images/anchor.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/link/images/anchor.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/link/images/anchor.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/link/images/hidpi/anchor.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/link/images/hidpi/anchor.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/link/images/hidpi/anchor.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/link/images/hidpi/anchor.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/hidpi/plain-rtl.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/hidpi/plain-rtl.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/hidpi/plain-rtl.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/hidpi/plain-rtl.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/hidpi/plain.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/hidpi/plain.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/hidpi/plain.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/hidpi/plain.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/plain-rtl.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/plain-rtl.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/plain-rtl.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/plain-rtl.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/plain.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/plain.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/icons/plain.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/icons/plain.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/plugin.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/plugin.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/plain/plugin.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/plain/plugin.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/CHANGELOG.md b/app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/CHANGELOG.md similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/CHANGELOG.md rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/CHANGELOG.md diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/Gruntfile.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/Gruntfile.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/Gruntfile.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/Gruntfile.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/LICENSE b/app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/LICENSE similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/LICENSE rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/LICENSE diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/README.md b/app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/README.md similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/README.md rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/README.md diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/package.json b/app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/package.json similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/package.json rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/package.json diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/template.jst b/app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/template.jst similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/quicktable/template.jst rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/quicktable/template.jst diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/signature/plugin.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/signature/plugin.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/signature/plugin.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/signature/plugin.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/table/dialogs/table.js b/app/rainloop/v/1.15.0/static/ckeditor/plugins/table/dialogs/table.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/table/dialogs/table.js rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/table/dialogs/table.js diff --git a/app/rainloop/v/1.14.0/static/ckeditor/plugins/widget/images/handle.png b/app/rainloop/v/1.15.0/static/ckeditor/plugins/widget/images/handle.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/plugins/widget/images/handle.png rename to app/rainloop/v/1.15.0/static/ckeditor/plugins/widget/images/handle.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog_ie.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog_ie.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog_ie.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog_ie.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog_ie8.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog_ie8.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog_ie8.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog_ie8.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog_iequirks.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog_iequirks.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/dialog_iequirks.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/dialog_iequirks.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_gecko.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_gecko.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_gecko.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_gecko.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_ie.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_ie.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_ie.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_ie.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_ie8.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_ie8.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_ie8.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_ie8.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_iequirks.css b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_iequirks.css similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/editor_iequirks.css rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/editor_iequirks.css diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/icons.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/icons.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/icons.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/icons.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/icons_hidpi.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/icons_hidpi.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/icons_hidpi.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/icons_hidpi.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/arrow.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/arrow.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/arrow.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/arrow.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/close.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/close.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/close.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/close.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/close.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/close.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/close.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/close.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/lock.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/refresh.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/refresh.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/hidpi/refresh.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/hidpi/refresh.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/lock-open.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/lock-open.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/lock-open.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/lock-open.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/lock.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/lock.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/lock.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/lock.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/refresh.png b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/refresh.png similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/refresh.png rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/refresh.png diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/spinner.gif b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/spinner.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/images/spinner.gif rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/images/spinner.gif diff --git a/app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/readme.md b/app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/readme.md similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/skins/moono-lisa/readme.md rename to app/rainloop/v/1.15.0/static/ckeditor/skins/moono-lisa/readme.md diff --git a/app/rainloop/v/1.14.0/static/ckeditor/styles.js b/app/rainloop/v/1.15.0/static/ckeditor/styles.js similarity index 100% rename from app/rainloop/v/1.14.0/static/ckeditor/styles.js rename to app/rainloop/v/1.15.0/static/ckeditor/styles.js diff --git a/app/rainloop/v/1.14.0/static/css/app.css b/app/rainloop/v/1.15.0/static/css/app.css similarity index 99% rename from app/rainloop/v/1.14.0/static/css/app.css rename to app/rainloop/v/1.15.0/static/css/app.css index 2789b06d..068f4711 100644 --- a/app/rainloop/v/1.14.0/static/css/app.css +++ b/app/rainloop/v/1.15.0/static/css/app.css @@ -5268,9 +5268,9 @@ input[type="submit"].btn.btn-mini { background-clip: padding-box; } .modal.fade { - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; + -webkit-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; top: -25%; } .modal.fade.in { diff --git a/app/rainloop/v/1.14.0/static/css/app.min.css b/app/rainloop/v/1.15.0/static/css/app.min.css similarity index 100% rename from app/rainloop/v/1.14.0/static/css/app.min.css rename to app/rainloop/v/1.15.0/static/css/app.min.css diff --git a/app/rainloop/v/1.14.0/static/css/default-skin.png b/app/rainloop/v/1.15.0/static/css/default-skin.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/default-skin.png rename to app/rainloop/v/1.15.0/static/css/default-skin.png diff --git a/app/rainloop/v/1.14.0/static/css/default-skin.svg b/app/rainloop/v/1.15.0/static/css/default-skin.svg similarity index 100% rename from app/rainloop/v/1.14.0/static/css/default-skin.svg rename to app/rainloop/v/1.15.0/static/css/default-skin.svg diff --git a/app/rainloop/v/1.14.0/static/css/flags.png b/app/rainloop/v/1.15.0/static/css/flags.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/flags.png rename to app/rainloop/v/1.15.0/static/css/flags.png diff --git a/app/rainloop/v/1.14.0/static/css/fonts/lg.eot b/app/rainloop/v/1.15.0/static/css/fonts/lg.eot similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/lg.eot rename to app/rainloop/v/1.15.0/static/css/fonts/lg.eot diff --git a/app/rainloop/v/1.14.0/static/css/fonts/lg.svg b/app/rainloop/v/1.15.0/static/css/fonts/lg.svg similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/lg.svg rename to app/rainloop/v/1.15.0/static/css/fonts/lg.svg diff --git a/app/rainloop/v/1.14.0/static/css/fonts/lg.ttf b/app/rainloop/v/1.15.0/static/css/fonts/lg.ttf similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/lg.ttf rename to app/rainloop/v/1.15.0/static/css/fonts/lg.ttf diff --git a/app/rainloop/v/1.14.0/static/css/fonts/lg.woff b/app/rainloop/v/1.15.0/static/css/fonts/lg.woff similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/lg.woff rename to app/rainloop/v/1.15.0/static/css/fonts/lg.woff diff --git a/app/rainloop/v/1.14.0/static/css/fonts/rainloop.eot b/app/rainloop/v/1.15.0/static/css/fonts/rainloop.eot similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/rainloop.eot rename to app/rainloop/v/1.15.0/static/css/fonts/rainloop.eot diff --git a/app/rainloop/v/1.14.0/static/css/fonts/rainloop.svg b/app/rainloop/v/1.15.0/static/css/fonts/rainloop.svg similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/rainloop.svg rename to app/rainloop/v/1.15.0/static/css/fonts/rainloop.svg diff --git a/app/rainloop/v/1.14.0/static/css/fonts/rainloop.ttf b/app/rainloop/v/1.15.0/static/css/fonts/rainloop.ttf similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/rainloop.ttf rename to app/rainloop/v/1.15.0/static/css/fonts/rainloop.ttf diff --git a/app/rainloop/v/1.14.0/static/css/fonts/rainloop.woff b/app/rainloop/v/1.15.0/static/css/fonts/rainloop.woff similarity index 100% rename from app/rainloop/v/1.14.0/static/css/fonts/rainloop.woff rename to app/rainloop/v/1.15.0/static/css/fonts/rainloop.woff diff --git a/app/rainloop/v/1.14.0/static/css/images/editor.png b/app/rainloop/v/1.15.0/static/css/images/editor.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/editor.png rename to app/rainloop/v/1.15.0/static/css/images/editor.png diff --git a/app/rainloop/v/1.14.0/static/css/images/empty-contact.png b/app/rainloop/v/1.15.0/static/css/images/empty-contact.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/empty-contact.png rename to app/rainloop/v/1.15.0/static/css/images/empty-contact.png diff --git a/app/rainloop/v/1.14.0/static/css/images/grey.png b/app/rainloop/v/1.15.0/static/css/images/grey.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/grey.png rename to app/rainloop/v/1.15.0/static/css/images/grey.png diff --git a/app/rainloop/v/1.14.0/static/css/images/icom-message-notification.png b/app/rainloop/v/1.15.0/static/css/images/icom-message-notification.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/icom-message-notification.png rename to app/rainloop/v/1.15.0/static/css/images/icom-message-notification.png diff --git a/app/rainloop/v/1.14.0/static/css/images/loading.gif b/app/rainloop/v/1.15.0/static/css/images/loading.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/loading.gif rename to app/rainloop/v/1.15.0/static/css/images/loading.gif diff --git a/app/rainloop/v/1.14.0/static/css/images/rainloop-logo.png b/app/rainloop/v/1.15.0/static/css/images/rainloop-logo.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/rainloop-logo.png rename to app/rainloop/v/1.15.0/static/css/images/rainloop-logo.png diff --git a/app/rainloop/v/1.14.0/static/css/images/sync.gif b/app/rainloop/v/1.15.0/static/css/images/sync.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/sync.gif rename to app/rainloop/v/1.15.0/static/css/images/sync.gif diff --git a/app/rainloop/v/1.14.0/static/css/images/sync.png b/app/rainloop/v/1.15.0/static/css/images/sync.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/sync.png rename to app/rainloop/v/1.15.0/static/css/images/sync.png diff --git a/app/rainloop/v/1.14.0/static/css/images/white.png b/app/rainloop/v/1.15.0/static/css/images/white.png similarity index 100% rename from app/rainloop/v/1.14.0/static/css/images/white.png rename to app/rainloop/v/1.15.0/static/css/images/white.png diff --git a/app/rainloop/v/1.14.0/static/css/img/loading.gif b/app/rainloop/v/1.15.0/static/css/img/loading.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/css/img/loading.gif rename to app/rainloop/v/1.15.0/static/css/img/loading.gif diff --git a/app/rainloop/v/1.14.0/static/css/loading.gif b/app/rainloop/v/1.15.0/static/css/loading.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/css/loading.gif rename to app/rainloop/v/1.15.0/static/css/loading.gif diff --git a/app/rainloop/v/1.14.0/static/css/preloader.gif b/app/rainloop/v/1.15.0/static/css/preloader.gif similarity index 100% rename from app/rainloop/v/1.14.0/static/css/preloader.gif rename to app/rainloop/v/1.15.0/static/css/preloader.gif diff --git a/app/rainloop/v/1.14.0/static/css/social.css b/app/rainloop/v/1.15.0/static/css/social.css similarity index 100% rename from app/rainloop/v/1.14.0/static/css/social.css rename to app/rainloop/v/1.15.0/static/css/social.css diff --git a/app/rainloop/v/1.14.0/static/css/social.min.css b/app/rainloop/v/1.15.0/static/css/social.min.css similarity index 100% rename from app/rainloop/v/1.14.0/static/css/social.min.css rename to app/rainloop/v/1.15.0/static/css/social.min.css diff --git a/app/rainloop/v/1.14.0/static/favicon-light.ico b/app/rainloop/v/1.15.0/static/favicon-light.ico similarity index 100% rename from app/rainloop/v/1.14.0/static/favicon-light.ico rename to app/rainloop/v/1.15.0/static/favicon-light.ico diff --git a/app/rainloop/v/1.14.0/static/favicon-light.png b/app/rainloop/v/1.15.0/static/favicon-light.png similarity index 100% rename from app/rainloop/v/1.14.0/static/favicon-light.png rename to app/rainloop/v/1.15.0/static/favicon-light.png diff --git a/app/rainloop/v/1.14.0/static/favicon.ico b/app/rainloop/v/1.15.0/static/favicon.ico similarity index 100% rename from app/rainloop/v/1.14.0/static/favicon.ico rename to app/rainloop/v/1.15.0/static/favicon.ico diff --git a/app/rainloop/v/1.14.0/static/favicon.png b/app/rainloop/v/1.15.0/static/favicon.png similarity index 100% rename from app/rainloop/v/1.14.0/static/favicon.png rename to app/rainloop/v/1.15.0/static/favicon.png diff --git a/app/rainloop/v/1.14.0/static/js/admin.js b/app/rainloop/v/1.15.0/static/js/admin.js similarity index 51% rename from app/rainloop/v/1.14.0/static/js/admin.js rename to app/rainloop/v/1.15.0/static/js/admin.js index ff3ddfb9..3d6fa919 100644 --- a/app/rainloop/v/1.14.0/static/js/admin.js +++ b/app/rainloop/v/1.15.0/static/js/admin.js @@ -82,7 +82,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 534); +/******/ return __webpack_require__(__webpack_require__.s = 540); /******/ }) /************************************************************************/ /******/ ([ @@ -661,35 +661,32 @@ var Notification = { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.reverse */ 339); -/* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 138); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Opentip */ 210); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! pikaday */ 211); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0); - +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 139); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $ */ 8); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Opentip */ 213); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 214); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Enums */ 0); @@ -705,8 +702,8 @@ var Notification = { -var ko = window__WEBPACK_IMPORTED_MODULE_9___default.a.ko, - $win = $__WEBPACK_IMPORTED_MODULE_11___default()(window__WEBPACK_IMPORTED_MODULE_9___default.a), +var ko = window__WEBPACK_IMPORTED_MODULE_8___default.a.ko, + $win = $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___default.a), fDisposalTooltipHelper = function fDisposalTooltipHelper(element) { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { if (element && element.__opentip) { @@ -717,13 +714,13 @@ var ko = window__WEBPACK_IMPORTED_MODULE_9___default.a.ko, ko.bindingHandlers.updateWidth = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), fInit = function fInit() { fValue($el.width()); - window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { fValue($el.width()); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time500ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms); }; $win.on('resize', fInit); @@ -738,7 +735,7 @@ ko.bindingHandlers.editor = { var editor = null; var fValue = fValueAccessor(), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 207).default, + HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 210).default, fUpdateEditorValue = function fUpdateEditorValue() { if (fValue && fValue.__editor) { fValue.__editor.setHtmlOrPlain(fValue()); @@ -764,26 +761,26 @@ ko.bindingHandlers.editor = { }; ko.bindingHandlers.json = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(window__WEBPACK_IMPORTED_MODULE_9___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); }, update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(window__WEBPACK_IMPORTED_MODULE_9___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.scrollerShadows = { init: function init(element) { var limit = 8, - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), - cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, - fFunc = ___WEBPACK_IMPORTED_MODULE_10___default.a.throttle(function () { + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), + cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, + fFunc = ___WEBPACK_IMPORTED_MODULE_9___default.a.throttle(function () { $el.toggleClass('scroller-shadow-top', limit < cont.scrollTop).toggleClass('scroller-shadow-bottom', cont.scrollTop + limit < cont.scrollHeight - cont.clientHeight); }, 100); if (cont) { - $__WEBPACK_IMPORTED_MODULE_11___default()(cont).on('scroll resize', fFunc); + $__WEBPACK_IMPORTED_MODULE_10___default()(cont).on('scroll resize', fFunc); $win.on('resize', fFunc); ko.utils.domNodeDisposal.addDisposeCallback(cont, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(cont).off(); + $__WEBPACK_IMPORTED_MODULE_10___default()(cont).off(); $win.off('resize', fFunc); }); } @@ -793,8 +790,8 @@ ko.bindingHandlers.pikaday = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { ko.bindingHandlers.textInput.init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); - if (pikaday__WEBPACK_IMPORTED_MODULE_13___default.a) { - element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_13___default.a({ + if (pikaday__WEBPACK_IMPORTED_MODULE_12___default.a) { + element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_12___default.a({ field: element }); } @@ -802,7 +799,7 @@ ko.bindingHandlers.pikaday = { }; ko.bindingHandlers.visibleAnimated = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); $el.addClass('rl-animated-inited'); if (ko.unwrap(fValueAccessor())) { @@ -812,12 +809,12 @@ ko.bindingHandlers.visibleAnimated = { } }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if (ko.unwrap(fValueAccessor())) { $el.addClass('rl-animated-hidden').show(); - ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () { $el.removeClass('rl-animated-hidden'); }, 10); } else { @@ -827,15 +824,15 @@ ko.bindingHandlers.visibleAnimated = { }; ko.bindingHandlers.tooltip = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), Globals = __webpack_require__(/*! Common/Globals */ 6); if (!Globals.bMobileDevice || isMobile) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"](element, { + var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); + element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, { 'style': 'rainloopTip', 'element': element, 'tipJoint': $el.data('tooltip-join') || 'bottom' @@ -884,14 +881,14 @@ ko.bindingHandlers.tooltip = { } }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), Globals = __webpack_require__(/*! Common/Globals */ 6); if ((!Globals.bMobileDevice || isMobile) && element.__opentip) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); + var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); if (sValue) { element.__opentip.setContent(isI18N ? __webpack_require__(/*! Common/Translator */ 9).i18n(sValue) : sValue); @@ -909,8 +906,8 @@ ko.bindingHandlers.tooltip = { }; ko.bindingHandlers.tooltipErrorTip = { init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"](element, { + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); + element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, { style: 'rainloopErrorTip', hideOn: 'mouseout click', element: element, @@ -919,7 +916,7 @@ ko.bindingHandlers.tooltipErrorTip = { element.__opentip.deactivate(); - $__WEBPACK_IMPORTED_MODULE_11___default()(window__WEBPACK_IMPORTED_MODULE_9___default.a.document).on('click', function () { + $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___default.a.document).on('click', function () { if (element && element.__opentip) { element.__opentip.hide(); } @@ -927,9 +924,9 @@ ko.bindingHandlers.tooltipErrorTip = { fDisposalTooltipHelper(element); }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), - value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), + value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), openTips = element.__opentip; if (openTips) { @@ -938,7 +935,7 @@ ko.bindingHandlers.tooltipErrorTip = { openTips.deactivate(); openTips.setContent(''); } else { - ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () { if ($el.is(':visible')) { openTips.setContent(value); openTips.activate(); @@ -948,7 +945,7 @@ ko.bindingHandlers.tooltipErrorTip = { openTips.deactivate(); openTips.setContent(''); } - }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time100ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time100ms); } } } @@ -958,8 +955,8 @@ ko.bindingHandlers.registrateBootstrapDropdown = { var Globals = __webpack_require__(/*! Common/Globals */ 6); if (Globals && Globals.data.aBootstrapDropdowns) { - Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_11___default()(element)); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).click(function () { + Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_10___default()(element)); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).click(function () { __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); }); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => { // }); @@ -969,13 +966,13 @@ ko.bindingHandlers.registrateBootstrapDropdown = { ko.bindingHandlers.openDropdownTrigger = { update: function update(element, fValueAccessor) { if (ko.unwrap(fValueAccessor())) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if (!$el.hasClass('open')) { - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); } - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.dropdown-toggle').focus(); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.dropdown-toggle').focus(); __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); @@ -985,16 +982,16 @@ ko.bindingHandlers.openDropdownTrigger = { }; ko.bindingHandlers.dropdownCloser = { init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).closest('.dropdown').on('click', '.e-item', function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).dropdown('toggle'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).closest('.dropdown').on('click', '.e-item', function () { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).dropdown('toggle'); }); } }; ko.bindingHandlers.popover = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).popover(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover(ko.unwrap(fValueAccessor())); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).popover('destroy'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover('destroy'); }); } }; @@ -1004,13 +1001,13 @@ ko.bindingHandlers.csstext.init = ko.bindingHandlers.csstext.update = function ( if (element && element.styleSheet && 'undefined' !== typeof element.styleSheet.cssText) { element.styleSheet.cssText = ko.unwrap(fValueAccessor()); } else { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.resizecrop = { init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('resizecrop').resizecrop({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('resizecrop').resizecrop({ 'width': '100', 'height': '100', 'wrapperCSS': { @@ -1020,7 +1017,7 @@ ko.bindingHandlers.resizecrop = { }, update: function update(element, fValueAccessor) { fValueAccessor()(); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).resizecrop({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).resizecrop({ 'width': '100', 'height': '100' }); @@ -1028,7 +1025,7 @@ ko.bindingHandlers.resizecrop = { }; ko.bindingHandlers.onKeyDown = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keydown.koOnKeyDown', function (event) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnKeyDown', function (event) { if (event) { return fValueAccessor().call(viewModel, event); } @@ -1036,66 +1033,66 @@ ko.bindingHandlers.onKeyDown = { return true; }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keydown.koOnKeyDown'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnKeyDown'); }); } }; ko.bindingHandlers.onEnter = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keypress.koOnEnter', function (event) { - if (event && 13 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).trigger('change'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keypress.koOnEnter', function (event) { + if (event && 13 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change'); fValueAccessor().call(viewModel); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keypress.koOnEnter'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keypress.koOnEnter'); }); } }; ko.bindingHandlers.onSpace = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keyup.koOnSpace', function (event) { - if (event && 32 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnSpace', function (event) { + if (event && 32 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { fValueAccessor().call(viewModel, event); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keyup.koOnSpace'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnSpace'); }); } }; ko.bindingHandlers.onTab = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keydown.koOnTab', function (event) { - if (event && 9 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnTab', function (event) { + if (event && 9 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { return fValueAccessor().call(viewModel, !!event.shiftKey); } return true; }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keydown.koOnTab'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnTab'); }); } }; ko.bindingHandlers.onEsc = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keyup.koOnEsc', function (event) { - if (event && 27 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).trigger('change'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnEsc', function (event) { + if (event && 27 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change'); fValueAccessor().call(viewModel); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keyup.koOnEsc'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnEsc'); }); } }; ko.bindingHandlers.clickOnTrue = { update: function update(element, fValueAccessor) { if (ko.unwrap(fValueAccessor())) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).click(); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).click(); } } }; @@ -1106,7 +1103,7 @@ ko.bindingHandlers.modal = { var Globals = __webpack_require__(/*! Common/Globals */ 6), Utils = __webpack_require__(/*! Common/Utils */ 2); - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context = $__WEBPACK_IMPORTED_MODULE_11___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context = $__WEBPACK_IMPORTED_MODULE_10___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ 'keyboard': false, 'show': ko.unwrap(fValueAccessor()) }).on('shown.koModal', Utils.windowResizeCallback)).call(_context, '.close').on('click.koModal', function () { @@ -1116,29 +1113,29 @@ ko.bindingHandlers.modal = { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { var _context2; - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); }); }, update: function update(element, fValueAccessor) { var Globals = __webpack_require__(/*! Common/Globals */ 6); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); if (Globals.$html.hasClass('rl-anim')) { Globals.$html.addClass('rl-modal-animation'); - ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () { Globals.$html.removeClass('rl-modal-animation'); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time500ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms); } } }; ko.bindingHandlers.moment = { init: function init(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); }, update: function update(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_11___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.i18nInit = { @@ -1160,17 +1157,17 @@ ko.bindingHandlers.i18nUpdate = { }; ko.bindingHandlers.link = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).attr('href', ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('href', ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.title = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).attr('title', ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('title', ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.textF = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.initDom = { @@ -1181,9 +1178,9 @@ ko.bindingHandlers.initDom = { ko.bindingHandlers.initFixedTrigger = { init: function init(element, fValueAccessor) { var values = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), top = values[1] || 0; - var $container = $__WEBPACK_IMPORTED_MODULE_11___default()(values[0] || null); + var $container = $__WEBPACK_IMPORTED_MODULE_10___default()(values[0] || null); $container = $container[0] ? $container : null; if ($container) { @@ -1200,7 +1197,7 @@ ko.bindingHandlers.initFixedTrigger = { ko.bindingHandlers.initResizeTrigger = { init: function init(element, fValueAccessor) { var values = ko.unwrap(fValueAccessor()); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).css({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).css({ 'height': values[1], 'min-height': values[1] }); @@ -1212,7 +1209,7 @@ ko.bindingHandlers.initResizeTrigger = { var value = Utils.pInt(values[1]), size = 0, - offset = $__WEBPACK_IMPORTED_MODULE_11___default()(oElement).offset().top; + offset = $__WEBPACK_IMPORTED_MODULE_10___default()(oElement).offset().top; if (0 < offset) { offset += Utils.pInt(values[2]); @@ -1222,7 +1219,7 @@ ko.bindingHandlers.initResizeTrigger = { value = size; } - $__WEBPACK_IMPORTED_MODULE_11___default()(oElement).css({ + $__WEBPACK_IMPORTED_MODULE_10___default()(oElement).css({ 'height': value, 'min-height': value }); @@ -1231,7 +1228,7 @@ ko.bindingHandlers.initResizeTrigger = { }; ko.bindingHandlers.appendDom = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); } }; ko.bindingHandlers.draggable = { @@ -1260,12 +1257,12 @@ ko.bindingHandlers.draggable = { if (droppableSelector) { conf.drag = function (event) { - $__WEBPACK_IMPORTED_MODULE_11___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this), + $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () { + var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this), // eslint-disable-line no-invalid-this offset = $this.offset(), bottomPos = offset.top + $this.height(); - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearInterval($this.data('timerScroll')); + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearInterval($this.data('timerScroll')); $this.data('timerScroll', false); if (event.pageX >= offset.left && event.pageX <= offset.left + $this.width()) { @@ -1275,7 +1272,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_9___default.a.setInterval(moveUp, 10)); + $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveUp, 10)); moveUp(); } @@ -1285,7 +1282,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_9___default.a.setInterval(moveDown, 10)); + $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveDown, 10)); moveDown(); } } @@ -1293,10 +1290,10 @@ ko.bindingHandlers.draggable = { }; conf.stop = function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this); // eslint-disable-line no-invalid-this + $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () { + var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this); // eslint-disable-line no-invalid-this - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearInterval($this.data('timerScroll')); + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearInterval($this.data('timerScroll')); $this.data('timerScroll', false); }); }; @@ -1306,11 +1303,11 @@ ko.bindingHandlers.draggable = { return fValueAccessor()(event && event.target ? ko.dataFor(event.target) : null); }; - $__WEBPACK_IMPORTED_MODULE_11___default()(element).draggable(conf).on('mousedown.koDraggable', function () { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).draggable(conf).on('mousedown.koDraggable', function () { Utils.removeInFocus(); }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('mousedown.koDraggable').draggable('destroy'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('mousedown.koDraggable').draggable('destroy'); }); } } @@ -1349,9 +1346,9 @@ ko.bindingHandlers.droppable = { }; } - $__WEBPACK_IMPORTED_MODULE_11___default()(element).droppable(conf); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).droppable(conf); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).droppable('destroy'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).droppable('destroy'); }); } } @@ -1363,7 +1360,7 @@ ko.bindingHandlers.nano = { Settings = __webpack_require__(/*! Storage/Settings */ 5); if (!Globals.bDisableNanoScroll && !Settings.appSettingsGet('useNativeScrollbars')) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('nano').nanoScroller({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('nano').nanoScroller({ iOSNativeScrolling: false, preventPageScrolling: true }); @@ -1372,7 +1369,7 @@ ko.bindingHandlers.nano = { }; ko.bindingHandlers.saveTrigger = { init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); $el.data('save-trigger-type', $el.is('input[type=text],input[type=email],input[type=password],select,textarea') ? 'input' : 'custom'); if ('custom' === $el.data('save-trigger-type')) { @@ -1385,27 +1382,27 @@ ko.bindingHandlers.saveTrigger = { var _context3, _context4, _context5, _context6; var value = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if ('custom' === $el.data('save-trigger-type')) { switch (value.toString()) { case '1': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); break; case '0': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); break; case '-2': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); break; default: - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); break; } @@ -1432,8 +1429,8 @@ ko.bindingHandlers.saveTrigger = { ko.bindingHandlers.emailsTags = { init: function init(element, fValueAccessor, fAllBindingsAccessor) { var Utils = __webpack_require__(/*! Common/Utils */ 2), - EmailModel = __webpack_require__(/*! Model/Email */ 80).default, - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + EmailModel = __webpack_require__(/*! Model/Email */ 82).default, + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), fAllBindings = fAllBindingsAccessor(), fAutoCompleteSource = fAllBindings.autoCompleteSource || null, @@ -1451,20 +1448,20 @@ ko.bindingHandlers.emailsTags = { inputDelimiters: inputDelimiters, autoCompleteSource: fAutoCompleteSource, splitHook: function splitHook(value) { - var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default()(Utils).call(Utils, value); + var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default()(Utils).call(Utils, value); - if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { + if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { return EmailModel.splitEmailLine(value); } return null; }, parseHook: function parseHook(input) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, ___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, input, function (inputValue) { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, ___WEBPACK_IMPORTED_MODULE_9___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, input, function (inputValue) { var values = EmailModel.parseEmailLine(inputValue); return values.length ? values : inputValue; })), function (item) { - return ___WEBPACK_IMPORTED_MODULE_10___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; + return ___WEBPACK_IMPORTED_MODULE_9___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; }); }, change: function change(event) { @@ -1480,7 +1477,7 @@ ko.bindingHandlers.emailsTags = { } }, update: function update(element, fValueAccessor) { - var $oEl = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $oEl = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), value = ko.unwrap(fValue); @@ -1493,7 +1490,7 @@ ko.bindingHandlers.emailsTags = { }; ko.bindingHandlers.command = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var jqElement = $__WEBPACK_IMPORTED_MODULE_10___default()(element), command = fValueAccessor(); if (!command || !command.isCommand) { @@ -1507,7 +1504,7 @@ ko.bindingHandlers.command = { if (!command.canExecute) { var __realCanExecute = command.__realCanExecute; - if (___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(__realCanExecute)) { + if (___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(__realCanExecute)) { command.canExecute = ko.computed(function () { return command.enabled() && __realCanExecute.call(viewModel, viewModel); }); @@ -1522,7 +1519,7 @@ ko.bindingHandlers.command = { ko.bindingHandlers[jqElement.is('form') ? 'submit' : 'click'].init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); }, update: function update(element, fValueAccessor) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var jqElement = $__WEBPACK_IMPORTED_MODULE_10___default()(element), command = fValueAccessor(); var result = command.enabled(); jqElement.toggleClass('command-not-enabled', !result); @@ -1545,7 +1542,7 @@ ko.extenders.trimmer = function (target) { result = ko.computed({ read: target, write: function write(newValue) { - target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default()(Utils).call(Utils, newValue.toString())); + target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default()(Utils).call(Utils, newValue.toString())); } }); @@ -1660,8 +1657,8 @@ ko.extenders.falseTimeout = function (target, option) { target.iFalseTimeoutTimeout = 0; target.subscribe(function (value) { if (value) { - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearTimeout(target.iFalseTimeoutTimeout); - target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iFalseTimeoutTimeout); + target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { target(false); target.iFalseTimeoutTimeout = 0; }, __webpack_require__(/*! Common/Utils */ 2).pInt(option)); @@ -1685,8 +1682,8 @@ ko.extenders.specialThrottle = function (target, option) { target.valueForRead(bValue); } else { if (target.valueForRead()) { - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearTimeout(target.iSpecialThrottleTimeout); - target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iSpecialThrottleTimeout); + target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { target.valueForRead(false); target.iSpecialThrottleTimeout = 0; }, target.iSpecialThrottleTimeoutValue); @@ -1702,7 +1699,7 @@ ko.extenders.specialThrottle = function (target, option) { }; ko.extenders.idleTrigger = function (target) { - target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SaveSettingsStep"].Idle); + target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_13__["SaveSettingsStep"].Idle); return target; }; // functions @@ -1754,7 +1751,7 @@ ko.observable.fn.validateFunc = function (fFunc) { this.hasFuncError = ko.observable(false); - if (___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fFunc)) { + if (___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fFunc)) { this.subscribe(function (value) { _this3.hasFuncError(!fFunc(value)); }); @@ -1853,7 +1850,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResize", function() { return windowResize; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResizeCallback", function() { return windowResizeCallback; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); @@ -1863,31 +1860,31 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); /* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 208); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 211); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 113); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 159); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 162); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 209); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 212); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 138); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 139); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_18__); @@ -1896,12 +1893,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_20__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 212); +/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 215); /* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_22__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 213); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 106); +/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 216); +/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 113); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_26__["a"]; }); @@ -2518,7 +2515,7 @@ function previewMessage(_ref, body, isHtml, print) { bodyClass = isHtml ? 'html' : 'plain'; clearBqSwitcher(bodyClone); var html = bodyClone ? bodyClone.html() : ''; - doc.write(deModule(__webpack_require__(/*! Html/PreviewMessage.html */ 355)).replace('{{title}}', encodeHtml(title)).replace('{{subject}}', encodeHtml(subject)).replace('{{date}}', encodeHtml(date)).replace('{{fromCreds}}', encodeHtml(fromCreds)).replace('{{toCreds}}', encodeHtml(toCreds)).replace('{{toLabel}}', encodeHtml(toLabel)).replace('{{ccClass}}', encodeHtml(ccClass)).replace('{{ccCreds}}', encodeHtml(ccCreds)).replace('{{ccLabel}}', encodeHtml(ccLabel)).replace('{{bodyClass}}', bodyClass).replace('{{html}}', html)); + doc.write(deModule(__webpack_require__(/*! Html/PreviewMessage.html */ 361)).replace('{{title}}', encodeHtml(title)).replace('{{subject}}', encodeHtml(subject)).replace('{{date}}', encodeHtml(date)).replace('{{fromCreds}}', encodeHtml(fromCreds)).replace('{{toCreds}}', encodeHtml(toCreds)).replace('{{toLabel}}', encodeHtml(toLabel)).replace('{{ccClass}}', encodeHtml(ccClass)).replace('{{ccCreds}}', encodeHtml(ccCreds)).replace('{{ccLabel}}', encodeHtml(ccLabel)).replace('{{bodyClass}}', bodyClass).replace('{{html}}', html)); doc.close(); if (print) { @@ -3293,7 +3290,7 @@ function mailToHelper(mailToUrl, PopupComposeViewModel) { var email = mailToUrl.replace(/\?.+$/, ''), query = mailToUrl.replace(/^[^?]*\?/, ''), - EmailModel = __webpack_require__(/*! Model/Email */ 80).default; + EmailModel = __webpack_require__(/*! Model/Email */ 82).default; params = simpleQueryParser(query); @@ -3500,7 +3497,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScopeFake", function() { return keyScopeFake; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScope", function() { return keyScope; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "data", function() { return data; }); -/* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter */ 272); +/* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter */ 277); /* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__); @@ -3829,7 +3826,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 34); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__); @@ -3840,7 +3837,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! hasher */ 61); /* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(hasher__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! crossroads */ 161); +/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! crossroads */ 164); /* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Plugins */ 39); @@ -4469,13 +4466,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reload", function() { return reload; }); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_5__); @@ -4755,7 +4752,7 @@ Common_Globals__WEBPACK_IMPORTED_MODULE_11__["$html"].addClass('rl-' + (Common_G "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inheritsLoose; }); -/* harmony import */ var _core_js_object_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/create */ 256); +/* harmony import */ var _core_js_object_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/create */ 261); /* harmony import */ var _core_js_object_create__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_create__WEBPACK_IMPORTED_MODULE_0__); function _inheritsLoose(subClass, superClass) { @@ -4774,7 +4771,7 @@ function _inheritsLoose(subClass, superClass) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 319); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 325); /***/ }), /* 13 */, @@ -4833,7 +4830,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 31 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return mailBox; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); @@ -5276,7 +5273,7 @@ function mailBox(folder, page, search, threadUid) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; }); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 160); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 163); /* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); function _defineProperty(obj, key, value) { @@ -5303,7 +5300,7 @@ function _defineProperty(obj, key, value) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 340); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 345); /***/ }), /* 19 */ @@ -5314,7 +5311,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 340 /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 363); +module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 369); /***/ }), /* 20 */ @@ -5327,17 +5324,17 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-prop "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _applyDecoratedDescriptor; }); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 160); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 163); /* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/instance/slice */ 258); +/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/instance/slice */ 263); /* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/instance/reverse */ 259); +/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/instance/reverse */ 264); /* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/instance/reduce */ 260); +/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/instance/reduce */ 265); /* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core-js/object/keys */ 261); +/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core-js/object/keys */ 266); /* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core-js/instance/for-each */ 262); +/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core-js/instance/for-each */ 267); /* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); @@ -5402,13 +5399,11 @@ module.exports = window.key; "use strict"; /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); -/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Remote/AbstractAjax */ 263); +/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Remote/AbstractAjax */ 268); -var RemoteAdminAjax = -/*#__PURE__*/ -function (_AbstractAjaxRemote) { +var RemoteAdminAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RemoteAdminAjax, _AbstractAjaxRemote); function RemoteAdminAjax() { @@ -5835,7 +5830,7 @@ var DATA_IMAGE_LAZY_PLACEHOLDER_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUh /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 328); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 334); /***/ }), /* 27 */ @@ -5860,7 +5855,7 @@ module.exports = // eslint-disable-next-line no-new-func Function('return this')(); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) /***/ }), /* 28 */ @@ -5883,9 +5878,7 @@ module.exports = -var AbstractViewNext = -/*#__PURE__*/ -function () { +var AbstractViewNext = /*#__PURE__*/function () { function AbstractViewNext() { Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "bDisabeCloseOnEsc", false); @@ -5975,9 +5968,7 @@ function () { -var SocialStore = -/*#__PURE__*/ -function () { +var SocialStore = /*#__PURE__*/function () { function SocialStore() { var _this = this; @@ -6079,7 +6070,7 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 315); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 321); /***/ }), /* 31 */, @@ -6092,11 +6083,11 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of * /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var shared = __webpack_require__(/*! ../internals/shared */ 127); +var shared = __webpack_require__(/*! ../internals/shared */ 128); var has = __webpack_require__(/*! ../internals/has */ 42); -var uid = __webpack_require__(/*! ../internals/uid */ 128); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); -var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 183); +var uid = __webpack_require__(/*! ../internals/uid */ 129); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 185); var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; @@ -6138,7 +6129,7 @@ function _assertThisInitialized(self) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 356); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 362); /***/ }), /* 35 */ @@ -6152,7 +6143,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return componentExportHelper; }); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); @@ -6167,9 +6158,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ -var AbstractComponent = -/*#__PURE__*/ -function () { +var AbstractComponent = /*#__PURE__*/function () { function AbstractComponent() { Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(this, "disposable", []); } @@ -6449,13 +6438,13 @@ module.exports = function (it, key) { "use strict"; -var global = __webpack_require__(/*! ../internals/global */ 75); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 235).f; -var isForced = __webpack_require__(/*! ../internals/is-forced */ 289); -var path = __webpack_require__(/*! ../internals/path */ 96); -var bind = __webpack_require__(/*! ../internals/bind-context */ 238); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var has = __webpack_require__(/*! ../internals/has */ 95); +var global = __webpack_require__(/*! ../internals/global */ 66); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 238).f; +var isForced = __webpack_require__(/*! ../internals/is-forced */ 294); +var path = __webpack_require__(/*! ../internals/path */ 97); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 241); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var has = __webpack_require__(/*! ../internals/has */ 78); var wrapConstructor = function (NativeConstructor) { var Wrapper = function (a, b, c) { @@ -6527,18 +6516,22 @@ module.exports = function (options, source) { // add a flag to not completely full polyfills if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { - hide(resultProperty, 'sham', true); + createNonEnumerableProperty(resultProperty, 'sham', true); } target[key] = resultProperty; if (PROTO) { VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; - if (!has(path, VIRTUAL_PROTOTYPE)) hide(path, VIRTUAL_PROTOTYPE, {}); + if (!has(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } // export virtual prototype methods path[VIRTUAL_PROTOTYPE][key] = sourceProperty; // export real prototype methods - if (options.real && targetPrototype && !targetPrototype[key]) hide(targetPrototype, key, sourceProperty); + if (options.real && targetPrototype && !targetPrototype[key]) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } } } }; @@ -6569,7 +6562,7 @@ module.exports = function (it) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); +var $ = __webpack_require__(/*! ../internals/export */ 50); var exec = __webpack_require__(/*! ../internals/regexp-exec */ 110); $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { @@ -6597,6 +6590,43 @@ module.exports = !fails(function () { /***/ }), /* 48 */ +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! + \**************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 49 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/classof-raw.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 50 */ /*!**************************************************!*\ !*** ./node_modules/core-js/internals/export.js ***! \**************************************************/ @@ -6605,12 +6635,12 @@ module.exports = !fails(function () { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 179); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 181); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); /* options.target - name of the target object @@ -6660,43 +6690,6 @@ module.exports = function (options, source) { }; -/***/ }), -/* 49 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); - -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 50 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - /***/ }), /* 51 */ /*!**********************************************************!*\ @@ -6739,9 +6732,9 @@ if (DESCRIPTORS && !(NAME in FunctionPrototype)) { /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); var nativeDefineProperty = Object.defineProperty; @@ -6770,11 +6763,11 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var has = __webpack_require__(/*! ../internals/has */ 42); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); var getInternalState = InternalStateModule.get; var enforceInternalState = InternalStateModule.enforce; @@ -6814,7 +6807,7 @@ var TEMPLATE = String(String).split('String'); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var path = __webpack_require__(/*! ../internals/path */ 96); +var path = __webpack_require__(/*! ../internals/path */ 97); module.exports = function (CONSTRUCTOR) { return path[CONSTRUCTOR + 'Prototype']; @@ -6823,6 +6816,24 @@ module.exports = function (CONSTRUCTOR) { /***/ }), /* 55 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/fails.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), +/* 56 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/require-object-coercible.js ***! \********************************************************************/ @@ -6839,7 +6850,7 @@ module.exports = function (it) { /***/ }), -/* 56 */ +/* 57 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.replace.js ***! \***********************************************************/ @@ -6848,14 +6859,14 @@ module.exports = function (it) { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); var max = Math.max; var min = Math.min; @@ -6984,24 +6995,6 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma }); -/***/ }), -/* 57 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js-pure/internals/fails.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - /***/ }), /* 58 */, /* 59 */ @@ -7012,7 +7005,7 @@ module.exports = function (exec) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var path = __webpack_require__(/*! ../internals/path */ 148); +var path = __webpack_require__(/*! ../internals/path */ 150); var global = __webpack_require__(/*! ../internals/global */ 27); var aFunction = function (variable) { @@ -7048,7 +7041,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 97); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 98); /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); @@ -7221,9 +7214,9 @@ module.exports = window.hasher; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 184); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 186); // `Object.prototype.toString` method // https://tc39.github.io/ecma262/#sec-object.prototype.tostring @@ -7248,11 +7241,36 @@ if (!TO_STRING_TAG_SUPPORT) { * @returns {AppAdmin} */ function getApp() { - return __webpack_require__(/*! App/Admin */ 390).default; + return __webpack_require__(/*! App/Admin */ 396).default; } /***/ }), /* 66 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/global.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + (function () { return this; })() || Function('return this')(); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) + +/***/ }), +/* 67 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-function.js ***! \******************************************************/ @@ -7268,16 +7286,16 @@ module.exports = function (it) { /***/ }), -/* 67 */ +/* 68 */ /*!****************************************************!*\ !*** ./node_modules/core-js/modules/web.timers.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var $ = __webpack_require__(/*! ../internals/export */ 48); +var $ = __webpack_require__(/*! ../internals/export */ 50); var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); var slice = [].slice; var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check @@ -7306,7 +7324,7 @@ $({ global: true, bind: true, forced: MSIE }, { /***/ }), -/* 68 */ +/* 69 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/well-known-symbol.js ***! \******************************************************************/ @@ -7314,22 +7332,27 @@ $({ global: true, bind: true, forced: MSIE }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var shared = __webpack_require__(/*! ../internals/shared */ 202); -var uid = __webpack_require__(/*! ../internals/uid */ 240); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 299); +var global = __webpack_require__(/*! ../internals/global */ 66); +var shared = __webpack_require__(/*! ../internals/shared */ 244); +var has = __webpack_require__(/*! ../internals/has */ 78); +var uid = __webpack_require__(/*! ../internals/uid */ 245); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 248); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 306); +var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; -var store = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; module.exports = function (name) { - return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name] - || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name)); + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; }; /***/ }), -/* 69 */ +/* 70 */ /*!*********************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js ***! \*********************************************************************************/ @@ -7337,10 +7360,10 @@ module.exports = function (name) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ 253); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ 258); /***/ }), -/* 70 */ +/* 71 */ /*!********************************!*\ !*** ./dev/Stores/Language.js ***! \********************************/ @@ -7356,9 +7379,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each * -var LanguageStore = -/*#__PURE__*/ -function () { +var LanguageStore = /*#__PURE__*/function () { function LanguageStore() { this.languages = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); this.languagesAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); @@ -7395,7 +7416,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new LanguageStore()); /***/ }), -/* 71 */ +/* 72 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-indexed-object.js ***! \*************************************************************/ @@ -7404,8 +7425,8 @@ function () { /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); @@ -7413,7 +7434,7 @@ module.exports = function (it) { /***/ }), -/* 72 */ +/* 73 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-length.js ***! \*****************************************************/ @@ -7421,7 +7442,7 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); var min = Math.min; @@ -7433,7 +7454,7 @@ module.exports = function (argument) { /***/ }), -/* 73 */ +/* 74 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/iterators.js ***! \*****************************************************/ @@ -7445,7 +7466,7 @@ module.exports = {}; /***/ }), -/* 74 */ +/* 75 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es.array.join.js ***! \*******************************************************/ @@ -7454,10 +7475,10 @@ module.exports = {}; "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 282); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 287); var nativeJoin = [].join; @@ -7474,33 +7495,24 @@ $({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, { /***/ }), -/* 75 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js-pure/internals/global.js ***! - \*******************************************************/ +/* 76 */ +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/descriptors.js ***! + \************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(global) {var O = 'object'; -var check = function (it) { - return it && it.Math == Math && it; -}; +var fails = __webpack_require__(/*! ../internals/fails */ 55); -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == O && globalThis) || - check(typeof window == O && window) || - check(typeof self == O && self) || - check(typeof global == O && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) /***/ }), -/* 76 */ +/* 77 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-object.js ***! \**********************************************************/ @@ -7514,7 +7526,23 @@ module.exports = function (it) { /***/ }), -/* 77 */ +/* 78 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/has.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 79 */ /*!*********************************!*\ !*** ./dev/Stores/Admin/App.js ***! \*********************************/ @@ -7530,7 +7558,7 @@ module.exports = function (it) { /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/AbstractApp */ 257); +/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/AbstractApp */ 262); @@ -7538,9 +7566,7 @@ module.exports = function (it) { -var AppAdminStore = -/*#__PURE__*/ -function (_AbstractAppStore) { +var AppAdminStore = /*#__PURE__*/function (_AbstractAppStore) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AppAdminStore, _AbstractAppStore); function AppAdminStore() { @@ -7580,7 +7606,7 @@ function (_AbstractAppStore) { /* harmony default export */ __webpack_exports__["a"] = (new AppAdminStore()); /***/ }), -/* 78 */ +/* 80 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/is-pure.js ***! \***************************************************/ @@ -7592,7 +7618,7 @@ module.exports = false; /***/ }), -/* 79 */ +/* 81 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/to-integer.js ***! \******************************************************/ @@ -7611,7 +7637,7 @@ module.exports = function (argument) { /***/ }), -/* 80 */ +/* 82 */ /*!****************************!*\ !*** ./dev/Model/Email.js ***! \****************************/ @@ -7627,20 +7653,20 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search */ 273); +/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search */ 278); /* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! emailjs-addressparser */ 163); +/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! emailjs-addressparser */ 166); /* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2); @@ -7655,9 +7681,7 @@ __webpack_require__.r(__webpack_exports__); -var EmailModel = -/*#__PURE__*/ -function () { +var EmailModel = /*#__PURE__*/function () { /** * @param {string=} email = '' * @param {string=} name = '' @@ -7896,35 +7920,18 @@ function () { /***/ }), -/* 81 */, -/* 82 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/descriptors.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 57); - -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 83 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js-pure/internals/hide.js ***! - \*****************************************************/ +/* 83 */, +/* 84 */ +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-non-enumerable-property.js ***! + \*******************************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 137); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); module.exports = DESCRIPTORS ? function (object, key, value) { return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); @@ -7935,36 +7942,72 @@ module.exports = DESCRIPTORS ? function (object, key, value) { /***/ }), -/* 84 */ -/*!****************************************!*\ - !*** ./dev/Component/AbstractInput.js ***! - \****************************************/ -/*! exports provided: AbstractInput, default */ -/*! exports used: AbstractInput */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +/* 85 */ +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-method-uses-to-length.js ***! + \****************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractInput; }); -/* unused harmony export default */ -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); -/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/Abstract */ 35); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var has = __webpack_require__(/*! ../internals/has */ 78); +var defineProperty = Object.defineProperty; +var cache = {}; +var thrower = function (it) { throw it; }; +module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); +}; +/***/ }), +/* 86 */ +/*!****************************************!*\ + !*** ./dev/Component/AbstractInput.js ***! + \****************************************/ +/*! exports provided: AbstractInput, default */ +/*! exports used: AbstractInput */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var AbstractInput = -/*#__PURE__*/ -function (_AbstractComponent) { +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractInput; }); +/* unused harmony export default */ +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); +/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0); +/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/Abstract */ 35); + + + + + + + + +var AbstractInput = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(AbstractInput, _AbstractComponent); /** @@ -8032,7 +8075,7 @@ function (_AbstractComponent) { /***/ }), -/* 85 */ +/* 87 */ /*!**********************************!*\ !*** ./dev/Stores/Admin/Capa.js ***! \**********************************/ @@ -8048,9 +8091,7 @@ function (_AbstractComponent) { -var CapaAdminStore = -/*#__PURE__*/ -function () { +var CapaAdminStore = /*#__PURE__*/function () { function CapaAdminStore() { this.additionalAccounts = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false); this.identities = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false); @@ -8089,7 +8130,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new CapaAdminStore()); /***/ }), -/* 86 */ +/* 88 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/internal-state.js ***! \**********************************************************/ @@ -8097,13 +8138,13 @@ function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 178); +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 180); var global = __webpack_require__(/*! ../internals/global */ 27); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var objectHas = __webpack_require__(/*! ../internals/has */ 42); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); var WeakMap = global.WeakMap; var set, get, has; @@ -8161,8 +8202,8 @@ module.exports = { /***/ }), -/* 87 */, -/* 88 */ +/* 89 */, +/* 90 */ /*!*************************************!*\ !*** ./dev/Stores/Admin/Package.js ***! \*************************************/ @@ -8186,7 +8227,7 @@ var PackageAdminStore = function PackageAdminStore() { /* harmony default export */ __webpack_exports__["a"] = (new PackageAdminStore()); /***/ }), -/* 89 */ +/* 91 */ /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! \******************************************************************************/ @@ -8195,12 +8236,12 @@ var PackageAdminStore = function PackageAdminStore() { /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 164); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 167); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); var has = __webpack_require__(/*! ../internals/has */ 42); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -8217,7 +8258,7 @@ exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnProper /***/ }), -/* 90 */ +/* 92 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! \**********************************************************************/ @@ -8236,7 +8277,7 @@ module.exports = function (bitmap, value) { /***/ }), -/* 91 */ +/* 93 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/set-global.js ***! \******************************************************/ @@ -8245,7 +8286,7 @@ module.exports = function (bitmap, value) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); module.exports = function (key, value) { try { @@ -8257,7 +8298,7 @@ module.exports = function (key, value) { /***/ }), -/* 92 */ +/* 94 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/inspect-source.js ***! \**********************************************************/ @@ -8265,7 +8306,7 @@ module.exports = function (key, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var store = __webpack_require__(/*! ../internals/shared-store */ 126); +var store = __webpack_require__(/*! ../internals/shared-store */ 127); var functionToString = Function.toString; @@ -8280,7 +8321,7 @@ module.exports = store.inspectSource; /***/ }), -/* 93 */ +/* 95 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! \*****************************************************************/ @@ -8299,7 +8340,7 @@ module.exports = String(test) === '[object z]'; /***/ }), -/* 94 */ +/* 96 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-indexed-object.js ***! \******************************************************************/ @@ -8308,8 +8349,8 @@ module.exports = String(test) === '[object z]'; /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 199); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 200); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); @@ -8317,23 +8358,7 @@ module.exports = function (it) { /***/ }), -/* 95 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js-pure/internals/has.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; - -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 96 */ +/* 97 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/internals/path.js ***! \*****************************************************/ @@ -8345,7 +8370,7 @@ module.exports = {}; /***/ }), -/* 97 */ +/* 98 */ /*!********************************!*\ !*** external "window.moment" ***! \********************************/ @@ -8356,7 +8381,7 @@ module.exports = {}; module.exports = window.moment; /***/ }), -/* 98 */ +/* 99 */ /*!************************************!*\ !*** external "window.progressJs" ***! \************************************/ @@ -8367,9 +8392,9 @@ module.exports = window.moment; module.exports = window.progressJs; /***/ }), -/* 99 */, /* 100 */, -/* 101 */ +/* 101 */, +/* 102 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/document-create-element.js ***! \*******************************************************************/ @@ -8390,7 +8415,7 @@ module.exports = function (it) { /***/ }), -/* 102 */ +/* 103 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/hidden-keys.js ***! \*******************************************************/ @@ -8402,7 +8427,7 @@ module.exports = {}; /***/ }), -/* 103 */ +/* 104 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/function-bind-context.js ***! \*****************************************************************/ @@ -8410,7 +8435,7 @@ module.exports = {}; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); // optional / simple context binding module.exports = function (fn, that, length) { @@ -8437,7 +8462,7 @@ module.exports = function (fn, that, length) { /***/ }), -/* 104 */ +/* 105 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-user-agent.js ***! \*************************************************************/ @@ -8451,7 +8476,7 @@ module.exports = getBuiltIn('navigator', 'userAgent') || ''; /***/ }), -/* 105 */ +/* 106 */ /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/new-promise-capability.js ***! \******************************************************************/ @@ -8461,7 +8486,7 @@ module.exports = getBuiltIn('navigator', 'userAgent') || ''; "use strict"; -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); var PromiseCapability = function (C) { var resolve, reject; @@ -8480,76 +8505,6 @@ module.exports.f = function (C) { }; -/***/ }), -/* 106 */ -/*!*****************************!*\ - !*** ./dev/Common/Jassl.js ***! - \*****************************/ -/*! exports provided: jassl */ -/*! exports used: jassl */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); - - - // let rainloopCaches = window.caches && window.caches.open ? window.caches : null; - -/** - * @param {src} src - * @param {boolean} async = false - * @returns {Promise} - */ - -function jassl(src, async) { - if (async === void 0) { - async = false; - } - - if (!window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise || !window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise.all) { - throw new Error('Promises are not available your environment.'); - } - - if (!src) { - throw new Error('src should not be empty.'); - } - - return new window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise(function (resolve, reject) { - var element = window__WEBPACK_IMPORTED_MODULE_2___default.a.document.createElement('script'); - - element.onload = function () { - resolve(src); - }; - - element.onerror = function () { - reject(new Error(src)); - }; - - element.async = true === async; - element.src = src; - window__WEBPACK_IMPORTED_MODULE_2___default.a.document.body.appendChild(element); - }) - /* .then((s) => { - const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null; - if (found && found[1]) - { - rainloopCaches.open('rainloop-offline-' + found[1]).then( - (cache) => cache.add(s) - ).catch(() => { - rainloopCaches = null; - }); - } - return s; - })*/ - ; -} - /***/ }), /* 107 */ /*!******************************************************!*\ @@ -8559,8 +8514,8 @@ function jassl(src, async) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(/*! ../internals/shared */ 127); -var uid = __webpack_require__(/*! ../internals/uid */ 128); +var shared = __webpack_require__(/*! ../internals/shared */ 128); +var uid = __webpack_require__(/*! ../internals/uid */ 129); var keys = shared('keys'); @@ -8623,8 +8578,8 @@ module.exports = function (it, TAG, STATIC) { "use strict"; -var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 170); -var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 233); +var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 173); +var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 236); var nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the @@ -8724,7 +8679,7 @@ module.exports = patchedExec; var redefine = __webpack_require__(/*! ../internals/redefine */ 53); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); var fails = __webpack_require__(/*! ../internals/fails */ 36); -var flags = __webpack_require__(/*! ../internals/regexp-flags */ 170); +var flags = __webpack_require__(/*! ../internals/regexp-flags */ 173); var TO_STRING = 'toString'; var RegExpPrototype = RegExp.prototype; @@ -8756,12 +8711,12 @@ if (NOT_GENERIC || INCORRECT_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 202); var min = Math.min; // `ToLength` abstract operation -// https://tc39.github.io/ecma262/#sec-tolength +// https://tc39.es/ecma262/#sec-tolength module.exports = function (argument) { return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 }; @@ -8769,6 +8724,76 @@ module.exports = function (argument) { /***/ }), /* 113 */ +/*!*****************************!*\ + !*** ./dev/Common/Jassl.js ***! + \*****************************/ +/*! exports provided: jassl */ +/*! exports used: jassl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); + + + // let rainloopCaches = window.caches && window.caches.open ? window.caches : null; + +/** + * @param {src} src + * @param {boolean} async = false + * @returns {Promise} + */ + +function jassl(src, async) { + if (async === void 0) { + async = false; + } + + if (!window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise || !window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise.all) { + throw new Error('Promises are not available your environment.'); + } + + if (!src) { + throw new Error('src should not be empty.'); + } + + return new window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise(function (resolve, reject) { + var element = window__WEBPACK_IMPORTED_MODULE_2___default.a.document.createElement('script'); + + element.onload = function () { + resolve(src); + }; + + element.onerror = function () { + reject(new Error(src)); + }; + + element.async = true === async; + element.src = src; + window__WEBPACK_IMPORTED_MODULE_2___default.a.document.body.appendChild(element); + }) + /* .then((s) => { + const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null; + if (found && found[1]) + { + rainloopCaches.open('rainloop-offline-' + found[1]).then( + (cache) => cache.add(s) + ).catch(() => { + rainloopCaches = null; + }); + } + return s; + })*/ + ; +} + +/***/ }), +/* 114 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js ***! \*******************************************************************************/ @@ -8776,10 +8801,10 @@ module.exports = function (argument) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 291); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 298); /***/ }), -/* 114 */ +/* 115 */ /*!*****************************!*\ !*** ./dev/Stores/Theme.js ***! \*****************************/ @@ -8795,9 +8820,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ -var ThemeStore = -/*#__PURE__*/ -function () { +var ThemeStore = /*#__PURE__*/function () { function ThemeStore() { this.themes = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); this.themeBackgroundName = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(''); @@ -8823,8 +8846,8 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new ThemeStore()); /***/ }), -/* 115 */, -/* 116 */ +/* 116 */, +/* 117 */ /*!************************************!*\ !*** ./dev/Stores/Admin/Plugin.js ***! \************************************/ @@ -8847,7 +8870,7 @@ var PluginAdminStore = function PluginAdminStore() { /* harmony default export */ __webpack_exports__["a"] = (new PluginAdminStore()); /***/ }), -/* 117 */ +/* 118 */ /*!*************************************!*\ !*** ./dev/Stores/Admin/License.js ***! \*************************************/ @@ -8871,7 +8894,7 @@ var LicenseAdminStore = function LicenseAdminStore() { /* harmony default export */ __webpack_exports__["a"] = (new LicenseAdminStore()); /***/ }), -/* 118 */ +/* 119 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/indexed-object.js ***! \**********************************************************/ @@ -8880,7 +8903,7 @@ var LicenseAdminStore = function LicenseAdminStore() { /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); var split = ''.split; @@ -8895,7 +8918,7 @@ module.exports = fails(function () { /***/ }), -/* 119 */ +/* 120 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-object.js ***! \*****************************************************/ @@ -8903,7 +8926,7 @@ module.exports = fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); // `ToObject` abstract operation // https://tc39.github.io/ecma262/#sec-toobject @@ -8913,7 +8936,7 @@ module.exports = function (argument) { /***/ }), -/* 120 */ +/* 121 */ /*!****************************************************!*\ !*** ./node_modules/core-js/modules/es.promise.js ***! \****************************************************/ @@ -8923,33 +8946,33 @@ module.exports = function (argument) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); var global = __webpack_require__(/*! ../internals/global */ 27); var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 168); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 171); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 187); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 189); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 188); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 190); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 189); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 193); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var task = __webpack_require__(/*! ../internals/task */ 132).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 194); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 169); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 195); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 191); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); +var iterate = __webpack_require__(/*! ../internals/iterate */ 143); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 195); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 144); +var task = __webpack_require__(/*! ../internals/task */ 133).set; +var microtask = __webpack_require__(/*! ../internals/microtask */ 196); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 172); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 197); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 106); +var perform = __webpack_require__(/*! ../internals/perform */ 145); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 153); var SPECIES = wellKnownSymbol('species'); var PROMISE = 'Promise'; @@ -9304,7 +9327,7 @@ $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { /***/ }), -/* 121 */ +/* 122 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-object.js ***! \**********************************************************/ @@ -9312,18 +9335,18 @@ $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 200); // `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject +// https://tc39.es/ecma262/#sec-toobject module.exports = function (argument) { return Object(requireObjectCoercible(argument)); }; /***/ }), -/* 122 */, -/* 123 */ +/* 123 */, +/* 124 */ /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ @@ -9354,7 +9377,7 @@ module.exports = g; /***/ }), -/* 124 */ +/* 125 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/to-primitive.js ***! \********************************************************/ @@ -9379,7 +9402,7 @@ module.exports = function (input, PREFERRED_STRING) { /***/ }), -/* 125 */ +/* 126 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! \**********************************************************/ @@ -9389,7 +9412,7 @@ module.exports = function (input, PREFERRED_STRING) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); var fails = __webpack_require__(/*! ../internals/fails */ 36); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); // Thank's IE8 for his funny defineProperty module.exports = !DESCRIPTORS && !fails(function () { @@ -9400,7 +9423,7 @@ module.exports = !DESCRIPTORS && !fails(function () { /***/ }), -/* 126 */ +/* 127 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/shared-store.js ***! \********************************************************/ @@ -9409,7 +9432,7 @@ module.exports = !DESCRIPTORS && !fails(function () { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); var SHARED = '__core-js_shared__'; var store = global[SHARED] || setGlobal(SHARED, {}); @@ -9418,7 +9441,7 @@ module.exports = store; /***/ }), -/* 127 */ +/* 128 */ /*!**************************************************!*\ !*** ./node_modules/core-js/internals/shared.js ***! \**************************************************/ @@ -9426,8 +9449,8 @@ module.exports = store; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var store = __webpack_require__(/*! ../internals/shared-store */ 126); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); +var store = __webpack_require__(/*! ../internals/shared-store */ 127); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); @@ -9439,7 +9462,7 @@ var store = __webpack_require__(/*! ../internals/shared-store */ 126); /***/ }), -/* 128 */ +/* 129 */ /*!***********************************************!*\ !*** ./node_modules/core-js/internals/uid.js ***! \***********************************************/ @@ -9456,7 +9479,7 @@ module.exports = function (key) { /***/ }), -/* 129 */ +/* 130 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-forced.js ***! \*****************************************************/ @@ -9488,7 +9511,7 @@ module.exports = isForced; /***/ }), -/* 130 */ +/* 131 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/native-symbol.js ***! \*********************************************************/ @@ -9506,7 +9529,7 @@ module.exports = !!Object.getOwnPropertySymbols && !fails(function () { /***/ }), -/* 131 */ +/* 132 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/classof.js ***! \***************************************************/ @@ -9514,8 +9537,8 @@ module.exports = !!Object.getOwnPropertySymbols && !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 50); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 49); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); @@ -9543,7 +9566,7 @@ module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { /***/ }), -/* 132 */ +/* 133 */ /*!************************************************!*\ !*** ./node_modules/core-js/internals/task.js ***! \************************************************/ @@ -9553,11 +9576,11 @@ module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var global = __webpack_require__(/*! ../internals/global */ 27); var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var html = __webpack_require__(/*! ../internals/html */ 141); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var html = __webpack_require__(/*! ../internals/html */ 142); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); var location = global.location; var set = global.setImmediate; @@ -9655,7 +9678,7 @@ module.exports = { /***/ }), -/* 133 */ +/* 134 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/engine-is-ios.js ***! \*********************************************************/ @@ -9663,13 +9686,13 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); /***/ }), -/* 134 */ +/* 135 */ /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! \******************************************************************************/ @@ -9685,7 +9708,7 @@ var redefine = __webpack_require__(/*! ../internals/redefine */ 53); var fails = __webpack_require__(/*! ../internals/fails */ 36); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var SPECIES = wellKnownSymbol('species'); @@ -9806,7 +9829,7 @@ module.exports = function (KEY, length, exec, sham) { /***/ }), -/* 135 */ +/* 136 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! \****************************************************************/ @@ -9814,7 +9837,7 @@ module.exports = function (KEY, length, exec, sham) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var classof = __webpack_require__(/*! ./classof-raw */ 50); +var classof = __webpack_require__(/*! ./classof-raw */ 49); var regexpExec = __webpack_require__(/*! ./regexp-exec */ 110); // `RegExpExec` abstract operation @@ -9839,7 +9862,7 @@ module.exports = function (R, S) { /***/ }), -/* 136 */ +/* 137 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-define-property.js ***! \***********************************************************************/ @@ -9847,15 +9870,15 @@ module.exports = function (R, S) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 236); -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 200); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 239); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 201); var nativeDefineProperty = Object.defineProperty; // `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty +// https://tc39.es/ecma262/#sec-object.defineproperty exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); @@ -9870,7 +9893,7 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A /***/ }), -/* 137 */ +/* 138 */ /*!*************************************!*\ !*** ./dev/Knoin/AbstractScreen.js ***! \*************************************/ @@ -9880,14 +9903,14 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractScreen; }); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! crossroads */ 161); +/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! crossroads */ 164); /* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2); @@ -9896,9 +9919,7 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A -var AbstractScreen = -/*#__PURE__*/ -function () { +var AbstractScreen = /*#__PURE__*/function () { function AbstractScreen(screenName, viewModels) { if (viewModels === void 0) { viewModels = []; @@ -9975,7 +9996,7 @@ function () { }(); /***/ }), -/* 138 */ +/* 139 */ /*!*****************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js ***! \*****************************************************************************/ @@ -9983,10 +10004,10 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 333); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 339); /***/ }), -/* 139 */ +/* 140 */ /*!*****************************!*\ !*** external "window.ssm" ***! \*****************************/ @@ -9997,7 +10018,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 33 module.exports = window.ssm; /***/ }), -/* 140 */ +/* 141 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/object-keys-internal.js ***! \****************************************************************/ @@ -10006,9 +10027,9 @@ module.exports = window.ssm; /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ 42); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 165).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ 168).indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); module.exports = function (object, names) { var O = toIndexedObject(object); @@ -10025,7 +10046,7 @@ module.exports = function (object, names) { /***/ }), -/* 141 */ +/* 142 */ /*!************************************************!*\ !*** ./node_modules/core-js/internals/html.js ***! \************************************************/ @@ -10039,7 +10060,7 @@ module.exports = getBuiltIn('document', 'documentElement'); /***/ }), -/* 142 */ +/* 143 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/iterate.js ***! \***************************************************/ @@ -10048,11 +10069,11 @@ module.exports = getBuiltIn('document', 'documentElement'); /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 190); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 191); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 192); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 192); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 193); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 194); var Result = function (stopped, result) { this.stopped = stopped; @@ -10093,7 +10114,7 @@ iterate.stop = function (result) { /***/ }), -/* 143 */ +/* 144 */ /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/species-constructor.js ***! \***************************************************************/ @@ -10102,7 +10123,7 @@ iterate.stop = function (result) { /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var SPECIES = wellKnownSymbol('species'); @@ -10117,7 +10138,7 @@ module.exports = function (O, defaultConstructor) { /***/ }), -/* 144 */ +/* 145 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/perform.js ***! \***************************************************/ @@ -10135,21 +10156,21 @@ module.exports = function (exec) { /***/ }), -/* 145 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/sloppy-array-method.js ***! - \********************************************************************/ +/* 146 */ +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-method-is-strict.js ***! + \***********************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var fails = __webpack_require__(/*! ../internals/fails */ 55); module.exports = function (METHOD_NAME, argument) { var method = [][METHOD_NAME]; - return !method || !fails(function () { + return !!method && fails(function () { // eslint-disable-next-line no-useless-call,no-throw-literal method.call(null, argument || function () { throw 1; }, 1); }); @@ -10157,8 +10178,45 @@ module.exports = function (METHOD_NAME, argument) { /***/ }), -/* 146 */, /* 147 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 208); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 156); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; +}; + + +/***/ }), +/* 148 */, +/* 149 */ /*!************************************!*\ !*** ./dev/Stores/Admin/Domain.js ***! \************************************/ @@ -10193,7 +10251,7 @@ var DomainAdminStore = function DomainAdminStore() { /* harmony default export */ __webpack_exports__["a"] = (new DomainAdminStore()); /***/ }), -/* 148 */ +/* 150 */ /*!************************************************!*\ !*** ./node_modules/core-js/internals/path.js ***! \************************************************/ @@ -10207,7 +10265,7 @@ module.exports = global; /***/ }), -/* 149 */ +/* 151 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/object-create.js ***! \*********************************************************/ @@ -10216,11 +10274,11 @@ module.exports = global; /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 224); +var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 227); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); -var html = __webpack_require__(/*! ../internals/html */ 141); -var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 101); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); +var html = __webpack_require__(/*! ../internals/html */ 142); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 102); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); var GT = '>'; @@ -10296,7 +10354,7 @@ module.exports = Object.create || function create(O, Properties) { /***/ }), -/* 150 */ +/* 152 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! \*******************************************************************/ @@ -10305,9 +10363,9 @@ module.exports = Object.create || function create(O, Properties) { /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ 42); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 228); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 231); var IE_PROTO = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; @@ -10324,7 +10382,7 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /***/ }), -/* 151 */ +/* 153 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-v8-version.js ***! \*************************************************************/ @@ -10333,7 +10391,7 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); var process = global.process; var versions = process && process.versions; @@ -10355,7 +10413,7 @@ module.exports = version && +version; /***/ }), -/* 152 */ +/* 154 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/advance-string-index.js ***! \****************************************************************/ @@ -10365,7 +10423,7 @@ module.exports = version && +version; "use strict"; -var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 185).charAt; +var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 187).charAt; // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex @@ -10375,7 +10433,7 @@ module.exports = function (S, index, unicode) { /***/ }), -/* 153 */ +/* 155 */ /*!***************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/create-property-descriptor.js ***! \***************************************************************************/ @@ -10394,7 +10452,23 @@ module.exports = function (bitmap, value) { /***/ }), -/* 154 */ +/* 156 */ +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof-raw.js ***! + \************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 157 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/an-object.js ***! \**********************************************************/ @@ -10402,7 +10476,7 @@ module.exports = function (bitmap, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); module.exports = function (it) { if (!isObject(it)) { @@ -10412,7 +10486,7 @@ module.exports = function (it) { /***/ }), -/* 155 */ +/* 158 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/iterators.js ***! \**********************************************************/ @@ -10424,7 +10498,7 @@ module.exports = {}; /***/ }), -/* 156 */ +/* 159 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-array.js ***! \*********************************************************/ @@ -10432,17 +10506,17 @@ module.exports = {}; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var classof = __webpack_require__(/*! ../internals/classof-raw */ 198); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 156); // `IsArray` abstract operation -// https://tc39.github.io/ecma262/#sec-isarray +// https://tc39.es/ecma262/#sec-isarray module.exports = Array.isArray || function isArray(arg) { return classof(arg) == 'Array'; }; /***/ }), -/* 157 */ +/* 160 */ /*!*********************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-method-has-species-support.js ***! \*********************************************************************************/ @@ -10450,13 +10524,17 @@ module.exports = Array.isArray || function isArray(arg) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 203); var SPECIES = wellKnownSymbol('species'); module.exports = function (METHOD_NAME) { - return !fails(function () { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { var array = []; var constructor = array.constructor = {}; constructor[SPECIES] = function () { @@ -10468,7 +10546,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 158 */ +/* 161 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-iteration.js ***! \****************************************************************/ @@ -10476,21 +10554,22 @@ module.exports = function (METHOD_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var bind = __webpack_require__(/*! ../internals/bind-context */ 238); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 241); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 199); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 250); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 256); var push = [].push; -// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation var createMethod = function (TYPE) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_OUT = TYPE == 7; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; return function ($this, callbackfn, that, specificCreate) { var O = toObject($this); @@ -10499,7 +10578,7 @@ var createMethod = function (TYPE) { var length = toLength(self.length); var index = 0; var create = specificCreate || arraySpeciesCreate; - var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined; var value, result; for (;length > index; index++) if (NO_HOLES || index in self) { value = self[index]; @@ -10511,7 +10590,10 @@ var createMethod = function (TYPE) { case 5: return value; // find case 6: return index; // findIndex case 2: push.call(target, value); // filter - } else if (IS_EVERY) return false; // every + } else switch (TYPE) { + case 4: return false; // every + case 7: push.call(target, value); // filterOut + } } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; @@ -10520,31 +10602,34 @@ var createMethod = function (TYPE) { module.exports = { // `Array.prototype.forEach` method - // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + // https://tc39.es/ecma262/#sec-array.prototype.foreach forEach: createMethod(0), // `Array.prototype.map` method - // https://tc39.github.io/ecma262/#sec-array.prototype.map + // https://tc39.es/ecma262/#sec-array.prototype.map map: createMethod(1), // `Array.prototype.filter` method - // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // https://tc39.es/ecma262/#sec-array.prototype.filter filter: createMethod(2), // `Array.prototype.some` method - // https://tc39.github.io/ecma262/#sec-array.prototype.some + // https://tc39.es/ecma262/#sec-array.prototype.some some: createMethod(3), // `Array.prototype.every` method - // https://tc39.github.io/ecma262/#sec-array.prototype.every + // https://tc39.es/ecma262/#sec-array.prototype.every every: createMethod(4), // `Array.prototype.find` method - // https://tc39.github.io/ecma262/#sec-array.prototype.find + // https://tc39.es/ecma262/#sec-array.prototype.find find: createMethod(5), // `Array.prototype.findIndex` method - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - findIndex: createMethod(6) + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterOut` method + // https://github.com/tc39/proposal-array-filtering + filterOut: createMethod(7) }; /***/ }), -/* 159 */ +/* 162 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js ***! \*******************************************************************************/ @@ -10552,10 +10637,10 @@ module.exports = { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ 311); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ 317); /***/ }), -/* 160 */ +/* 163 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js ***! \*******************************************************************************/ @@ -10563,10 +10648,10 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/object/define-property */ 344); +module.exports = __webpack_require__(/*! core-js-pure/features/object/define-property */ 349); /***/ }), -/* 161 */ +/* 164 */ /*!************************************!*\ !*** external "window.crossroads" ***! \************************************/ @@ -10577,7 +10662,7 @@ module.exports = __webpack_require__(/*! core-js-pure/features/object/define-pro module.exports = window.crossroads; /***/ }), -/* 162 */ +/* 165 */ /*!*******************************************!*\ !*** ./dev/Component/AbstractCheckbox.js ***! \*******************************************/ @@ -10597,9 +10682,7 @@ module.exports = window.crossroads; -var AbstractCheckbox = -/*#__PURE__*/ -function (_AbstractComponent) { +var AbstractCheckbox = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractCheckbox, _AbstractComponent); /** @@ -10654,7 +10737,7 @@ function (_AbstractComponent) { /***/ }), -/* 163 */ +/* 166 */ /*!******************************************************************!*\ !*** ./node_modules/emailjs-addressparser/dist/addressparser.js ***! \******************************************************************/ @@ -10970,7 +11053,7 @@ var Tokenizer = function () { //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGRyZXNzcGFyc2VyLmpzIl0sIm5hbWVzIjpbInBhcnNlIiwic3RyIiwidG9rZW5pemVyIiwiVG9rZW5pemVyIiwidG9rZW5zIiwidG9rZW5pemUiLCJhZGRyZXNzZXMiLCJhZGRyZXNzIiwicGFyc2VkQWRkcmVzc2VzIiwiZm9yRWFjaCIsInRva2VuIiwidHlwZSIsInZhbHVlIiwibGVuZ3RoIiwicHVzaCIsIl9oYW5kbGVBZGRyZXNzIiwiY29uY2F0IiwiaXNHcm91cCIsInN0YXRlIiwiZGF0YSIsImNvbW1lbnQiLCJncm91cCIsInRleHQiLCJpIiwibGVuIiwiam9pbiIsIm5hbWUiLCJtYXRjaCIsInNwbGljZSIsIl9yZWdleEhhbmRsZXIiLCJ0cmltIiwicmVwbGFjZSIsIk9QRVJBVE9SUyIsInRvU3RyaW5nIiwib3BlcmF0b3JDdXJyZW50Iiwib3BlcmF0b3JFeHBlY3RpbmciLCJub2RlIiwiZXNjYXBlZCIsImxpc3QiLCJjaHIiLCJjaGFyQXQiLCJjaGVja0NoYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O2tCQWN3QkEsSzs7OztBQWR4Qjs7Ozs7Ozs7Ozs7Ozs7QUFjZSxTQUFTQSxLQUFULENBQWdCQyxHQUFoQixFQUFxQjtBQUNsQyxNQUFNQyxZQUFZLElBQUlDLFNBQUosQ0FBY0YsR0FBZCxDQUFsQjtBQUNBLE1BQU1HLFNBQVNGLFVBQVVHLFFBQVYsRUFBZjs7QUFFQSxNQUFNQyxZQUFZLEVBQWxCO0FBQ0EsTUFBSUMsVUFBVSxFQUFkO0FBQ0EsTUFBSUMsa0JBQWtCLEVBQXRCOztBQUVBSixTQUFPSyxPQUFQLENBQWUsVUFBVUMsS0FBVixFQUFpQjtBQUM5QixRQUFJQSxNQUFNQyxJQUFOLEtBQWUsVUFBZixLQUE4QkQsTUFBTUUsS0FBTixLQUFnQixHQUFoQixJQUF1QkYsTUFBTUUsS0FBTixLQUFnQixHQUFyRSxDQUFKLEVBQStFO0FBQzdFLFVBQUlMLFFBQVFNLE1BQVosRUFBb0I7QUFDbEJQLGtCQUFVUSxJQUFWLENBQWVQ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QUFJLENBQUMsS0FBS0YsaUJBQU4sSUFBMkJJLE9BQU9QLFNBQXRDLEVBQWlEO0FBQ3RELGFBQUtJLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sVUFESTtBQUVWQyxpQkFBTzJCO0FBRkcsU0FBWjtBQUlBLGFBQUtELElBQUwsQ0FBVXhCLElBQVYsQ0FBZSxLQUFLc0IsSUFBcEI7QUFDQSxhQUFLQSxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUtELGlCQUFMLEdBQXlCSCxVQUFVTyxHQUFWLENBQXpCO0FBQ0EsYUFBS0YsT0FBTCxHQUFlLEtBQWY7QUFDQTtBQUNEOztBQUVELFVBQUksQ0FBQyxLQUFLQSxPQUFOLElBQWlCRSxRQUFRLElBQTdCLEVBQW1DO0FBQ2pDLGFBQUtGLE9BQUwsR0FBZSxJQUFmO0FBQ0E7QUFDRDs7QUFFRCxVQUFJLENBQUMsS0FBS0QsSUFBVixFQUFnQjtBQUNkLGFBQUtBLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sTUFESTtBQUVWQyxpQkFBTztBQUZHLFNBQVo7QUFJQSxhQUFLMEIsSUFBTCxDQUFVeEIsSUFBVixDQUFlLEtBQUtzQixJQUFwQjtBQUNEOztBQUVELFVBQUksS0FBS0MsT0FBTCxJQUFnQkUsUUFBUSxJQUE1QixFQUFrQztBQUNoQyxhQUFLSCxJQUFMLENBQVV4QixLQUFWLElBQW1CLElBQW5CO0FBQ0Q7O0FBRUQsV0FBS3dCLElBQUwsQ0FBVXhCLEtBQVYsSUFBbUIyQixHQUFuQjtBQUNBLFdBQUtGLE9BQUwsR0FBZSxLQUFmO0FBQ0QiLCJmaWxlIjoiYWRkcmVzc3BhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZSAoc3RyKSB7XG4gIGNvbnN0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKVxuICBjb25zdCB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUoKVxuXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGxldCBhZGRyZXNzID0gW11cbiAgbGV0IHBhcnNlZEFkZHJlc3NlcyA9IFtdXG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgICAgfVxuICAgICAgYWRkcmVzcyA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbilcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcylcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpXG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXNcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyAodG9rZW5zKSB7XG4gIGxldCBpc0dyb3VwID0gZmFsc2VcbiAgbGV0IHN0YXRlID0gJ3RleHQnXG4gIGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG4gIH1cblxuICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJ1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgc3RhdGUgPSAnZ3JvdXAnXG4gICAgICAgICAgaXNHcm91cCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0YXRlID0gJ3RleHQnXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgZGF0YS5jb21tZW50ID0gW11cbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJylcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lKSxcbiAgICAgIGdyb3VwOiBkYXRhLmdyb3VwLmxlbmd0aCA/IHBhcnNlKGRhdGEuZ3JvdXAuam9pbignLCcpKSA6IFtdXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgIGRhdGEuYWRkcmVzcyA9IFthZGRyZXNzLnRyaW0oKV1cbiAgICAgICAgICByZXR1cm4gJyAnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtpXSA9IGRhdGEudGV4dFtpXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpXG4gICAgICAgICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXVxuICAgIH1cblxuICAgIC8vIEtlZXAgb25seSB0aGUgZmlyc3QgYWRkcmVzcyBvY2N1cmVuY2UsIHB1c2ggb3RoZXJzIHRvIHJlZ3VsYXIgdGV4dFxuICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoID4gMSkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmNvbmNhdChkYXRhLmFkZHJlc3Muc3BsaWNlKDEpKVxuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKVxuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJylcblxuICAgIGlmICghZGF0YS5hZGRyZXNzICYmIGlzR3JvdXApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkcmVzcy5hZGRyZXNzID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXNcbn07XG5cbi8qXG4gKiBPcGVyYXRvciB0b2tlbnMgYW5kIHdoaWNoIHRva2VucyBhcmUgZXhwZWN0ZWQgdG8gZW5kIHRoZSBzZXF1ZW5jZVxuICovXG5jb25zdCBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICovXG5jbGFzcyBUb2tlbml6ZXIge1xuICBjb25zdHJ1Y3RvciAoc3RyKSB7XG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpXG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJ1xuICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJ1xuICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIHRoaXMubGlzdCA9IFtdXG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuICB0b2tlbml6ZSAoKSB7XG4gICAgbGV0IGNoclxuICAgIGxldCBsaXN0ID0gW11cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNociA9IHRoaXMuc3RyLmNoYXJBdChpKVxuICAgICAgdGhpcy5jaGVja0NoYXIoY2hyKVxuICAgIH1cblxuICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICBsaXN0LnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGxpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaXMgYW4gb3BlcmF0b3Igb3IgdGV4dCBhbmQgYWN0cyBhY2NvcmRpbmdseVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAqL1xuICBjaGVja0NoYXIgKGNocikge1xuICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgPT09IHRoaXMub3BlcmF0b3JFeHBlY3RpbmcpIHtcbiAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgdmFsdWU6IGNoclxuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgICAgdGhpcy5ub2RlID0gbnVsbFxuICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnXG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdvcGVyYXRvcicsXG4gICAgICAgIHZhbHVlOiBjaHJcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSlcbiAgICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXVxuICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5lc2NhcGVkICYmIGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCdcbiAgICB9XG5cbiAgICB0aGlzLm5vZGUudmFsdWUgKz0gY2hyXG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgfVxufVxuIl19 /***/ }), -/* 164 */ +/* 167 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! \*************************************************************************/ @@ -10995,7 +11078,7 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /***/ }), -/* 165 */ +/* 168 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/array-includes.js ***! \**********************************************************/ @@ -11003,9 +11086,9 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 182); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 184); // `Array.prototype.{ indexOf, includes }` methods implementation var createMethod = function (IS_INCLUDES) { @@ -11038,7 +11121,7 @@ module.exports = { /***/ }), -/* 166 */ +/* 169 */ /*!***************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! \***************************************************************************/ @@ -11050,7 +11133,7 @@ exports.f = Object.getOwnPropertySymbols; /***/ }), -/* 167 */ +/* 170 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/iterators-core.js ***! \**********************************************************/ @@ -11060,11 +11143,11 @@ exports.f = Object.getOwnPropertySymbols; "use strict"; -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 152); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var has = __webpack_require__(/*! ../internals/has */ 42); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); var ITERATOR = wellKnownSymbol('iterator'); var BUGGY_SAFARI_ITERATORS = false; @@ -11099,7 +11182,7 @@ module.exports = { /***/ }), -/* 168 */ +/* 171 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! \**********************************************************************/ @@ -11113,7 +11196,7 @@ module.exports = global.Promise; /***/ }), -/* 169 */ +/* 172 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/promise-resolve.js ***! \***********************************************************/ @@ -11123,7 +11206,7 @@ module.exports = global.Promise; var anObject = __webpack_require__(/*! ../internals/an-object */ 37); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 105); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 106); module.exports = function (C, x) { anObject(C); @@ -11136,7 +11219,7 @@ module.exports = function (C, x) { /***/ }), -/* 170 */ +/* 173 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/regexp-flags.js ***! \********************************************************/ @@ -11164,7 +11247,7 @@ module.exports = function () { /***/ }), -/* 171 */ +/* 174 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.split.js ***! \*********************************************************/ @@ -11173,14 +11256,14 @@ module.exports = function () { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); -var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 226); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 229); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 144); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); var fails = __webpack_require__(/*! ../internals/fails */ 36); @@ -11309,7 +11392,7 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal /***/ }), -/* 172 */ +/* 175 */ /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.link.js ***! \********************************************************/ @@ -11318,9 +11401,9 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var createHTML = __webpack_require__(/*! ../internals/create-html */ 283); -var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 284); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 288); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 289); // `String.prototype.link` method // https://tc39.github.io/ecma262/#sec-string.prototype.link @@ -11332,7 +11415,7 @@ $({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, { /***/ }), -/* 173 */ +/* 176 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/a-function.js ***! \***********************************************************/ @@ -11348,46 +11431,10 @@ module.exports = function (it) { /***/ }), -/* 174 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js-pure/internals/classof.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 198); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; -}; - - -/***/ }), -/* 175 */, -/* 176 */, /* 177 */, -/* 178 */ +/* 178 */, +/* 179 */, +/* 180 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/native-weak-map.js ***! \***********************************************************/ @@ -11396,7 +11443,7 @@ module.exports = function (it) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); var WeakMap = global.WeakMap; @@ -11404,7 +11451,7 @@ module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSour /***/ }), -/* 179 */ +/* 181 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! \***********************************************************************/ @@ -11413,8 +11460,8 @@ module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSour /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ 42); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 180); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 182); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); module.exports = function (target, source) { @@ -11429,7 +11476,7 @@ module.exports = function (target, source) { /***/ }), -/* 180 */ +/* 182 */ /*!****************************************************!*\ !*** ./node_modules/core-js/internals/own-keys.js ***! \****************************************************/ @@ -11438,8 +11485,8 @@ module.exports = function (target, source) { /***/ (function(module, exports, __webpack_require__) { var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 181); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 166); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 183); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 169); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); // all object keys, includes non-enumerable and symbols @@ -11451,7 +11498,7 @@ module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { /***/ }), -/* 181 */ +/* 183 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! \*************************************************************************/ @@ -11459,7 +11506,7 @@ module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 141); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); var hiddenKeys = enumBugKeys.concat('length', 'prototype'); @@ -11472,7 +11519,7 @@ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { /***/ }), -/* 182 */ +/* 184 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-absolute-index.js ***! \*************************************************************/ @@ -11480,7 +11527,7 @@ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); var max = Math.max; var min = Math.min; @@ -11495,7 +11542,7 @@ module.exports = function (index, length) { /***/ }), -/* 183 */ +/* 185 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! \*************************************************************/ @@ -11503,7 +11550,7 @@ module.exports = function (index, length) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); module.exports = NATIVE_SYMBOL // eslint-disable-next-line no-undef @@ -11513,7 +11560,7 @@ module.exports = NATIVE_SYMBOL /***/ }), -/* 184 */ +/* 186 */ /*!************************************************************!*\ !*** ./node_modules/core-js/internals/object-to-string.js ***! \************************************************************/ @@ -11523,8 +11570,8 @@ module.exports = NATIVE_SYMBOL "use strict"; -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classof = __webpack_require__(/*! ../internals/classof */ 131); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var classof = __webpack_require__(/*! ../internals/classof */ 132); // `Object.prototype.toString` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.tostring @@ -11534,7 +11581,7 @@ module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { /***/ }), -/* 185 */ +/* 187 */ /*!************************************************************!*\ !*** ./node_modules/core-js/internals/string-multibyte.js ***! \************************************************************/ @@ -11542,8 +11589,8 @@ module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); // `String.prototype.{ codePointAt, at }` methods implementation var createMethod = function (CONVERT_TO_STRING) { @@ -11572,7 +11619,7 @@ module.exports = { /***/ }), -/* 186 */ +/* 188 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.iterator.js ***! \***********************************************************/ @@ -11582,11 +11629,11 @@ module.exports = { "use strict"; -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 216); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 217); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 219); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 220); var ARRAY_ITERATOR = 'Array Iterator'; var setInternalState = InternalStateModule.set; @@ -11637,7 +11684,7 @@ addToUnscopables('entries'); /***/ }), -/* 187 */ +/* 189 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/redefine-all.js ***! \********************************************************/ @@ -11654,7 +11701,7 @@ module.exports = function (target, src, options) { /***/ }), -/* 188 */ +/* 190 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/set-species.js ***! \*******************************************************/ @@ -11685,7 +11732,7 @@ module.exports = function (CONSTRUCTOR_NAME) { /***/ }), -/* 189 */ +/* 191 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/an-instance.js ***! \*******************************************************/ @@ -11701,7 +11748,7 @@ module.exports = function (it, Constructor, name) { /***/ }), -/* 190 */ +/* 192 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! \********************************************************************/ @@ -11710,7 +11757,7 @@ module.exports = function (it, Constructor, name) { /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); var ITERATOR = wellKnownSymbol('iterator'); var ArrayPrototype = Array.prototype; @@ -11722,7 +11769,7 @@ module.exports = function (it) { /***/ }), -/* 191 */ +/* 193 */ /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/get-iterator-method.js ***! \***************************************************************/ @@ -11730,8 +11777,8 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var classof = __webpack_require__(/*! ../internals/classof */ 131); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); +var classof = __webpack_require__(/*! ../internals/classof */ 132); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var ITERATOR = wellKnownSymbol('iterator'); @@ -11744,7 +11791,7 @@ module.exports = function (it) { /***/ }), -/* 192 */ +/* 194 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! \****************************************************************************/ @@ -11768,7 +11815,7 @@ module.exports = function (iterator, fn, value, ENTRIES) { /***/ }), -/* 193 */ +/* 195 */ /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! \**************************************************************************/ @@ -11817,7 +11864,7 @@ module.exports = function (exec, SKIP_CLOSING) { /***/ }), -/* 194 */ +/* 196 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/microtask.js ***! \*****************************************************/ @@ -11826,10 +11873,10 @@ module.exports = function (exec, SKIP_CLOSING) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var macrotask = __webpack_require__(/*! ../internals/task */ 132).set; -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var macrotask = __webpack_require__(/*! ../internals/task */ 133).set; +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; var process = global.process; @@ -11906,7 +11953,7 @@ module.exports = queueMicrotask || function (fn) { /***/ }), -/* 195 */ +/* 197 */ /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/host-report-errors.js ***! \**************************************************************/ @@ -11925,7 +11972,7 @@ module.exports = function (a, b) { /***/ }), -/* 196 */ +/* 198 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.match.js ***! \*********************************************************/ @@ -11934,12 +11981,12 @@ module.exports = function (a, b) { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); // @@match logic fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) { @@ -11980,7 +12027,7 @@ fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCal /***/ }), -/* 197 */ +/* 199 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/indexed-object.js ***! \***************************************************************/ @@ -11988,8 +12035,8 @@ fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCal /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 198); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 156); var split = ''.split; @@ -12004,23 +12051,7 @@ module.exports = fails(function () { /***/ }), -/* 198 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/classof-raw.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 199 */ +/* 200 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/require-object-coercible.js ***! \*************************************************************************/ @@ -12029,7 +12060,7 @@ module.exports = function (it) { /***/ (function(module, exports) { // `RequireObjectCoercible` abstract operation -// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +// https://tc39.es/ecma262/#sec-requireobjectcoercible module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; @@ -12037,7 +12068,7 @@ module.exports = function (it) { /***/ }), -/* 200 */ +/* 201 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-primitive.js ***! \*************************************************************/ @@ -12045,10 +12076,10 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); // `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive +// https://tc39.es/ecma262/#sec-toprimitive // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function (input, PREFERRED_STRING) { @@ -12062,7 +12093,7 @@ module.exports = function (input, PREFERRED_STRING) { /***/ }), -/* 201 */ +/* 202 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-integer.js ***! \***********************************************************/ @@ -12074,51 +12105,63 @@ var ceil = Math.ceil; var floor = Math.floor; // `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger +// https://tc39.es/ecma262/#sec-tointeger module.exports = function (argument) { return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); }; /***/ }), -/* 202 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js-pure/internals/shared.js ***! - \*******************************************************/ +/* 203 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/engine-v8-version.js ***! + \******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 295); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 203); +var global = __webpack_require__(/*! ../internals/global */ 66); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 296); -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8; +var match, version; -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.1.3', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' -}); +if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; +} else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } +} + +module.exports = version && +version; /***/ }), -/* 203 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js-pure/internals/is-pure.js ***! - \********************************************************/ +/* 204 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared-store.js ***! + \*************************************************************/ /*! no static exports found */ /*! all exports used */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -module.exports = true; +var global = __webpack_require__(/*! ../internals/global */ 66); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 302); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; /***/ }), -/* 204 */ +/* 205 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/shared-key.js ***! \***********************************************************/ @@ -12126,8 +12169,8 @@ module.exports = true; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(/*! ../internals/shared */ 202); -var uid = __webpack_require__(/*! ../internals/uid */ 240); +var shared = __webpack_require__(/*! ../internals/shared */ 244); +var uid = __webpack_require__(/*! ../internals/uid */ 245); var keys = shared('keys'); @@ -12137,7 +12180,19 @@ module.exports = function (key) { /***/ }), -/* 205 */ +/* 206 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-pure.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), +/* 207 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/hidden-keys.js ***! \************************************************************/ @@ -12149,7 +12204,26 @@ module.exports = {}; /***/ }), -/* 206 */ +/* 208 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-string-tag-support.js ***! + \**********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), +/* 209 */ /*!***********************************!*\ !*** ./dev/Component/Checkbox.js ***! \***********************************/ @@ -12161,14 +12235,12 @@ module.exports = {}; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractCheckbox */ 162); +/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractCheckbox */ 165); -var CheckboxComponent = -/*#__PURE__*/ -function (_AbstractCheckbox) { +var CheckboxComponent = /*#__PURE__*/function (_AbstractCheckbox) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(CheckboxComponent, _AbstractCheckbox); function CheckboxComponent() { @@ -12181,7 +12253,7 @@ function (_AbstractCheckbox) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(CheckboxComponent, 'CheckboxComponent')); /***/ }), -/* 207 */ +/* 210 */ /*!**********************************!*\ !*** ./dev/Common/HtmlEditor.js ***! \**********************************/ @@ -12195,11 +12267,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HtmlEditor; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_4__); @@ -12226,9 +12298,7 @@ __webpack_require__.r(__webpack_exports__); -var HtmlEditor = -/*#__PURE__*/ -function () { +var HtmlEditor = /*#__PURE__*/function () { /** * @param {Object} element * @param {Function=} onBlur @@ -12633,7 +12703,7 @@ function () { /***/ }), -/* 208 */ +/* 211 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js ***! \*******************************************************************************/ @@ -12641,10 +12711,10 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ 285); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ 290); /***/ }), -/* 209 */ +/* 212 */ /*!**************************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/last-index-of.js ***! \**************************************************************************************/ @@ -12652,10 +12722,10 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/last-index-of */ 323); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/last-index-of */ 329); /***/ }), -/* 210 */ +/* 213 */ /*!*********************************!*\ !*** ./dev/External/Opentip.js ***! \*********************************/ @@ -12701,7 +12771,7 @@ Opentip.styles.rainloopErrorTip = { /***/ }), -/* 211 */ +/* 214 */ /*!*****************************************!*\ !*** ./node_modules/pikaday/pikaday.js ***! \*****************************************/ @@ -12723,7 +12793,7 @@ Opentip.styles.rainloopErrorTip = { if (true) { // CommonJS module // Load moment.js as an optional dependency - try { moment = __webpack_require__(/*! moment */ 97); } catch (e) {} + try { moment = __webpack_require__(/*! moment */ 98); } catch (e) {} module.exports = factory(moment); } else {} }(this, function (moment) @@ -13958,7 +14028,7 @@ Opentip.styles.rainloopErrorTip = { /***/ }), -/* 212 */ +/* 215 */ /*!************************************!*\ !*** external "window.Autolinker" ***! \************************************/ @@ -13969,7 +14039,7 @@ Opentip.styles.rainloopErrorTip = { module.exports = window.Autolinker; /***/ }), -/* 213 */ +/* 216 */ /*!****************************!*\ !*** ./dev/Common/Mime.js ***! \****************************/ @@ -14137,8 +14207,8 @@ var Mime = { /***/ }), -/* 214 */, -/* 215 */ +/* 217 */, +/* 218 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/object-keys.js ***! \*******************************************************/ @@ -14146,7 +14216,7 @@ var Mime = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 141); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); // `Object.keys` method @@ -14157,7 +14227,7 @@ module.exports = Object.keys || function keys(O) { /***/ }), -/* 216 */ +/* 219 */ /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/add-to-unscopables.js ***! \**************************************************************/ @@ -14166,7 +14236,7 @@ module.exports = Object.keys || function keys(O) { /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var create = __webpack_require__(/*! ../internals/object-create */ 149); +var create = __webpack_require__(/*! ../internals/object-create */ 151); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); var UNSCOPABLES = wellKnownSymbol('unscopables'); @@ -14188,7 +14258,7 @@ module.exports = function (key) { /***/ }), -/* 217 */ +/* 220 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/define-iterator.js ***! \***********************************************************/ @@ -14198,17 +14268,17 @@ module.exports = function (key) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 227); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 218); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 230); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 152); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 221); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 167); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 170); var IteratorPrototype = IteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; @@ -14290,7 +14360,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I /***/ }), -/* 218 */ +/* 221 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! \*******************************************************************/ @@ -14299,7 +14369,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 229); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 232); // `Object.setPrototypeOf` method // https://tc39.github.io/ecma262/#sec-object.setprototypeof @@ -14325,7 +14395,7 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /***/ }), -/* 219 */ +/* 222 */ /*!***************************************************************************!*\ !*** ./node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***! \***************************************************************************/ @@ -14333,27 +14403,28 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ./es.array.iterator */ 220); -var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 308); -var global = __webpack_require__(/*! ../internals/global */ 75); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +__webpack_require__(/*! ./es.array.iterator */ 223); +var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 314); +var global = __webpack_require__(/*! ../internals/global */ 66); +var classof = __webpack_require__(/*! ../internals/classof */ 147); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); for (var COLLECTION_NAME in DOMIterables) { var Collection = global[COLLECTION_NAME]; var CollectionPrototype = Collection && Collection.prototype; - if (CollectionPrototype && !CollectionPrototype[TO_STRING_TAG]) { - hide(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); } Iterators[COLLECTION_NAME] = Iterators.Array; } /***/ }), -/* 220 */ +/* 223 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.iterator.js ***! \****************************************************************/ @@ -14363,26 +14434,26 @@ for (var COLLECTION_NAME in DOMIterables) { "use strict"; -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 239); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 292); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 296); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 243); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 299); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 303); var ARRAY_ITERATOR = 'Array Iterator'; var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); // `Array.prototype.entries` method -// https://tc39.github.io/ecma262/#sec-array.prototype.entries +// https://tc39.es/ecma262/#sec-array.prototype.entries // `Array.prototype.keys` method -// https://tc39.github.io/ecma262/#sec-array.prototype.keys +// https://tc39.es/ecma262/#sec-array.prototype.keys // `Array.prototype.values` method -// https://tc39.github.io/ecma262/#sec-array.prototype.values +// https://tc39.es/ecma262/#sec-array.prototype.values // `Array.prototype[@@iterator]` method -// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator // `CreateArrayIterator` internal method -// https://tc39.github.io/ecma262/#sec-createarrayiterator +// https://tc39.es/ecma262/#sec-createarrayiterator module.exports = defineIterator(Array, 'Array', function (iterated, kind) { setInternalState(this, { type: ARRAY_ITERATOR, @@ -14391,7 +14462,7 @@ module.exports = defineIterator(Array, 'Array', function (iterated, kind) { kind: kind // kind }); // `%ArrayIteratorPrototype%.next` method -// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next }, function () { var state = getInternalState(this); var target = state.target; @@ -14407,18 +14478,18 @@ module.exports = defineIterator(Array, 'Array', function (iterated, kind) { }, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% -// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject -// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject Iterators.Arguments = Iterators.Array; -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), -/* 221 */ +/* 224 */ /*!*******************************!*\ !*** ./dev/View/Popup/Ask.js ***! \*******************************/ @@ -14453,9 +14524,7 @@ var _dec, _class; var AskPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["popup"])({ name: 'View/Popup/Ask', templateID: 'PopupsAsk' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AskPopupView, _AbstractViewNext); function AskPopupView() { @@ -14580,9 +14649,9 @@ function (_AbstractViewNext) { /***/ }), -/* 222 */, -/* 223 */, -/* 224 */ +/* 225 */, +/* 226 */, +/* 227 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/object-define-properties.js ***! \********************************************************************/ @@ -14593,7 +14662,7 @@ function (_AbstractViewNext) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 215); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 218); // `Object.defineProperties` method // https://tc39.github.io/ecma262/#sec-object.defineproperties @@ -14609,7 +14678,7 @@ module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperti /***/ }), -/* 225 */ +/* 228 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-uses-to-length.js ***! \***********************************************************************/ @@ -14647,7 +14716,7 @@ module.exports = function (METHOD_NAME, options) { /***/ }), -/* 226 */ +/* 229 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-regexp.js ***! \*****************************************************/ @@ -14656,7 +14725,7 @@ module.exports = function (METHOD_NAME, options) { /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var MATCH = wellKnownSymbol('match'); @@ -14670,7 +14739,7 @@ module.exports = function (it) { /***/ }), -/* 227 */ +/* 230 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***! \***********************************************************************/ @@ -14680,11 +14749,11 @@ module.exports = function (it) { "use strict"; -var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 167).IteratorPrototype; -var create = __webpack_require__(/*! ../internals/object-create */ 149); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); +var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 170).IteratorPrototype; +var create = __webpack_require__(/*! ../internals/object-create */ 151); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); var returnThis = function () { return this; }; @@ -14698,7 +14767,7 @@ module.exports = function (IteratorConstructor, NAME, next) { /***/ }), -/* 228 */ +/* 231 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! \********************************************************************/ @@ -14716,7 +14785,7 @@ module.exports = !fails(function () { /***/ }), -/* 229 */ +/* 232 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/a-possible-prototype.js ***! \****************************************************************/ @@ -14734,7 +14803,7 @@ module.exports = function (it) { /***/ }), -/* 230 */ +/* 233 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js/modules/web.dom-collections.iterator.js ***! \**********************************************************************/ @@ -14743,9 +14812,9 @@ module.exports = function (it) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 231); -var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 186); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 234); +var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 188); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var ITERATOR = wellKnownSymbol('iterator'); @@ -14778,7 +14847,7 @@ for (var COLLECTION_NAME in DOMIterables) { /***/ }), -/* 231 */ +/* 234 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/dom-iterables.js ***! \*********************************************************/ @@ -14824,8 +14893,8 @@ module.exports = { /***/ }), -/* 232 */, -/* 233 */ +/* 235 */, +/* 236 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***! \*****************************************************************/ @@ -14860,7 +14929,7 @@ exports.BROKEN_CARET = fails(function () { /***/ }), -/* 234 */ +/* 237 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/reduce.js ***! \*********************************************************/ @@ -14868,7 +14937,7 @@ exports.BROKEN_CARET = fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var reduce = __webpack_require__(/*! ../array/virtual/reduce */ 286); +var reduce = __webpack_require__(/*! ../array/virtual/reduce */ 291); var ArrayPrototype = Array.prototype; @@ -14879,7 +14948,7 @@ module.exports = function (it) { /***/ }), -/* 235 */ +/* 238 */ /*!***********************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js ***! \***********************************************************************************/ @@ -14887,18 +14956,18 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 288); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 200); -var has = __webpack_require__(/*! ../internals/has */ 95); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 236); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 293); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 201); +var has = __webpack_require__(/*! ../internals/has */ 78); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 239); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject(O); P = toPrimitive(P, true); @@ -14910,7 +14979,7 @@ exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnProper /***/ }), -/* 236 */ +/* 239 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/ie8-dom-define.js ***! \***************************************************************/ @@ -14918,9 +14987,9 @@ exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnProper /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 237); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 240); // Thank's IE8 for his funny defineProperty module.exports = !DESCRIPTORS && !fails(function () { @@ -14931,7 +15000,7 @@ module.exports = !DESCRIPTORS && !fails(function () { /***/ }), -/* 237 */ +/* 240 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/document-create-element.js ***! \************************************************************************/ @@ -14939,8 +15008,8 @@ module.exports = !DESCRIPTORS && !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var global = __webpack_require__(/*! ../internals/global */ 66); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); var document = global.document; // typeof document.createElement is 'object' in old IE @@ -14952,15 +15021,15 @@ module.exports = function (it) { /***/ }), -/* 238 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/bind-context.js ***! - \*************************************************************/ +/* 241 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-bind-context.js ***! + \**********************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); // optional / simple context binding module.exports = function (fn, that, length) { @@ -14987,7 +15056,29 @@ module.exports = function (fn, that, length) { /***/ }), -/* 239 */ +/* 242 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-built-in.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(/*! ../internals/path */ 97); +var global = __webpack_require__(/*! ../internals/global */ 66); + +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; +}; + + +/***/ }), +/* 243 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/add-to-unscopables.js ***! \*******************************************************************/ @@ -14999,7 +15090,28 @@ module.exports = function () { /* empty */ }; /***/ }), -/* 240 */ +/* 244 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 206); +var store = __webpack_require__(/*! ../internals/shared-store */ 204); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.8.2', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), +/* 245 */ /*!****************************************************!*\ !*** ./node_modules/core-js-pure/internals/uid.js ***! \****************************************************/ @@ -15016,7 +15128,7 @@ module.exports = function (key) { /***/ }), -/* 241 */ +/* 246 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/iterators-core.js ***! \***************************************************************/ @@ -15026,11 +15138,11 @@ module.exports = function (key) { "use strict"; -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 242); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var has = __webpack_require__(/*! ../internals/has */ 95); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 203); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 247); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var has = __webpack_require__(/*! ../internals/has */ 78); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 206); var ITERATOR = wellKnownSymbol('iterator'); var BUGGY_SAFARI_ITERATORS = false; @@ -15038,7 +15150,7 @@ var BUGGY_SAFARI_ITERATORS = false; var returnThis = function () { return this; }; // `%IteratorPrototype%` object -// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; if ([].keys) { @@ -15054,7 +15166,9 @@ if ([].keys) { if (IteratorPrototype == undefined) IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); +if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); +} module.exports = { IteratorPrototype: IteratorPrototype, @@ -15063,7 +15177,7 @@ module.exports = { /***/ }), -/* 242 */ +/* 247 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-get-prototype-of.js ***! \************************************************************************/ @@ -15071,16 +15185,16 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var has = __webpack_require__(/*! ../internals/has */ 95); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 204); -var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 298); +var has = __webpack_require__(/*! ../internals/has */ 78); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 205); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 305); var IE_PROTO = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; // `Object.getPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.getprototypeof +// https://tc39.es/ecma262/#sec-object.getprototypeof module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; @@ -15091,7 +15205,25 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /***/ }), -/* 243 */ +/* 248 */ +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/native-symbol.js ***! + \**************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(/*! ../internals/fails */ 55); + +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); +}); + + +/***/ }), +/* 249 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-create.js ***! \**************************************************************/ @@ -15099,59 +15231,88 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 300); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 247); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 205); -var html = __webpack_require__(/*! ../internals/html */ 302); -var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 237); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 204); -var IE_PROTO = sharedKey('IE_PROTO'); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 307); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 253); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 207); +var html = __webpack_require__(/*! ../internals/html */ 309); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 240); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 205); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; -var PROTOTYPE = 'prototype'; -var Empty = function () { /* empty */ }; +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; // Create object with fake `null` prototype: use iframe Object with cleared prototype -var createDict = function () { +var NullProtoObjectViaIFrame = function () { // Thrash, waste and sodomy: IE GC bug var iframe = documentCreateElement('iframe'); - var length = enumBugKeys.length; - var lt = '<'; - var script = 'script'; - var gt = '>'; - var js = 'java' + script + ':'; + var JS = 'java' + SCRIPT + ':'; var iframeDocument; iframe.style.display = 'none'; html.appendChild(iframe); - iframe.src = String(js); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); - iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt); + iframeDocument.write(scriptTag('document.F=Object')); iframeDocument.close(); - createDict = iframeDocument.F; - while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]]; - return createDict(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); }; +hiddenKeys[IE_PROTO] = true; + // `Object.create` method -// https://tc39.github.io/ecma262/#sec-object.create +// https://tc39.es/ecma262/#sec-object.create module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO] = O; - } else result = createDict(); + } else result = NullProtoObject(); return Properties === undefined ? result : defineProperties(result, Properties); }; -hiddenKeys[IE_PROTO] = true; - /***/ }), -/* 244 */ +/* 250 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-keys.js ***! \************************************************************/ @@ -15159,18 +15320,18 @@ hiddenKeys[IE_PROTO] = true; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 301); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 247); +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 308); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 253); // `Object.keys` method -// https://tc39.github.io/ecma262/#sec-object.keys +// https://tc39.es/ecma262/#sec-object.keys module.exports = Object.keys || function keys(O) { return internalObjectKeys(O, enumBugKeys); }; /***/ }), -/* 245 */ +/* 251 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-includes.js ***! \***************************************************************/ @@ -15178,9 +15339,9 @@ module.exports = Object.keys || function keys(O) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 246); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 252); // `Array.prototype.{ indexOf, includes }` methods implementation var createMethod = function (IS_INCLUDES) { @@ -15204,16 +15365,16 @@ var createMethod = function (IS_INCLUDES) { module.exports = { // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes + // https://tc39.es/ecma262/#sec-array.prototype.includes includes: createMethod(true), // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + // https://tc39.es/ecma262/#sec-array.prototype.indexof indexOf: createMethod(false) }; /***/ }), -/* 246 */ +/* 252 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-absolute-index.js ***! \******************************************************************/ @@ -15221,14 +15382,14 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 202); var max = Math.max; var min = Math.min; // Helper for a popular repeating case of the spec: // Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). module.exports = function (index, length) { var integer = toInteger(index); return integer < 0 ? max(integer + length, 0) : min(integer, length); @@ -15236,7 +15397,7 @@ module.exports = function (index, length) { /***/ }), -/* 247 */ +/* 253 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/enum-bug-keys.js ***! \**************************************************************/ @@ -15257,7 +15418,7 @@ module.exports = [ /***/ }), -/* 248 */ +/* 254 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/set-to-string-tag.js ***! \******************************************************************/ @@ -15265,14 +15426,14 @@ module.exports = [ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 136).f; -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var has = __webpack_require__(/*! ../internals/has */ 95); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 304); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 208); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 137).f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var has = __webpack_require__(/*! ../internals/has */ 78); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 310); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var METHOD_REQUIRED = toString !== ({}).toString; module.exports = function (it, TAG, STATIC, SET_METHOD) { if (it) { @@ -15280,13 +15441,15 @@ module.exports = function (it, TAG, STATIC, SET_METHOD) { if (!has(target, TO_STRING_TAG)) { defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); } - if (SET_METHOD && METHOD_REQUIRED) hide(target, 'toString', toString); + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } } }; /***/ }), -/* 249 */ +/* 255 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/create-property.js ***! \****************************************************************/ @@ -15296,9 +15459,9 @@ module.exports = function (it, TAG, STATIC, SET_METHOD) { "use strict"; -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 200); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 201); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 137); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); module.exports = function (object, key, value) { var propertyKey = toPrimitive(key); @@ -15308,7 +15471,7 @@ module.exports = function (object, key, value) { /***/ }), -/* 250 */ +/* 256 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-species-create.js ***! \*********************************************************************/ @@ -15316,14 +15479,14 @@ module.exports = function (object, key, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); var SPECIES = wellKnownSymbol('species'); // `ArraySpeciesCreate` abstract operation -// https://tc39.github.io/ecma262/#sec-arrayspeciescreate +// https://tc39.es/ecma262/#sec-arrayspeciescreate module.exports = function (originalArray, length) { var C; if (isArray(originalArray)) { @@ -15339,7 +15502,7 @@ module.exports = function (originalArray, length) { /***/ }), -/* 251 */ +/* 257 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/whitespaces.js ***! \************************************************************/ @@ -15353,25 +15516,7 @@ module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u /***/ }), -/* 252 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/is-array.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); - -// `IsArray` abstract operation -// https://tc39.github.io/ecma262/#sec-isarray -module.exports = Array.isArray || function isArray(arg) { - return classof(arg) == 'Array'; -}; - - -/***/ }), -/* 253 */ +/* 258 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/for-each.js ***! \***************************************************************/ @@ -15379,9 +15524,9 @@ module.exports = Array.isArray || function isArray(arg) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 219); -var forEach = __webpack_require__(/*! ../array/virtual/for-each */ 350); -var classof = __webpack_require__(/*! ../../internals/classof */ 174); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 222); +var forEach = __webpack_require__(/*! ../array/virtual/for-each */ 356); +var classof = __webpack_require__(/*! ../../internals/classof */ 147); var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -15398,7 +15543,7 @@ module.exports = function (it) { /***/ }), -/* 254 */ +/* 259 */ /*!*************************************!*\ !*** ./dev/View/Popup/Languages.js ***! \*************************************/ @@ -15433,9 +15578,7 @@ var _dec, _class; var LanguagesPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["popup"])({ name: 'View/Popup/Languages', templateID: 'PopupsLanguages' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(LanguagesPopupView, _AbstractViewNext); function LanguagesPopupView() { @@ -15505,7 +15648,7 @@ function (_AbstractViewNext) { /***/ }), -/* 255 */ +/* 260 */ /*!**************************!*\ !*** ./dev/bootstrap.js ***! \**************************/ @@ -15514,7 +15657,7 @@ function (_AbstractViewNext) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__); @@ -15523,7 +15666,7 @@ function (_AbstractViewNext) { /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Plugins */ 39); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Model/Email */ 80); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Model/Email */ 82); @@ -15551,15 +15694,21 @@ function (_AbstractViewNext) { rl.Enums = Common_Enums__WEBPACK_IMPORTED_MODULE_4__; window__WEBPACK_IMPORTED_MODULE_1___default.a.rl = rl; + var start = function start() { + window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { + Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].removeClass('no-js rl-booted-trigger').addClass('rl-booted'); + App.bootstart(); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms); + }; + window__WEBPACK_IMPORTED_MODULE_1___default.a.__APP_BOOT = function (fErrorCallback) { Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["domReady"])(function () { window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { - if (window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES && window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]) { + if (window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rainloop-templates-id')) { + start(); + } else if (window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES && window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]) { window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rl-templates').innerHTML = window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]; - window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { - Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].removeClass('no-js rl-booted-trigger').addClass('rl-booted'); - App.bootstart(); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms); + start(); } else { fErrorCallback(); } @@ -15571,7 +15720,7 @@ function (_AbstractViewNext) { }); /***/ }), -/* 256 */ +/* 261 */ /*!**********************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/object/create.js ***! \**********************************************************************/ @@ -15579,10 +15728,10 @@ function (_AbstractViewNext) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ 360); +module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ 366); /***/ }), -/* 257 */ +/* 262 */ /*!***********************************!*\ !*** ./dev/Stores/AbstractApp.js ***! \***********************************/ @@ -15600,9 +15749,7 @@ module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ -var AbstractAppStore = -/*#__PURE__*/ -function () { +var AbstractAppStore = /*#__PURE__*/function () { function AbstractAppStore() { this.allowLanguagesOnSettings = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true); this.allowLanguagesOnLogin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true); @@ -15634,7 +15781,7 @@ function () { /***/ }), -/* 258 */ +/* 263 */ /*!***********************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js ***! \***********************************************************************/ @@ -15642,10 +15789,10 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ 366); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ 372); /***/ }), -/* 259 */ +/* 264 */ /*!*************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reverse.js ***! \*************************************************************************/ @@ -15653,10 +15800,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse */ 370); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse */ 376); /***/ }), -/* 260 */ +/* 265 */ /*!************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js ***! \************************************************************************/ @@ -15664,10 +15811,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce */ 374); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce */ 380); /***/ }), -/* 261 */ +/* 266 */ /*!********************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js ***! \********************************************************************/ @@ -15675,10 +15822,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce * /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 375); +module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 381); /***/ }), -/* 262 */ +/* 267 */ /*!**************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js ***! \**************************************************************************/ @@ -15686,10 +15833,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 37 /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each */ 378); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each */ 384); /***/ }), -/* 263 */ +/* 268 */ /*!************************************!*\ !*** ./dev/Remote/AbstractAjax.js ***! \************************************/ @@ -15724,9 +15871,7 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each -var AbstractAjaxRemote = -/*#__PURE__*/ -function () { +var AbstractAjaxRemote = /*#__PURE__*/function () { function AbstractAjaxRemote() { this.oRequests = {}; } @@ -15957,7 +16102,7 @@ function () { /***/ }), -/* 264 */ +/* 269 */ /*!****************************************!*\ !*** ./dev/Screen/AbstractSettings.js ***! \****************************************/ @@ -15980,7 +16125,7 @@ function () { /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/AbstractScreen */ 137); +/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/AbstractScreen */ 138); @@ -15992,9 +16137,7 @@ function () { -var AbstractSettingsScreen = -/*#__PURE__*/ -function (_AbstractScreen) { +var AbstractSettingsScreen = /*#__PURE__*/function (_AbstractScreen) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractSettingsScreen, _AbstractScreen); /** @@ -16170,7 +16313,7 @@ function (_AbstractScreen) { /***/ }), -/* 265 */ +/* 270 */ /*!*****************************!*\ !*** ./dev/App/Abstract.js ***! \*****************************/ @@ -16193,7 +16336,7 @@ function (_AbstractScreen) { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! key */ 21); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ssm */ 139); +/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ssm */ 140); /* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(ssm__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2); @@ -16202,11 +16345,11 @@ function (_AbstractScreen) { /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Events */ 24); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Language */ 70); -/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Theme */ 114); +/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Language */ 71); +/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Theme */ 115); /* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Stores/Social */ 29); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/AbstractBoot */ 266); +/* harmony import */ var Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/AbstractBoot */ 271); @@ -16228,9 +16371,7 @@ function (_AbstractScreen) { -var AbstractApp = -/*#__PURE__*/ -function (_AbstractBoot) { +var AbstractApp = /*#__PURE__*/function (_AbstractBoot) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractApp, _AbstractBoot); /** @@ -16449,22 +16590,22 @@ function (_AbstractBoot) { // log('Ps' + 'ss, hac' + 'kers! The' + 're\'s not' + 'hing inte' + 'resting :' + ')'); Common_Events__WEBPACK_IMPORTED_MODULE_13__[/* pub */ "a"]('rl.bootstart'); var mobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('mobile'); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('SaveTrigger', __webpack_require__(/*! Component/SaveTrigger */ 381).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Input', __webpack_require__(/*! Component/Input */ 382).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Select', __webpack_require__(/*! Component/Select */ 383).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Radio', __webpack_require__(/*! Component/Radio */ 384).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('TextArea', __webpack_require__(/*! Component/TextArea */ 385).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Date', __webpack_require__(/*! Component/Date */ 386).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('x-script', __webpack_require__(/*! Component/Script */ 387).default); // ko.components.register('svg-icon', require('Component/SvgIcon').default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('SaveTrigger', __webpack_require__(/*! Component/SaveTrigger */ 387).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Input', __webpack_require__(/*! Component/Input */ 388).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Select', __webpack_require__(/*! Component/Select */ 389).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Radio', __webpack_require__(/*! Component/Radio */ 390).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('TextArea', __webpack_require__(/*! Component/TextArea */ 391).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Date', __webpack_require__(/*! Component/Date */ 392).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('x-script', __webpack_require__(/*! Component/Script */ 393).default); // ko.components.register('svg-icon', require('Component/SvgIcon').default); if (Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('materialDesign') && Common_Globals__WEBPACK_IMPORTED_MODULE_8__["bAnimationSupported"]) { - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/MaterialDesign/Checkbox */ 388).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 206).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/MaterialDesign/Checkbox */ 394).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 209).default); } else { // ko.components.register('Checkbox', require('Component/Classic/Checkbox').default); // ko.components.register('CheckboxSimple', require('Component/Classic/Checkbox').default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/Checkbox */ 206).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 206).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/Checkbox */ 209).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 209).default); } Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["initOnStartOrLangChange"])(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["initNotificationLanguage"]); @@ -16547,7 +16688,7 @@ function (_AbstractBoot) { /***/ }), -/* 266 */ +/* 271 */ /*!***********************************!*\ !*** ./dev/Knoin/AbstractBoot.js ***! \***********************************/ @@ -16557,9 +16698,7 @@ function (_AbstractBoot) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractBoot; }); -var AbstractBoot = -/*#__PURE__*/ -function () { +var AbstractBoot = /*#__PURE__*/function () { function AbstractBoot() {} var _proto = AbstractBoot.prototype; @@ -16572,7 +16711,7 @@ function () { }(); /***/ }), -/* 267 */ +/* 272 */ /*!****************************************!*\ !*** ./dev/Component/AbstractRadio.js ***! \****************************************/ @@ -16583,17 +16722,17 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractRadio; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.iterator */ 186); +/* harmony import */ var core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.iterator */ 188); /* harmony import */ var core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator */ 230); +/* harmony import */ var core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator */ 233); /* harmony import */ var core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 113); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); @@ -16615,9 +16754,7 @@ function () { -var AbstractRadio = -/*#__PURE__*/ -function (_AbstractComponent) { +var AbstractRadio = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(AbstractRadio, _AbstractComponent); /** @@ -16664,11 +16801,11 @@ function (_AbstractComponent) { /***/ }), -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */, -/* 272 */ +/* 273 */, +/* 274 */, +/* 275 */, +/* 276 */, +/* 277 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.filter.js ***! \*********************************************************/ @@ -16677,10 +16814,10 @@ function (_AbstractComponent) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var $filter = __webpack_require__(/*! ../internals/array-iteration */ 347).filter; -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 349); -var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 225); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var $filter = __webpack_require__(/*! ../internals/array-iteration */ 352).filter; +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 355); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 228); var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); // Edge 14- issue @@ -16697,7 +16834,7 @@ $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGT /***/ }), -/* 273 */ +/* 278 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.search.js ***! \**********************************************************/ @@ -16706,11 +16843,11 @@ $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGT "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var sameValue = __webpack_require__(/*! ../internals/same-value */ 354); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var sameValue = __webpack_require__(/*! ../internals/same-value */ 360); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); // @@search logic fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) { @@ -16742,15 +16879,15 @@ fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybe /***/ }), -/* 274 */, -/* 275 */, -/* 276 */, -/* 277 */, -/* 278 */, /* 279 */, /* 280 */, /* 281 */, -/* 282 */ +/* 282 */, +/* 283 */, +/* 284 */, +/* 285 */, +/* 286 */, +/* 287 */ /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-is-strict.js ***! \******************************************************************/ @@ -16772,7 +16909,7 @@ module.exports = function (METHOD_NAME, argument) { /***/ }), -/* 283 */ +/* 288 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/create-html.js ***! \*******************************************************/ @@ -16780,7 +16917,7 @@ module.exports = function (METHOD_NAME, argument) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); var quot = /"/g; @@ -16795,7 +16932,7 @@ module.exports = function (string, tag, attribute, value) { /***/ }), -/* 284 */ +/* 289 */ /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/string-html-forced.js ***! \**************************************************************/ @@ -16816,7 +16953,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 285 */ +/* 290 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/reduce.js ***! \*************************************************************/ @@ -16824,11 +16961,13 @@ module.exports = function (METHOD_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); +var parent = __webpack_require__(/*! ../../es/instance/reduce */ 237); + +module.exports = parent; /***/ }), -/* 286 */ +/* 291 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/reduce.js ***! \**************************************************************/ @@ -16836,14 +16975,14 @@ module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.reduce */ 287); +__webpack_require__(/*! ../../../modules/es.array.reduce */ 292); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').reduce; /***/ }), -/* 287 */ +/* 292 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.reduce.js ***! \**************************************************************/ @@ -16854,12 +16993,21 @@ module.exports = entryVirtual('Array').reduce; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $reduce = __webpack_require__(/*! ../internals/array-reduce */ 290).left; -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var $reduce = __webpack_require__(/*! ../internals/array-reduce */ 295).left; +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); +var CHROME_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 203); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 297); + +var STRICT_METHOD = arrayMethodIsStrict('reduce'); +var USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 }); +// Chrome 80-82 has a critical bug +// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 +var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83; // `Array.prototype.reduce` method -// https://tc39.github.io/ecma262/#sec-array.prototype.reduce -$({ target: 'Array', proto: true, forced: sloppyArrayMethod('reduce') }, { +// https://tc39.es/ecma262/#sec-array.prototype.reduce +$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, { reduce: function reduce(callbackfn /* , initialValue */) { return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); } @@ -16867,7 +17015,7 @@ $({ target: 'Array', proto: true, forced: sloppyArrayMethod('reduce') }, { /***/ }), -/* 288 */ +/* 293 */ /*!******************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-property-is-enumerable.js ***! \******************************************************************************/ @@ -16884,7 +17032,7 @@ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); // `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { var descriptor = getOwnPropertyDescriptor(this, V); return !!descriptor && descriptor.enumerable; @@ -16892,7 +17040,7 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /***/ }), -/* 289 */ +/* 294 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-forced.js ***! \**********************************************************/ @@ -16900,7 +17048,7 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var fails = __webpack_require__(/*! ../internals/fails */ 55); var replacement = /#|\.prototype\./; @@ -16924,7 +17072,7 @@ module.exports = isForced; /***/ }), -/* 290 */ +/* 295 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-reduce.js ***! \*************************************************************/ @@ -16932,9 +17080,9 @@ module.exports = isForced; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 199); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); // `Array.prototype.{ reduce, reduceRight }` methods implementation @@ -16966,16 +17114,45 @@ var createMethod = function (IS_RIGHT) { module.exports = { // `Array.prototype.reduce` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + // https://tc39.es/ecma262/#sec-array.prototype.reduce left: createMethod(false), // `Array.prototype.reduceRight` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright + // https://tc39.es/ecma262/#sec-array.prototype.reduceright right: createMethod(true) }; /***/ }), -/* 291 */ +/* 296 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/engine-user-agent.js ***! + \******************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 242); + +module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + +/***/ }), +/* 297 */ +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/engine-is-node.js ***! + \***************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ 156); +var global = __webpack_require__(/*! ../internals/global */ 66); + +module.exports = classof(global.process) == 'process'; + + +/***/ }), +/* 298 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/values.js ***! \*************************************************************/ @@ -16983,9 +17160,9 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 219); -var values = __webpack_require__(/*! ../array/virtual/values */ 309); -var classof = __webpack_require__(/*! ../../internals/classof */ 174); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 222); +var values = __webpack_require__(/*! ../array/virtual/values */ 315); +var classof = __webpack_require__(/*! ../../internals/classof */ 147); var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -17002,7 +17179,7 @@ module.exports = function (it) { /***/ }), -/* 292 */ +/* 299 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/internal-state.js ***! \***************************************************************/ @@ -17010,13 +17187,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 293); -var global = __webpack_require__(/*! ../internals/global */ 75); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var objectHas = __webpack_require__(/*! ../internals/has */ 95); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 204); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 205); +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 300); +var global = __webpack_require__(/*! ../internals/global */ 66); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var objectHas = __webpack_require__(/*! ../internals/has */ 78); +var shared = __webpack_require__(/*! ../internals/shared-store */ 204); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 205); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 207); var WeakMap = global.WeakMap; var set, get, has; @@ -17035,11 +17213,12 @@ var getterFor = function (TYPE) { }; if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); + var store = shared.state || (shared.state = new WeakMap()); var wmget = store.get; var wmhas = store.has; var wmset = store.set; set = function (it, metadata) { + metadata.facade = it; wmset.call(store, it, metadata); return metadata; }; @@ -17053,7 +17232,8 @@ if (NATIVE_WEAK_MAP) { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { - hide(it, STATE, metadata); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { @@ -17074,7 +17254,7 @@ module.exports = { /***/ }), -/* 293 */ +/* 300 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/native-weak-map.js ***! \****************************************************************/ @@ -17082,30 +17262,39 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ 294); +var global = __webpack_require__(/*! ../internals/global */ 66); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 301); var WeakMap = global.WeakMap; -module.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap)); +module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); /***/ }), -/* 294 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/function-to-string.js ***! - \*******************************************************************/ +/* 301 */ +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/inspect-source.js ***! + \***************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(/*! ../internals/shared */ 202); +var store = __webpack_require__(/*! ../internals/shared-store */ 204); + +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; +} -module.exports = shared('native-function-to-string', Function.toString); +module.exports = store.inspectSource; /***/ }), -/* 295 */ +/* 302 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/set-global.js ***! \***********************************************************/ @@ -17113,12 +17302,12 @@ module.exports = shared('native-function-to-string', Function.toString); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var hide = __webpack_require__(/*! ../internals/hide */ 83); +var global = __webpack_require__(/*! ../internals/global */ 66); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); module.exports = function (key, value) { try { - hide(global, key, value); + createNonEnumerableProperty(global, key, value); } catch (error) { global[key] = value; } return value; @@ -17126,7 +17315,7 @@ module.exports = function (key, value) { /***/ }), -/* 296 */ +/* 303 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/define-iterator.js ***! \****************************************************************/ @@ -17137,16 +17326,16 @@ module.exports = function (key, value) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 297); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 242); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 305); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 248); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var redefine = __webpack_require__(/*! ../internals/redefine */ 307); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 203); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); -var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 241); +var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 304); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 247); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 311); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 254); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var redefine = __webpack_require__(/*! ../internals/redefine */ 313); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 206); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 246); var IteratorPrototype = IteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; @@ -17188,7 +17377,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I if (setPrototypeOf) { setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { - hide(CurrentIteratorPrototype, ITERATOR, returnThis); + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); } } // Set @@toStringTag to native iterators @@ -17205,7 +17394,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I // define iterator if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { - hide(IterablePrototype, ITERATOR, defaultIterator); + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); } Iterators[NAME] = defaultIterator; @@ -17228,7 +17417,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I /***/ }), -/* 297 */ +/* 304 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/create-iterator-constructor.js ***! \****************************************************************************/ @@ -17238,11 +17427,11 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I "use strict"; -var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 241).IteratorPrototype; -var create = __webpack_require__(/*! ../internals/object-create */ 243); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 248); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); +var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 246).IteratorPrototype; +var create = __webpack_require__(/*! ../internals/object-create */ 249); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 254); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); var returnThis = function () { return this; }; @@ -17256,7 +17445,7 @@ module.exports = function (IteratorConstructor, NAME, next) { /***/ }), -/* 298 */ +/* 305 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/correct-prototype-getter.js ***! \*************************************************************************/ @@ -17264,7 +17453,7 @@ module.exports = function (IteratorConstructor, NAME, next) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var fails = __webpack_require__(/*! ../internals/fails */ 55); module.exports = !fails(function () { function F() { /* empty */ } @@ -17274,25 +17463,25 @@ module.exports = !fails(function () { /***/ }), -/* 299 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/native-symbol.js ***! - \**************************************************************/ +/* 306 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/use-symbol-as-uid.js ***! + \******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 248); -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion +module.exports = NATIVE_SYMBOL // eslint-disable-next-line no-undef - return !String(Symbol()); -}); + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; /***/ }), -/* 300 */ +/* 307 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-define-properties.js ***! \*************************************************************************/ @@ -17300,13 +17489,13 @@ module.exports = !!Object.getOwnPropertySymbols && !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 244); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 137); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 250); // `Object.defineProperties` method -// https://tc39.github.io/ecma262/#sec-object.defineproperties +// https://tc39.es/ecma262/#sec-object.defineproperties module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = objectKeys(Properties); @@ -17319,7 +17508,7 @@ module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperti /***/ }), -/* 301 */ +/* 308 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-keys-internal.js ***! \*********************************************************************/ @@ -17327,10 +17516,10 @@ module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperti /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var has = __webpack_require__(/*! ../internals/has */ 95); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 245).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 205); +var has = __webpack_require__(/*! ../internals/has */ 78); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ 251).indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 207); module.exports = function (object, names) { var O = toIndexedObject(object); @@ -17347,7 +17536,7 @@ module.exports = function (object, names) { /***/ }), -/* 302 */ +/* 309 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/internals/html.js ***! \*****************************************************/ @@ -17355,35 +17544,13 @@ module.exports = function (object, names) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 303); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 242); module.exports = getBuiltIn('document', 'documentElement'); /***/ }), -/* 303 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/get-built-in.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var path = __webpack_require__(/*! ../internals/path */ 96); -var global = __webpack_require__(/*! ../internals/global */ 75); - -var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; -}; - -module.exports = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) - : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; -}; - - -/***/ }), -/* 304 */ +/* 310 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-to-string.js ***! \*****************************************************************/ @@ -17393,23 +17560,18 @@ module.exports = function (namespace, method) { "use strict"; -var classof = __webpack_require__(/*! ../internals/classof */ 174); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 208); +var classof = __webpack_require__(/*! ../internals/classof */ 147); // `Object.prototype.toString` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = String(test) !== '[object z]' ? function toString() { +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; -} : test.toString; +}; /***/ }), -/* 305 */ +/* 311 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-set-prototype-of.js ***! \************************************************************************/ @@ -17417,11 +17579,11 @@ module.exports = String(test) !== '[object z]' ? function toString() { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 306); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 312); // `Object.setPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.setprototypeof +// https://tc39.es/ecma262/#sec-object.setprototypeof // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { @@ -17444,7 +17606,7 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /***/ }), -/* 306 */ +/* 312 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/a-possible-prototype.js ***! \*********************************************************************/ @@ -17452,7 +17614,7 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); module.exports = function (it) { if (!isObject(it) && it !== null) { @@ -17462,7 +17624,7 @@ module.exports = function (it) { /***/ }), -/* 307 */ +/* 313 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/internals/redefine.js ***! \*********************************************************/ @@ -17470,16 +17632,16 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var hide = __webpack_require__(/*! ../internals/hide */ 83); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); module.exports = function (target, key, value, options) { if (options && options.enumerable) target[key] = value; - else hide(target, key, value); + else createNonEnumerableProperty(target, key, value); }; /***/ }), -/* 308 */ +/* 314 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/dom-iterables.js ***! \**************************************************************/ @@ -17525,7 +17687,7 @@ module.exports = { /***/ }), -/* 309 */ +/* 315 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/stable/array/virtual/values.js ***! \******************************************************************/ @@ -17533,11 +17695,13 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../../es/array/virtual/values */ 310); +var parent = __webpack_require__(/*! ../../../es/array/virtual/values */ 316); + +module.exports = parent; /***/ }), -/* 310 */ +/* 316 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/values.js ***! \**************************************************************/ @@ -17545,14 +17709,14 @@ module.exports = __webpack_require__(/*! ../../../es/array/virtual/values */ 310 /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.iterator */ 220); +__webpack_require__(/*! ../../../modules/es.array.iterator */ 223); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').values; /***/ }), -/* 311 */ +/* 317 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/concat.js ***! \*************************************************************/ @@ -17560,11 +17724,13 @@ module.exports = entryVirtual('Array').values; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/concat */ 312); +var parent = __webpack_require__(/*! ../../es/instance/concat */ 318); + +module.exports = parent; /***/ }), -/* 312 */ +/* 318 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/concat.js ***! \*********************************************************/ @@ -17572,7 +17738,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/concat */ 312); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var concat = __webpack_require__(/*! ../array/virtual/concat */ 313); +var concat = __webpack_require__(/*! ../array/virtual/concat */ 319); var ArrayPrototype = Array.prototype; @@ -17583,7 +17749,7 @@ module.exports = function (it) { /***/ }), -/* 313 */ +/* 319 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/concat.js ***! \**************************************************************/ @@ -17591,14 +17757,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.concat */ 314); +__webpack_require__(/*! ../../../modules/es.array.concat */ 320); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').concat; /***/ }), -/* 314 */ +/* 320 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.concat.js ***! \**************************************************************/ @@ -17609,21 +17775,25 @@ module.exports = entryVirtual('Array').concat; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var createProperty = __webpack_require__(/*! ../internals/create-property */ 249); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 250); -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 255); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 256); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 203); var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; -var IS_CONCAT_SPREADABLE_SUPPORT = !fails(function () { +// We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 +var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { var array = []; array[IS_CONCAT_SPREADABLE] = false; return array.concat()[0] !== array; @@ -17640,7 +17810,7 @@ var isConcatSpreadable = function (O) { var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; // `Array.prototype.concat` method -// https://tc39.github.io/ecma262/#sec-array.prototype.concat +// https://tc39.es/ecma262/#sec-array.prototype.concat // with adding support of @@isConcatSpreadable and @@species $({ target: 'Array', proto: true, forced: FORCED }, { concat: function concat(arg) { // eslint-disable-line no-unused-vars @@ -17666,7 +17836,7 @@ $({ target: 'Array', proto: true, forced: FORCED }, { /***/ }), -/* 315 */ +/* 321 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/index-of.js ***! \***************************************************************/ @@ -17674,11 +17844,13 @@ $({ target: 'Array', proto: true, forced: FORCED }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/index-of */ 316); +var parent = __webpack_require__(/*! ../../es/instance/index-of */ 322); + +module.exports = parent; /***/ }), -/* 316 */ +/* 322 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/index-of.js ***! \***********************************************************/ @@ -17686,7 +17858,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/index-of */ 316); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var indexOf = __webpack_require__(/*! ../array/virtual/index-of */ 317); +var indexOf = __webpack_require__(/*! ../array/virtual/index-of */ 323); var ArrayPrototype = Array.prototype; @@ -17697,7 +17869,7 @@ module.exports = function (it) { /***/ }), -/* 317 */ +/* 323 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/index-of.js ***! \****************************************************************/ @@ -17705,14 +17877,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.index-of */ 318); +__webpack_require__(/*! ../../../modules/es.array.index-of */ 324); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').indexOf; /***/ }), -/* 318 */ +/* 324 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.index-of.js ***! \****************************************************************/ @@ -17723,17 +17895,19 @@ module.exports = entryVirtual('Array').indexOf; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $indexOf = __webpack_require__(/*! ../internals/array-includes */ 245).indexOf; -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var $indexOf = __webpack_require__(/*! ../internals/array-includes */ 251).indexOf; +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); var nativeIndexOf = [].indexOf; var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; -var SLOPPY_METHOD = sloppyArrayMethod('indexOf'); +var STRICT_METHOD = arrayMethodIsStrict('indexOf'); +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); // `Array.prototype.indexOf` method -// https://tc39.github.io/ecma262/#sec-array.prototype.indexof -$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { +// https://tc39.es/ecma262/#sec-array.prototype.indexof +$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, { indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { return NEGATIVE_ZERO // convert -0 to +0 @@ -17744,7 +17918,7 @@ $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { /***/ }), -/* 319 */ +/* 325 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/find.js ***! \***********************************************************/ @@ -17752,11 +17926,13 @@ $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/find */ 320); +var parent = __webpack_require__(/*! ../../es/instance/find */ 326); + +module.exports = parent; /***/ }), -/* 320 */ +/* 326 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/find.js ***! \*******************************************************/ @@ -17764,7 +17940,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/find */ 320); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var find = __webpack_require__(/*! ../array/virtual/find */ 321); +var find = __webpack_require__(/*! ../array/virtual/find */ 327); var ArrayPrototype = Array.prototype; @@ -17775,7 +17951,7 @@ module.exports = function (it) { /***/ }), -/* 321 */ +/* 327 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/find.js ***! \************************************************************/ @@ -17783,14 +17959,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.find */ 322); +__webpack_require__(/*! ../../../modules/es.array.find */ 328); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').find; /***/ }), -/* 322 */ +/* 328 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.find.js ***! \************************************************************/ @@ -17801,29 +17977,32 @@ module.exports = entryVirtual('Array').find; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $find = __webpack_require__(/*! ../internals/array-iteration */ 158).find; -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 239); +var $find = __webpack_require__(/*! ../internals/array-iteration */ 161).find; +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 243); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); var FIND = 'find'; var SKIPS_HOLES = true; +var USES_TO_LENGTH = arrayMethodUsesToLength(FIND); + // Shouldn't skip holes if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); // `Array.prototype.find` method -// https://tc39.github.io/ecma262/#sec-array.prototype.find -$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { +// https://tc39.es/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, { find: function find(callbackfn /* , that = undefined */) { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables addToUnscopables(FIND); /***/ }), -/* 323 */ +/* 329 */ /*!********************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/last-index-of.js ***! \********************************************************************/ @@ -17831,11 +18010,13 @@ addToUnscopables(FIND); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/last-index-of */ 324); +var parent = __webpack_require__(/*! ../../es/instance/last-index-of */ 330); + +module.exports = parent; /***/ }), -/* 324 */ +/* 330 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/last-index-of.js ***! \****************************************************************/ @@ -17843,7 +18024,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/last-index-of */ 324) /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var lastIndexOf = __webpack_require__(/*! ../array/virtual/last-index-of */ 325); +var lastIndexOf = __webpack_require__(/*! ../array/virtual/last-index-of */ 331); var ArrayPrototype = Array.prototype; @@ -17854,7 +18035,7 @@ module.exports = function (it) { /***/ }), -/* 325 */ +/* 331 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/last-index-of.js ***! \*********************************************************************/ @@ -17862,14 +18043,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.last-index-of */ 326); +__webpack_require__(/*! ../../../modules/es.array.last-index-of */ 332); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').lastIndexOf; /***/ }), -/* 326 */ +/* 332 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.last-index-of.js ***! \*********************************************************************/ @@ -17878,17 +18059,17 @@ module.exports = entryVirtual('Array').lastIndexOf; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var lastIndexOf = __webpack_require__(/*! ../internals/array-last-index-of */ 327); +var lastIndexOf = __webpack_require__(/*! ../internals/array-last-index-of */ 333); // `Array.prototype.lastIndexOf` method -// https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof $({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, { lastIndexOf: lastIndexOf }); /***/ }), -/* 327 */ +/* 333 */ /*!********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-last-index-of.js ***! \********************************************************************/ @@ -17898,19 +18079,23 @@ $({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, { "use strict"; -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 202); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); var min = Math.min; var nativeLastIndexOf = [].lastIndexOf; var NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; -var SLOPPY_METHOD = sloppyArrayMethod('lastIndexOf'); +var STRICT_METHOD = arrayMethodIsStrict('lastIndexOf'); +// For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); +var FORCED = NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH; // `Array.prototype.lastIndexOf` method implementation -// https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof -module.exports = (NEGATIVE_ZERO || SLOPPY_METHOD) ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof +module.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { // convert -0 to +0 if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0; var O = toIndexedObject(this); @@ -17924,7 +18109,7 @@ module.exports = (NEGATIVE_ZERO || SLOPPY_METHOD) ? function lastIndexOf(searchE /***/ }), -/* 328 */ +/* 334 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/bind.js ***! \***********************************************************/ @@ -17932,11 +18117,13 @@ module.exports = (NEGATIVE_ZERO || SLOPPY_METHOD) ? function lastIndexOf(searchE /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/bind */ 329); +var parent = __webpack_require__(/*! ../../es/instance/bind */ 335); + +module.exports = parent; /***/ }), -/* 329 */ +/* 335 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/bind.js ***! \*******************************************************/ @@ -17944,7 +18131,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/bind */ 329); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var bind = __webpack_require__(/*! ../function/virtual/bind */ 330); +var bind = __webpack_require__(/*! ../function/virtual/bind */ 336); var FunctionPrototype = Function.prototype; @@ -17955,7 +18142,7 @@ module.exports = function (it) { /***/ }), -/* 330 */ +/* 336 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/es/function/virtual/bind.js ***! \***************************************************************/ @@ -17963,14 +18150,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.function.bind */ 331); +__webpack_require__(/*! ../../../modules/es.function.bind */ 337); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Function').bind; /***/ }), -/* 331 */ +/* 337 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.function.bind.js ***! \***************************************************************/ @@ -17979,17 +18166,17 @@ module.exports = entryVirtual('Function').bind; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var bind = __webpack_require__(/*! ../internals/function-bind */ 332); +var bind = __webpack_require__(/*! ../internals/function-bind */ 338); // `Function.prototype.bind` method -// https://tc39.github.io/ecma262/#sec-function.prototype.bind +// https://tc39.es/ecma262/#sec-function.prototype.bind $({ target: 'Function', proto: true }, { bind: bind }); /***/ }), -/* 332 */ +/* 338 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/function-bind.js ***! \**************************************************************/ @@ -17999,8 +18186,8 @@ $({ target: 'Function', proto: true }, { "use strict"; -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); var slice = [].slice; var factories = {}; @@ -18014,7 +18201,7 @@ var construct = function (C, argsLength, args) { }; // `Function.prototype.bind` method implementation -// https://tc39.github.io/ecma262/#sec-function.prototype.bind +// https://tc39.es/ecma262/#sec-function.prototype.bind module.exports = Function.bind || function bind(that /* , ...args */) { var fn = aFunction(this); var partArgs = slice.call(arguments, 1); @@ -18028,7 +18215,7 @@ module.exports = Function.bind || function bind(that /* , ...args */) { /***/ }), -/* 333 */ +/* 339 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/trim.js ***! \***********************************************************/ @@ -18036,11 +18223,13 @@ module.exports = Function.bind || function bind(that /* , ...args */) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/trim */ 334); +var parent = __webpack_require__(/*! ../../es/instance/trim */ 340); + +module.exports = parent; /***/ }), -/* 334 */ +/* 340 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/trim.js ***! \*******************************************************/ @@ -18048,7 +18237,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/trim */ 334); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var trim = __webpack_require__(/*! ../string/virtual/trim */ 335); +var trim = __webpack_require__(/*! ../string/virtual/trim */ 341); var StringPrototype = String.prototype; @@ -18060,7 +18249,7 @@ module.exports = function (it) { /***/ }), -/* 335 */ +/* 341 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/es/string/virtual/trim.js ***! \*************************************************************/ @@ -18068,14 +18257,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.string.trim */ 336); +__webpack_require__(/*! ../../../modules/es.string.trim */ 342); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('String').trim; /***/ }), -/* 336 */ +/* 342 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.string.trim.js ***! \*************************************************************/ @@ -18086,11 +18275,11 @@ module.exports = entryVirtual('String').trim; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $trim = __webpack_require__(/*! ../internals/string-trim */ 337).trim; -var forcedStringTrimMethod = __webpack_require__(/*! ../internals/forced-string-trim-method */ 338); +var $trim = __webpack_require__(/*! ../internals/string-trim */ 343).trim; +var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 344); // `String.prototype.trim` method -// https://tc39.github.io/ecma262/#sec-string.prototype.trim +// https://tc39.es/ecma262/#sec-string.prototype.trim $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { trim: function trim() { return $trim(this); @@ -18099,7 +18288,7 @@ $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { /***/ }), -/* 337 */ +/* 343 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/string-trim.js ***! \************************************************************/ @@ -18107,8 +18296,8 @@ $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); -var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 251); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 200); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 257); var whitespace = '[' + whitespaces + ']'; var ltrim = RegExp('^' + whitespace + whitespace + '*'); @@ -18126,28 +18315,28 @@ var createMethod = function (TYPE) { module.exports = { // `String.prototype.{ trimLeft, trimStart }` methods - // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + // https://tc39.es/ecma262/#sec-string.prototype.trimstart start: createMethod(1), // `String.prototype.{ trimRight, trimEnd }` methods - // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + // https://tc39.es/ecma262/#sec-string.prototype.trimend end: createMethod(2), // `String.prototype.trim` method - // https://tc39.github.io/ecma262/#sec-string.prototype.trim + // https://tc39.es/ecma262/#sec-string.prototype.trim trim: createMethod(3) }; /***/ }), -/* 338 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/forced-string-trim-method.js ***! - \**************************************************************************/ +/* 344 */ +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-trim-forced.js ***! + \*******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 251); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 257); var non = '\u200B\u0085\u180E'; @@ -18161,36 +18350,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 339 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/es.array.reverse.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var isArray = __webpack_require__(/*! ../internals/is-array */ 252); - -var nativeReverse = [].reverse; -var test = [1, 2]; - -// `Array.prototype.reverse` method -// https://tc39.github.io/ecma262/#sec-array.prototype.reverse -// fix for Safari 12.0 bug -// https://bugs.webkit.org/show_bug.cgi?id=188794 -$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { - reverse: function reverse() { - // eslint-disable-next-line no-self-assign - if (isArray(this)) this.length = this.length; - return nativeReverse.call(this); - } -}); - - -/***/ }), -/* 340 */ +/* 345 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/map.js ***! \**********************************************************/ @@ -18198,11 +18358,13 @@ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse() /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/map */ 341); +var parent = __webpack_require__(/*! ../../es/instance/map */ 346); + +module.exports = parent; /***/ }), -/* 341 */ +/* 346 */ /*!******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/map.js ***! \******************************************************/ @@ -18210,7 +18372,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/map */ 341); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var map = __webpack_require__(/*! ../array/virtual/map */ 342); +var map = __webpack_require__(/*! ../array/virtual/map */ 347); var ArrayPrototype = Array.prototype; @@ -18221,7 +18383,7 @@ module.exports = function (it) { /***/ }), -/* 342 */ +/* 347 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/map.js ***! \***********************************************************/ @@ -18229,14 +18391,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.map */ 343); +__webpack_require__(/*! ../../../modules/es.array.map */ 348); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').map; /***/ }), -/* 343 */ +/* 348 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.map.js ***! \***********************************************************/ @@ -18247,13 +18409,18 @@ module.exports = entryVirtual('Array').map; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $map = __webpack_require__(/*! ../internals/array-iteration */ 158).map; -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); +var $map = __webpack_require__(/*! ../internals/array-iteration */ 161).map; +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); +// FF49- issue +var USES_TO_LENGTH = arrayMethodUsesToLength('map'); // `Array.prototype.map` method -// https://tc39.github.io/ecma262/#sec-array.prototype.map +// https://tc39.es/ecma262/#sec-array.prototype.map // with adding support of @@species -$({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') }, { +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { map: function map(callbackfn /* , thisArg */) { return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } @@ -18261,7 +18428,7 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') } /***/ }), -/* 344 */ +/* 349 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js-pure/features/object/define-property.js ***! \**********************************************************************/ @@ -18269,11 +18436,13 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') } /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/define-property */ 345); +var parent = __webpack_require__(/*! ../../es/object/define-property */ 350); + +module.exports = parent; /***/ }), -/* 345 */ +/* 350 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/object/define-property.js ***! \****************************************************************/ @@ -18281,8 +18450,8 @@ module.exports = __webpack_require__(/*! ../../es/object/define-property */ 345) /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.define-property */ 346); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.define-property */ 351); +var path = __webpack_require__(/*! ../../internals/path */ 97); var Object = path.Object; @@ -18294,7 +18463,7 @@ if (Object.defineProperty.sham) defineProperty.sham = true; /***/ }), -/* 346 */ +/* 351 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.define-property.js ***! \************************************************************************/ @@ -18303,18 +18472,18 @@ if (Object.defineProperty.sham) defineProperty.sham = true; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ 136); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ 137); // `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty +// https://tc39.es/ecma262/#sec-object.defineproperty $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { defineProperty: objectDefinePropertyModile.f }); /***/ }), -/* 347 */ +/* 352 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/array-iteration.js ***! \***********************************************************/ @@ -18322,11 +18491,11 @@ $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 348); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 353); var push = [].push; @@ -18390,7 +18559,7 @@ module.exports = { /***/ }), -/* 348 */ +/* 353 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/array-species-create.js ***! \****************************************************************/ @@ -18399,7 +18568,7 @@ module.exports = { /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var isArray = __webpack_require__(/*! ../internals/is-array */ 252); +var isArray = __webpack_require__(/*! ../internals/is-array */ 354); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var SPECIES = wellKnownSymbol('species'); @@ -18421,7 +18590,25 @@ module.exports = function (originalArray, length) { /***/ }), -/* 349 */ +/* 354 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/is-array.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); + +// `IsArray` abstract operation +// https://tc39.github.io/ecma262/#sec-isarray +module.exports = Array.isArray || function isArray(arg) { + return classof(arg) == 'Array'; +}; + + +/***/ }), +/* 355 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***! \****************************************************************************/ @@ -18431,7 +18618,7 @@ module.exports = function (originalArray, length) { var fails = __webpack_require__(/*! ../internals/fails */ 36); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 153); var SPECIES = wellKnownSymbol('species'); @@ -18451,7 +18638,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 350 */ +/* 356 */ /*!********************************************************************!*\ !*** ./node_modules/core-js-pure/stable/array/virtual/for-each.js ***! \********************************************************************/ @@ -18459,11 +18646,13 @@ module.exports = function (METHOD_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 351); +var parent = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 357); + +module.exports = parent; /***/ }), -/* 351 */ +/* 357 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/for-each.js ***! \****************************************************************/ @@ -18471,14 +18660,14 @@ module.exports = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 3 /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.for-each */ 352); +__webpack_require__(/*! ../../../modules/es.array.for-each */ 358); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').forEach; /***/ }), -/* 352 */ +/* 358 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.for-each.js ***! \****************************************************************/ @@ -18489,17 +18678,17 @@ module.exports = entryVirtual('Array').forEach; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var forEach = __webpack_require__(/*! ../internals/array-for-each */ 353); +var forEach = __webpack_require__(/*! ../internals/array-for-each */ 359); // `Array.prototype.forEach` method -// https://tc39.github.io/ecma262/#sec-array.prototype.foreach +// https://tc39.es/ecma262/#sec-array.prototype.foreach $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { forEach: forEach }); /***/ }), -/* 353 */ +/* 359 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-for-each.js ***! \***************************************************************/ @@ -18509,18 +18698,22 @@ $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { "use strict"; -var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 158).forEach; -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 161).forEach; +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var STRICT_METHOD = arrayMethodIsStrict('forEach'); +var USES_TO_LENGTH = arrayMethodUsesToLength('forEach'); // `Array.prototype.forEach` method implementation -// https://tc39.github.io/ecma262/#sec-array.prototype.foreach -module.exports = sloppyArrayMethod('forEach') ? function forEach(callbackfn /* , thisArg */) { +// https://tc39.es/ecma262/#sec-array.prototype.foreach +module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) { return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } : [].forEach; /***/ }), -/* 354 */ +/* 360 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/same-value.js ***! \******************************************************/ @@ -18537,7 +18730,7 @@ module.exports = Object.is || function is(x, y) { /***/ }), -/* 355 */ +/* 361 */ /*!**************************************!*\ !*** ./dev/Html/PreviewMessage.html ***! \**************************************/ @@ -18550,7 +18743,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("\n\n\t\n\t\n\t\n\t\n\t{{title}}\n\t\n\n\n\t
\n\t\t
{{subject}}
\n\t
\n\t
\n\t\t
{{date}}
\n\t\t
{{fromCreds}}
\n\t\t
{{toLabel}}: {{toCreds}}
\n\t\t
{{ccLabel}}: {{ccCreds}}
\n\t
\n\t
{{html}}
\n\n"); /***/ }), -/* 356 */ +/* 362 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/filter.js ***! \*************************************************************/ @@ -18558,11 +18751,13 @@ __webpack_require__.r(__webpack_exports__); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/filter */ 357); +var parent = __webpack_require__(/*! ../../es/instance/filter */ 363); + +module.exports = parent; /***/ }), -/* 357 */ +/* 363 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/filter.js ***! \*********************************************************/ @@ -18570,7 +18765,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/filter */ 357); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var filter = __webpack_require__(/*! ../array/virtual/filter */ 358); +var filter = __webpack_require__(/*! ../array/virtual/filter */ 364); var ArrayPrototype = Array.prototype; @@ -18581,7 +18776,7 @@ module.exports = function (it) { /***/ }), -/* 358 */ +/* 364 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/filter.js ***! \**************************************************************/ @@ -18589,14 +18784,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.filter */ 359); +__webpack_require__(/*! ../../../modules/es.array.filter */ 365); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').filter; /***/ }), -/* 359 */ +/* 365 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.filter.js ***! \**************************************************************/ @@ -18607,13 +18802,18 @@ module.exports = entryVirtual('Array').filter; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $filter = __webpack_require__(/*! ../internals/array-iteration */ 158).filter; -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); +var $filter = __webpack_require__(/*! ../internals/array-iteration */ 161).filter; +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); +// Edge 14- issue +var USES_TO_LENGTH = arrayMethodUsesToLength('filter'); // `Array.prototype.filter` method -// https://tc39.github.io/ecma262/#sec-array.prototype.filter +// https://tc39.es/ecma262/#sec-array.prototype.filter // with adding support of @@species -$({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter') }, { +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { filter: function filter(callbackfn /* , thisArg */) { return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } @@ -18621,7 +18821,7 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter' /***/ }), -/* 360 */ +/* 366 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/features/object/create.js ***! \*************************************************************/ @@ -18629,11 +18829,13 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter' /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/create */ 361); +var parent = __webpack_require__(/*! ../../es/object/create */ 367); + +module.exports = parent; /***/ }), -/* 361 */ +/* 367 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/object/create.js ***! \*******************************************************/ @@ -18641,8 +18843,8 @@ module.exports = __webpack_require__(/*! ../../es/object/create */ 361); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.create */ 362); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.create */ 368); +var path = __webpack_require__(/*! ../../internals/path */ 97); var Object = path.Object; @@ -18652,7 +18854,7 @@ module.exports = function create(P, D) { /***/ }), -/* 362 */ +/* 368 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.create.js ***! \***************************************************************/ @@ -18661,18 +18863,18 @@ module.exports = function create(P, D) { /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var create = __webpack_require__(/*! ../internals/object-create */ 243); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var create = __webpack_require__(/*! ../internals/object-create */ 249); // `Object.create` method -// https://tc39.github.io/ecma262/#sec-object.create +// https://tc39.es/ecma262/#sec-object.create $({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { create: create }); /***/ }), -/* 363 */ +/* 369 */ /*!********************************************************************************!*\ !*** ./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js ***! \********************************************************************************/ @@ -18680,11 +18882,13 @@ $({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ 364); +var parent = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ 370); + +module.exports = parent; /***/ }), -/* 364 */ +/* 370 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js-pure/es/object/get-own-property-descriptor.js ***! \****************************************************************************/ @@ -18692,8 +18896,8 @@ module.exports = __webpack_require__(/*! ../../es/object/get-own-property-descri /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 365); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 371); +var path = __webpack_require__(/*! ../../internals/path */ 97); var Object = path.Object; @@ -18705,7 +18909,7 @@ if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true; /***/ }), -/* 365 */ +/* 371 */ /*!************************************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js ***! \************************************************************************************/ @@ -18714,16 +18918,16 @@ if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 235).f; -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 238).f; +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); }); var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES; // `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); @@ -18732,7 +18936,7 @@ $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { /***/ }), -/* 366 */ +/* 372 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/slice.js ***! \**************************************************************/ @@ -18740,11 +18944,13 @@ $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/slice */ 367); +var parent = __webpack_require__(/*! ../../es/instance/slice */ 373); + +module.exports = parent; /***/ }), -/* 367 */ +/* 373 */ /*!********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/slice.js ***! \********************************************************/ @@ -18752,7 +18958,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/slice */ 367); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var slice = __webpack_require__(/*! ../array/virtual/slice */ 368); +var slice = __webpack_require__(/*! ../array/virtual/slice */ 374); var ArrayPrototype = Array.prototype; @@ -18763,7 +18969,7 @@ module.exports = function (it) { /***/ }), -/* 368 */ +/* 374 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/slice.js ***! \*************************************************************/ @@ -18771,14 +18977,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.slice */ 369); +__webpack_require__(/*! ../../../modules/es.array.slice */ 375); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').slice; /***/ }), -/* 369 */ +/* 375 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.slice.js ***! \*************************************************************/ @@ -18789,23 +18995,27 @@ module.exports = entryVirtual('Array').slice; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 246); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 252); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var createProperty = __webpack_require__(/*! ../internals/create-property */ 249); -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 255); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); +var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); var SPECIES = wellKnownSymbol('species'); var nativeSlice = [].slice; var max = Math.max; // `Array.prototype.slice` method -// https://tc39.github.io/ecma262/#sec-array.prototype.slice +// https://tc39.es/ecma262/#sec-array.prototype.slice // fallback for not array-like ES3 strings and DOM objects -$({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') }, { +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { slice: function slice(start, end) { var O = toIndexedObject(this); var length = toLength(O.length); @@ -18835,7 +19045,7 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') /***/ }), -/* 370 */ +/* 376 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/reverse.js ***! \****************************************************************/ @@ -18843,11 +19053,13 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/reverse */ 371); +var parent = __webpack_require__(/*! ../../es/instance/reverse */ 377); + +module.exports = parent; /***/ }), -/* 371 */ +/* 377 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/reverse.js ***! \**********************************************************/ @@ -18855,7 +19067,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/reverse */ 371); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var reverse = __webpack_require__(/*! ../array/virtual/reverse */ 372); +var reverse = __webpack_require__(/*! ../array/virtual/reverse */ 378); var ArrayPrototype = Array.prototype; @@ -18866,7 +19078,7 @@ module.exports = function (it) { /***/ }), -/* 372 */ +/* 378 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/reverse.js ***! \***************************************************************/ @@ -18874,14 +19086,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.reverse */ 373); +__webpack_require__(/*! ../../../modules/es.array.reverse */ 379); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').reverse; /***/ }), -/* 373 */ +/* 379 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.reverse.js ***! \***************************************************************/ @@ -18892,17 +19104,18 @@ module.exports = entryVirtual('Array').reverse; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); var nativeReverse = [].reverse; var test = [1, 2]; // `Array.prototype.reverse` method -// https://tc39.github.io/ecma262/#sec-array.prototype.reverse +// https://tc39.es/ecma262/#sec-array.prototype.reverse // fix for Safari 12.0 bug // https://bugs.webkit.org/show_bug.cgi?id=188794 $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { reverse: function reverse() { + // eslint-disable-next-line no-self-assign if (isArray(this)) this.length = this.length; return nativeReverse.call(this); } @@ -18910,7 +19123,7 @@ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse() /***/ }), -/* 374 */ +/* 380 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/reduce.js ***! \***************************************************************/ @@ -18918,11 +19131,13 @@ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse() /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); +var parent = __webpack_require__(/*! ../../es/instance/reduce */ 237); + +module.exports = parent; /***/ }), -/* 375 */ +/* 381 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/features/object/keys.js ***! \***********************************************************/ @@ -18930,11 +19145,13 @@ module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/keys */ 376); +var parent = __webpack_require__(/*! ../../es/object/keys */ 382); + +module.exports = parent; /***/ }), -/* 376 */ +/* 382 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/es/object/keys.js ***! \*****************************************************/ @@ -18942,14 +19159,14 @@ module.exports = __webpack_require__(/*! ../../es/object/keys */ 376); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.keys */ 377); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.keys */ 383); +var path = __webpack_require__(/*! ../../internals/path */ 97); module.exports = path.Object.keys; /***/ }), -/* 377 */ +/* 383 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.keys.js ***! \*************************************************************/ @@ -18958,14 +19175,14 @@ module.exports = path.Object.keys; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 244); -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 250); +var fails = __webpack_require__(/*! ../internals/fails */ 55); var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); // `Object.keys` method -// https://tc39.github.io/ecma262/#sec-object.keys +// https://tc39.es/ecma262/#sec-object.keys $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { keys: function keys(it) { return nativeKeys(toObject(it)); @@ -18974,7 +19191,7 @@ $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { /***/ }), -/* 378 */ +/* 384 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/for-each.js ***! \*****************************************************************/ @@ -18982,13 +19199,15 @@ $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../stable/instance/for-each */ 253); +var parent = __webpack_require__(/*! ../../stable/instance/for-each */ 258); + +module.exports = parent; /***/ }), -/* 379 */, -/* 380 */, -/* 381 */ +/* 385 */, +/* 386 */, +/* 387 */ /*!**************************************!*\ !*** ./dev/Component/SaveTrigger.js ***! \**************************************/ @@ -19012,9 +19231,7 @@ __webpack_require__.r(__webpack_exports__); -var SaveTriggerComponent = -/*#__PURE__*/ -function (_AbstractComponent) { +var SaveTriggerComponent = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(SaveTriggerComponent, _AbstractComponent); /** @@ -19081,7 +19298,7 @@ function (_AbstractComponent) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* componentExportHelper */ "b"])(SaveTriggerComponent, 'SaveTriggerComponent')); /***/ }), -/* 382 */ +/* 388 */ /*!********************************!*\ !*** ./dev/Component/Input.js ***! \********************************/ @@ -19093,14 +19310,12 @@ function (_AbstractComponent) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 86); -var InputComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var InputComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(InputComponent, _AbstractInput); function InputComponent() { @@ -19113,7 +19328,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(InputComponent, 'InputComponent')); /***/ }), -/* 383 */ +/* 389 */ /*!*********************************!*\ !*** ./dev/Component/Select.js ***! \*********************************/ @@ -19127,16 +19342,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/AbstractInput */ 86); -var SelectComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var SelectComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SelectComponent, _AbstractInput); /** @@ -19165,7 +19378,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_3__[/* componentExportHelper */ "b"])(SelectComponent, 'SelectComponent')); /***/ }), -/* 384 */ +/* 390 */ /*!********************************!*\ !*** ./dev/Component/Radio.js ***! \********************************/ @@ -19177,14 +19390,12 @@ function (_AbstractInput) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractRadio */ 267); +/* harmony import */ var Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractRadio */ 272); -var RadioComponent = -/*#__PURE__*/ -function (_AbstractRadio) { +var RadioComponent = /*#__PURE__*/function (_AbstractRadio) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RadioComponent, _AbstractRadio); function RadioComponent() { @@ -19197,7 +19408,7 @@ function (_AbstractRadio) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(RadioComponent, 'RadioComponent')); /***/ }), -/* 385 */ +/* 391 */ /*!***********************************!*\ !*** ./dev/Component/TextArea.js ***! \***********************************/ @@ -19210,16 +19421,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/AbstractInput */ 86); var DEFAULT_ROWS = 5; -var TextAreaComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var TextAreaComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TextAreaComponent, _AbstractInput); /** @@ -19240,7 +19449,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_2__[/* componentExportHelper */ "b"])(TextAreaComponent, 'TextAreaComponent')); /***/ }), -/* 386 */ +/* 392 */ /*!*******************************!*\ !*** ./dev/Component/Date.js ***! \*******************************/ @@ -19252,14 +19461,12 @@ function (_AbstractInput) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 86); -var DateComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var DateComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(DateComponent, _AbstractInput); function DateComponent() { @@ -19272,7 +19479,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(DateComponent, 'DateComponent')); /***/ }), -/* 387 */ +/* 393 */ /*!*********************************!*\ !*** ./dev/Component/Script.js ***! \*********************************/ @@ -19284,7 +19491,7 @@ function (_AbstractInput) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 8); @@ -19296,9 +19503,7 @@ __webpack_require__.r(__webpack_exports__); -var ScriptComponent = -/*#__PURE__*/ -function (_AbstractComponent) { +var ScriptComponent = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(ScriptComponent, _AbstractComponent); /** @@ -19330,7 +19535,7 @@ function (_AbstractComponent) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* componentExportHelper */ "b"])(ScriptComponent, 'ScriptComponent')); /***/ }), -/* 388 */ +/* 394 */ /*!**************************************************!*\ !*** ./dev/Component/MaterialDesign/Checkbox.js ***! \**************************************************/ @@ -19348,7 +19553,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/AbstractCheckbox */ 162); +/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/AbstractCheckbox */ 165); @@ -19357,9 +19562,7 @@ __webpack_require__.r(__webpack_exports__); -var CheckboxMaterialDesignComponent = -/*#__PURE__*/ -function (_AbstractCheckbox) { +var CheckboxMaterialDesignComponent = /*#__PURE__*/function (_AbstractCheckbox) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(CheckboxMaterialDesignComponent, _AbstractCheckbox); /** @@ -19413,8 +19616,8 @@ function (_AbstractCheckbox) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* componentExportHelper */ "b"])(CheckboxMaterialDesignComponent, 'CheckboxMaterialDesignComponent')); /***/ }), -/* 389 */, -/* 390 */ +/* 395 */, +/* 396 */ /*!**************************!*\ !*** ./dev/App/Admin.js ***! \**************************/ @@ -19432,25 +19635,25 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! progressJs */ 98); +/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! progressJs */ 99); /* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(progressJs__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Admin/App */ 77); -/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Admin/Capa */ 85); -/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/Domain */ 147); -/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Plugin */ 116); -/* harmony import */ var Stores_Admin_License__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Admin/License */ 117); -/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Admin/Package */ 88); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Admin/App */ 79); +/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Admin/Capa */ 87); +/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/Domain */ 149); +/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Plugin */ 117); +/* harmony import */ var Stores_Admin_License__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Admin/License */ 118); +/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Admin/Package */ 90); /* harmony import */ var Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Stores/Admin/Core */ 40); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); -/* harmony import */ var Screen_Admin_Settings__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Screen/Admin/Settings */ 451); -/* harmony import */ var Screen_Admin_Login__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Screen/Admin/Login */ 463); +/* harmony import */ var Screen_Admin_Settings__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Screen/Admin/Settings */ 457); +/* harmony import */ var Screen_Admin_Login__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Screen/Admin/Login */ 469); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var App_Abstract__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! App/Abstract */ 265); +/* harmony import */ var App_Abstract__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! App/Abstract */ 270); @@ -19475,9 +19678,7 @@ __webpack_require__.r(__webpack_exports__); -var AdminApp = -/*#__PURE__*/ -function (_AbstractApp) { +var AdminApp = /*#__PURE__*/function (_AbstractApp) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AdminApp, _AbstractApp); function AdminApp() { @@ -19693,12 +19894,6 @@ function (_AbstractApp) { /* harmony default export */ __webpack_exports__["default"] = (new AdminApp()); /***/ }), -/* 391 */, -/* 392 */, -/* 393 */, -/* 394 */, -/* 395 */, -/* 396 */, /* 397 */, /* 398 */, /* 399 */, @@ -19715,7 +19910,13 @@ function (_AbstractApp) { /* 410 */, /* 411 */, /* 412 */, -/* 413 */ +/* 413 */, +/* 414 */, +/* 415 */, +/* 416 */, +/* 417 */, +/* 418 */, +/* 419 */ /*!**********************************!*\ !*** ./dev/View/Popup/Domain.js ***! \**********************************/ @@ -19731,7 +19932,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); @@ -19747,7 +19948,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Capa */ 85); +/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Capa */ 87); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -19781,9 +19982,7 @@ var DomainPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__[" return self.canBeSaved(); }), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(function (self) { return self.canBeTested(); -}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(DomainPopupView, _AbstractViewNext); function DomainPopupView() { @@ -20143,12 +20342,6 @@ function (_AbstractViewNext) { /***/ }), -/* 414 */, -/* 415 */, -/* 416 */, -/* 417 */, -/* 418 */, -/* 419 */, /* 420 */, /* 421 */, /* 422 */, @@ -20180,7 +20373,13 @@ function (_AbstractViewNext) { /* 448 */, /* 449 */, /* 450 */, -/* 451 */ +/* 451 */, +/* 452 */, +/* 453 */, +/* 454 */, +/* 455 */, +/* 456 */, +/* 457 */ /*!**************************************!*\ !*** ./dev/Screen/Admin/Settings.js ***! \**************************************/ @@ -20194,19 +20393,19 @@ function (_AbstractViewNext) { /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 39); -/* harmony import */ var Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Screen/AbstractSettings */ 264); -/* harmony import */ var Settings_Admin_General__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Settings/Admin/General */ 452); -/* harmony import */ var Settings_Admin_Domains__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Settings/Admin/Domains */ 453); -/* harmony import */ var Settings_Admin_Login__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Settings/Admin/Login */ 454); -/* harmony import */ var Settings_Admin_Contacts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Settings/Admin/Contacts */ 455); -/* harmony import */ var Settings_Admin_Security__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Settings/Admin/Security */ 456); -/* harmony import */ var Settings_Admin_Social__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Settings/Admin/Social */ 457); -/* harmony import */ var Settings_Admin_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Settings/Admin/Plugins */ 458); -/* harmony import */ var Settings_Admin_Packages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Settings/Admin/Packages */ 459); -/* harmony import */ var Settings_Admin_About__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Settings/Admin/About */ 460); +/* harmony import */ var Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Screen/AbstractSettings */ 269); +/* harmony import */ var Settings_Admin_General__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Settings/Admin/General */ 458); +/* harmony import */ var Settings_Admin_Domains__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Settings/Admin/Domains */ 459); +/* harmony import */ var Settings_Admin_Login__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Settings/Admin/Login */ 460); +/* harmony import */ var Settings_Admin_Contacts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Settings/Admin/Contacts */ 461); +/* harmony import */ var Settings_Admin_Security__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Settings/Admin/Security */ 462); +/* harmony import */ var Settings_Admin_Social__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Settings/Admin/Social */ 463); +/* harmony import */ var Settings_Admin_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Settings/Admin/Plugins */ 464); +/* harmony import */ var Settings_Admin_Packages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Settings/Admin/Packages */ 465); +/* harmony import */ var Settings_Admin_About__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Settings/Admin/About */ 466); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); -/* harmony import */ var View_Admin_Settings_Menu__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! View/Admin/Settings/Menu */ 461); -/* harmony import */ var View_Admin_Settings_Pane__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! View/Admin/Settings/Pane */ 462); +/* harmony import */ var View_Admin_Settings_Menu__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! View/Admin/Settings/Menu */ 467); +/* harmony import */ var View_Admin_Settings_Pane__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! View/Admin/Settings/Pane */ 468); @@ -20224,9 +20423,7 @@ function (_AbstractViewNext) { -var SettingsAdminScreen = -/*#__PURE__*/ -function (_AbstractSettingsScre) { +var SettingsAdminScreen = /*#__PURE__*/function (_AbstractSettingsScre) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SettingsAdminScreen, _AbstractSettingsScre); function SettingsAdminScreen() { @@ -20248,7 +20445,7 @@ function (_AbstractSettingsScre) { licensing = null; if (true) { - branding = __webpack_require__(/*! Settings/Admin/Branding */ 537).default; + branding = __webpack_require__(/*! Settings/Admin/Branding */ 543).default; } else {} Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_General__WEBPACK_IMPORTED_MODULE_4__[/* GeneralAdminSettings */ "a"], 'AdminSettingsGeneral', 'TABS_LABELS/LABEL_GENERAL_NAME', 'general', true); @@ -20287,7 +20484,7 @@ function (_AbstractSettingsScre) { /***/ }), -/* 452 */ +/* 458 */ /*!***************************************!*\ !*** ./dev/Settings/Admin/General.js ***! \***************************************/ @@ -20298,7 +20495,7 @@ function (_AbstractSettingsScre) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return GeneralAdminSettings; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__); @@ -20312,10 +20509,10 @@ function (_AbstractSettingsScre) { /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); -/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Theme */ 114); -/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Language */ 70); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/App */ 77); -/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Capa */ 85); +/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Theme */ 115); +/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Language */ 71); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/App */ 79); +/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Capa */ 87); @@ -20332,9 +20529,7 @@ function (_AbstractSettingsScre) { -var GeneralAdminSettings = -/*#__PURE__*/ -function () { +var GeneralAdminSettings = /*#__PURE__*/function () { function GeneralAdminSettings() { var _this = this; @@ -20487,11 +20682,11 @@ function () { }; _proto.selectLanguage = function selectLanguage() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 254), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].userLanguage()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 259), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].userLanguage()]); }; _proto.selectLanguageAdmin = function selectLanguageAdmin() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 254), [this.languageAdmin, this.languagesAdmin(), Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].userLanguageAdmin()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 259), [this.languageAdmin, this.languagesAdmin(), Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].userLanguageAdmin()]); } /** * @returns {string} @@ -20508,7 +20703,7 @@ function () { /***/ }), -/* 453 */ +/* 459 */ /*!***************************************!*\ !*** ./dev/Settings/Admin/Domains.js ***! \***************************************/ @@ -20528,7 +20723,7 @@ function () { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Domain */ 147); +/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Domain */ 149); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); @@ -20541,9 +20736,7 @@ function () { -var DomainsAdminSettings = -/*#__PURE__*/ -function () { +var DomainsAdminSettings = /*#__PURE__*/function () { function DomainsAdminSettings() { var _this = this; @@ -20559,11 +20752,11 @@ function () { var _proto = DomainsAdminSettings.prototype; _proto.createDomain = function createDomain() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Domain */ 413)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Domain */ 419)); }; _proto.createDomainAlias = function createDomainAlias() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/DomainAlias */ 535)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/DomainAlias */ 541)); }; _proto.deleteDomain = function deleteDomain(domain) { @@ -20591,7 +20784,7 @@ function () { _proto.onDomainLoadRequest = function onDomainLoadRequest(sResult, oData) { if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sResult && oData && oData.Result) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Domain */ 413), [oData.Result]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Domain */ 419), [oData.Result]); } }; @@ -20605,7 +20798,7 @@ function () { /***/ }), -/* 454 */ +/* 460 */ /*!*************************************!*\ !*** ./dev/Settings/Admin/Login.js ***! \*************************************/ @@ -20621,7 +20814,7 @@ function () { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/Admin/App */ 77); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/Admin/App */ 79); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); @@ -20630,9 +20823,7 @@ function () { -var LoginAdminSettings = -/*#__PURE__*/ -function () { +var LoginAdminSettings = /*#__PURE__*/function () { function LoginAdminSettings() { this.determineUserLanguage = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].determineUserLanguage; this.determineUserDomain = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].determineUserDomain; @@ -20681,7 +20872,7 @@ function () { /***/ }), -/* 455 */ +/* 461 */ /*!****************************************!*\ !*** ./dev/Settings/Admin/Contacts.js ***! \****************************************/ @@ -20725,9 +20916,7 @@ var _dec, _class; var ContactsAdminSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["command"])(function (self) { return '' !== self.pdoDsn() && '' !== self.pdoUser(); -}), (_class = -/*#__PURE__*/ -function () { +}), (_class = /*#__PURE__*/function () { function ContactsAdminSettings() { var _this = this; @@ -20915,7 +21104,7 @@ function () { /***/ }), -/* 456 */ +/* 462 */ /*!****************************************!*\ !*** ./dev/Settings/Admin/Security.js ***! \****************************************/ @@ -20938,8 +21127,8 @@ function () { /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/Admin/App */ 77); -/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Admin/Capa */ 85); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/Admin/App */ 79); +/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Admin/Capa */ 87); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -20960,9 +21149,7 @@ var _dec, _class; var SecurityAdminSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(function (self) { return '' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(self.adminLogin()) && '' !== self.adminPassword(); -}), (_class = -/*#__PURE__*/ -function () { +}), (_class = /*#__PURE__*/function () { function SecurityAdminSettings() { var _this = this; @@ -21120,7 +21307,7 @@ function () { /***/ }), -/* 457 */ +/* 463 */ /*!**************************************!*\ !*** ./dev/Settings/Admin/Social.js ***! \**************************************/ @@ -21145,9 +21332,7 @@ function () { -var SocialAdminSettings = -/*#__PURE__*/ -function () { +var SocialAdminSettings = /*#__PURE__*/function () { function SocialAdminSettings() { this.googleEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.enabled; this.googleEnableAuth = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.capa.auth; @@ -21251,7 +21436,7 @@ function () { /***/ }), -/* 458 */ +/* 464 */ /*!***************************************!*\ !*** ./dev/Settings/Admin/Plugins.js ***! \***************************************/ @@ -21274,8 +21459,8 @@ function () { /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/Admin/App */ 77); -/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Admin/Plugin */ 116); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/Admin/App */ 79); +/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Admin/Plugin */ 117); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); @@ -21292,9 +21477,7 @@ function () { -var PluginsAdminSettings = -/*#__PURE__*/ -function () { +var PluginsAdminSettings = /*#__PURE__*/function () { function PluginsAdminSettings() { this.enabledPlugins = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('EnabledPlugins')); this.plugins = Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].plugins; @@ -21349,7 +21532,7 @@ function () { _proto.onPluginLoadRequest = function onPluginLoadRequest(result, data) { if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === result && data && data.Result) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Plugin */ 536), [data.Result]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Plugin */ 542), [data.Result]); } }; @@ -21373,7 +21556,7 @@ function () { /***/ }), -/* 459 */ +/* 465 */ /*!****************************************!*\ !*** ./dev/Settings/Admin/Packages.js ***! \****************************************/ @@ -21393,7 +21576,7 @@ function () { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Package */ 88); +/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Package */ 90); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); @@ -21406,9 +21589,7 @@ function () { -var PackagesAdminSettings = -/*#__PURE__*/ -function () { +var PackagesAdminSettings = /*#__PURE__*/function () { function PackagesAdminSettings() { var _this = this; @@ -21493,7 +21674,7 @@ function () { /***/ }), -/* 460 */ +/* 466 */ /*!*************************************!*\ !*** ./dev/Settings/Admin/About.js ***! \*************************************/ @@ -21507,7 +21688,7 @@ function () { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Stores/Admin/App */ 77); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Stores/Admin/App */ 79); /* harmony import */ var Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/Admin/Core */ 40); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); @@ -21517,9 +21698,7 @@ function () { -var AboutAdminSettings = -/*#__PURE__*/ -function () { +var AboutAdminSettings = /*#__PURE__*/function () { function AboutAdminSettings() { var _this = this; @@ -21591,7 +21770,7 @@ function () { /***/ }), -/* 461 */ +/* 467 */ /*!*****************************************!*\ !*** ./dev/View/Admin/Settings/Menu.js ***! \*****************************************/ @@ -21602,7 +21781,7 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuSettingsAdminView; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); /* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); @@ -21628,9 +21807,7 @@ var MenuSettingsAdminView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_ name: 'View/Admin/Settings/Menu', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["ViewType"].Left, templateID: 'AdminMenu' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(MenuSettingsAdminView, _AbstractViewNext); /** @@ -21660,7 +21837,7 @@ function (_AbstractViewNext) { /***/ }), -/* 462 */ +/* 468 */ /*!*****************************************!*\ !*** ./dev/View/Admin/Settings/Pane.js ***! \*****************************************/ @@ -21671,15 +21848,15 @@ function (_AbstractViewNext) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PaneSettingsAdminView; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); -/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/Admin/Domain */ 147); -/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Plugin */ 116); -/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/Admin/Package */ 88); +/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/Admin/Domain */ 149); +/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Plugin */ 117); +/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/Admin/Package */ 90); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -21701,9 +21878,7 @@ var PaneSettingsAdminView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_ name: 'View/Admin/Settings/Pane', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["ViewType"].Right, templateID: 'AdminPane' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(PaneSettingsAdminView, _AbstractViewNext); function PaneSettingsAdminView() { @@ -21738,7 +21913,7 @@ function (_AbstractViewNext) { /***/ }), -/* 463 */ +/* 469 */ /*!***********************************!*\ !*** ./dev/Screen/Admin/Login.js ***! \***********************************/ @@ -21750,17 +21925,15 @@ function (_AbstractViewNext) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginAdminScreen; }); /* unused harmony export default */ /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); -/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/AbstractScreen */ 137); +/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/AbstractScreen */ 138); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); -/* harmony import */ var View_Admin_Login__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! View/Admin/Login */ 464); +/* harmony import */ var View_Admin_Login__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! View/Admin/Login */ 470); -var LoginAdminScreen = -/*#__PURE__*/ -function (_AbstractScreen) { +var LoginAdminScreen = /*#__PURE__*/function (_AbstractScreen) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LoginAdminScreen, _AbstractScreen); function LoginAdminScreen() { @@ -21779,7 +21952,7 @@ function (_AbstractScreen) { /***/ }), -/* 464 */ +/* 470 */ /*!*********************************!*\ !*** ./dev/View/Admin/Login.js ***! \*********************************/ @@ -21829,9 +22002,7 @@ var LoginAdminView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["v templateID: 'AdminLogin' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(function (self) { return !self.submitRequest(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(LoginAdminView, _AbstractViewNext); function LoginAdminView() { @@ -21943,12 +22114,6 @@ function (_AbstractViewNext) { /***/ }), -/* 465 */, -/* 466 */, -/* 467 */, -/* 468 */, -/* 469 */, -/* 470 */, /* 471 */, /* 472 */, /* 473 */, @@ -22012,7 +22177,13 @@ function (_AbstractViewNext) { /* 531 */, /* 532 */, /* 533 */, -/* 534 */ +/* 534 */, +/* 535 */, +/* 536 */, +/* 537 */, +/* 538 */, +/* 539 */, +/* 540 */ /*!**********************!*\ !*** ./dev/admin.js ***! \**********************/ @@ -22022,14 +22193,14 @@ function (_AbstractViewNext) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ 255); -/* harmony import */ var App_Admin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! App/Admin */ 390); +/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ 260); +/* harmony import */ var App_Admin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! App/Admin */ 396); Object(bootstrap__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(App_Admin__WEBPACK_IMPORTED_MODULE_1__["default"]); /***/ }), -/* 535 */ +/* 541 */ /*!***************************************!*\ !*** ./dev/View/Popup/DomainAlias.js ***! \***************************************/ @@ -22058,7 +22229,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Admin/Domain */ 147); +/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Admin/Domain */ 149); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); /* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Helper/Apps/Admin */ 65); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -22088,9 +22259,7 @@ var DomainAliasPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1 templateID: 'PopupsDomainAlias' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["command"])(function (self) { return self.canBeSaved(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(DomainAliasPopupView, _AbstractViewNext); function DomainAliasPopupView() { @@ -22163,7 +22332,7 @@ function (_AbstractViewNext) { /***/ }), -/* 536 */ +/* 542 */ /*!**********************************!*\ !*** ./dev/View/Popup/Plugin.js ***! \**********************************/ @@ -22221,9 +22390,7 @@ var PluginPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__[" templateID: 'PopupsPlugin' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["command"])(function (self) { return self.hasConfiguration(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(PluginPopupView, _AbstractViewNext); function PluginPopupView() { @@ -22320,7 +22487,7 @@ function (_AbstractViewNext) { _proto.tryToClosePopup = function tryToClosePopup() { var _this2 = this; - var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 221); + var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 224); if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["isPopupVisible"])(PopupsAskViewModel)) { Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { @@ -22348,7 +22515,7 @@ function (_AbstractViewNext) { /***/ }), -/* 537 */ +/* 543 */ /*!****************************************!*\ !*** ./dev/Settings/Admin/Branding.js ***! \****************************************/ @@ -22367,7 +22534,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/App */ 77); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/App */ 79); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); @@ -22378,9 +22545,7 @@ __webpack_require__.r(__webpack_exports__); -var BrandingAdminSettings = -/*#__PURE__*/ -function () { +var BrandingAdminSettings = /*#__PURE__*/function () { function BrandingAdminSettings() { this.capa = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].prem; this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('Title')).idleTrigger(); @@ -22450,4 +22615,4 @@ function () { /***/ }) /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9MaW5rcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcHBseURlY29yYXRlZERlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmtleVwiIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWRtaW4vQWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Vmlld05leHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Db3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9Nb21lbnRvci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuaGFzaGVyXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL2Rldi9IZWxwZXIvQXBwcy9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9MYW5ndWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vQXBwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9FbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0NhcGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vUGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93Lm1vbWVudFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5wcm9ncmVzc0pzXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0phc3NsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9UaGVtZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0xpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0U2NyZWVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnNzbVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vRG9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmNyb3Nzcm9hZHNcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VtYWlsanMtYWRkcmVzc3BhcnNlci9kaXN0L2FkZHJlc3NwYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9IdG1sRWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL2Rldi9FeHRlcm5hbC9PcGVudGlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9waWthZGF5L3Bpa2FkYXkuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LkF1dG9saW5rZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL01pbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0Fzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzLmpzIiwid2VicGFjazovLy8uL2Rldi9ib290c3RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWJzdHJhY3RBcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWJzdHJhY3RTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdEJvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NhdmVUcmlnZ2VyLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9SYWRpby5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1RleHRBcmVhLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvRGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NjcmlwdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L01hdGVyaWFsRGVzaWduL0NoZWNrYm94LmpzIiwid2VicGFjazovLy8uL2Rldi9BcHAvQWRtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRG9tYWluLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0RvbWFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9Db250YWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vU2VjdXJpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL1NvY2lhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vUGx1Z2lucy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vUGFja2FnZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0Fib3V0LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L0FkbWluL1NldHRpbmdzL01lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL0FkbWluL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L0FkbWluL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9hZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Eb21haW5BbGlhcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9QbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0JyYW5kaW5nLmpzIl0sIm5hbWVzIjpbIkZpbGVUeXBlIiwiU3RvcmFnZVJlc3VsdFR5cGUiLCJGb2N1c2VkIiwiU3RhdGUiLCJTdGF0ZVR5cGUiLCJDYXBhIiwiS2V5U3RhdGUiLCJGb2xkZXJUeXBlIiwiU2VydmVyRm9sZGVyVHlwZSIsIkxvZ2luU2lnbk1lVHlwZUFzU3RyaW5nIiwiTG9naW5TaWduTWVUeXBlIiwiQ29tcG9zZVR5cGUiLCJVcGxvYWRFcnJvckNvZGUiLCJTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uIiwiQ2xpZW50U2lkZUtleU5hbWUiLCJFdmVudEtleUNvZGUiLCJNZXNzYWdlU2V0QWN0aW9uIiwiTWVzc2FnZVNlbGVjdEFjdGlvbiIsIkRlc2t0b3BOb3RpZmljYXRpb24iLCJNZXNzYWdlUHJpb3JpdHkiLCJFZGl0b3JEZWZhdWx0VHlwZSIsIlNlcnZlclNlY3VyZSIsIlNlYXJjaERhdGVUeXBlIiwiU2F2ZVNldHRpbmdzU3RlcCIsIkxheW91dCIsIkZpbHRlckNvbmRpdGlvbkZpZWxkIiwiRmlsdGVyQ29uZGl0aW9uVHlwZSIsIkZpbHRlcnNBY3Rpb24iLCJGaWx0ZXJSdWxlc1R5cGUiLCJTaWduZWRWZXJpZnlTdGF0dXMiLCJDb250YWN0UHJvcGVydHlUeXBlIiwiTWFnaWNzIiwiUG9ydHMiLCJOb3RpZmljYXRpb24iLCJrbyIsIndpbmRvdyIsIiR3aW4iLCIkIiwiZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciIsImVsZW1lbnQiLCJ1dGlscyIsImRvbU5vZGVEaXNwb3NhbCIsImFkZERpc3Bvc2VDYWxsYmFjayIsIl9fb3BlbnRpcCIsImRlYWN0aXZhdGUiLCJiaW5kaW5nSGFuZGxlcnMiLCJ1cGRhdGVXaWR0aCIsImluaXQiLCJmVmFsdWVBY2Nlc3NvciIsIiRlbCIsImZWYWx1ZSIsImZJbml0Iiwid2lkdGgiLCJzZXRUaW1lb3V0IiwiVGltZTUwMG1zIiwib24iLCJvZmYiLCJlZGl0b3IiLCJIdG1sRWRpdG9yIiwicmVxdWlyZSIsImRlZmF1bHQiLCJmVXBkYXRlRWRpdG9yVmFsdWUiLCJfX2VkaXRvciIsInNldEh0bWxPclBsYWluIiwiZlVwZGF0ZUtvVmFsdWUiLCJnZXREYXRhV2l0aEh0bWxNYXJrIiwiZk9uUmVhZHkiLCJpc09ic2VydmFibGUiLCJfX2ZldGNoRWRpdG9yVmFsdWUiLCJzdWJzY3JpYmUiLCJqc29uIiwidGV4dCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bndyYXAiLCJ1cGRhdGUiLCJzY3JvbGxlclNoYWRvd3MiLCJsaW1pdCIsImNvbnQiLCJmRnVuYyIsIl8iLCJ0aHJvdHRsZSIsInRvZ2dsZUNsYXNzIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGlrYWRheSIsImZBbGxCaW5kaW5nc0FjY2Vzc29yIiwidmlld01vZGVsIiwiYmluZGluZ0NvbnRleHQiLCJ0ZXh0SW5wdXQiLCJQaWthZGF5IiwiX19waWthZGF5IiwiZmllbGQiLCJ2aXNpYmxlQW5pbWF0ZWQiLCJhZGRDbGFzcyIsInNob3ciLCJoaWRlIiwiZGVsYXkiLCJyZW1vdmVDbGFzcyIsInRvb2x0aXAiLCJpc01vYmlsZSIsImRhdGEiLCJpc0kxOE4iLCJHbG9iYWxzIiwiYk1vYmlsZURldmljZSIsInNWYWx1ZSIsImlzRnVuY3Rpb24iLCJPcGVudGlwIiwiZHJvcGRvd25WaXNpYmlsaXR5IiwidiIsInNldENvbnRlbnQiLCJhY3RpdmF0ZSIsIlRyYW5zbGF0b3IiLCJpMThuIiwidHJpZ2dlciIsInRvb2x0aXBFcnJvclRpcCIsInN0eWxlIiwiaGlkZU9uIiwidGlwSm9pbnQiLCJkb2N1bWVudCIsInZhbHVlIiwib3BlblRpcHMiLCJpcyIsIlRpbWUxMDBtcyIsInJlZ2lzdHJhdGVCb290c3RyYXBEcm9wZG93biIsImFCb290c3RyYXBEcm9wZG93bnMiLCJwdXNoIiwiY2xpY2siLCJkZXRlY3REcm9wZG93blZpc2liaWxpdHkiLCJvcGVuRHJvcGRvd25UcmlnZ2VyIiwiaGFzQ2xhc3MiLCJkcm9wZG93biIsImZvY3VzIiwiZHJvcGRvd25DbG9zZXIiLCJjbG9zZXN0IiwicG9wb3ZlciIsImNzc3RleHQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsInJlc2l6ZWNyb3AiLCJvbktleURvd24iLCJldmVudCIsImNhbGwiLCJvbkVudGVyIiwicGFyc2VJbnQiLCJrZXlDb2RlIiwib25TcGFjZSIsIm9uVGFiIiwic2hpZnRLZXkiLCJvbkVzYyIsImNsaWNrT25UcnVlIiwibW9kYWwiLCJVdGlscyIsIndpbmRvd1Jlc2l6ZUNhbGxiYWNrIiwiJGh0bWwiLCJtb21lbnQiLCJtb21lbnRUb05vZGUiLCJpMThuSW5pdCIsImkxOG5Ub05vZGVzIiwidHJhbnNsYXRvckluaXQiLCJpMThuVXBkYXRlIiwibGluayIsImF0dHIiLCJ0aXRsZSIsInRleHRGIiwiaW5pdERvbSIsImluaXRGaXhlZFRyaWdnZXIiLCJ2YWx1ZXMiLCJ0b3AiLCIkY29udGFpbmVyIiwicmVzaXplIiwib2Zmc2V0IiwiY3NzIiwiaW5pdFJlc2l6ZVRyaWdnZXIiLCJvRWxlbWVudCIsInBJbnQiLCJzaXplIiwiaGVpZ2h0IiwiYXBwZW5kRG9tIiwiZW1wdHkiLCJhcHBlbmQiLCJkcmFnZ2FibGUiLCJ0cmlnZ2VyWm9uZSIsInNjcm9sbFNwZWVkIiwiZkFsbFZhbHVlRnVuYyIsImRyb3BwYWJsZVNlbGVjdG9yIiwiY29uZiIsImRpc3RhbmNlIiwiaGFuZGxlIiwiY3Vyc29yQXQiLCJsZWZ0IiwicmVmcmVzaFBvc2l0aW9ucyIsInNjcm9sbCIsImRyYWciLCJzdG9wIiwiaGVscGVyIiwiZWFjaCIsIiR0aGlzIiwiYm90dG9tUG9zIiwiY2xlYXJJbnRlcnZhbCIsInBhZ2VYIiwicGFnZVkiLCJtb3ZlVXAiLCJ3aW5kb3dSZXNpemUiLCJzZXRJbnRlcnZhbCIsIm1vdmVEb3duIiwidGFyZ2V0IiwiZGF0YUZvciIsInJlbW92ZUluRm9jdXMiLCJkcm9wcGFibGUiLCJmVmFsdWVGdW5jIiwiZk92ZXJDYWxsYmFjayIsImRyb3BwYWJsZU92ZXIiLCJmT3V0Q2FsbGJhY2siLCJkcm9wcGFibGVPdXQiLCJ0b2xlcmFuY2UiLCJob3ZlckNsYXNzIiwiZHJvcCIsIm92ZXIiLCJvdXQiLCJ1aSIsIm5hbm8iLCJTZXR0aW5ncyIsImJEaXNhYmxlTmFub1Njcm9sbCIsImFwcFNldHRpbmdzR2V0IiwibmFub1Njcm9sbGVyIiwiaU9TTmF0aXZlU2Nyb2xsaW5nIiwicHJldmVudFBhZ2VTY3JvbGxpbmciLCJzYXZlVHJpZ2dlciIsInRvU3RyaW5nIiwiZW5kIiwiZW1haWxzVGFncyIsIkVtYWlsTW9kZWwiLCJmQWxsQmluZGluZ3MiLCJmQXV0b0NvbXBsZXRlU291cmNlIiwiYXV0b0NvbXBsZXRlU291cmNlIiwiaW5wdXREZWxpbWl0ZXJzIiwiZkZvY3VzQ2FsbGJhY2siLCJmb2N1c2VkIiwiaW5wdXRvc2F1cnVzIiwicGFyc2VPbkJsdXIiLCJhbGxvd0RyYWdBbmREcm9wIiwiZm9jdXNDYWxsYmFjayIsInNwbGl0SG9vayIsInN1YnN0ciIsInNwbGl0RW1haWxMaW5lIiwicGFyc2VIb29rIiwiaW5wdXQiLCJmbGF0dGVuIiwiaW5wdXRWYWx1ZSIsInBhcnNlRW1haWxMaW5lIiwibGVuZ3RoIiwiaXRlbSIsImlzT2JqZWN0IiwidG9MaW5lIiwiY2hhbmdlIiwiJG9FbCIsInZhbCIsImNvbW1hbmQiLCJqcUVsZW1lbnQiLCJpc0NvbW1hbmQiLCJFcnJvciIsImVuYWJsZWQiLCJvYnNlcnZhYmxlIiwiY2FuRXhlY3V0ZSIsIl9fcmVhbENhbkV4ZWN1dGUiLCJjb21wdXRlZCIsInJlc3VsdCIsInByb3AiLCJleHRlbmRlcnMiLCJ0cmltbWVyIiwicmVhZCIsIndyaXRlIiwibmV3VmFsdWUiLCJwb3NJbnRlcmVyIiwiZGVmYXVsdFZhbCIsImxpbWl0ZWRMaXN0IiwiY3VycmVudFZhbHVlIiwibGlzdCIsImlzTm9uRW1wdHlBcnJheSIsImluQXJyYXkiLCJleHRlbmQiLCJub3RpZnkiLCJ2YWx1ZUhhc011dGF0ZWQiLCJyZXZlcnNpYmxlIiwiY29tbWl0IiwicmV2ZXJzZSIsImNvbW1pdGVkVmFsdWUiLCJ0b2dnbGVTdWJzY3JpYmUiLCJvcHRpb25zIiwidG9nZ2xlU3Vic2NyaWJlUHJvcGVydHkiLCJwcmV2IiwibmV4dCIsImZhbHNlVGltZW91dCIsIm9wdGlvbiIsImlGYWxzZVRpbWVvdXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic3BlY2lhbFRocm90dGxlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSIsImlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0IiwidmFsdWVGb3JSZWFkIiwiYlZhbHVlIiwiaWRsZVRyaWdnZXIiLCJJZGxlIiwiZm4iLCJ2YWxpZGF0ZU5vbmUiLCJoYXNFcnJvciIsInZhbGlkYXRlRW1haWwiLCJ0ZXN0IiwidmFsaWRhdGVTaW1wbGVFbWFpbCIsImRlbGV0ZUFjY2Vzc0hlbHBlciIsInZhbGlkYXRlRnVuYyIsImhhc0Z1bmNFcnJvciIsInRyaW0iLCJpc0FycmF5IiwiaXNGdW5jIiwiaXNVbmQiLCJpc1VuZGVmaW5lZCIsImlzTnVsbCIsImhhcyIsImJpbmQiLCJub29wIiwibm9vcFRydWUiLCJub29wRmFsc2UiLCJzaWxlbnRUcnlDYXRjaCIsImZ1bmMiLCJlIiwiaXNOb3JtYWwiLCJpc1Bvc051bWVyaWMiLCJpbmNsdWRlWmVybyIsImRlZmF1bHRWYWx1ciIsImlzTmFOIiwicFN0cmluZyIsInBCb29sIiwiYm9vbFRvQWpheCIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSSIsInVybCIsImVuY29kZVVSSSIsInNpbXBsZVF1ZXJ5UGFyc2VyIiwicXVlcnlTdHJpbmciLCJpbmRleCIsImxlbiIsInRlbXAiLCJxdWVyaWVzIiwic3BsaXQiLCJwYXJhbXMiLCJmYWtlTWQ1IiwibGluZSIsImxpbmVMZW4iLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJlbmNvZGVIdG1sIiwiZXNjYXBlIiwic3BsaXRQbGFpblRleHQiLCJwcmVmaXgiLCJzdWJUZXh0Iiwic3BhY2VQb3MiLCJuZXdMaW5lUG9zIiwic3Vic3RyaW5nIiwidGltZU91dEFjdGlvbiIsInRpbWVPdXRzIiwiYWN0aW9uIiwiZkZ1bmN0aW9uIiwidGltZU91dCIsInRpbWVPdXRBY3Rpb25TZWNvbmQiLCJkZU1vZHVsZSIsIm0iLCJpbkZvY3VzIiwiYWN0aXZlRWxlbWVudCIsIl9faW5Gb2N1c0NhY2hlIiwiZm9yY2UiLCJibHVyIiwiYWN0aXZlRWwiLCJyZW1vdmVTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJzZWwiLCJyZW1vdmVBbGxSYW5nZXMiLCJzZWxlY3Rpb24iLCJyZXBseVN1YmplY3RBZGQiLCJzdWJqZWN0IiwidG9VcHBlckNhc2UiLCJyZXBsYWNlIiwicmUiLCJmd2QiLCJwYXJ0cyIsInByZWZpeElzUmUiLCJwYXJ0IiwidHJpbW1lZFBhcnQiLCJqb2luIiwicm91bmROdW1iZXIiLCJudW0iLCJkZWMiLCJwb3ciLCJmcmllbmRseVNpemUiLCJzaXplSW5CeXRlcyIsImxvZyIsImRlc2MiLCJjb25zb2xlIiwiZGVsZWdhdGVSdW4iLCJvYmplY3QiLCJtZXRob2ROYW1lIiwia2lsbEN0cmxBQ3RybFMiLCJjdHJsS2V5IiwiYWx0S2V5Iiwia2V5Iiwid2hpY2giLCJTIiwicHJldmVudERlZmF1bHQiLCJBIiwic2VuZGVyIiwic3JjRWxlbWVudCIsImNvbnRlbnRFZGl0YWJsZSIsInRhZ05hbWUiLCJtYXRjaCIsImNsZWFyIiwiY3JlYXRlQ29tbWFuZExlZ2FjeSIsImNvbnRleHQiLCJmRXhlY3V0ZSIsImZDYW5FeGVjdXRlIiwiZlJlc3VsdCIsImZOb25FbXB0eSIsImFyZ3MiLCJhcHBseSIsImNvbnZlcnRUaGVtZU5hbWUiLCJtZW1vaXplIiwidGhlbWUiLCJxdW90ZU5hbWUiLCJuYW1lIiwibWljcm90aW1lIiwiRGF0ZSIsImdldFRpbWUiLCJ0aW1lc3RhbXAiLCJjb252ZXJ0TGFuZ05hbWUiLCJsYW5ndWFnZSIsImlzRW5nIiwiZHJhZ2dhYmxlUGxhY2UiLCJhcHBlbmRUbyIsImRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciIsImRvbUl0ZW0iLCJkaXNhYmxlZCIsImNsZWFyQnFTd2l0Y2hlciIsImJvZHkiLCJyZW1vdmUiLCJyZW1vdmVBdHRyIiwicHJldmlld01lc3NhZ2UiLCJpc0h0bWwiLCJwcmludCIsImRhdGUiLCJmcm9tQ3JlZHMiLCJ0b0NyZWRzIiwidG9MYWJlbCIsImNjQ2xhc3MiLCJjY0NyZWRzIiwiY2NMYWJlbCIsIndpbiIsIm9wZW4iLCJkb2MiLCJib2R5Q2xvbmUiLCJjbG9uZSIsImJvZHlDbGFzcyIsImh0bWwiLCJjbG9zZSIsInNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uIiwiZkNhbGxiYWNrIiwia29UcmlnZ2VyIiwidGltZXIiLCJ0eXBlIiwiY2FjaGVkIiwicmVxdWVzdEFjdGlvbiIsInJlcXVlc3RQYXJhbWV0ZXJzIiwiUmVzdWx0IiwiVHJ1ZVJlc3VsdCIsIkZhbHNlUmVzdWx0Iiwic2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24iLCJzZXR0aW5nc1NhdmVIZWxwZXJTdWJzY3JpYmVGdW5jdGlvbiIsInJlbW90ZSIsInNldHRpbmdOYW1lIiwiZlRyaWdnZXJGdW5jdGlvbiIsInNhdmVBZG1pbkNvbmZpZyIsInNhdmVTZXR0aW5ncyIsImZpbmRFbWFpbEFuZExpbmtzIiwiQXV0b2xpbmtlciIsIm5ld1dpbmRvdyIsInN0cmlwUHJlZml4IiwidXJscyIsImVtYWlsIiwibWVudGlvbiIsInBob25lIiwiaGFzaHRhZyIsInJlcGxhY2VGbiIsImdldFR5cGUiLCJtYXRjaGVkVGV4dCIsImh0bWxUb1BsYWluIiwicG9zIiwiaVAxIiwiaVAyIiwiaVAzIiwiY29udmVydEJsb2NrcXVvdGUiLCJibG9ja3F1b3RlVGV4dCIsImNvbnZlcnREaXZzIiwiZGl2VGV4dCIsImNvbnZlcnRQcmUiLCJmaXhBdHRpYnV0ZVZhbHVlIiwiY29udmVydExpbmtzIiwiJGRpdiIsInBsYWluVG9IdG1sIiwicGxhaW4iLCJmaW5kRW1haWxBbmRMaW5rc0luVGV4dCIsImJJbiIsImJEbyIsImJTdGFydCIsImFOZXh0VGV4dCIsInNMaW5lIiwiaUluZGV4IiwiYVRleHQiLCJmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIiLCJhU3lzdGVtIiwiYUxpc3QiLCJhRGlzYWJsZWQiLCJhSGVhZGVyTGluZXMiLCJpVW5EZWVwIiwiZkRpc2FibGVDYWxsYmFjayIsImZWaXNpYmxlQ2FsbGJhY2siLCJmUmVuYW1lQ2FsbGJhY2siLCJiU3lzdGVtIiwiYkJ1aWxkVW52aXNpYmxlIiwib0l0ZW0iLCJiU2VwIiwiaUxlbiIsImFSZXN1bHQiLCJzRGVlcFByZWZpeCIsImlkIiwic3lzdGVtIiwic2Vwb3JhdG9yIiwiZnVsbE5hbWVSYXciLCJzZWxlY3RhYmxlIiwic3ViU2NyaWJlZCIsImV4aXN0ZW4iLCJoYXNTdWJTY3JpYmVkU3ViZm9sZGVycyIsIlVzZXIiLCJBcnJheSIsImRlZXAiLCJzdWJGb2xkZXJzIiwic2VsZWN0RWxlbWVudCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJhZGRSYW5nZSIsImNyZWF0ZVRleHRSYW5nZSIsIm1vdmVUb0VsZW1lbnRUZXh0Iiwic2VsZWN0IiwiZGVib3VuY2UiLCJHbG9iYWxzRGF0YSIsInRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSIsImNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZSIsImdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnIiwiY29uZmlndXJhdGlvbiIsInBhcnNlIiwiZGlzcG9zZU9uZSIsInByb3BPclZhbHVlIiwiZGlzcG9zYWJsZSIsImRpc3Bvc2UiLCJkaXNwb3NlT2JqZWN0IiwiZGlzcG9zYWJsZXMiLCJvYmplY3RGb3JFYWNoIiwiZGVsZWdhdGVSdW5PbkRlc3Ryb3kiLCJvYmplY3RPck9iamVjdHMiLCJvbkRlc3Ryb3kiLCJhcHBlbmRTdHlsZXMiLCIkc3R5bGVUYWciLCJfX3RoZW1lVGltZXIiLCJfX3RoZW1lQWpheCIsImNoYW5nZVRoZW1lIiwidGhlbWVUcmlnZ2VyIiwidGhlbWVMaW5rIiwiY2xlYXJUaW1lciIsInRoZW1lU3R5bGUiLCJBbmltYXRlIiwiYWJvcnQiLCJhamF4IiwiZGF0YVR5cGUiLCJ0aGVuIiwiYWZ0ZXIiLCJjb21wdXRlZFBhZ2VuYXRvckhlbHBlciIsImtvQ3VycmVudFBhZ2UiLCJrb1BhZ2VDb3VudCIsImN1cnJlbnRQYWdlIiwicGFnZUNvdW50IiwiZkFkZCIsImN1c3RvbU5hbWUiLCJjdXJyZW50IiwiY3VzdG9tIiwidW5zaGlmdCIsImdldEZpbGVFeHRlbnNpb24iLCJmaWxlTmFtZSIsInRvTG93ZXJDYXNlIiwicG9wIiwibWltZUNvbnRlbnRUeXBlIiwiZXh0IiwiTWltZSIsImlzVHJhbnNwYXJlbnQiLCJjb2xvciIsImdldFJlYWxIZWlnaHQiLCIkaGNvbnQiLCJyZXNpemVBbmRDcm9wIiwiaW1nIiwiSW1hZ2UiLCJvbmxvYWQiLCJkaWZmIiwiY2FudmFzIiwiY3JlYXRlRWxlbWVudCIsImN0eCIsImdldENvbnRleHQiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsInNyYyIsIm1haWxUb0hlbHBlciIsIm1haWxUb1VybCIsIlBvcHVwQ29tcG9zZVZpZXdNb2RlbCIsInRvIiwiY2MiLCJiY2MiLCJxdWVyeSIsInNob3dTY3JlZW5Qb3B1cCIsIkVtcHR5IiwiZG9tUmVhZHkiLCJ0aW1lb3V0IiwiU3RyaW5nIiwic3RyIiwic3RhcnQiLCJTRVRUSU5HUyIsIl9fcmxhaF9kYXRhIiwiQVBQX1NFVFRJTkdTIiwiU3lzdGVtIiwic2V0dGluZ3NHZXQiLCJzZXR0aW5nc1NldCIsImNhcGEiLCJfX3NpemVzIiwiJGRvYyIsIiRib2R5IiwicG9zaXRpb24iLCJzdGFydE1pY3JvdGltZSIsImNvbW11bml0eSIsIlJMX0NPTU1VTklUWSIsInJhdGVMaW1pdCIsInVzZUtleWJvYXJkU2hvcnRjdXRzIiwic1VzZXJBZ2VudCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJJRSIsImJDaHJvbWUiLCJiU2FmYXJpIiwiYkFuaW1hdGlvblN1cHBvcnRlZCIsImJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCIsIlhNTEh0dHBSZXF1ZXN0IiwiYklzSHR0cHMiLCJsb2NhdGlvbiIsInByb3RvY29sIiwiaHRtbEVkaXRvckRlZmF1bHRDb25maWciLCJncm91cHMiLCJodG1sRWRpdG9yTGFuZ3NNYXAiLCJiQWxsb3dQZGZQcmV2aWV3IiwibWltZVR5cGVzIiwiVklFV19NT0RFTFMiLCJzZXR0aW5ncyIsIm1vdmVBY3Rpb24iLCJsZWZ0UGFuZWxEaXNhYmxlZCIsImxlZnRQYW5lbFR5cGUiLCJsZWZ0UGFuZWxXaWR0aCIsInBvcHVwVmlzaWJpbGl0eU5hbWVzIiwib2JzZXJ2YWJsZUFycmF5IiwicG9wdXBWaXNpYmlsaXR5Iiwia2V5U2NvcGVSZWFsIiwiQWxsIiwia2V5U2NvcGVGYWtlIiwia2V5U2NvcGUiLCJNZW51IiwiQ29tcG9zZSIsImZpbHRlciIsImVsIiwiY2xhc3NOYW1lIiwic2V0U2NvcGUiLCJnZXRTY29wZSIsIl9fQVBQX18iLCJpQWpheEVycm9yQ291bnQiLCJpVG9rZW5FcnJvckNvdW50IiwiaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCIsImJVbmxvYWQiLCJjdXJyZW50U2NyZWVuIiwiZGVmYXVsdFNjcmVlbk5hbWUiLCJTQ1JFRU5TIiwiVmlld1R5cGUiLCJQb3B1cCIsIkxlZnQiLCJSaWdodCIsIkNlbnRlciIsImhpZGVMb2FkaW5nIiwiY3JlYXRlQ29tbWFuZCIsImFkZFNldHRpbmdzVmlld01vZGVsIiwiU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyIsInRlbXBsYXRlIiwibGFiZWxOYW1lIiwicm91dGUiLCJpc0RlZmF1bHQiLCJfX3JsU2V0dGluZ3NEYXRhIiwiTGFiZWwiLCJUZW1wbGF0ZSIsIlJvdXRlIiwiSXNEZWZhdWx0IiwicmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwiLCJkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwiLCJyb3V0ZU9mZiIsImhhc2hlciIsImNoYW5nZWQiLCJhY3RpdmUiLCJyb3V0ZU9uIiwic2NyZWVuIiwic2NyZWVuTmFtZSIsImdldFNjcmVlblBvcHVwIiwiUG9wdVZpZXdNb2RlbENsYXNzIiwiaGlkZVNjcmVlblBvcHVwIiwiVmlld01vZGVsQ2xhc3NUb0hpZGUiLCJNb2RhbFZpZXciLCJfX3ZtIiwiX19kb20iLCJtb2RhbFZpc2liaWxpdHkiLCJ2bVJ1bkhvb2siLCJob29rTmFtZSIsIlZpZXdNb2RlbENsYXNzIiwiX19uYW1lcyIsInJ1bkhvb2siLCJidWlsZFZpZXdNb2RlbCIsInZtU2NyZWVuIiwiX19idWlsZGVkIiwidm1Eb20iLCJ2bSIsIl9fdHlwZSIsInZtUGxhY2UiLCJvblNob3dUcmlnZ2VyIiwib25IaWRlVHJpZ2dlciIsInZpZXdNb2RlbE5hbWUiLCJfX25hbWUiLCJ2aWV3TW9kZWxOYW1lcyIsInZpZXdNb2RlbFRlbXBsYXRlSUQiLCJfX3RlbXBsYXRlSUQiLCJ2aWV3TW9kZWxQb3NpdGlvbiIsInZpZXdNb2RlbERvbSIsImNhbmNlbENvbW1hbmQiLCJjbG9zZUNvbW1hbmQiLCJzdG9yZUFuZFNldEtleVNjb3BlIiwicmVzdG9yZUtleVNjb3BlIiwiYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlIiwicmVnaXN0ZXJQb3B1cEtleURvd24iLCJWaWV3TW9kZWxDbGFzc1RvU2hvdyIsIndhcm1VcFNjcmVlblBvcHVwIiwiaXNQb3B1cFZpc2libGUiLCJzY3JlZW5PblJvdXRlIiwic3ViUGFydCIsImlzU2FtZVNjcmVlbiIsImNyb3NzIiwiX19zdGFydGVkIiwidmlld01vZGVscyIsImRlZmVyIiwidmlld01vZGVsVmlzaWJpbGl0eSIsIl9fY3Jvc3MiLCJzdGFydFNjcmVlbnMiLCJzY3JlZW5zQ2xhc3NlcyIsIkNTY3JlZW4iLCJfX3N0YXJ0IiwiY3Jvc3Nyb2FkcyIsImNyZWF0ZSIsImFkZFJvdXRlIiwiaW5pdGlhbGl6ZWQiLCJhZGQiLCJzZXRIYXNoIiwiaGFzaCIsInNpbGVuY2UiLCJjbWQiLCJ2aWV3RGVjb3JhdG9yIiwidGVtcGxhdGVJRCIsInBvcHVwRGVjb3JhdG9yIiwiY29tbWFuZERlY29yYXRvciIsImRlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm5vcm1DYW5FeGVjdXRlIiwic2V0dGluZ3NNZW51S2V5c0hhbmRsZXIiLCIkaXRlbXMiLCJoYW5kbGVyIiwidXAiLCJzaG9ydGN1dCIsInJlc3VsdEhhc2giLCJlcSIsIlRpbWUyMDBtcyIsIkkxOE5fREFUQSIsInJhaW5sb29wSTE4TiIsIkkxOE5fTk9USUZJQ0FUSU9OX0RBVEEiLCJJMThOX05PVElGSUNBVElPTl9NQVAiLCJJbnZhbGlkVG9rZW4iLCJBdXRoRXJyb3IiLCJBY2Nlc3NFcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIkNhcHRjaGFFcnJvciIsIlNvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSIsIlNvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSIsIkRvbWFpbk5vdEFsbG93ZWQiLCJBY2NvdW50Tm90QWxsb3dlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQiLCJBY2NvdW50VHdvRmFjdG9yQXV0aEVycm9yIiwiQ291bGROb3RTYXZlTmV3UGFzc3dvcmQiLCJDdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QiLCJOZXdQYXNzd29yZFNob3J0IiwiTmV3UGFzc3dvcmRXZWFrIiwiTmV3UGFzc3dvcmRGb3JiaWRkZW4iLCJDb250YWN0c1N5bmNFcnJvciIsIkNhbnRHZXRNZXNzYWdlTGlzdCIsIkNhbnRHZXRNZXNzYWdlIiwiQ2FudERlbGV0ZU1lc3NhZ2UiLCJDYW50TW92ZU1lc3NhZ2UiLCJDYW50Q29weU1lc3NhZ2UiLCJDYW50U2F2ZU1lc3NhZ2UiLCJDYW50U2VuZE1lc3NhZ2UiLCJJbnZhbGlkUmVjaXBpZW50cyIsIkNhbnRTYXZlRmlsdGVycyIsIkNhbnRHZXRGaWx0ZXJzIiwiRmlsdGVyc0FyZU5vdENvcnJlY3QiLCJDYW50Q3JlYXRlRm9sZGVyIiwiQ2FudFJlbmFtZUZvbGRlciIsIkNhbnREZWxldGVGb2xkZXIiLCJDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIiLCJDYW50U3Vic2NyaWJlRm9sZGVyIiwiQ2FudFVuc3Vic2NyaWJlRm9sZGVyIiwiQ2FudFNhdmVTZXR0aW5ncyIsIkNhbnRTYXZlUGx1Z2luU2V0dGluZ3MiLCJEb21haW5BbHJlYWR5RXhpc3RzIiwiQ2FudEluc3RhbGxQYWNrYWdlIiwiQ2FudERlbGV0ZVBhY2thZ2UiLCJJbnZhbGlkUGx1Z2luUGFja2FnZSIsIlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSIsIkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUiLCJMaWNlbnNpbmdFeHBpcmVkIiwiTGljZW5zaW5nQmFubmVkIiwiRGVtb1NlbmRNZXNzYWdlRXJyb3IiLCJEZW1vQWNjb3VudEVycm9yIiwiQWNjb3VudEFscmVhZHlFeGlzdHMiLCJBY2NvdW50RG9lc05vdEV4aXN0IiwiTWFpbFNlcnZlckVycm9yIiwiSW52YWxpZElucHV0QXJndW1lbnQiLCJVbmtub3duTm90aWZpY2F0aW9uIiwiVW5rbm93bkVycm9yIiwidmFsdWVMaXN0IiwiZGVmYXVsVmFsdWUiLCJ2YWx1ZU5hbWUiLCJpMThuVG9Ob2RlIiwiZWxlbWVudHMiLCJhbmltYXRlIiwibGV0dGVyZngiLCJyZWxvYWREYXRhIiwibW9tZW50b3JSZWxvYWQiLCJpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UiLCJpbml0T25TdGFydE9yTGFuZ0NoYW5nZSIsInN0YXJ0Q2FsbGJhY2siLCJsYW5nQ2FsbGJhY2siLCJnZXROb3RpZmljYXRpb24iLCJjb2RlIiwibWVzc2FnZSIsImRlZkNvZGUiLCJDbGllbnRWaWV3RXJyb3IiLCJnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UiLCJyZXNwb25zZSIsIkVycm9yQ29kZSIsIkVycm9yTWVzc2FnZSIsImdldFVwbG9hZEVycm9yRGVzY0J5Q29kZSIsIkZpbGVJc1Rvb0JpZyIsIkZpbGVQYXJ0aWFsbHlVcGxvYWRlZCIsIkZpbGVOb1VwbG9hZGVkIiwiTWlzc2luZ1RlbXBGb2xkZXIiLCJGaWxlT25TYXZlaW5nRXJyb3IiLCJyZWxvYWQiLCJhZG1pbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibGFuZ0xpbmsiLCJjYWNoZSIsImlzUnRsIiwiUk9PVCIsIkhBU0hfUFJFRklYIiwiU0VSVkVSX1BSRUZJWCIsIlNVQl9RVUVSWV9QUkVGSVgiLCJWRVJTSU9OIiwiV0VCX1BSRUZJWCIsIlZFUlNJT05fUFJFRklYIiwiU1RBVElDX1BSRUZJWCIsIkFETUlOX0hPU1RfVVNFIiwiQURNSU5fUEFUSCIsIkFVVEhfUFJFRklYIiwicG9wdWxhdGVBdXRoU3VmZml4Iiwic3ViUXVlcnlQcmVmaXgiLCJyb290Iiwic3RhcnR1cFVybCIsInJvb3RBZG1pbiIsInJvb3RVc2VyIiwiYXR0YWNobWVudFJhdyIsImRvd25sb2FkIiwiY3VzdG9tU3BlY1N1ZmZpeCIsImF0dGFjaG1lbnREb3dubG9hZCIsImF0dGFjaG1lbnRQcmV2aWV3IiwiYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXciLCJhdHRhY2htZW50UHJldmlld0FzUGxhaW4iLCJhdHRhY2htZW50RnJhbWVkIiwic2VydmVyUmVxdWVzdCIsInVwbG9hZCIsInVwbG9hZENvbnRhY3RzIiwidXBsb2FkQmFja2dyb3VuZCIsIm1lc3NhZ2VWaWV3TGluayIsInJlcXVlc3RIYXNoIiwibWVzc2FnZURvd25sb2FkTGluayIsImF2YXRhckxpbmsiLCJwdWJsaWNMaW5rIiwidXNlckJhY2tncm91bmQiLCJwaHBJbmZvIiwibGFuZyIsImlzQWRtaW4iLCJleHBvcnRDb250YWN0c1ZjZiIsImV4cG9ydENvbnRhY3RzQ3N2Iiwic29jaWFsR29vZ2xlIiwieGF1dGgiLCJzb2NpYWxUd2l0dGVyIiwic29jaWFsRmFjZWJvb2siLCJzdGF0aWNQcmVmaXgiLCJwYXRoIiwiZW1wdHlDb250YWN0UGljIiwic291bmQiLCJub3RpZmljYXRpb25NYWlsSWNvbiIsIm9wZW5QZ3BKcyIsIm9wZW5QZ3BXb3JrZXJKcyIsIm9wZW5QZ3BXb3JrZXJQYXRoIiwidGhlbWVQcmV2aWV3TGluayIsImluYm94IiwiaW5ib3hGb2xkZXJOYW1lIiwiYWJvdXQiLCJtYWlsQm94IiwiZm9sZGVyIiwicGFnZSIsInNlYXJjaCIsInRocmVhZFVpZCIsInJlc3VsdFRocmVhZFVpZCIsIlJlbW90ZUFkbWluQWpheCIsIm9SZXF1ZXN0cyIsImFkbWluTG9naW4iLCJzTG9naW4iLCJzUGFzc3dvcmQiLCJkZWZhdWx0UmVxdWVzdCIsImFkbWluTG9nb3V0Iiwib0RhdGEiLCJzYXZlQWRtaW5Db25maWdIZWxwZXIiLCJ2YWx1ZUZuIiwiZG9tYWluTGlzdCIsImJJbmNsdWRlQWxpYXNlcyIsInBsdWdpbkxpc3QiLCJwYWNrYWdlc0xpc3QiLCJjb3JlRGF0YSIsInVwZGF0ZUNvcmVEYXRhIiwicGFja2FnZUluc3RhbGwiLCJvUGFja2FnZSIsImZpbGUiLCJwYWNrYWdlRGVsZXRlIiwiZG9tYWluIiwic05hbWUiLCJwbHVnaW4iLCJkb21haW5EZWxldGUiLCJkb21haW5EaXNhYmxlIiwiYkRpc2FibGVkIiwiTmFtZSIsIkRpc2FibGVkIiwicGx1Z2luU2V0dGluZ3NVcGRhdGUiLCJvQ29uZmlnIiwibGljZW5zaW5nIiwiYkZvcmNlIiwiRm9yY2UiLCJsaWNlbnNpbmdBY3RpdmF0ZSIsInNEb21haW4iLCJzS2V5IiwiRG9tYWluIiwiS2V5IiwicGx1Z2luRGlzYWJsZSIsImNyZWF0ZURvbWFpbkFsaWFzIiwic0FsaWFzIiwiQWxpYXMiLCJjcmVhdGVPclVwZGF0ZURvbWFpbiIsImJDcmVhdGUiLCJzSW5jSG9zdCIsImlJbmNQb3J0Iiwic0luY1NlY3VyZSIsImJJbmNTaG9ydExvZ2luIiwiYlVzZVNpZXZlIiwic1NpZXZlQWxsb3dSYXciLCJzU2lldmVIb3N0IiwiaVNpZXZlUG9ydCIsInNTaWV2ZVNlY3VyZSIsInNPdXRIb3N0IiwiaU91dFBvcnQiLCJzT3V0U2VjdXJlIiwiYk91dFNob3J0TG9naW4iLCJiT3V0QXV0aCIsImJPdXRQaHBNYWlsIiwic1doaXRlTGlzdCIsInRlc3RDb25uZWN0aW9uRm9yRG9tYWluIiwidGVzdENvbnRhY3RzIiwic2F2ZU5ld0FkbWluUGFzc3dvcmQiLCJhZG1pblBpbmciLCJBYnN0cmFjdEFqYXhSZW1vdGUiLCJTVUJTIiwic3ViIiwic3ViRnVuYyIsInN1Yk5hbWUiLCJwdWIiLCJQbHVnaW5zIiwiaXRlbXMiLCJNRVNTQUdFU19QRVJfUEFHRSIsIk1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyIsIkNPTlRBQ1RTX1BFUl9QQUdFIiwiREVGQVVMVF9BSkFYX1RJTUVPVVQiLCJTRUFSQ0hfQUpBWF9USU1FT1VUIiwiU0VORF9NRVNTQUdFX0FKQVhfVElNRU9VVCIsIlNBVkVfTUVTU0FHRV9BSkFYX1RJTUVPVVQiLCJDT05UQUNUU19TWU5DX0FKQVhfVElNRU9VVCIsIlVOVVNFRF9PUFRJT05fVkFMVUUiLCJDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUiLCJJTUFQX0RFRkFVTFRfUE9SVCIsIklNQVBfREVGQVVMVF9TRUNVUkVfUE9SVCIsIlNNVFBfREVGQVVMVF9QT1JUIiwiU01UUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU0lFVkVfREVGQVVMVF9QT1JUIiwiTUVTU0FHRV9CT0RZX0NBQ0hFX0xJTUlUIiwiQUpBWF9FUlJPUl9MSU1JVCIsIlRPS0VOX0VSUk9SX0xJTUlUIiwiUkFJTkxPT1BfVFJJQUxfS0VZIiwiREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMiLCJEQVRBX0lNQUdFX1RSQU5TUF9QSUMiLCJEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDIiwiQWJzdHJhY3RWaWV3TmV4dCIsIk5vbmUiLCJzQ3VycmVudEtleVNjb3BlIiwic0RlZmF1bHRLZXlTY29wZSIsImJEaXNhYmVDbG9zZU9uRXNjIiwiRXNjIiwiQmFja3NwYWNlIiwiU29jaWFsU3RvcmUiLCJnb29nbGUiLCJ0d2l0dGVyIiwiZmFjZWJvb2siLCJkcm9wYm94IiwiY2xpZW50SUQiLCJjbGllbnRTZWNyZXQiLCJhcGlLZXkiLCJsb2FkaW5nIiwidXNlck5hbWUiLCJsb2dnaW5lZCIsImF1dGgiLCJhdXRoR21haWwiLCJkcml2ZSIsInByZXZpZXciLCJjbGllbnRTZXR0aW5ncyIsImFwaUtleVNldHRpbmdzIiwiYXBwSUQiLCJhcHBTZWNyZXQiLCJzdXBwb3J0ZWQiLCJjb25zdW1lcktleSIsImNvbnN1bWVyU2VjcmV0IiwicG9wdWxhdGUiLCJhcHBlbmREcm9wYm94IiwiRHJvcGJveCIsImdldEVsZW1lbnRCeUlkIiwic2NyaXB0IiwiYXBwZW5kQ2hpbGQiLCJBYnN0cmFjdENvbXBvbmVudCIsImZ1bmNUb0Rpc3Bvc2UiLCJjb21wb25lbnRFeHBvcnRIZWxwZXIiLCJDbGFzc09iamVjdCIsImNyZWF0ZVZpZXdNb2RlbCIsImNvbXBvbmVudEluZm8iLCJpbmxpbmUiLCJTSU1QTEVfSE9PS1MiLCJVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTIiwiQURNSU5fVklFV19NT0RFTFNfSE9PS1MiLCJhZGRIb29rIiwiY2FsbGJhY2siLCJtYWluU2V0dGluZ3NHZXQiLCJyZW1vdGVSZXF1ZXN0IiwicGFyYW1ldGVycyIsImFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4iLCJydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzIiwiS25vaW4iLCJ2aWV3IiwicGx1Z2luU2VjdGlvbiIsInBsdWdpbnMiLCJDb3JlQWRtaW5TdG9yZSIsImNvcmVSZWFsIiwiY29yZUNoYW5uZWwiLCJjb3JlVHlwZSIsImNvcmVVcGRhdGFibGUiLCJjb3JlQWNjZXNzIiwiY29yZVdhcm5pbmciLCJjb3JlQ2hlY2tpbmciLCJjb3JlVXBkYXRpbmciLCJjb3JlVmVyc2lvbiIsImNvcmVSZW1vdGVWZXJzaW9uIiwiY29yZVJlbW90ZVJlbGVhc2UiLCJjb3JlVmVyc2lvbkNvbXBhcmUiLCJfbW9tZW50IiwiX21vbWVudE5vdyIsInVwZGF0ZU1vbWVudE5vdyIsInVwZGF0ZU1vbWVudE5vd1VuaXgiLCJ1bml4IiwibW9tZW50Tm93IiwibW9tZW50Tm93VW5peCIsInNlYXJjaFN1YnRyYWN0Rm9ybWF0RGF0ZUhlbHBlciIsInN1YnRyYWN0IiwiZm9ybWF0IiwiZm9ybWF0Q3VzdG9tU2hvcnREYXRlIiwibm93IiwiZnJvbU5vdyIsIlRJTUUiLCJ5ZWFyIiwidGltZVN0YW1wSW5VVEMiLCJmb3JtYXRTdHIiLCJ0aW1lIiwiZ2V0QXBwIiwiTGFuZ3VhZ2VTdG9yZSIsImxhbmd1YWdlcyIsImxhbmd1YWdlc0FkbWluIiwibGFuZ3VhZ2VBZG1pbiIsInVzZXJMYW5ndWFnZSIsInVzZXJMYW5ndWFnZUFkbWluIiwiYUxhbmd1YWdlcyIsImFMYW5ndWFnZXNBZG1pbiIsIkFwcEFkbWluU3RvcmUiLCJkZXRlcm1pbmVVc2VyTGFuZ3VhZ2UiLCJkZXRlcm1pbmVVc2VyRG9tYWluIiwid2Vha1Bhc3N3b3JkIiwidXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzIiwiZGF0YUZvbGRlckFjY2VzcyIsImdldCIsIkFic3RyYWN0QXBwU3RvcmUiLCJka2ltU3RhdHVzIiwiZGtpbVZhbHVlIiwiY2xlYXJEdXBsaWNhdGVOYW1lIiwibmV3SW5zdGFuY2VGcm9tSnNvbiIsImluaXRCeUpzb24iLCJ2YWxpZGF0ZSIsIndpdGhvdXROYW1lIiwiRW1haWwiLCJEa2ltU3RhdHVzIiwiRGtpbVZhbHVlIiwiZnJpZW5kbHlWaWV3Iiwid3JhcFdpdGhMaW5rIiwidXNlRW5jb2RlSHRtbCIsInBhcnNlZFJlc3VsdCIsImFkZHJlc3NwYXJzZXIiLCJleGlzdHMiLCJhZGRyZXNzIiwiY29tcGFjdCIsImVtYWlsQWRkcmVzcyIsIkFic3RyYWN0SW5wdXQiLCJsYWJlbCIsInByZUxhYmVsIiwiZW5hYmxlIiwicGxhY2Vob2xkZXIiLCJsYWJlbGVkIiwicHJlTGFiZWxlZCIsInRyaWdnZXJlZCIsImNsYXNzRm9yVHJpZ2dlciIsInN1ZmZpeFZhbHVlIiwic2V0VHJpZ2dlclN0YXRlIiwiQ2FwYUFkbWluU3RvcmUiLCJhZGRpdGlvbmFsQWNjb3VudHMiLCJpZGVudGl0aWVzIiwiZ3JhdmF0YXIiLCJhdHRhY2htZW50VGh1bWJuYWlscyIsInNpZXZlIiwiZmlsdGVycyIsInRoZW1lcyIsIm9wZW5QR1AiLCJ0d29GYWN0b3JBdXRoIiwidHdvRmFjdG9yQXV0aEZvcmNlIiwidGVtcGxhdGVzIiwiQWRkaXRpb25hbEFjY291bnRzIiwiSWRlbnRpdGllcyIsIkdyYXZhdGFyIiwiQXR0YWNobWVudFRodW1ibmFpbHMiLCJTaWV2ZSIsIkZpbHRlcnMiLCJUaGVtZXMiLCJVc2VyQmFja2dyb3VuZCIsIk9wZW5QR1AiLCJUd29GYWN0b3IiLCJUd29GYWN0b3JGb3JjZSIsIlRlbXBsYXRlcyIsIlBhY2thZ2VBZG1pblN0b3JlIiwicGFja2FnZXMiLCJwYWNrYWdlc1JlYWwiLCJwYWNrYWdlc01haW5VcGRhdGFibGUiLCJqYXNzbCIsImFzeW5jIiwiYWxsIiwib25lcnJvciIsIlRoZW1lU3RvcmUiLCJ0aGVtZUJhY2tncm91bmROYW1lIiwidGhlbWVCYWNrZ3JvdW5kSGFzaCIsIlBsdWdpbkFkbWluU3RvcmUiLCJlcnJvciIsIkxpY2Vuc2VBZG1pblN0b3JlIiwibGljZW5zaW5nUHJvY2VzcyIsImxpY2Vuc2VWYWxpZCIsImxpY2Vuc2VFeHBpcmVkIiwibGljZW5zZUVycm9yIiwibGljZW5zZVRyaWdnZXIiLCJBYnN0cmFjdFNjcmVlbiIsInNTY3JlZW5OYW1lIiwiYVZpZXdNb2RlbHMiLCJyb3V0ZXMiLCJvQ3Jvc3MiLCJmTWF0Y2hlciIsIm9uUm91dGUiLCJydWxlcyIsIkRvbWFpbkFkbWluU3RvcmUiLCJkb21haW5zIiwiZG9tYWluc1dpdGhvdXRBbGlhc2VzIiwiYWxpYXMiLCJBYnN0cmFjdENoZWNrYm94IiwiZGlzYWJsZSIsInJlYWRPbmx5IiwiaW52ZXJ0ZWQiLCJsYWJlbEFuaW1hdGVkIiwiQ2hlY2tib3hDb21wb25lbnQiLCJvbkJsdXIiLCJvblJlYWR5Iiwib25Nb2RlQ2hhbmdlIiwiJGVsZW1lbnQiLCJyZXNpemVFZGl0b3IiLCJydW5PbkJsdXIiLCJibHVyVHJpZ2dlciIsImJsdXJUaW1lciIsImZvY3VzVHJpZ2dlciIsIm1vZGUiLCJjbGVhckNhY2hlZFNpZ25hdHVyZSIsImV4ZWNDb21tYW5kIiwiY2xlYXJDYWNoZSIsInNldFNpZ25hdHVyZSIsInNpZ25hdHVyZSIsImluc2VydEJlZm9yZSIsImNoZWNrRGlydHkiLCJyZXNldERpcnR5IiwiZ2V0RGF0YSIsIndyYXBJc0h0bWwiLCJfX3BsYWluIiwiZ2V0UmF3RGF0YSIsIm1vZGVUb2dnbGUiLCJzZXRNb2RlIiwic2V0SHRtbCIsInNldFBsYWluIiwiX19pbml0ZWQiLCJzZXREYXRhIiwicmVwbGFjZUh0bWwiLCJmaW5kIiwic2V0UmF3RGF0YSIsImluaXRGdW5jIiwiY29uZmlnIiwiYWxsb3dTb3VyY2UiLCJiaXRpIiwidG9vbGJhckdyb3VwcyIsIl9fY2ZnSW5pdGVkIiwicmVtb3ZlQnV0dG9ucyIsInJlbW92ZVBsdWdpbnMiLCJlbnRlck1vZGUiLCJDS0VESVRPUiIsIkVOVEVSX0JSIiwic2hpZnRFbnRlck1vZGUiLCJFTlRFUl9QIiwiZW52IiwiaXNDb21wYXRpYmxlIiwiVGFiIiwiRmlsZVJlYWRlciIsImRhdGFUcmFuc2ZlciIsImdldEZpbGVzQ291bnQiLCJnZXRGaWxlIiwiaW1hZ2VJZCIsInJlYWRlciIsIm9ubG9hZGVuZCIsInJlYWRBc0RhdGFVUkwiLCJyZW1vdmVNZW51SXRlbSIsIl9fcmVzaXphYmxlIiwiX19pbml0RWRpdG9yIiwiaGFzRm9jdXMiLCJmb2N1c01hbmFnZXIiLCJpbm5lckhlaWdodCIsInNldFJlYWRPbmx5Iiwic3R5bGVzIiwicmFpbmxvb3AiLCJyYWlubG9vcFRpcCIsInJhaW5sb29wRXJyb3JUaXAiLCJBc2tQb3B1cFZpZXciLCJwb3B1cCIsImFza0Rlc2MiLCJ5ZXNCdXR0b24iLCJub0J1dHRvbiIsInllc0ZvY3VzIiwibm9Gb2N1cyIsImZZZXNBY3Rpb24iLCJmTm9BY3Rpb24iLCJiRm9jdXNZZXNPblNob3ciLCJQb3B1cEFzayIsImNsZWFyUG9wdXAiLCJ5ZXNDbGljayIsIm5vQ2xpY2siLCJvblNob3ciLCJmWWVzRnVuYyIsImZOb0Z1bmMiLCJpc0ZvY3VzWWVzT25TaG93Iiwib25TaG93V2l0aERlbGF5Iiwib25CdWlsZCIsIkxhbmd1YWdlc1BvcHVwVmlldyIsImZMYW5nIiwibGFuZ3MiLCJ1c2VyIiwic2VsZWN0ZWQiLCJmdWxsTmFtZSIsInNldExhbmd1YWdlU2VsZWN0aW9uIiwibGFuZ3VhZ2VUb29sdGlwTmFtZSIsImN1cnJlbnRMYW5nIiwib25CZWZvcmVTaG93IiwiZkxhbmd1YWdlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJBcHAiLCJybCIsInBsdWdpblNldHRpbmdzR2V0IiwicGx1Z2luUmVtb3RlUmVxdWVzdCIsIkVudW1zIiwiX19BUFBfQk9PVCIsImZFcnJvckNhbGxiYWNrIiwicmFpbmxvb3BURU1QTEFURVMiLCJpbm5lckhUTUwiLCJib290c3RhcnQiLCJUaW1lMTBtcyIsImFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyIsImFsbG93TGFuZ3VhZ2VzT25Mb2dpbiIsIm5ld01vdmVUb0ZvbGRlciIsImludGVyZmFjZUFuaW1hdGlvbiIsImFuaW0iLCJwcmVtIiwiZGVmYXVsdFJlc3BvbnNlIiwic1JlcXVlc3RBY3Rpb24iLCJzVHlwZSIsImJDYWNoZWQiLCJvUmVxdWVzdFBhcmFtZXRlcnMiLCJmQ2FsbCIsIlN1Y2Nlc3MiLCJVbmxvYWQiLCJsb2dpbkFuZExvZ291dFJlbG9hZCIsIkNsZWFyQXV0aCIsIkxvZ291dCIsImNsZWFyQ2xpZW50U2lkZVRva2VuIiwiQWJvcnQiLCJhamF4UmVxdWVzdCIsImZSZXN1bHRDYWxsYmFjayIsImlUaW1lT3V0Iiwic0dldEFkZCIsImFib3J0QWN0aW9ucyIsImlzUG9zdCIsImhlYWRlcnMiLCJBY3Rpb24iLCJhY3Rpb25Ub0Fib3J0IiwiX19hYm9ydGVkIiwiWFRva2VuIiwib0RlZkFqYXgiLCJnbG9iYWwiLCJhbHdheXMiLCJUaW1lIiwiVXBkYXRlVG9rZW4iLCJzZXRDbGllbnRTaWRlVG9rZW4iLCJjYXRjaCIsInNBY3Rpb24iLCJvUGFyYW1ldGVycyIsImlUaW1lb3V0IiwiYUFib3J0QWN0aW9ucyIsImdldFB1YmxpY0tleSIsImpzVmVyc2lvbiIsInNWZXJzaW9uIiwiQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiIsIm1lbnUiLCJvQ3VycmVudFN1YlNjcmVlbiIsIm9WaWV3TW9kZWxQbGFjZSIsInNldHVwU2V0dGluZ3MiLCJzZXR0aW5nc1NjcmVlbiIsIlJvdXRlZFNldHRpbmdzVmlld01vZGVsIiwidmlld01vZGVsUGxhY2UiLCJTZXR0aW5nc1ZpZXdNb2RlbCIsIkRpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ0bXBsIiwib25IaWRlIiwiUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwiLCJEZWZhdWx0Vmlld01vZGVsIiwiZGVmYXVsdFJvdXRlIiwic3VibmFtZSIsIm5vcm1hbGl6ZV8iLCJycXVlc3QiLCJ2YWxzIiwiQWJzdHJhY3RBcHAiLCJnb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUiLCJpc0xvY2FsQXV0b2NvbXBsZXRlIiwiaWZyYW1lIiwibGFzdEVycm9yVGltZSIsIkV2ZW50cyIsImlIIiwiaVciLCJUaW1lNTBtcyIsIlRpbWU1cyIsImdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiIsImRlZmF1bHRfIiwiYXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwib0xpbmsiLCJocmVmIiwiY3JlYXRlRXZlbnQiLCJvRSIsIk1vdXNlRXZlbnRzIiwiaW5pdEV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWQiLCJzZXRXaW5kb3dUaXRsZSIsInJlZGlyZWN0VG9BZG1pblBhbmVsIiwiX19ybGFoX2NsZWFyIiwidG9rZW4iLCJfX3JsYWhfc2V0IiwibG9nb3V0IiwiaW5JZnJhbWUiLCJjdXN0b21Mb2dvdXRMaW5rIiwicGFyZW50IiwiaGlzdG9yeUJhY2siLCJoaXN0b3J5IiwiYmFjayIsIm1vYmlsZSIsImNvbXBvbmVudHMiLCJyZWdpc3RlciIsIlRpbWUxcyIsInNzbSIsImFkZFN0YXRlIiwib25MZWF2ZSIsIkFic3RyYWN0Qm9vdCIsIkFic3RyYWN0UmFkaW8iLCJTYXZlVHJpZ2dlckNvbXBvbmVudCIsInZlcnRpY2FsQWxpZ24iLCJzZXRTdGF0ZSIsIklucHV0Q29tcG9uZW50IiwiU2VsZWN0Q29tcG9uZW50Iiwib3B0aW9uc1RleHQiLCJvcHRpb25zVmFsdWUiLCJvcHRpb25zQ2FwdGlvbiIsIlJhZGlvQ29tcG9uZW50IiwiREVGQVVMVF9ST1dTIiwiVGV4dEFyZWFDb21wb25lbnQiLCJyb3dzIiwic3BlbGxjaGVjayIsIkRhdGVDb21wb25lbnQiLCJTY3JpcHRDb21wb25lbnQiLCJ0ZW1wbGF0ZU5vZGVzIiwib3V0ZXJIVE1MIiwicmVwbGFjZVdpdGgiLCJub2RlVmFsdWUiLCJDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50IiwiYW5pbWF0aW9uQm94IiwiYW5pbWF0aW9uQ2hlY2ttYXJrIiwiYW5pbWF0aW9uQm94U2V0VHJ1ZSIsImFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUiLCJ0cmlnZ2VyQW5pbWF0aW9uIiwiYm94IiwiQWRtaW5BcHAiLCJSZW1vdGUiLCJyZWxvYWREb21haW5MaXN0IiwiRG9tYWluU3RvcmUiLCJkZWxldGVBY2Nlc3MiLCJyZWxvYWRQbHVnaW5MaXN0IiwiUGx1Z2luU3RvcmUiLCJFbmFibGVkIiwiY29uZmlndXJlZCIsIkNvbmZpZ3VyZWQiLCJyZWxvYWRQYWNrYWdlc0xpc3QiLCJQYWNrYWdlU3RvcmUiLCJSZWFsIiwiTWFpblVwZGF0YWJsZSIsIkxpc3QiLCJjYW5CZUluc3RhbGxlZCIsIkNvcmVTdG9yZSIsInJlbG9hZENvcmVEYXRhIiwiQ2hhbm5lbCIsIlR5cGUiLCJVcGRhdGFibGUiLCJBY2Nlc3MiLCJXYXJuaW5nIiwiVmVyc2lvbiIsIlJlbW90ZVZlcnNpb24iLCJSZW1vdGVSZWxlYXNlIiwiVmVyc2lvbkNvbXBhcmUiLCJyZWxvYWRMaWNlbnNpbmciLCJMaWNlbnNlU3RvcmUiLCJFeHBpcmVkIiwiQXBwU3RvcmUiLCJib290ZW5kIiwiYm9vdGVuZENhbGxiYWNrIiwicHJvZ3Jlc3NKcyIsIkNhcGFTdG9yZSIsIlNldHRpbmdzQWRtaW5TY3JlZW4iLCJMb2dpbkFkbWluU2NyZWVuIiwiRG9tYWluUG9wdXBWaWV3Iiwic2VsZiIsImNhbkJlU2F2ZWQiLCJjYW5CZVRlc3RlZCIsImVkaXQiLCJzYXZpbmciLCJzYXZpbmdFcnJvciIsInNpZXZlU2V0dGluZ3MiLCJ0ZXN0aW5nIiwidGVzdGluZ0RvbmUiLCJ0ZXN0aW5nSW1hcEVycm9yIiwidGVzdGluZ1NpZXZlRXJyb3IiLCJ0ZXN0aW5nU210cEVycm9yIiwidGVzdGluZ0ltYXBFcnJvckRlc2MiLCJ0ZXN0aW5nU2lldmVFcnJvckRlc2MiLCJ0ZXN0aW5nU210cEVycm9yRGVzYyIsImltYXBTZXJ2ZXJGb2N1cyIsInNpZXZlU2VydmVyRm9jdXMiLCJzbXRwU2VydmVyRm9jdXMiLCJpbWFwU2VydmVyIiwiaW1hcFBvcnQiLCJpbWFwU2VjdXJlIiwiaW1hcFNob3J0TG9naW4iLCJ1c2VTaWV2ZSIsInNpZXZlQWxsb3dSYXciLCJzaWV2ZVNlcnZlciIsInNpZXZlUG9ydCIsInNpZXZlU2VjdXJlIiwic210cFNlcnZlciIsInNtdHBQb3J0Iiwic210cFNlY3VyZSIsInNtdHBTaG9ydExvZ2luIiwic210cEF1dGgiLCJzbXRwUGhwTWFpbCIsIndoaXRlTGlzdCIsImFsaWFzTmFtZSIsImVuYWJsZVNtYXJ0UG9ydHMiLCJhbGxvd1NpZXZlIiwiaGVhZGVyVGV4dCIsImRvbWFpbkRlc2MiLCJkb21haW5Jc0NvbXB1dGVkIiwidXNlUGhwTWFpbCIsInBvcnQiLCJJbWFwU3NsIiwiSW1hcCIsIlNtdHBTc2wiLCJTbXRwU3RhcnRUbHMiLCJTbXRwIiwiY3JlYXRlT3JBZGRDb21tYW5kIiwib25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZSIsInRlc3RDb25uZWN0aW9uQ29tbWFuZCIsIm9uVGVzdENvbm5lY3Rpb25SZXNwb25zZSIsIndoaXRlTGlzdENvbW1hbmQiLCJiYWNrQ29tbWFuZCIsInNpZXZlQ29tbWFuZCIsImNsZWFyVGVzdGluZyIsInNSZXN1bHQiLCJiSW1hcCIsImJTaWV2ZSIsIm9Eb21haW4iLCJjbGVhckZvcm0iLCJJbmNIb3N0IiwiSW5jUG9ydCIsIkluY1NlY3VyZSIsIkluY1Nob3J0TG9naW4iLCJVc2VTaWV2ZSIsIlNpZXZlQWxsb3dSYXciLCJTaWV2ZUhvc3QiLCJTaWV2ZVBvcnQiLCJTaWV2ZVNlY3VyZSIsIk91dEhvc3QiLCJPdXRQb3J0IiwiT3V0U2VjdXJlIiwiT3V0U2hvcnRMb2dpbiIsIk91dEF1dGgiLCJPdXRVc2VQaHBNYWlsIiwiV2hpdGVMaXN0IiwiQWxpYXNOYW1lIiwiTWVudVNldHRpbmdzQWRtaW5WaWV3IiwiUGFuZVNldHRpbmdzQWRtaW5WaWV3IiwiYnJhbmRpbmciLCJHZW5lcmFsQWRtaW5TZXR0aW5ncyIsIkRvbWFpbnNBZG1pblNldHRpbmdzIiwiTG9naW5BZG1pblNldHRpbmdzIiwiQ29udGFjdHNBZG1pblNldHRpbmdzIiwiU2VjdXJpdHlBZG1pblNldHRpbmdzIiwiU29jaWFsQWRtaW5TZXR0aW5ncyIsIlBsdWdpbnNBZG1pblNldHRpbmdzIiwiUGFja2FnZXNBZG1pblNldHRpbmdzIiwiQWJvdXRBZG1pblNldHRpbmdzIiwiY2FwYVRoZW1lcyIsImNhcGFVc2VyQmFja2dyb3VuZCIsImNhcGFHcmF2YXRhciIsImNhcGFBZGRpdGlvbmFsQWNjb3VudHMiLCJjYXBhSWRlbnRpdGllcyIsImNhcGFBdHRhY2htZW50VGh1bWJuYWlscyIsImNhcGFUZW1wbGF0ZXMiLCJtYWluQXR0YWNobWVudExpbWl0IiwiQml0TGVuZ3RoMTAyNCIsInVwbG9hZERhdGEiLCJ1cGxvYWREYXRhRGVzYyIsInVwbG9hZF9tYXhfZmlsZXNpemUiLCJwb3N0X21heF9zaXplIiwidGhlbWVzT3B0aW9ucyIsIm9wdFZhbHVlIiwib3B0VGV4dCIsImxhbmd1YWdlRnVsbE5hbWUiLCJsYW5ndWFnZUFkbWluRnVsbE5hbWUiLCJhdHRhY2htZW50TGltaXRUcmlnZ2VyIiwibGFuZ3VhZ2VUcmlnZ2VyIiwibGFuZ3VhZ2VBZG1pblRyaWdnZXIiLCJmMSIsImYyIiwiZjMiLCJmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIiLCJzYXZlU2V0dGluZ3NTdGVwIiwidHJhbnNsYXRvclJlbG9hZCIsInNlbGVjdExhbmd1YWdlIiwic2VsZWN0TGFuZ3VhZ2VBZG1pbiIsInBocEluZm9MaW5rIiwidmlzaWJpbGl0eSIsImRvbWFpbkZvckRlbGV0aW9uIiwib25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCIsIm9uRG9tYWluTG9hZFJlcXVlc3QiLCJjcmVhdGVEb21haW4iLCJkZWxldGVEb21haW4iLCJkaXNhYmxlRG9tYWluIiwib0RvbSIsImRvbWFpbkl0ZW0iLCJkZWZhdWx0RG9tYWluIiwiZHVtbXkiLCJwZG9Ec24iLCJwZG9Vc2VyIiwiZW5hYmxlQ29udGFjdHMiLCJjb250YWN0c1N5bmMiLCJzdXBwb3J0ZWRUeXBlcyIsInR5cGVzIiwiZ2V0VHlwZU5hbWUiLCJjb250YWN0c1N1cHBvcnRlZCIsImNvbnRhY3RzVHlwZXMiLCJjb250YWN0c1R5cGVzT3B0aW9ucyIsImNvbnRhY3RzVHlwZSIsIm1haW5Db250YWN0c1R5cGUiLCJ0ZXN0Q29udGFjdHNTdWNjZXNzIiwidGVzdENvbnRhY3RzRXJyb3IiLCJ0ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UiLCJwZG9QYXNzd29yZCIsInBkb0RzblRyaWdnZXIiLCJwZG9Vc2VyVHJpZ2dlciIsInBkb1Bhc3N3b3JkVHJpZ2dlciIsImNvbnRhY3RzVHlwZVRyaWdnZXIiLCJvblRlc3RDb250YWN0c1Jlc3BvbnNlIiwidGVzdENvbnRhY3RzQ29tbWFuZCIsIk1lc3NhZ2UiLCJmNCIsImY1IiwiYWRtaW5QYXNzd29yZCIsImNhcGFPcGVuUEdQIiwiY2FwYVR3b0ZhY3RvckF1dGgiLCJjYXBhVHdvRmFjdG9yQXV0aEZvcmNlIiwidmVyaWZ5U3NsQ2VydGlmaWNhdGUiLCJhbGxvd1NlbGZTaWduZWQiLCJpc1R3b0ZhY3RvckRyb3BwZXJTaG93biIsInR3b0ZhY3RvckRyb3BwZXJVc2VyIiwiYWRtaW5Mb2dpbkVycm9yIiwiYWRtaW5QYXNzd29yZE5ldyIsImFkbWluUGFzc3dvcmROZXcyIiwiYWRtaW5QYXNzd29yZE5ld0Vycm9yIiwiYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yIiwiYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MiLCJvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSIsInNhdmVOZXdBZG1pblBhc3N3b3JkQ29tbWFuZCIsInNob3dUd29GYWN0b3JEcm9wcGVyIiwiV2VhayIsImdvb2dsZUVuYWJsZSIsImdvb2dsZUVuYWJsZUF1dGgiLCJnb29nbGVFbmFibGVBdXRoR21haWwiLCJnb29nbGVFbmFibGVEcml2ZSIsImdvb2dsZUVuYWJsZVByZXZpZXciLCJnb29nbGVFbmFibGVSZXF1aXJlQ2xpZW50U2V0dGluZ3MiLCJnb29nbGVFbmFibGVSZXF1aXJlQXBpS2V5IiwiZ29vZ2xlQ2xpZW50SUQiLCJnb29nbGVDbGllbnRTZWNyZXQiLCJnb29nbGVBcGlLZXkiLCJnb29nbGVUcmlnZ2VyMSIsImdvb2dsZVRyaWdnZXIyIiwiZ29vZ2xlVHJpZ2dlcjMiLCJmYWNlYm9va1N1cHBvcnRlZCIsImZhY2Vib29rRW5hYmxlIiwiZmFjZWJvb2tBcHBJRCIsImZhY2Vib29rQXBwU2VjcmV0IiwiZmFjZWJvb2tUcmlnZ2VyMSIsImZhY2Vib29rVHJpZ2dlcjIiLCJ0d2l0dGVyRW5hYmxlIiwidHdpdHRlckNvbnN1bWVyS2V5IiwidHdpdHRlckNvbnN1bWVyU2VjcmV0IiwidHdpdHRlclRyaWdnZXIxIiwidHdpdHRlclRyaWdnZXIyIiwiZHJvcGJveEVuYWJsZSIsImRyb3Bib3hBcGlLZXkiLCJkcm9wYm94VHJpZ2dlcjEiLCJmNiIsImY3IiwiZjgiLCJlbmFibGVkUGx1Z2lucyIsInBsdWdpbnNFcnJvciIsIm9uUGx1Z2luTG9hZFJlcXVlc3QiLCJvblBsdWdpbkRpc2FibGVSZXF1ZXN0IiwiZGlzYWJsZVBsdWdpbiIsImNvbmZpZ3VyZVBsdWdpbiIsInBhY2thZ2VzRXJyb3IiLCJwYWNrYWdlc0N1cnJlbnQiLCJpbnN0YWxsZWQiLCJjb21wYXJlIiwicGFja2FnZXNBdmFpbGFibGVGb3JVcGRhdGUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiIsInJlcXVlc3RIZWxwZXIiLCJwYWNrYWdlVG9SZXF1ZXN0IiwiaW5zdGFsbCIsIlJlbG9hZCIsImRlbGV0ZVBhY2thZ2UiLCJwYWNrYWdlVG9EZWxldGUiLCJpbnN0YWxsUGFja2FnZSIsInBhY2thZ2VUb0luc3RhbGwiLCJ2ZXJzaW9uIiwiYWNjZXNzIiwiZXJyb3JEZXNjIiwiY29yZVJlbW90ZVZlcnNpb25IdG1sRGVzYyIsInRyYW5zbGF0b3JUcmlnZ2VyIiwic3RhdHVzVHlwZSIsInZlcnNpb25Ub0NvbXBhcmUiLCJpc0NoZWNraW5nIiwiaXNVcGRhdGluZyIsImlzUmVhbCIsImRvbSIsImFkbWluRG9tYWluIiwiYWRtaW5NYW5Mb2FkaW5nIiwiYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSIsImxvZ291dENsaWNrIiwiTG9naW5BZG1pblZpZXciLCJzdWJtaXRSZXF1ZXN0IiwibW9iaWxlRGV2aWNlIiwiaGlkZVN1Ym1pdEJ1dHRvbiIsImxvZ2luIiwicGFzc3dvcmQiLCJsb2dpbkVycm9yIiwicGFzc3dvcmRFcnJvciIsImxvZ2luRXJyb3JBbmltYXRpb24iLCJwYXNzd29yZEVycm9yQW5pbWF0aW9uIiwibG9naW5Gb2N1cyIsImZvcm1IaWRkZW4iLCJmb3JtRXJyb3IiLCJzdWJtaXRFcnJvciIsInN1Ym1pdENvbW1hbmQiLCJzdWJtaXRGb3JtIiwiYm9vdHN0cmFwIiwiRG9tYWluQWxpYXNQb3B1cFZpZXciLCJkb21haW5zT3B0aW9ucyIsIm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSIsIlBsdWdpblBvcHVwVmlldyIsImhhc0NvbmZpZ3VyYXRpb24iLCJvblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UiLCJzYXZlRXJyb3IiLCJyZWFkbWUiLCJjb25maWd1cmVzIiwiaGFzUmVhZG1lIiwicmVhZG1lUG9wb3ZlckNvbmYiLCJ0cnlUb0Nsb3NlUG9wdXAiLCJzYXZlQ29tbWFuZCIsIm9QbHVnaW4iLCJSZWFkbWUiLCJDb25maWciLCJQb3B1cHNBc2tWaWV3TW9kZWwiLCJCcmFuZGluZ0FkbWluU2V0dGluZ3MiLCJsb2FkaW5nRGVzYyIsImZhdmljb25VcmwiLCJsb2dpbkxvZ28iLCJsb2dpbkJhY2tncm91bmQiLCJ1c2VyTG9nbyIsInVzZXJMb2dvTWVzc2FnZSIsInVzZXJJZnJhbWVNZXNzYWdlIiwidXNlckxvZ29UaXRsZSIsImxvZ2luRGVzY3JpcHRpb24iLCJsb2dpbkNzcyIsInVzZXJDc3MiLCJ3ZWxjb21lUGFnZVVybCIsIndlbGNvbWVQYWdlRGlzcGxheSJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENB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QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdDQUF3QztBQUN4QztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0QsZ0JBQWdCO0FBQ3hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0QsZ0JBQWdCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSwyQkFBMkIsNEJBQTRCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDJCQUEyQix5QkFBeUI7QUFDcEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFF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LFNBQWhCLENBQTBCLFVBQUNvRCxLQUFELEVBQVc7QUFDcENvMUMseUVBQU0sQ0FBQzErQixlQUFQLENBQXVCK25DLEVBQXZCLEVBQTJCO0FBQzFCLHdCQUFjeHlDLHlEQUFJLENBQUNqTSxLQUFEO0FBRFEsU0FBM0I7QUFHQSxPQUpEO0FBS0EsS0F0QkQsRUFzQkcxRixtREFBTSxDQUFDaTNDLFFBdEJWO0FBdUJBLEciLCJmaWxlIjoianMvYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcInJhaW5sb29wL3YvMC4wLjAvc3RhdGljL2pzL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTM0KTtcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogMCAqL1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlVHlwZSA9IHtcblx0J1Vua25vd24nOiAndW5rbm93bicsXG5cdCdUZXh0JzogJ3RleHQnLFxuXHQnSHRtbCc6ICdodG1sJyxcblx0J0NvZGUnOiAnY29kZScsXG5cdCdFbWwnOiAnZW1sJyxcblx0J1dvcmRUZXh0JzogJ3dvcmQtdGV4dCcsXG5cdCdQZGYnOiAncGRmJyxcblx0J0ltYWdlJzogJ2ltYWdlJyxcblx0J0F1ZGlvJzogJ2F1ZGlvJyxcblx0J1ZpZGVvJzogJ3ZpZGVvJyxcblx0J1NoZWV0JzogJ3NoZWV0Jyxcblx0J1ByZXNlbnRhdGlvbic6ICdwcmVzZW50YXRpb24nLFxuXHQnQ2VydGlmaWNhdGUnOiAnY2VydGlmaWNhdGUnLFxuXHQnQ2VydGlmaWNhdGVCaW4nOiAnY2VydGlmaWNhdGUtYmluJyxcblx0J0FyY2hpdmUnOiAnYXJjaGl2ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFN0b3JhZ2VSZXN1bHRUeXBlID0ge1xuXHQnU3VjY2Vzcyc6ICdzdWNjZXNzJyxcblx0J0Fib3J0JzogJ2Fib3J0Jyxcblx0J0Vycm9yJzogJ2Vycm9yJyxcblx0J1VubG9hZCc6ICd1bmxvYWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2N1c2VkID0ge1xuXHQnTm9uZSc6ICdub25lJyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlID0ge1xuXHQnRW1wdHknOiAxMCxcblx0J0xvZ2luJzogMjAsXG5cdCdBdXRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlVHlwZSA9IHtcblx0J1dlYm1haWwnOiAwLFxuXHQnQWRtaW4nOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDYXBhID0ge1xuXHQnVHdvRmFjdG9yJzogJ1RXT19GQUNUT1InLFxuXHQnVHdvRmFjdG9yRm9yY2UnOiAnVFdPX0ZBQ1RPUl9GT1JDRScsXG5cdCdPcGVuUEdQJzogJ09QRU5fUEdQJyxcblx0J1ByZWZldGNoJzogJ1BSRUZFVENIJyxcblx0J0dyYXZhdGFyJzogJ0dSQVZBVEFSJyxcblx0J0ZvbGRlcnMnOiAnRk9MREVSUycsXG5cdCdDb21wb3Nlcic6ICdDT01QT1NFUicsXG5cdCdDb250YWN0cyc6ICdDT05UQUNUUycsXG5cdCdSZWxvYWQnOiAnUkVMT0FEJyxcblx0J1NlYXJjaCc6ICdTRUFSQ0gnLFxuXHQnU2VhcmNoQWR2JzogJ1NFQVJDSF9BRFYnLFxuXHQnTWVzc2FnZUFjdGlvbnMnOiAnTUVTU0FHRV9BQ1RJT05TJyxcblx0J01lc3NhZ2VMaXN0QWN0aW9ucyc6ICdNRVNTQUdFTElTVF9BQ1RJT05TJyxcblx0J0F0dGFjaG1lbnRzQWN0aW9ucyc6ICdBVFRBQ0hNRU5UU19BQ1RJT05TJyxcblx0J0Rhbmdlcm91c0FjdGlvbnMnOiAnREFOR0VST1VTX0FDVElPTlMnLFxuXHQnU2V0dGluZ3MnOiAnU0VUVElOR1MnLFxuXHQnSGVscCc6ICdIRUxQJyxcblx0J1RoZW1lcyc6ICdUSEVNRVMnLFxuXHQnVXNlckJhY2tncm91bmQnOiAnVVNFUl9CQUNLR1JPVU5EJyxcblx0J1NpZXZlJzogJ1NJRVZFJyxcblx0J0ZpbHRlcnMnOiAnRklMVEVSUycsXG5cdCdBdHRhY2htZW50VGh1bWJuYWlscyc6ICdBVFRBQ0hNRU5UX1RIVU1CTkFJTFMnLFxuXHQnVGVtcGxhdGVzJzogJ1RFTVBMQVRFUycsXG5cdCdBdXRvTG9nb3V0JzogJ0FVVE9MT0dPVVQnLFxuXHQnQWRkaXRpb25hbEFjY291bnRzJzogJ0FERElUSU9OQUxfQUNDT1VOVFMnLFxuXHQnSWRlbnRpdGllcyc6ICdJREVOVElUSUVTJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgS2V5U3RhdGUgPSB7XG5cdCdBbGwnOiAnYWxsJyxcblx0J05vbmUnOiAnbm9uZScsXG5cdCdDb250YWN0TGlzdCc6ICdjb250YWN0LWxpc3QnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0NvbXBvc2UnOiAnY29tcG9zZScsXG5cdCdTZXR0aW5ncyc6ICdzZXR0aW5ncycsXG5cdCdNZW51JzogJ21lbnUnLFxuXHQnUG9wdXBDb21wb3NlT3BlblBHUCc6ICdjb21wb3NlLW9wZW4tcGdwJyxcblx0J1BvcHVwTWVzc2FnZU9wZW5QR1AnOiAnbWVzc2FnZS1vcGVuLXBncCcsXG5cdCdQb3B1cFZpZXdPcGVuUEdQJzogJ3ZpZXctb3Blbi1wZ3AnLFxuXHQnUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAnOiAncG9wdXAta2V5Ym9hcmQtc2hvcnRjdXRzLWhlbHAnLFxuXHQnUG9wdXBBc2snOiAncG9wdXAtYXNrJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRm9sZGVyVHlwZSA9IHtcblx0J0luYm94JzogMTAsXG5cdCdTZW50SXRlbXMnOiAxMSxcblx0J0RyYWZ0JzogMTIsXG5cdCdUcmFzaCc6IDEzLFxuXHQnU3BhbSc6IDE0LFxuXHQnQXJjaGl2ZSc6IDE1LFxuXHQnTm90U3BhbSc6IDgwLFxuXHQnVXNlcic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGb2xkZXJUeXBlID0ge1xuXHQnVVNFUic6IDAsXG5cdCdJTkJPWCc6IDEsXG5cdCdTRU5UJzogMixcblx0J0RSQUZUUyc6IDMsXG5cdCdKVU5LJzogNCxcblx0J1RSQVNIJzogNSxcblx0J0lNUE9SVEFOVCc6IDEwLFxuXHQnRkxBR0dFRCc6IDExLFxuXHQnQUxMJzogMTJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nID0ge1xuXHQnRGVmYXVsdE9mZic6ICdkZWZhdWx0b2ZmJyxcblx0J0RlZmF1bHRPbic6ICdkZWZhdWx0b24nLFxuXHQnVW51c2VkJzogJ3VudXNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZSA9IHtcblx0J0RlZmF1bHRPZmYnOiAwLFxuXHQnRGVmYXVsdE9uJzogMSxcblx0J1VudXNlZCc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBvc2VUeXBlID0ge1xuXHQnRW1wdHknOiAnZW1wdHknLFxuXHQnUmVwbHknOiAncmVwbHknLFxuXHQnUmVwbHlBbGwnOiAncmVwbHlhbGwnLFxuXHQnRm9yd2FyZCc6ICdmb3J3YXJkJyxcblx0J0ZvcndhcmRBc0F0dGFjaG1lbnQnOiAnZm9yd2FyZC1hcy1hdHRhY2htZW50Jyxcblx0J0RyYWZ0JzogJ2RyYWZ0Jyxcblx0J0VkaXRBc05ldyc6ICdlZGl0YXNuZXcnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBVcGxvYWRFcnJvckNvZGUgPSB7XG5cdCdOb3JtYWwnOiAwLFxuXHQnRmlsZUlzVG9vQmlnJzogMSxcblx0J0ZpbGVQYXJ0aWFsbHlVcGxvYWRlZCc6IDIsXG5cdCdGaWxlTm9VcGxvYWRlZCc6IDMsXG5cdCdNaXNzaW5nVGVtcEZvbGRlcic6IDQsXG5cdCdGaWxlT25TYXZlaW5nRXJyb3InOiA1LFxuXHQnRmlsZVR5cGUnOiA5OCxcblx0J1Vua25vd24nOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IHtcblx0J05vbmUnOiAwLFxuXHQnU2VudCc6IDEsXG5cdCdEcmFmdCc6IDIsXG5cdCdTcGFtJzogMyxcblx0J1RyYXNoJzogNCxcblx0J0FyY2hpdmUnOiA1XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRTaWRlS2V5TmFtZSA9IHtcblx0J0ZvbGRlcnNMYXNoSGFzaCc6IDAsXG5cdCdNZXNzYWdlc0luYm94TGFzdEhhc2gnOiAxLFxuXHQnTWFpbEJveExpc3RTaXplJzogMixcblx0J0V4cGFuZGVkRm9sZGVycyc6IDMsXG5cdCdGb2xkZXJMaXN0U2l6ZSc6IDQsXG5cdCdNZXNzYWdlTGlzdFNpemUnOiA1LFxuXHQnTGFzdFJlcGx5QWN0aW9uJzogNixcblx0J0xhc3RTaWduTWUnOiA3LFxuXHQnQ29tcG9zZUxhc3RJZGVudGl0eUlEJzogOCxcblx0J01lc3NhZ2VIZWFkZXJGdWxsSW5mbyc6IDksXG5cdCdNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzJzogMTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50S2V5Q29kZSA9IHtcblx0J0JhY2tzcGFjZSc6IDgsXG5cdCdUYWInOiA5LFxuXHQnRW50ZXInOiAxMyxcblx0J0VzYyc6IDI3LFxuXHQnUGFnZVVwJzogMzMsXG5cdCdQYWdlRG93bic6IDM0LFxuXHQnTGVmdCc6IDM3LFxuXHQnUmlnaHQnOiAzOSxcblx0J1VwJzogMzgsXG5cdCdEb3duJzogNDAsXG5cdCdFbmQnOiAzNSxcblx0J0hvbWUnOiAzNixcblx0J1NwYWNlJzogMzIsXG5cdCdJbnNlcnQnOiA0NSxcblx0J0RlbGV0ZSc6IDQ2LFxuXHQnQSc6IDY1LFxuXHQnUyc6IDgzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2V0QWN0aW9uID0ge1xuXHQnU2V0U2Vlbic6IDAsXG5cdCdVbnNldFNlZW4nOiAxLFxuXHQnU2V0RmxhZyc6IDIsXG5cdCdVbnNldEZsYWcnOiAzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2VsZWN0QWN0aW9uID0ge1xuXHQnQWxsJzogMCxcblx0J05vbmUnOiAxLFxuXHQnSW52ZXJ0JzogMixcblx0J1Vuc2Vlbic6IDMsXG5cdCdTZWVuJzogNCxcblx0J0ZsYWdnZWQnOiA1LFxuXHQnVW5mbGFnZ2VkJzogNlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRGVza3RvcE5vdGlmaWNhdGlvbiA9IHtcblx0J0FsbG93ZWQnOiAwLFxuXHQnTm90QWxsb3dlZCc6IDEsXG5cdCdEZW5pZWQnOiAyLFxuXHQnTm90U3VwcG9ydGVkJzogOVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5ID0ge1xuXHQnTG93JzogNSxcblx0J05vcm1hbCc6IDMsXG5cdCdIaWdoJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRGVmYXVsdFR5cGUgPSB7XG5cdCdIdG1sJzogJ0h0bWwnLFxuXHQnUGxhaW4nOiAnUGxhaW4nLFxuXHQnSHRtbEZvcmNlZCc6ICdIdG1sRm9yY2VkJyxcblx0J1BsYWluRm9yY2VkJzogJ1BsYWluRm9yY2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyU2VjdXJlID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTU0wnOiAxLFxuXHQnVExTJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VhcmNoRGF0ZVR5cGUgPSB7XG5cdCdBbGwnOiAtMSxcblx0J0RheXMzJzogMyxcblx0J0RheXM3JzogNyxcblx0J01vbnRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNhdmVTZXR0aW5nc1N0ZXAgPSB7XG5cdCdBbmltYXRlJzogLTIsXG5cdCdJZGxlJzogLTEsXG5cdCdUcnVlUmVzdWx0JzogMSxcblx0J0ZhbHNlUmVzdWx0JzogMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTGF5b3V0ID0ge1xuXHQnTm9QcmV2aWV3JzogMCxcblx0J1NpZGVQcmV2aWV3JzogMSxcblx0J0JvdHRvbVByZXZpZXcnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25GaWVsZCA9IHtcblx0J0Zyb20nOiAnRnJvbScsXG5cdCdSZWNpcGllbnQnOiAnUmVjaXBpZW50Jyxcblx0J1N1YmplY3QnOiAnU3ViamVjdCcsXG5cdCdIZWFkZXInOiAnSGVhZGVyJyxcblx0J1NpemUnOiAnU2l6ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvblR5cGUgPSB7XG5cdCdDb250YWlucyc6ICdDb250YWlucycsXG5cdCdOb3RDb250YWlucyc6ICdOb3RDb250YWlucycsXG5cdCdFcXVhbFRvJzogJ0VxdWFsVG8nLFxuXHQnTm90RXF1YWxUbyc6ICdOb3RFcXVhbFRvJyxcblx0J1JlZ2V4JzogJ1JlZ2V4Jyxcblx0J092ZXInOiAnT3ZlcicsXG5cdCdVbmRlcic6ICdVbmRlcidcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlcnNBY3Rpb24gPSB7XG5cdCdOb25lJzogJ05vbmUnLFxuXHQnTW92ZVRvJzogJ01vdmVUbycsXG5cdCdEaXNjYXJkJzogJ0Rpc2NhcmQnLFxuXHQnVmFjYXRpb24nOiAnVmFjYXRpb24nLFxuXHQnUmVqZWN0JzogJ1JlamVjdCcsXG5cdCdGb3J3YXJkJzogJ0ZvcndhcmQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJSdWxlc1R5cGUgPSB7XG5cdCdBbGwnOiAnQWxsJyxcblx0J0FueSc6ICdBbnknXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTaWduZWRWZXJpZnlTdGF0dXMgPSB7XG5cdCdVbmtub3duUHVibGljS2V5cyc6IC00LFxuXHQnVW5rbm93blByaXZhdGVLZXknOiAtMyxcblx0J1VudmVyaWZpZWQnOiAtMixcblx0J0Vycm9yJzogLTEsXG5cdCdOb25lJzogMCxcblx0J1N1Y2Nlc3MnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDb250YWN0UHJvcGVydHlUeXBlID0ge1xuXHQnVW5rbm93bic6IDAsXG5cblx0J0Z1bGxOYW1lJzogMTAsXG5cblx0J0ZpcnN0TmFtZSc6IDE1LFxuXHQnTGFzdE5hbWUnOiAxNixcblx0J01pZGRsZU5hbWUnOiAxNixcblx0J05pY2snOiAxOCxcblxuXHQnTmFtZVByZWZpeCc6IDIwLFxuXHQnTmFtZVN1ZmZpeCc6IDIxLFxuXG5cdCdFbWFpbCc6IDMwLFxuXHQnUGhvbmUnOiAzMSxcblx0J1dlYic6IDMyLFxuXG5cdCdCaXJ0aGRheSc6IDQwLFxuXG5cdCdGYWNlYm9vayc6IDkwLFxuXHQnU2t5cGUnOiA5MSxcblx0J0dpdEh1Yic6IDkyLFxuXG5cdCdOb3RlJzogMTEwLFxuXG5cdCdDdXN0b20nOiAyNTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1hZ2ljcyA9IHtcblx0J0V2ZW50V2hpY2hNb3VzZU1pZGRsZSc6IDMsXG5cdCdpZnZpc2libGVJZGxlMTBzJzogMTAsXG5cblx0J0JpdExlbmd0aDIwNDgnOiAyMDQ4LFxuXHQnQml0TGVuZ3RoMTAyNCc6IDEwMjQsXG5cblx0J1NpemUzNTBweCc6IDM1MCxcblx0J1NpemU1MHB4JzogNTAsXG5cdCdTaXplMjBweCc6IDIwLFxuXHQnU2l6ZTFweCc6IDEsXG5cblx0J1RpbWUzMG1Jbk1pbic6IDMwLFxuXG5cdCdUaW1lNjBtJzogNjAwMDAgKiA2MCxcblx0J1RpbWUzMG0nOiA2MDAwMCAqIDMwLFxuXHQnVGltZTIwbSc6IDYwMDAwICogMjAsXG5cdCdUaW1lMTVtJzogNjAwMDAgKiAxNSxcblx0J1RpbWUxMG0nOiA2MDAwMCAqIDEwLFxuXHQnVGltZTVtJzogNjAwMDAgKiA1LFxuXHQnVGltZTNtJzogNjAwMDAgKiAzLFxuXHQnVGltZTJtJzogNjAwMDAgKiAyLFxuXHQnVGltZTFtJzogNjAwMDAsXG5cdCdUaW1lMzBzJzogMzAwMDAsXG5cdCdUaW1lMTBzJzogMTAwMDAsXG5cdCdUaW1lN3MnOiA3MDAwLFxuXHQnVGltZTVzJzogNTAwMCxcblx0J1RpbWUzcyc6IDMwMDAsXG5cdCdUaW1lMXMnOiAxMDAwLFxuXHQnVGltZTUwMG1zJzogNTAwLFxuXHQnVGltZTM1MG1zJzogMzUwLFxuXHQnVGltZTI1MG1zJzogMjUwLFxuXHQnVGltZTIwMG1zJzogMjAwLFxuXHQnVGltZTEwMG1zJzogMTAwLFxuXHQnVGltZTUwbXMnOiA1MCxcblx0J1RpbWUyMG1zJzogMjAsXG5cdCdUaW1lMTBtcyc6IDEwLFxuXHQnVGltZTFtcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBvcnRzID0ge1xuXHQnSW1hcCc6IDE0Myxcblx0J0ltYXBTc2wnOiA5OTMsXG5cdCdTbXRwJzogMjUsXG5cdCdTbXRwU3NsJzogNDY1LFxuXHQnU210cFN0YXJ0VGxzJzogNTg3XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb24gPSB7XG5cdCdJbnZhbGlkVG9rZW4nOiAxMDEsXG5cdCdBdXRoRXJyb3InOiAxMDIsXG5cdCdBY2Nlc3NFcnJvcic6IDEwMyxcblx0J0Nvbm5lY3Rpb25FcnJvcic6IDEwNCxcblx0J0NhcHRjaGFFcnJvcic6IDEwNSxcblx0J1NvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA2LFxuXHQnU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNyxcblx0J1NvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwOCxcblx0J0RvbWFpbk5vdEFsbG93ZWQnOiAxMDksXG5cdCdBY2NvdW50Tm90QWxsb3dlZCc6IDExMCxcblxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCc6IDEyMCxcblx0J0FjY291bnRUd29GYWN0b3JBdXRoRXJyb3InOiAxMjEsXG5cblx0J0NvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkJzogMTMwLFxuXHQnQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0JzogMTMxLFxuXHQnTmV3UGFzc3dvcmRTaG9ydCc6IDEzMixcblx0J05ld1Bhc3N3b3JkV2Vhayc6IDEzMyxcblx0J05ld1Bhc3N3b3JkRm9yYmlkZGVuJzogMTM0LFxuXG5cdCdDb250YWN0c1N5bmNFcnJvcic6IDE0MCxcblxuXHQnQ2FudEdldE1lc3NhZ2VMaXN0JzogMjAxLFxuXHQnQ2FudEdldE1lc3NhZ2UnOiAyMDIsXG5cdCdDYW50RGVsZXRlTWVzc2FnZSc6IDIwMyxcblx0J0NhbnRNb3ZlTWVzc2FnZSc6IDIwNCxcblx0J0NhbnRDb3B5TWVzc2FnZSc6IDIwNSxcblxuXHQnQ2FudFNhdmVNZXNzYWdlJzogMzAxLFxuXHQnQ2FudFNlbmRNZXNzYWdlJzogMzAyLFxuXHQnSW52YWxpZFJlY2lwaWVudHMnOiAzMDMsXG5cblx0J0NhbnRTYXZlRmlsdGVycyc6IDM1MSxcblx0J0NhbnRHZXRGaWx0ZXJzJzogMzUyLFxuXHQnRmlsdGVyc0FyZU5vdENvcnJlY3QnOiAzNTUsXG5cblx0J0NhbnRDcmVhdGVGb2xkZXInOiA0MDAsXG5cdCdDYW50UmVuYW1lRm9sZGVyJzogNDAxLFxuXHQnQ2FudERlbGV0ZUZvbGRlcic6IDQwMixcblx0J0NhbnRTdWJzY3JpYmVGb2xkZXInOiA0MDMsXG5cdCdDYW50VW5zdWJzY3JpYmVGb2xkZXInOiA0MDQsXG5cdCdDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXInOiA0MDUsXG5cblx0J0NhbnRTYXZlU2V0dGluZ3MnOiA1MDEsXG5cdCdDYW50U2F2ZVBsdWdpblNldHRpbmdzJzogNTAyLFxuXG5cdCdEb21haW5BbHJlYWR5RXhpc3RzJzogNjAxLFxuXG5cdCdDYW50SW5zdGFsbFBhY2thZ2UnOiA3MDEsXG5cdCdDYW50RGVsZXRlUGFja2FnZSc6IDcwMixcblx0J0ludmFsaWRQbHVnaW5QYWNrYWdlJzogNzAzLFxuXHQnVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlJzogNzA0LFxuXG5cdCdMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlJzogNzEwLFxuXHQnTGljZW5zaW5nRXhwaXJlZCc6IDcxMSxcblx0J0xpY2Vuc2luZ0Jhbm5lZCc6IDcxMixcblxuXHQnRGVtb1NlbmRNZXNzYWdlRXJyb3InOiA3NTAsXG5cdCdEZW1vQWNjb3VudEVycm9yJzogNzUxLFxuXG5cdCdBY2NvdW50QWxyZWFkeUV4aXN0cyc6IDgwMSxcblx0J0FjY291bnREb2VzTm90RXhpc3QnOiA4MDIsXG5cblx0J01haWxTZXJ2ZXJFcnJvcic6IDkwMSxcblx0J0NsaWVudFZpZXdFcnJvcic6IDkwMixcblx0J0ludmFsaWRJbnB1dEFyZ3VtZW50JzogOTAzLFxuXG5cdCdBamF4RmFsc2UnOiA5NTAsXG5cdCdBamF4QWJvcnQnOiA5NTEsXG5cdCdBamF4UGFyc2UnOiA5NTIsXG5cdCdBamF4VGltZW91dCc6IDk1MyxcblxuXHQnVW5rbm93bk5vdGlmaWNhdGlvbic6IDk5OSxcblx0J1Vua25vd25FcnJvcic6IDk5OVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgT3BlbnRpcCBmcm9tICdPcGVudGlwJztcbmltcG9ydCBQaWthZGF5IGZyb20gJ3Bpa2FkYXknO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCBrbyA9IHdpbmRvdy5rbyxcblx0JHdpbiA9ICQod2luZG93KSxcblx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciA9IChlbGVtZW50KSA9PiB7XG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy51cGRhdGVXaWR0aCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmSW5pdCA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGZWYWx1ZSgkZWwud2lkdGgoKSk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdFx0fTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsIGZJbml0KTtcblx0XHRmSW5pdCgpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkd2luLm9mZigncmVzaXplJywgZkluaXQpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZWRpdG9yID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRsZXQgZWRpdG9yID0gbnVsbDtcblxuXHRcdGNvbnN0IGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRIdG1sRWRpdG9yID0gcmVxdWlyZSgnQ29tbW9uL0h0bWxFZGl0b3InKS5kZWZhdWx0LFxuXHRcdFx0ZlVwZGF0ZUVkaXRvclZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZS5fX2VkaXRvci5zZXRIdG1sT3JQbGFpbihmVmFsdWUoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmVXBkYXRlS29WYWx1ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuX19lZGl0b3IpIHtcblx0XHRcdFx0XHRmVmFsdWUoZlZhbHVlLl9fZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmT25SZWFkeSA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yID0gZWRpdG9yO1xuXHRcdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUoKTtcblx0XHRcdH07XG5cblx0XHRpZiAoa28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgSHRtbEVkaXRvcikge1xuXHRcdFx0ZWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoZWxlbWVudCwgZlVwZGF0ZUtvVmFsdWUsIGZPblJlYWR5LCBmVXBkYXRlS29WYWx1ZSk7XG5cblx0XHRcdGZWYWx1ZS5fX2ZldGNoRWRpdG9yVmFsdWUgPSBmVXBkYXRlS29WYWx1ZTtcblxuXHRcdFx0ZlZhbHVlLnN1YnNjcmliZShmVXBkYXRlRWRpdG9yVmFsdWUpO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmpzb24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudCkudGV4dCh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNjcm9sbGVyU2hhZG93cyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW1pdCA9IDgsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29udCA9ICRlbC5maW5kKCdbZGF0YS1zY3JvbGxlci1zaGFkb3dzLWNvbnRlbnRdJylbMF0gfHwgbnVsbCxcblx0XHRcdGZGdW5jID0gXy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdCRlbFxuXHRcdFx0XHRcdC50b2dnbGVDbGFzcygnc2Nyb2xsZXItc2hhZG93LXRvcCcsIGxpbWl0IDwgY29udC5zY3JvbGxUb3ApXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctYm90dG9tJywgY29udC5zY3JvbGxUb3AgKyBsaW1pdCA8IGNvbnQuc2Nyb2xsSGVpZ2h0IC0gY29udC5jbGllbnRIZWlnaHQpO1xuXHRcdFx0fSwgMTAwKTtcblxuXHRcdGlmIChjb250KSB7XG5cdFx0XHQkKGNvbnQpLm9uKCdzY3JvbGwgcmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0JHdpbi5vbigncmVzaXplJywgZkZ1bmMpO1xuXG5cdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGNvbnQsICgpID0+IHtcblx0XHRcdFx0JChjb250KS5vZmYoKTtcblx0XHRcdFx0JHdpbi5vZmYoJ3Jlc2l6ZScsIGZGdW5jKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBpa2FkYXkgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpID0+IHtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnMudGV4dElucHV0LmluaXQoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChQaWthZGF5KSB7XG5cdFx0XHRlbGVtZW50Ll9fcGlrYWRheSA9IG5ldyBQaWthZGF5KHtcblx0XHRcdFx0ZmllbGQ6IGVsZW1lbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnZpc2libGVBbmltYXRlZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWluaXRlZCcpO1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCRlbC5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLmFkZENsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKS5zaG93KCk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0JGVsLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHRcdH0sIDEwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKS5yZW1vdmVDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudG9vbHRpcCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKTtcblxuXHRcdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRcdCdzdHlsZSc6ICdyYWlubG9vcFRpcCcsXG5cdFx0XHRcdCdlbGVtZW50JzogZWxlbWVudCxcblx0XHRcdFx0J3RpcEpvaW50JzogJGVsLmRhdGEoJ3Rvb2x0aXAtam9pbicpIHx8ICdib3R0b20nXG5cdFx0XHR9KTtcblxuXHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCcnID09PSBzVmFsdWUpIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzSTE4Tikge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdG9yID0gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKTtcblxuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblxuXHRcdFx0XHRUcmFuc2xhdG9yLnRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoc1ZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuYWN0aXZhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UgfHwgaXNNb2JpbGUpICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KGlzSTE4TiA/IHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4bihzVmFsdWUpIDogc1ZhbHVlKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwRXJyb3JUaXAgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRzdHlsZTogJ3JhaW5sb29wRXJyb3JUaXAnLFxuXHRcdFx0aGlkZU9uOiAnbW91c2VvdXQgY2xpY2snLFxuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdHRpcEpvaW50OiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ3RvcCdcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblxuXHRcdCQod2luZG93LmRvY3VtZW50KS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRmRGlzcG9zYWxUb29sdGlwSGVscGVyKGVsZW1lbnQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0dmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpLFxuXHRcdFx0b3BlblRpcHMgPSBlbGVtZW50Ll9fb3BlbnRpcDtcblxuXHRcdGlmIChvcGVuVGlwcykge1xuXHRcdFx0aWYgKCcnID09PSB2YWx1ZSkge1xuXHRcdFx0XHRvcGVuVGlwcy5oaWRlKCk7XG5cdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRpZiAoJGVsLmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmFjdGl2YXRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQoJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmIChHbG9iYWxzICYmIEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zKSB7XG5cdFx0XHRHbG9iYWxzLmRhdGEuYUJvb3RzdHJhcERyb3Bkb3ducy5wdXNoKCQoZWxlbWVudCkpO1xuXG5cdFx0XHQkKGVsZW1lbnQpLmNsaWNrKCgpID0+IHtcblx0XHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vcGVuRHJvcGRvd25UcmlnZ2VyID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0XHRpZiAoISRlbC5oYXNDbGFzcygnb3BlbicpKSB7XG5cdFx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHQkZWwuZmluZCgnLmRyb3Bkb3duLXRvZ2dsZScpLmZvY3VzKCk7XG5cblx0XHRcdHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLmRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJvcGRvd25DbG9zZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmNsb3Nlc3QoJy5kcm9wZG93bicpXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0nLCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudCkuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5wb3BvdmVyID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkucG9wb3Zlcihrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQgPSB7fTtcbmtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LmluaXQgPSBrby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dC51cGRhdGUgPSAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZVNoZWV0ICYmICd1bmRlZmluZWQnICE9PSB0eXBlb2YgZWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQpIHtcblx0XHRlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0fSBlbHNlIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnJlc2l6ZWNyb3AgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmFkZENsYXNzKCdyZXNpemVjcm9wJylcblx0XHRcdC5yZXNpemVjcm9wKHtcblx0XHRcdFx0J3dpZHRoJzogJzEwMCcsXG5cdFx0XHRcdCdoZWlnaHQnOiAnMTAwJyxcblx0XHRcdFx0J3dyYXBwZXJDU1MnOiB7XG5cdFx0XHRcdFx0J2JvcmRlci1yYWRpdXMnOiAnMTBweCdcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKSgpO1xuXHRcdCQoZWxlbWVudCkucmVzaXplY3JvcCh7XG5cdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdCdoZWlnaHQnOiAnMTAwJ1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25LZXlEb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25LZXlEb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0cmV0dXJuIGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIGV2ZW50KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlkb3duLmtvT25LZXlEb3duJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVudGVyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlwcmVzcy5rb09uRW50ZXInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAxMyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXByZXNzLmtvT25FbnRlcicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25TcGFjZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PblNwYWNlJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMzIgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PblNwYWNlJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblRhYiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5ZG93bi5rb09uVGFiJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgOSA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgISFldmVudC5zaGlmdEtleSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PblRhYicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25Fc2MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXVwLmtvT25Fc2MnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAyNyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXVwLmtvT25Fc2MnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNsaWNrT25UcnVlID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5tb2RhbCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpO1xuXG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdmYWRlJywgIUdsb2JhbHMuYk1vYmlsZURldmljZSlcblx0XHRcdC5tb2RhbCh7XG5cdFx0XHRcdCdrZXlib2FyZCc6IGZhbHNlLFxuXHRcdFx0XHQnc2hvdyc6IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKVxuXHRcdFx0fSlcblx0XHRcdC5vbignc2hvd24ua29Nb2RhbCcsIFV0aWxzLndpbmRvd1Jlc2l6ZUNhbGxiYWNrKVxuXHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHQub24oJ2NsaWNrLmtvTW9kYWwnLCAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkoZmFsc2UpO1xuXHRcdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0Lm9mZignc2hvd24ua29Nb2RhbCcpXG5cdFx0XHRcdC5maW5kKCcuY2xvc2UnKVxuXHRcdFx0XHQub2ZmKCdjbGljay5rb01vZGFsJyk7XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpLm1vZGFsKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSA/ICdzaG93JyA6ICdoaWRlJyk7XG5cblx0XHRpZiAoR2xvYmFscy4kaHRtbC5oYXNDbGFzcygncmwtYW5pbScpKSB7XG5cdFx0XHRHbG9iYWxzLiRodG1sLmFkZENsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRHbG9iYWxzLiRodG1sLnJlbW92ZUNsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vbWVudCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKFxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ21vbWVudCcpXG5cdFx0XHRcdC5kYXRhKCdtb21lbnQtdGltZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9Nb21lbnRvcicpLm1vbWVudFRvTm9kZSgkKGVsZW1lbnQpLmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pMThuSW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudHJhbnNsYXRvckluaXQgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5VcGRhdGUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0a28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5saW5rID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCdocmVmJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRpdGxlID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCd0aXRsZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50ZXh0RiA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXREb20gPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKShlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRGaXhlZFRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHR0b3AgPSB2YWx1ZXNbMV0gfHwgMDtcblxuXHRcdGxldCAkY29udGFpbmVyID0gJCh2YWx1ZXNbMF0gfHwgbnVsbCk7XG5cdFx0JGNvbnRhaW5lciA9ICRjb250YWluZXJbMF0gPyAkY29udGFpbmVyIDogbnVsbDtcblx0XHRpZiAoJGNvbnRhaW5lcikge1xuXHRcdFx0JHdpbi5yZXNpemUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvZmZzZXQgPSAkY29udGFpbmVyID8gJGNvbnRhaW5lci5vZmZzZXQoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChvZmZzZXQgJiYgb2Zmc2V0LnRvcCkge1xuXHRcdFx0XHRcdCRlbC5jc3MoJ3RvcCcsIG9mZnNldC50b3AgKyB0b3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0UmVzaXplVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdCQoZWxlbWVudCkuY3NzKHtcblx0XHRcdCdoZWlnaHQnOiB2YWx1ZXNbMV0sXG5cdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlc1sxXVxuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChvRWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHR2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cblx0XHRsZXQgdmFsdWUgPSBVdGlscy5wSW50KHZhbHVlc1sxXSksXG5cdFx0XHRzaXplID0gMCxcblx0XHRcdG9mZnNldCA9ICQob0VsZW1lbnQpLm9mZnNldCgpLnRvcDtcblxuXHRcdGlmICgwIDwgb2Zmc2V0KSB7XG5cdFx0XHRvZmZzZXQgKz0gVXRpbHMucEludCh2YWx1ZXNbMl0pO1xuXHRcdFx0c2l6ZSA9IEdsb2JhbHMuJHdpbi5oZWlnaHQoKSAtIG9mZnNldDtcblxuXHRcdFx0aWYgKHZhbHVlIDwgc2l6ZSkge1xuXHRcdFx0XHR2YWx1ZSA9IHNpemU7XG5cdFx0XHR9XG5cblx0XHRcdCQob0VsZW1lbnQpLmNzcyh7XG5cdFx0XHRcdCdoZWlnaHQnOiB2YWx1ZSxcblx0XHRcdFx0J21pbi1oZWlnaHQnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuYXBwZW5kRG9tID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHRcdC5zaG93KCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgdHJpZ2dlclpvbmUgPSAxMDAsXG5cdFx0XHRcdHNjcm9sbFNwZWVkID0gMyxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGRyb3BwYWJsZVNlbGVjdG9yID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVTZWxlY3RvciA6ICcnLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdGRpc3RhbmNlOiAyMCxcblx0XHRcdFx0XHRoYW5kbGU6ICcuZHJhZ0hhbmRsZScsXG5cdFx0XHRcdFx0Y3Vyc29yQXQ6IHsgdG9wOiAyMiwgbGVmdDogMyB9LFxuXHRcdFx0XHRcdHJlZnJlc2hQb3NpdGlvbnM6IHRydWUsXG5cdFx0XHRcdFx0c2Nyb2xsOiB0cnVlLFxuXHRcdFx0XHRcdGRyYWc6IG51bGwsXG5cdFx0XHRcdFx0c3RvcDogbnVsbCxcblx0XHRcdFx0XHRoZWxwZXI6IG51bGxcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKGRyb3BwYWJsZVNlbGVjdG9yKSB7XG5cdFx0XHRcdGNvbmYuZHJhZyA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHRcdG9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdFx0XHRib3R0b21Qb3MgPSBvZmZzZXQudG9wICsgJHRoaXMuaGVpZ2h0KCk7XG5cblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWCA+PSBvZmZzZXQubGVmdCAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICR0aGlzLndpZHRoKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VZID49IGJvdHRvbVBvcyAtIHRyaWdnZXJab25lICYmIGV2ZW50LnBhZ2VZIDw9IGJvdHRvbVBvcykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVVcCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSArIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlVXAsIDEwKSk7XG5cdFx0XHRcdFx0XHRcdFx0bW92ZVVwKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gb2Zmc2V0LnRvcCAmJiBldmVudC5wYWdlWSA8PSBvZmZzZXQudG9wICsgdHJpZ2dlclpvbmUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb3ZlRG93biA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSAtIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlRG93biwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlRG93bigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uZi5zdG9wID0gKCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCgkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcpKTtcblx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25mLmhlbHBlciA9IChldmVudCkgPT4gZlZhbHVlQWNjZXNzb3IoKShldmVudCAmJiBldmVudC50YXJnZXQgPyBrby5kYXRhRm9yKGV2ZW50LnRhcmdldCkgOiBudWxsKTtcblxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuZHJhZ2dhYmxlKGNvbmYpXG5cdFx0XHRcdC5vbignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFV0aWxzLnJlbW92ZUluRm9jdXMoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0Lm9mZignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJylcblx0XHRcdFx0XHQuZHJhZ2dhYmxlKCdkZXN0cm95Jyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wcGFibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgZlZhbHVlRnVuYyA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRcdGZBbGxWYWx1ZUZ1bmMgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0XHRmT3ZlckNhbGxiYWNrID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgOiBudWxsLFxuXHRcdFx0XHRmT3V0Q2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3V0ID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgOiBudWxsLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdHRvbGVyYW5jZTogJ3BvaW50ZXInLFxuXHRcdFx0XHRcdGhvdmVyQ2xhc3M6ICdkcm9wcGFibGVIb3ZlcicsXG5cdFx0XHRcdFx0ZHJvcDogbnVsbCxcblx0XHRcdFx0XHRvdmVyOiBudWxsLFxuXHRcdFx0XHRcdG91dDogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZlZhbHVlRnVuYykge1xuXHRcdFx0XHRjb25mLmRyb3AgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlRnVuYyhldmVudCwgdWkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChmT3ZlckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdmVyID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdFx0Zk92ZXJDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZk91dENhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdXQgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3V0Q2FsbGJhY2soZXZlbnQsIHVpKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoY29uZik7XG5cblx0XHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubmFubyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFNldHRpbmdzID0gcmVxdWlyZSgnU3RvcmFnZS9TZXR0aW5ncycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJEaXNhYmxlTmFub1Njcm9sbCAmJiAhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZU5hdGl2ZVNjcm9sbGJhcnMnKSkge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ25hbm8nKVxuXHRcdFx0XHQubmFub1Njcm9sbGVyKHtcblx0XHRcdFx0XHRpT1NOYXRpdmVTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdHByZXZlbnRQYWdlU2Nyb2xsaW5nOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNhdmVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHQkZWwuZGF0YShcblx0XHRcdCdzYXZlLXRyaWdnZXItdHlwZScsXG5cdFx0XHQkZWwuaXMoJ2lucHV0W3R5cGU9dGV4dF0saW5wdXRbdHlwZT1lbWFpbF0saW5wdXRbdHlwZT1wYXNzd29yZF0sc2VsZWN0LHRleHRhcmVhJykgPyAnaW5wdXQnIDogJ2N1c3RvbSdcblx0XHQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0JGVsXG5cdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOycgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1zcGlubmVyIGFuaW1hdGVkXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1yZW1vdmUgZXJyb3JcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLW9rIHN1Y2Nlc3NcIj48L2k+J1xuXHRcdFx0XHQpXG5cdFx0XHRcdC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXItaW5wdXQnKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSksXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodmFsdWUudG9TdHJpbmcoKSkge1xuXHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ3N1Y2Nlc3MnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0JGVsLmFkZENsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0yJzpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ2Vycm9yIHN1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lbWFpbHNUYWdzID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZBbGxCaW5kaW5ncyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRmQXV0b0NvbXBsZXRlU291cmNlID0gZkFsbEJpbmRpbmdzLmF1dG9Db21wbGV0ZVNvdXJjZSB8fCBudWxsLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzID0gWycsJywgJzsnLCAnXFxuJ10sXG5cdFx0XHRmRm9jdXNDYWxsYmFjayA9ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5mb2N1c2VkKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLmZvY3VzZWQoISF2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQkZWwuaW5wdXRvc2F1cnVzKHtcblx0XHRcdHBhcnNlT25CbHVyOiB0cnVlLFxuXHRcdFx0YWxsb3dEcmFnQW5kRHJvcDogdHJ1ZSxcblx0XHRcdGZvY3VzQ2FsbGJhY2s6IGZGb2N1c0NhbGxiYWNrLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzOiBpbnB1dERlbGltaXRlcnMsXG5cdFx0XHRhdXRvQ29tcGxldGVTb3VyY2U6IGZBdXRvQ29tcGxldGVTb3VyY2UsXG5cdFx0XHRzcGxpdEhvb2s6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB2ID0gVXRpbHMudHJpbSh2YWx1ZSk7XG5cdFx0XHRcdGlmICh2ICYmIC0xIDwgaW5wdXREZWxpbWl0ZXJzLmluZGV4T2Yodi5zdWJzdHIoLTEpKSkge1xuXHRcdFx0XHRcdHJldHVybiBFbWFpbE1vZGVsLnNwbGl0RW1haWxMaW5lKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRwYXJzZUhvb2s6IChpbnB1dCkgPT5cblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoaW5wdXQsIChpbnB1dFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoaW5wdXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzIDogaW5wdXRWYWx1ZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQoaXRlbSkgPT4gKF8uaXNPYmplY3QoaXRlbSkgPyBbaXRlbS50b0xpbmUoZmFsc2UpLCBpdGVtXSA6IFtpdGVtLCBudWxsXSlcblx0XHRcdFx0KSxcblx0XHRcdGNoYW5nZTogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdCRlbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRmVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQgJiYgZlZhbHVlLmZvY3VzZWQuc3Vic2NyaWJlKSB7XG5cdFx0XHRmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdCRlbC5pbnB1dG9zYXVydXModmFsdWUgPyAnZm9jdXMnIDogJ2JsdXInKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkb0VsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0aWYgKCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJykgIT09IHZhbHVlKSB7XG5cdFx0XHQkb0VsLnZhbCh2YWx1ZSk7XG5cdFx0XHQkb0VsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIHZhbHVlKTtcblx0XHRcdCRvRWwuaW5wdXRvc2F1cnVzKCdyZWZyZXNoJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY29tbWFuZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGpxRWxlbWVudCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb21tYW5kID0gZlZhbHVlQWNjZXNzb3IoKTtcblxuXHRcdGlmICghY29tbWFuZCB8fCAhY29tbWFuZC5pc0NvbW1hbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVmFsdWUgc2hvdWxkIGJlIGEgY29tbWFuZCcpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5lbmFibGVkKSB7XG5cdFx0XHRjb21tYW5kLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5jYW5FeGVjdXRlKSB7XG5cdFx0XHRjb25zdCBfX3JlYWxDYW5FeGVjdXRlID0gY29tbWFuZC5fX3JlYWxDYW5FeGVjdXRlO1xuXHRcdFx0aWYgKF8uaXNGdW5jdGlvbihfX3JlYWxDYW5FeGVjdXRlKSkge1xuXHRcdFx0XHRjb21tYW5kLmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBjb21tYW5kLmVuYWJsZWQoKSAmJiBfX3JlYWxDYW5FeGVjdXRlLmNhbGwodmlld01vZGVsLCB2aWV3TW9kZWwpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmICEhX19yZWFsQ2FuRXhlY3V0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0anFFbGVtZW50LmFkZENsYXNzKCdjb21tYW5kJyk7XG5cdFx0a28uYmluZGluZ0hhbmRsZXJzW2pxRWxlbWVudC5pcygnZm9ybScpID8gJ3N1Ym1pdCcgOiAnY2xpY2snXS5pbml0KFxuXHRcdFx0ZWxlbWVudCxcblx0XHRcdGZWYWx1ZUFjY2Vzc29yLFxuXHRcdFx0ZkFsbEJpbmRpbmdzQWNjZXNzb3IsXG5cdFx0XHR2aWV3TW9kZWwsXG5cdFx0XHRiaW5kaW5nQ29udGV4dFxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0bGV0IHJlc3VsdCA9IGNvbW1hbmQuZW5hYmxlZCgpO1xuXG5cdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLW5vdC1lbmFibGVkJywgIXJlc3VsdCk7XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBjb21tYW5kLmNhbkV4ZWN1dGUoKTtcblx0XHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1jYW4tbm90LWJlLWV4ZWN1dGUnLCAhcmVzdWx0KTtcblx0XHR9XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtZGlzYWJsZWQgZGlzYWJsZSBkaXNhYmxlZCcsICFyZXN1bHQpLnRvZ2dsZUNsYXNzKCduby1kaXNhYmxlZCcsICEhcmVzdWx0KTtcblxuXHRcdGlmIChqcUVsZW1lbnQuaXMoJ2lucHV0JykgfHwganFFbGVtZW50LmlzKCdidXR0b24nKSkge1xuXHRcdFx0anFFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgIXJlc3VsdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBleHRlbmRlcnNcblxua28uZXh0ZW5kZXJzLnRyaW1tZXIgPSAodGFyZ2V0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoVXRpbHMudHJpbShuZXdWYWx1ZS50b1N0cmluZygpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5wb3NJbnRlcmVyID0gKHRhcmdldCwgZGVmYXVsdFZhbCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHZhbCA9IFV0aWxzLnBJbnQobmV3VmFsdWUudG9TdHJpbmcoKSwgZGVmYXVsdFZhbCk7XG5cdFx0XHRcdGlmICgwID49IHZhbCkge1xuXHRcdFx0XHRcdHZhbCA9IGRlZmF1bHRWYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsID09PSB0YXJnZXQoKSAmJiAnJyArIHZhbCAhPT0gJycgKyBuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldCh2YWwgKyAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldCh2YWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMubGltaXRlZExpc3QgPSAodGFyZ2V0LCBsaW1pdGVkTGlzdCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBrby51bndyYXAodGFyZ2V0KSxcblx0XHRcdFx0XHRcdGxpc3QgPSBrby51bndyYXAobGltaXRlZExpc3QpO1xuXG5cdFx0XHRcdFx0aWYgKFV0aWxzLmlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgVXRpbHMuaW5BcnJheShuZXdWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoLTEgPCBVdGlscy5pbkFycmF5KGN1cnJlbnRWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGxpc3RbMF0gKyAnICcpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblxuXHRpZiAoIXJlc3VsdC52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRyZXN1bHQudmFsdWVIYXNNdXRhdGVkID0gKCkgPT4ge1xuXHRcdFx0dGFyZ2V0LnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnJldmVyc2libGUgPSAodGFyZ2V0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHRhcmdldCgpO1xuXG5cdHRhcmdldC5jb21taXQgPSAoKSA9PiB7XG5cdFx0dmFsdWUgPSB0YXJnZXQoKTtcblx0fTtcblxuXHR0YXJnZXQucmV2ZXJzZSA9ICgpID0+IHtcblx0XHR0YXJnZXQodmFsdWUpO1xuXHR9O1xuXG5cdHRhcmdldC5jb21taXRlZFZhbHVlID0gKCkgPT4gdmFsdWU7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMudG9nZ2xlU3Vic2NyaWJlID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMV0sIG9wdGlvbnNbMF0sICdiZWZvcmVDaGFuZ2UnKTtcblx0dGFyZ2V0LnN1YnNjcmliZShvcHRpb25zWzJdLCBvcHRpb25zWzBdKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcCA9IG9wdGlvbnNbMV07XG5cdGlmIChwcm9wKSB7XG5cdFx0dGFyZ2V0LnN1YnNjcmliZShcblx0XHRcdChwcmV2KSA9PiB7XG5cdFx0XHRcdGlmIChwcmV2ICYmIHByZXZbcHJvcF0pIHtcblx0XHRcdFx0XHRwcmV2W3Byb3BdKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnNbMF0sXG5cdFx0XHQnYmVmb3JlQ2hhbmdlJ1xuXHRcdCk7XG5cblx0XHR0YXJnZXQuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG5cdFx0XHRpZiAobmV4dCAmJiBuZXh0W3Byb3BdKSB7XG5cdFx0XHRcdG5leHRbcHJvcF0odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0aW9uc1swXSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmZhbHNlVGltZW91dCA9ICh0YXJnZXQsIG9wdGlvbikgPT4ge1xuXHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHR0YXJnZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQpO1xuXHRcdFx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoZmFsc2UpO1xuXHRcdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHRcdFx0fSwgcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuc3BlY2lhbFRocm90dGxlID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pO1xuXHRpZiAoMCA8IHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKSB7XG5cdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHR0YXJnZXQudmFsdWVGb3JSZWFkID0ga28ub2JzZXJ2YWJsZSghIXRhcmdldCgpKS5leHRlbmQoeyB0aHJvdHRsZTogMTAgfSk7XG5cblx0XHRyZXR1cm4ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LnZhbHVlRm9yUmVhZCxcblx0XHRcdHdyaXRlOiAoYlZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChiVmFsdWUpIHtcblx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldC52YWx1ZUZvclJlYWQoKSkge1xuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHRcdFx0XHRcdH0sIHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChiVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5pZGxlVHJpZ2dlciA9ICh0YXJnZXQpID0+IHtcblx0dGFyZ2V0LnRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBmdW5jdGlvbnNcblxua28ub2JzZXJ2YWJsZS5mbi5pZGxlVHJpZ2dlciA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5leHRlbmQoeyAnaWRsZVRyaWdnZXInOiB0cnVlIH0pO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZU5vbmUgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVFbWFpbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0dGhpcy5oYXNFcnJvcignJyAhPT0gdmFsdWUgJiYgIS9eW15AXFxzXStAW15AXFxzXSskLy50ZXN0KHZhbHVlKSk7XG5cdH0pO1xuXG5cdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZVNpbXBsZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL14uK0AuKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLmRlbGV0ZUFjY2Vzc0hlbHBlciA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMzAwMCB9KS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdkZWxldGVBY2Nlc3MnXSB9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlRnVuYyA9IGZ1bmN0aW9uKGZGdW5jKSB7XG5cdHRoaXMuaGFzRnVuY0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0aWYgKF8uaXNGdW5jdGlvbihmRnVuYykpIHtcblx0XHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHRoaXMuaGFzRnVuY0Vycm9yKCFmRnVuYyh2YWx1ZSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQga287XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBBdXRvbGlua2VyIGZyb20gJ0F1dG9saW5rZXInO1xuXG5pbXBvcnQgeyAkd2luLCAkZGl2LCAkaGNvbnQsIGRyb3Bkb3duVmlzaWJpbGl0eSwgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IENvbXBvc2VUeXBlLCBFdmVudEtleUNvZGUsIFNhdmVTZXR0aW5nc1N0ZXAsIEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgTWltZSB9IGZyb20gJ0NvbW1vbi9NaW1lJztcbmltcG9ydCB7IGphc3NsIH0gZnJvbSAnQ29tbW9uL0phc3NsJztcblxuY29uc3QgdHJpbSA9ICQudHJpbTtcbmNvbnN0IGluQXJyYXkgPSAkLmluQXJyYXk7XG5jb25zdCBpc0FycmF5ID0gXy5pc0FycmF5O1xuY29uc3QgaXNPYmplY3QgPSBfLmlzT2JqZWN0O1xuY29uc3QgaXNGdW5jID0gXy5pc0Z1bmN0aW9uO1xuY29uc3QgaXNVbmQgPSBfLmlzVW5kZWZpbmVkO1xuY29uc3QgaXNOdWxsID0gXy5pc051bGw7XG5jb25zdCBoYXMgPSBfLmhhcztcbmNvbnN0IGJpbmQgPSBfLmJpbmQ7XG5jb25zdCBub29wID0gKCkgPT4ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmNvbnN0IG5vb3BUcnVlID0gKCkgPT4gdHJ1ZTtcbmNvbnN0IG5vb3BGYWxzZSA9ICgpID0+IGZhbHNlO1xuXG5leHBvcnQgeyB0cmltLCBpbkFycmF5LCBpc0FycmF5LCBpc09iamVjdCwgaXNGdW5jLCBpc1VuZCwgaXNOdWxsLCBoYXMsIGJpbmQsIG5vb3AsIG5vb3BUcnVlLCBub29wRmFsc2UsIGphc3NsIH07XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lsZW50VHJ5Q2F0Y2goZnVuYykge1xuXHR0cnkge1xuXHRcdGZ1bmMoKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3JtYWwodmFsdWUpIHtcblx0cmV0dXJuICFpc1VuZCh2YWx1ZSkgJiYgIWlzTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRlWmVybyA9IHRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3NOdW1lcmljKHZhbHVlLCBpbmNsdWRlWmVybyA9IHRydWUpIHtcblx0cmV0dXJuICFpc05vcm1hbCh2YWx1ZSlcblx0XHQ/IGZhbHNlXG5cdFx0OiBpbmNsdWRlWmVyb1xuXHRcdD8gL15bMC05XSokLy50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpXG5cdFx0OiAvXlsxLTldK1swLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBkZWZhdWx0VmFsdXIgPSAwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEludCh2YWx1ZSwgZGVmYXVsdFZhbHVyID0gMCkge1xuXHRjb25zdCByZXN1bHQgPSBpc05vcm1hbCh2YWx1ZSkgJiYgJycgIT09IHZhbHVlID8gd2luZG93LnBhcnNlSW50KHZhbHVlLCAxMCkgOiBkZWZhdWx0VmFsdXI7XG5cdHJldHVybiB3aW5kb3cuaXNOYU4ocmVzdWx0KSA/IGRlZmF1bHRWYWx1ciA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcFN0cmluZyh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb3JtYWwodmFsdWUpID8gJycgKyB2YWx1ZSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEJvb2wodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xUb0FqYXgodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID8gJzEnIDogJzAnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uRW1wdHlBcnJheSh2YWx1ZXMpIHtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiAwIDwgdmFsdWVzLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSSh1cmwpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUkkodXJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5U3RyaW5nKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHR0ZW1wID0gbnVsbDtcblxuXHRjb25zdCBxdWVyaWVzID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKSxcblx0XHRwYXJhbXMgPSB7fTtcblxuXHRmb3IgKGxlbiA9IHF1ZXJpZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdHRlbXAgPSBxdWVyaWVzW2luZGV4XS5zcGxpdCgnPScpO1xuXHRcdHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQodGVtcFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbiA9IDMyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZU1kNShsZW4gPSAzMikge1xuXHRjb25zdCBsaW5lID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdFx0bGluZUxlbiA9IGxpbmUubGVuZ3RoO1xuXG5cdGxlbiA9IHBJbnQobGVuKTtcblxuXHRsZXQgcmVzdWx0ID0gJyc7XG5cdHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbGVuKSB7XG5cdFx0cmVzdWx0ICs9IGxpbmUuc3Vic3RyKHdpbmRvdy5NYXRoLnJvdW5kKHdpbmRvdy5NYXRoLnJhbmRvbSgpICogbGluZUxlbiksIDEpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUh0bWwodGV4dCkge1xuXHRyZXR1cm4gaXNOb3JtYWwodGV4dCkgPyBfLmVzY2FwZSh0ZXh0LnRvU3RyaW5nKCkpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMTAwXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQbGFpblRleHQodGV4dCwgbGVuID0gMTAwKSB7XG5cdGxldCBwcmVmaXggPSAnJyxcblx0XHRzdWJUZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gdGV4dCxcblx0XHRzcGFjZVBvcyA9IDAsXG5cdFx0bmV3TGluZVBvcyA9IDA7XG5cblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPiBsZW4pIHtcblx0XHRzdWJUZXh0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBsZW4pO1xuXHRcdHNwYWNlUG9zID0gc3ViVGV4dC5sYXN0SW5kZXhPZignICcpO1xuXHRcdG5ld0xpbmVQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCdcXG4nKTtcblxuXHRcdGlmICgtMSAhPT0gbmV3TGluZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBuZXdMaW5lUG9zO1xuXHRcdH1cblxuXHRcdGlmICgtMSA9PT0gc3BhY2VQb3MpIHtcblx0XHRcdHNwYWNlUG9zID0gbGVuO1xuXHRcdH1cblxuXHRcdHByZWZpeCArPSBzdWJUZXh0LnN1YnN0cmluZygwLCBzcGFjZVBvcykgKyAnXFxuJztcblx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKHNwYWNlUG9zICsgMSk7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgcmVzdWx0O1xufVxuXG5jb25zdCB0aW1lT3V0QWN0aW9uID0gKGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aW1lT3V0cyA9IHt9O1xuXHRyZXR1cm4gKGFjdGlvbiwgZkZ1bmN0aW9uLCB0aW1lT3V0KSA9PiB7XG5cdFx0dGltZU91dHNbYWN0aW9uXSA9IGlzVW5kKHRpbWVPdXRzW2FjdGlvbl0pID8gMCA6IHRpbWVPdXRzW2FjdGlvbl07XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aW1lT3V0c1thY3Rpb25dKTtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gd2luZG93LnNldFRpbWVvdXQoZkZ1bmN0aW9uLCB0aW1lT3V0KTtcblx0fTtcbn0pKCk7XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb25TZWNvbmQgPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHRpZiAoIXRpbWVPdXRzW2FjdGlvbl0pIHtcblx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZGdW5jdGlvbigpO1xuXHRcdFx0XHR0aW1lT3V0c1thY3Rpb25dID0gMDtcblx0XHRcdH0sIHRpbWVPdXQpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbmV4cG9ydCB7IHRpbWVPdXRBY3Rpb24sIHRpbWVPdXRBY3Rpb25TZWNvbmQgfTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gbVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlTW9kdWxlKG0pIHtcblx0cmV0dXJuIChtICYmIG0uZGVmYXVsdCA/IG0uZGVmYXVsdCA6IG0pIHx8ICcnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5Gb2N1cygpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdGlmIChpc1VuZCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSkpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGUgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhcblx0XHRcdFx0XHQnaW5wdXQsdGV4dGFyZWEsaWZyYW1lLC5ja2VfZWRpdGFibGUnXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhIXdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUluRm9jdXMoZm9yY2UpIHtcblx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFjdGl2ZUVsID0gJCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cdFx0XHRpZiAoYWN0aXZlRWwgJiYgYWN0aXZlRWwuaXMoJ2lucHV0LHRleHRhcmVhJykpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JjZSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5nZXMpIHtcblx0XHRcdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24gJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuXHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbHlTdWJqZWN0QWRkKHByZWZpeCwgc3ViamVjdCkge1xuXHRwcmVmaXggPSB0cmltKHByZWZpeC50b1VwcGVyQ2FzZSgpKTtcblx0c3ViamVjdCA9IHRyaW0oc3ViamVjdC5yZXBsYWNlKC9bXFxzXSsvZywgJyAnKSk7XG5cblx0bGV0IGRyb3AgPSBmYWxzZSxcblx0XHRyZSA9ICdSRScgPT09IHByZWZpeCxcblx0XHRmd2QgPSAnRldEJyA9PT0gcHJlZml4O1xuXG5cdGNvbnN0IHBhcnRzID0gW10sXG5cdFx0cHJlZml4SXNSZSA9ICFmd2Q7XG5cblx0aWYgKCcnICE9PSBzdWJqZWN0KSB7XG5cdFx0Xy5lYWNoKHN1YmplY3Quc3BsaXQoJzonKSwgKHBhcnQpID0+IHtcblx0XHRcdGNvbnN0IHRyaW1tZWRQYXJ0ID0gdHJpbShwYXJ0KTtcblx0XHRcdGlmICghZHJvcCAmJiAoL14oUkV8RldEKSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSB8fCAvXihSRXxGV0QpW1soXVtcXGRdK1tcXF0pXSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSkpIHtcblx0XHRcdFx0aWYgKCFyZSkge1xuXHRcdFx0XHRcdHJlID0gISEvXlJFL2kudGVzdCh0cmltbWVkUGFydCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWZ3ZCkge1xuXHRcdFx0XHRcdGZ3ZCA9ICEhL15GV0QvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydHMucHVzaChwYXJ0KTtcblx0XHRcdFx0ZHJvcCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJlZml4SXNSZSkge1xuXHRcdHJlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0ZndkID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJpbSgocHJlZml4SXNSZSA/ICdSZTogJyA6ICdGd2Q6ICcpICsgKHJlID8gJ1JlOiAnIDogJycpICsgKGZ3ZCA/ICdGd2Q6ICcgOiAnJykgKyB0cmltKHBhcnRzLmpvaW4oJzonKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZE51bWJlcihudW0sIGRlYykge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobnVtICogd2luZG93Lk1hdGgucG93KDEwLCBkZWMpKSAvIHdpbmRvdy5NYXRoLnBvdygxMCwgZGVjKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZUluQnl0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseVNpemUoc2l6ZUluQnl0ZXMpIHtcblx0c2l6ZUluQnl0ZXMgPSBwSW50KHNpemVJbkJ5dGVzKTtcblxuXHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlIDEwNzM3NDE4MjQgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDczNzQxODI0LCAxKSArICdHQic7XG5cdFx0Y2FzZSAxMDQ4NTc2IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTA0ODU3NiwgMSkgKyAnTUInO1xuXHRcdGNhc2UgMTAyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwMjQsIDApICsgJ0tCJztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gc2l6ZUluQnl0ZXMgKyAnQic7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZyhkZXNjKSB7XG5cdGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpIHtcblx0XHR3aW5kb3cuY29uc29sZS5sb2coZGVzYyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gez99IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEBwYXJhbSB7bnVtYmVyPX0gZGVsYXkgPSAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bihvYmplY3QsIG1ldGhvZE5hbWUsIHBhcmFtcywgZGVsYXkgPSAwKSB7XG5cdGlmIChvYmplY3QgJiYgb2JqZWN0W21ldGhvZE5hbWVdKSB7XG5cdFx0ZGVsYXkgPSBwSW50KGRlbGF5KTtcblx0XHRwYXJhbXMgPSBpc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbXTtcblxuXHRcdGlmICgwID49IGRlbGF5KSB7XG5cdFx0XHRvYmplY3RbbWV0aG9kTmFtZV0oLi4ucGFyYW1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdFx0fSwgZGVsYXkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxDdHJsQUN0cmxTKGV2ZW50KSB7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuXHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG5cdFx0aWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLlMpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIGlmIChrZXkgPT09IEV2ZW50S2V5Q29kZS5BKSB7XG5cdFx0XHRjb25zdCBzZW5kZXIgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VuZGVyICYmXG5cdFx0XHRcdCgndHJ1ZScgPT09ICcnICsgc2VuZGVyLmNvbnRlbnRFZGl0YWJsZSB8fCAoc2VuZGVyLnRhZ05hbWUgJiYgc2VuZGVyLnRhZ05hbWUubWF0Y2goL0lOUFVUfFRFWFRBUkVBL2kpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNsZWFyKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhPYmplY3R8bnVsbHx1bmRlZmluZWQpfSBjb250ZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExlZ2FjeShjb250ZXh0LCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdGxldCBmUmVzdWx0ID0gbnVsbDtcblx0Y29uc3QgZk5vbkVtcHR5ID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoZlJlc3VsdCAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUgJiYgZlJlc3VsdC5jYW5FeGVjdXRlKCkpIHtcblx0XHRcdGZFeGVjdXRlLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0ZlJlc3VsdCA9IGZFeGVjdXRlID8gZk5vbkVtcHR5IDogbm9vcDtcblx0ZlJlc3VsdC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0ZlJlc3VsdC5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdGlmIChpc0Z1bmMoZkNhbkV4ZWN1dGUpKSB7XG5cdFx0ZlJlc3VsdC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gZlJlc3VsdCAmJiBmUmVzdWx0LmVuYWJsZWQoKSAmJiBmQ2FuRXhlY3V0ZS5jYWxsKGNvbnRleHQpKTtcblx0fSBlbHNlIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmICEhZkNhbkV4ZWN1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGZSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRoZW1lTmFtZSA9IF8ubWVtb2l6ZSgodGhlbWUpID0+IHtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHR9XG5cblx0cmV0dXJuIHRyaW0oXG5cdFx0dGhlbWVcblx0XHRcdC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJylcblx0XHRcdC5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKVxuXHRcdFx0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpXG5cdCk7XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlTmFtZShuYW1lKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1tcIl0vZywgJ1xcXFxcIicpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWNyb3RpbWUoKSB7XG5cdHJldHVybiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcblx0cmV0dXJuIHdpbmRvdy5NYXRoLnJvdW5kKG1pY3JvdGltZSgpIC8gMTAwMCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNFbmcgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgaXNFbmcgPSBmYWxzZSkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKFxuXHRcdCdMQU5HU19OQU1FUycgKyAodHJ1ZSA9PT0gaXNFbmcgPyAnX0VOJyA6ICcnKSArICcvTEFOR18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICdfJyksXG5cdFx0bnVsbCxcblx0XHRsYW5ndWFnZVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVQbGFjZSgpIHtcblx0cmV0dXJuICQoXG5cdFx0JzxkaXYgY2xhc3M9XCJkcmFnZ2FibGVQbGFjZVwiPicgK1xuXHRcdFx0JzxzcGFuIGNsYXNzPVwidGV4dFwiPjwvc3Bhbj4mbmJzcDsnICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tY29weSBpY29uLXdoaXRlIHZpc2libGUtb24tY3RybFwiPjwvaT4nICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tbWFpbCBpY29uLXdoaXRlIGhpZGRlbi1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzwvZGl2Pidcblx0KS5hcHBlbmRUbygnI3JsLWhpZGRlbicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkb21PcHRpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcihkb21JdGVtLCBpdGVtKSB7XG5cdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmRpc2FibGVkKSAmJiBkb21JdGVtKSB7XG5cdFx0JChkb21JdGVtKVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBpdGVtLmRpc2FibGVkKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJxU3dpdGNoZXIoYm9keSkge1xuXHRib2R5LmZpbmQoJ2Jsb2NrcXVvdGUucmwtYnEtc3dpdGNoZXInKS5yZW1vdmVDbGFzcygncmwtYnEtc3dpdGNoZXIgaGlkZGVuLWJxJyk7XG5cdGJvZHlcblx0XHQuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHQub2ZmKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5yZW1vdmUoKTtcblx0Ym9keS5maW5kKCdbZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXJdJykucmVtb3ZlQXR0cignZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXInKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbWVzc2FnZURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHRtbFxuICogQHBhcmFtIHtib29sZWFufSBwcmludFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aWV3TWVzc2FnZShcblx0eyB0aXRsZSwgc3ViamVjdCwgZGF0ZSwgZnJvbUNyZWRzLCB0b0NyZWRzLCB0b0xhYmVsLCBjY0NsYXNzLCBjY0NyZWRzLCBjY0xhYmVsIH0sXG5cdGJvZHksXG5cdGlzSHRtbCxcblx0cHJpbnRcbikge1xuXHRjb25zdCB3aW4gPSB3aW5kb3cub3BlbignJyksXG5cdFx0ZG9jID0gd2luLmRvY3VtZW50LFxuXHRcdGJvZHlDbG9uZSA9IGJvZHkuY2xvbmUoKSxcblx0XHRib2R5Q2xhc3MgPSBpc0h0bWwgPyAnaHRtbCcgOiAncGxhaW4nO1xuXG5cdGNsZWFyQnFTd2l0Y2hlcihib2R5Q2xvbmUpO1xuXG5cdGNvbnN0IGh0bWwgPSBib2R5Q2xvbmUgPyBib2R5Q2xvbmUuaHRtbCgpIDogJyc7XG5cblx0ZG9jLndyaXRlKFxuXHRcdGRlTW9kdWxlKHJlcXVpcmUoJ0h0bWwvUHJldmlld01lc3NhZ2UuaHRtbCcpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVuY29kZUh0bWwodGl0bGUpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7c3ViamVjdH19JywgZW5jb2RlSHRtbChzdWJqZWN0KSlcblx0XHRcdC5yZXBsYWNlKCd7e2RhdGV9fScsIGVuY29kZUh0bWwoZGF0ZSkpXG5cdFx0XHQucmVwbGFjZSgne3tmcm9tQ3JlZHN9fScsIGVuY29kZUh0bWwoZnJvbUNyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvQ3JlZHN9fScsIGVuY29kZUh0bWwodG9DcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3t0b0xhYmVsfX0nLCBlbmNvZGVIdG1sKHRvTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDbGFzc319JywgZW5jb2RlSHRtbChjY0NsYXNzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjQ3JlZHN9fScsIGVuY29kZUh0bWwoY2NDcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3tjY0xhYmVsfX0nLCBlbmNvZGVIdG1sKGNjTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Ym9keUNsYXNzfX0nLCBib2R5Q2xhc3MpXG5cdFx0XHQucmVwbGFjZSgne3todG1sfX0nLCBodG1sKVxuXHQpO1xuXG5cdGRvYy5jbG9zZSgpO1xuXG5cdGlmIChwcmludCkge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbi5wcmludCgpLCAxMDApO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKiBAcGFyYW0gez99IGtvVHJpZ2dlclxuICogQHBhcmFtIHs/fSBjb250ZXh0ID0gbnVsbFxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lciA9IDEwMDBcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKGZDYWxsYmFjaywga29UcmlnZ2VyLCBjb250ZXh0ID0gbnVsbCwgdGltZXIgPSAxMDAwKSB7XG5cdHRpbWVyID0gcEludCh0aW1lcik7XG5cdHJldHVybiAodHlwZSwgZGF0YSwgY2FjaGVkLCByZXF1ZXN0QWN0aW9uLCByZXF1ZXN0UGFyYW1ldGVycykgPT4ge1xuXHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIGRhdGEgJiYgZGF0YS5SZXN1bHQgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2suY2FsbChjb250ZXh0LCB0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRrb1RyaWdnZXIuY2FsbChjb250ZXh0LCBTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdH0sIHRpbWVyKTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0ga29UcmlnZ2VyXG4gKiBAcGFyYW0ge21peGVkfSBjb250ZXh0XG4gKiBAcmV0dXJucyB7bWl4ZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbihrb1RyaWdnZXIsIGNvbnRleHQpIHtcblx0cmV0dXJuIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKG51bGwsIGtvVHJpZ2dlciwgY29udGV4dCwgMTAwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlbW90ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gZlRyaWdnZXJGdW5jdGlvblxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24ocmVtb3RlLCBzZXR0aW5nTmFtZSwgdHlwZSwgZlRyaWdnZXJGdW5jdGlvbikge1xuXHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHJlbW90ZSkge1xuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID8gJzEnIDogJzAnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHBJbnQodmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0cmltJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHRyaW0odmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHZhbHVlID0gcFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFbc2V0dGluZ05hbWVdID0gdmFsdWU7XG5cblx0XHRcdGlmIChyZW1vdGUuc2F2ZUFkbWluQ29uZmlnKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlQWRtaW5Db25maWcoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH0gZWxzZSBpZiAocmVtb3RlLnNhdmVTZXR0aW5ncykge1xuXHRcdFx0XHRyZW1vdGUuc2F2ZVNldHRpbmdzKGZUcmlnZ2VyRnVuY3Rpb24gfHwgbnVsbCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVtYWlsQW5kTGlua3MoaHRtbCkge1xuXHRyZXR1cm4gQXV0b2xpbmtlclxuXHRcdD8gQXV0b2xpbmtlci5saW5rKGh0bWwsIHtcblx0XHRcdFx0bmV3V2luZG93OiB0cnVlLFxuXHRcdFx0XHRzdHJpcFByZWZpeDogZmFsc2UsXG5cdFx0XHRcdHVybHM6IHRydWUsXG5cdFx0XHRcdGVtYWlsOiB0cnVlLFxuXHRcdFx0XHRtZW50aW9uOiBmYWxzZSxcblx0XHRcdFx0cGhvbmU6IGZhbHNlLFxuXHRcdFx0XHRoYXNodGFnOiBmYWxzZSxcblx0XHRcdFx0cmVwbGFjZUZuOiBmdW5jdGlvbihtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiAhKG1hdGNoICYmICd1cmwnID09PSBtYXRjaC5nZXRUeXBlKCkgJiYgbWF0Y2gubWF0Y2hlZFRleHQgJiYgMCAhPT0gbWF0Y2gubWF0Y2hlZFRleHQuaW5kZXhPZignaHR0cCcpKTtcblx0XHRcdFx0fVxuXHRcdCAgfSlcblx0XHQ6IGh0bWw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sVG9QbGFpbihodG1sKSB7XG5cdGxldCBwb3MgPSAwLFxuXHRcdGxpbWl0ID0gMCxcblx0XHRpUDEgPSAwLFxuXHRcdGlQMiA9IDAsXG5cdFx0aVAzID0gMCxcblx0XHR0ZXh0ID0gJyc7XG5cblx0Y29uc3QgY29udmVydEJsb2NrcXVvdGUgPSAoYmxvY2txdW90ZVRleHQpID0+IHtcblx0XHRibG9ja3F1b3RlVGV4dCA9ICc+ICcgKyB0cmltKGJsb2NrcXVvdGVUZXh0KS5yZXBsYWNlKC9cXG4vZ20sICdcXG4+ICcpO1xuXHRcdHJldHVybiBibG9ja3F1b3RlVGV4dC5yZXBsYWNlKC8oXnxcXG4pKFs+IF0rKS9nbSwgKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDIgPCBhcmdzLmxlbmd0aCA/IGFyZ3NbMV0gKyB0cmltKGFyZ3NbMl0ucmVwbGFjZSgvW1xcc10vZywgJycpKSArICcgJyA6ICcnXG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0RGl2cyA9ICguLi5hcmdzKSA9PiB7XG5cdFx0aWYgKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRsZXQgZGl2VGV4dCA9IHRyaW0oYXJnc1sxXSk7XG5cdFx0XHRpZiAoMCA8IGRpdlRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdGRpdlRleHQgPSBkaXZUZXh0LnJlcGxhY2UoLzxkaXZbXj5dKj4oW1xcc1xcU1xcclxcbl0qKTxcXC9kaXY+L2dpbSwgY29udmVydERpdnMpO1xuXHRcdFx0XHRkaXZUZXh0ID0gJ1xcbicgKyB0cmltKGRpdlRleHQpICsgJ1xcbic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXZUZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0UHJlID0gKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDEgPCBhcmdzLmxlbmd0aFxuXHRcdFx0XHQ/IGFyZ3NbMV1cblx0XHRcdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xcbl0vZ20sICc8YnIgLz4nKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1tcXHJdL2dtLCAnJylcblx0XHRcdFx0OiAnJyxcblx0XHRmaXhBdHRpYnV0ZVZhbHVlID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/ICcnICsgYXJnc1sxXSArIF8uZXNjYXBlKGFyZ3NbMl0pIDogJycpLFxuXHRcdGNvbnZlcnRMaW5rcyA9ICguLi5hcmdzKSA9PiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGggPyB0cmltKGFyZ3NbMV0pIDogJycpO1xuXG5cdHRleHQgPSBodG1sXG5cdFx0LnJlcGxhY2UoLzxwW14+XSo+PFxcL3A+L2dpLCAnJylcblx0XHQucmVwbGFjZSgvPHByZVtePl0qPihbXFxzXFxTXFxyXFxuXFx0XSopPFxcL3ByZT4vZ2ltLCBjb252ZXJ0UHJlKVxuXHRcdC5yZXBsYWNlKC9bXFxzXSsvZ20sICcgJylcblx0XHQucmVwbGFjZSgvKCg/OmhyZWZ8ZGF0YSlcXHM/PVxccz8pKFwiW15cIl0rP1wifCdbXiddKz8nKS9naW0sIGZpeEF0dGlidXRlVmFsdWUpXG5cdFx0LnJlcGxhY2UoLzxicltePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvaFtcXGRdPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9wPi9naSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLzx1bFtePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdWw+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGxpW14+XSo+L2dpbSwgJyAqICcpXG5cdFx0LnJlcGxhY2UoLzxcXC9saT4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdGQ+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3RyPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxocltePl0qPi9naW0sICdcXG5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cylcblx0XHQucmVwbGFjZSgvPGJsb2NrcXVvdGVbXj5dKj4vZ2ltLCAnXFxuX19icV9fc3RhcnRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9ibG9ja3F1b3RlPi9naW0sICdcXG5fX2JxX19lbmRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxhIFtePl0qPihbXFxzXFxTXFxyXFxuXSo/KTxcXC9hPi9naW0sIGNvbnZlcnRMaW5rcylcblx0XHQucmVwbGFjZSgvPFxcL2Rpdj4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJylcblx0XHQucmVwbGFjZSgvJnF1b3Q7L2dpLCAnXCInKVxuXHRcdC5yZXBsYWNlKC88W14+XSo+L2dtLCAnJyk7XG5cblx0dGV4dCA9ICRkaXYuaHRtbCh0ZXh0KS50ZXh0KCk7XG5cblx0dGV4dCA9IHRleHRcblx0XHQucmVwbGFjZSgvXFxuWyBcXHRdKy9nbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoL1tcXG5dezMsfS9nbSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLyZndDsvZ2ksICc+Jylcblx0XHQucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuXHRcdC5yZXBsYWNlKC8mYW1wOy9naSwgJyYnKTtcblxuXHR0ZXh0ID0gc3BsaXRQbGFpblRleHQodGV4dCk7XG5cblx0cG9zID0gMDtcblx0bGltaXQgPSA4MDA7XG5cblx0d2hpbGUgKDAgPCBsaW1pdCkge1xuXHRcdGxpbWl0IC09IDE7XG5cdFx0aVAxID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgcG9zKTtcblx0XHRpZiAoLTEgPCBpUDEpIHtcblx0XHRcdGlQMiA9IHRleHQuaW5kZXhPZignX19icV9fc3RhcnRfXycsIGlQMSArIDUpO1xuXHRcdFx0aVAzID0gdGV4dC5pbmRleE9mKCdfX2JxX19lbmRfXycsIGlQMSArIDUpO1xuXG5cdFx0XHRpZiAoKC0xID09PSBpUDIgfHwgaVAzIDwgaVAyKSAmJiBpUDEgPCBpUDMpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlQMSkgKyBjb252ZXJ0QmxvY2txdW90ZSh0ZXh0LnN1YnN0cmluZyhpUDEgKyAxMywgaVAzKSkgKyB0ZXh0LnN1YnN0cmluZyhpUDMgKyAxMSk7XG5cblx0XHRcdFx0cG9zID0gMDtcblx0XHRcdH0gZWxzZSBpZiAoLTEgPCBpUDIgJiYgaVAyIDwgaVAzKSB7XG5cdFx0XHRcdHBvcyA9IGlQMiAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX2JxX19zdGFydF9fL2dtLCAnJykucmVwbGFjZSgvX19icV9fZW5kX18vZ20sICcnKTtcblxuXHRyZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluZEVtYWlsQW5kTGlua3NJblRleHQgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYWluVG9IdG1sKHBsYWluLCBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlKSB7XG5cdHBsYWluID0gcGxhaW4udG9TdHJpbmcoKS5yZXBsYWNlKC9cXHIvZywgJycpO1xuXHRwbGFpbiA9IHBsYWluLnJlcGxhY2UoL14+Wz4gXT4rL2dtLCAoW21hdGNoXSkgPT4gKG1hdGNoID8gbWF0Y2gucmVwbGFjZSgvWyBdKy9nLCAnJykgOiBtYXRjaCkpO1xuXG5cdGxldCBiSW4gPSBmYWxzZSxcblx0XHRiRG8gPSB0cnVlLFxuXHRcdGJTdGFydCA9IHRydWUsXG5cdFx0YU5leHRUZXh0ID0gW10sXG5cdFx0c0xpbmUgPSAnJyxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGFUZXh0ID0gcGxhaW4uc3BsaXQoJ1xcbicpO1xuXG5cdGRvIHtcblx0XHRiRG8gPSBmYWxzZTtcblx0XHRhTmV4dFRleHQgPSBbXTtcblx0XHRmb3IgKGlJbmRleCA9IDA7IGlJbmRleCA8IGFUZXh0Lmxlbmd0aDsgaUluZGV4KyspIHtcblx0XHRcdHNMaW5lID0gYVRleHRbaUluZGV4XTtcblx0XHRcdGJTdGFydCA9ICc+JyA9PT0gc0xpbmUuc3Vic3RyKDAsIDEpO1xuXHRcdFx0aWYgKGJTdGFydCAmJiAhYkluKSB7XG5cdFx0XHRcdGJEbyA9IHRydWU7XG5cdFx0XHRcdGJJbiA9IHRydWU7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn5ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lLnN1YnN0cigxKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiU3RhcnQgJiYgYkluKSB7XG5cdFx0XHRcdGlmICgnJyAhPT0gc0xpbmUpIHtcblx0XHRcdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+L2Jsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYkluKSB7XG5cdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdH1cblxuXHRcdGFUZXh0ID0gYU5leHRUZXh0O1xuXHR9IHdoaWxlIChiRG8pO1xuXG5cdHBsYWluID0gYVRleHQuam9pbignXFxuJyk7XG5cblx0cGxhaW4gPSBwbGFpblxuXHRcdC8vIC5yZXBsYWNlKC9+fn5cXC9ibG9ja3F1b3Rlfn5+XFxufn5+YmxvY2txdW90ZX5+fi9nLCAnXFxuJylcblx0XHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuXHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0LnJlcGxhY2UoL35+fmJsb2NrcXVvdGV+fn5bXFxzXSovZywgJzxibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKn5+flxcL2Jsb2NrcXVvdGV+fn4vZywgJzwvYmxvY2txdW90ZT4nKVxuXHRcdC5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpO1xuXG5cdHJldHVybiBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA/IGZpbmRFbWFpbEFuZExpbmtzKHBsYWluKSA6IHBsYWluO1xufVxuXG53aW5kb3dbJ3JhaW5sb29wX1V0aWxzX2h0bWxUb1BsYWluJ10gPSBodG1sVG9QbGFpbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfcGxhaW5Ub0h0bWwnXSA9IHBsYWluVG9IdG1sOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFTeXN0ZW1cbiAqIEBwYXJhbSB7QXJyYXl9IGFMaXN0XG4gKiBAcGFyYW0ge0FycmF5PX0gYURpc2FibGVkXG4gKiBAcGFyYW0ge0FycmF5PX0gYUhlYWRlckxpbmVzXG4gKiBAcGFyYW0gez9udW1iZXI9fSBpVW5EZWVwXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkRpc2FibGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZWaXNpYmxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmUmVuYW1lQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJTeXN0ZW1cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJCdWlsZFVudmlzaWJsZVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRhU3lzdGVtLFxuXHRhTGlzdCxcblx0YURpc2FibGVkLFxuXHRhSGVhZGVyTGluZXMsXG5cdGlVbkRlZXAsXG5cdGZEaXNhYmxlQ2FsbGJhY2ssXG5cdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdGZSZW5hbWVDYWxsYmFjayxcblx0YlN5c3RlbSxcblx0YkJ1aWxkVW52aXNpYmxlXG4pIHtcblx0bGV0IC8qKlxuXHRcdCAqIEB0eXBlIHs/Rm9sZGVyTW9kZWx9XG5cdFx0ICovXG5cdFx0b0l0ZW0gPSBudWxsLFxuXHRcdGJTZXAgPSBmYWxzZSxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGlMZW4gPSAwLFxuXHRcdGFSZXN1bHQgPSBbXTtcblxuXHRjb25zdCBzRGVlcFByZWZpeCA9ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTAnO1xuXG5cdGJCdWlsZFVudmlzaWJsZSA9IGlzVW5kKGJCdWlsZFVudmlzaWJsZSkgPyBmYWxzZSA6ICEhYkJ1aWxkVW52aXNpYmxlO1xuXHRiU3lzdGVtID0gIWlzTm9ybWFsKGJTeXN0ZW0pID8gMCA8IGFTeXN0ZW0ubGVuZ3RoIDogYlN5c3RlbTtcblx0aVVuRGVlcCA9ICFpc05vcm1hbChpVW5EZWVwKSA/IDAgOiBpVW5EZWVwO1xuXHRmRGlzYWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZkRpc2FibGVDYWxsYmFjaykgPyBmRGlzYWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlZpc2libGVDYWxsYmFjayA9IGlzTm9ybWFsKGZWaXNpYmxlQ2FsbGJhY2spID8gZlZpc2libGVDYWxsYmFjayA6IG51bGw7XG5cdGZSZW5hbWVDYWxsYmFjayA9IGlzTm9ybWFsKGZSZW5hbWVDYWxsYmFjaykgPyBmUmVuYW1lQ2FsbGJhY2sgOiBudWxsO1xuXG5cdGlmICghaXNBcnJheShhRGlzYWJsZWQpKSB7XG5cdFx0YURpc2FibGVkID0gW107XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYUhlYWRlckxpbmVzKSkge1xuXHRcdGFIZWFkZXJMaW5lcyA9IFtdO1xuXHR9XG5cblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYUhlYWRlckxpbmVzLmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0aWQ6IGFIZWFkZXJMaW5lc1tpSW5kZXhdWzBdLFxuXHRcdFx0bmFtZTogYUhlYWRlckxpbmVzW2lJbmRleF1bMV0sXG5cdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFTeXN0ZW0ubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdG9JdGVtID0gYVN5c3RlbVtpSW5kZXhdO1xuXHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0bmFtZTogZlJlbmFtZUNhbGxiYWNrID8gZlJlbmFtZUNhbGxiYWNrKG9JdGVtKSA6IG9JdGVtLm5hbWUoKSxcblx0XHRcdFx0c3lzdGVtOiB0cnVlLFxuXHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHQhb0l0ZW0uc2VsZWN0YWJsZSB8fFxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJTZXAgPSB0cnVlO1xuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhTGlzdC5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhTGlzdFtpSW5kZXhdO1xuXHRcdC8vIGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKVxuXHRcdGlmIChcblx0XHRcdChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKSAmJlxuXHRcdFx0KG9JdGVtLnNlbGVjdGFibGUgfHwgb0l0ZW0uaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSlcblx0XHQpIHtcblx0XHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRcdGlmIChGb2xkZXJUeXBlLlVzZXIgPT09IG9JdGVtLnR5cGUoKSB8fCAhYlN5c3RlbSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKSB7XG5cdFx0XHRcdFx0aWYgKGJTZXAgJiYgMCA8IGFSZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICctLS0nLFxuXHRcdFx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRiU2VwID0gZmFsc2U7XG5cdFx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG5hbWU6XG5cdFx0XHRcdFx0XHRcdG5ldyB3aW5kb3cuQXJyYXkob0l0ZW0uZGVlcCArIDEgLSBpVW5EZWVwKS5qb2luKHNEZWVwUHJlZml4KSArXG5cdFx0XHRcdFx0XHRcdChmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpKSxcblx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdFx0XHQoZkRpc2FibGVDYWxsYmFjayA/IGZEaXNhYmxlQ2FsbGJhY2sob0l0ZW0pIDogZmFsc2UpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob0l0ZW0uc3ViU2NyaWJlZCgpICYmIDAgPCBvSXRlbS5zdWJGb2xkZXJzKCkubGVuZ3RoKSB7XG5cdFx0XHRhUmVzdWx0ID0gYVJlc3VsdC5jb25jYXQoXG5cdFx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRvSXRlbS5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0YURpc2FibGVkLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdGlVbkRlZXAsXG5cdFx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayxcblx0XHRcdFx0XHRmVmlzaWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZSZW5hbWVDYWxsYmFjayxcblx0XHRcdFx0XHRiU3lzdGVtLFxuXHRcdFx0XHRcdGJCdWlsZFVudmlzaWJsZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZWxlbWVudCkge1xuXHRsZXQgc2VsID0gbnVsbCxcblx0XHRyYW5nZSA9IG51bGw7XG5cblx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuXHRcdHNlbC5hZGRSYW5nZShyYW5nZSk7XG5cdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0cmFuZ2UubW92ZVRvRWxlbWVudFRleHQoZWxlbWVudCk7XG5cdFx0cmFuZ2Uuc2VsZWN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRkcm9wZG93blZpc2liaWxpdHkoISFfLmZpbmQoR2xvYmFsc0RhdGEuYUJvb3RzdHJhcERyb3Bkb3ducywgKGl0ZW0pID0+IGl0ZW0uaGFzQ2xhc3MoJ29wZW4nKSkpO1xufSwgNTApO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlbGF5ID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZShkZWxheSA9IGZhbHNlKSB7XG5cdGNvbnN0IGZGdW5jID0gKCkgPT4ge1xuXHRcdCQoJy5jaGVja0F1dG9jb21wbGV0ZScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHR9O1xuXG5cdGlmIChkZWxheSkge1xuXHRcdF8uZGVsYXkoZkZ1bmMsIDEwMCk7XG5cdH0gZWxzZSB7XG5cdFx0ZkZ1bmMoKTtcblx0fVxufVxuXG5jb25zdCBjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnKGNvbmZpZ3VyYXRpb24pIHtcblx0aWYgKCFjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0pIHtcblx0XHRjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0gPSAkKFxuXHRcdFx0J3NjcmlwdFt0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXVtkYXRhLWNvbmZpZ3VyYXRpb249XCInICsgY29uZmlndXJhdGlvbiArICdcIl0nXG5cdFx0KTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dLnRleHQoKSk7XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHttaXhlZH0gbVByb3BPclZhbHVlXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZU9uZShwcm9wT3JWYWx1ZSwgdmFsdWUpIHtcblx0Y29uc3QgZGlzcG9zYWJsZSA9IHZhbHVlIHx8IHByb3BPclZhbHVlO1xuXHRpZiAoZGlzcG9zYWJsZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZGlzcG9zYWJsZS5kaXNwb3NlKSB7XG5cdFx0ZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT2JqZWN0KG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0LmRpc3Bvc2FibGVzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdC5kaXNwb3NhYmxlcywgZGlzcG9zZU9uZSk7XG5cdFx0fVxuXG5cdFx0a28udXRpbHMub2JqZWN0Rm9yRWFjaChvYmplY3QsIGRpc3Bvc2VPbmUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iamVjdE9yT2JqZWN0c1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvYmplY3RPck9iamVjdHMpIHtcblx0aWYgKG9iamVjdE9yT2JqZWN0cykge1xuXHRcdGlmIChpc0FycmF5KG9iamVjdE9yT2JqZWN0cykpIHtcblx0XHRcdF8uZWFjaChvYmplY3RPck9iamVjdHMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGl0ZW0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RPck9iamVjdHMgJiYgb2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSkge1xuXHRcdFx0b2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSAkc3R5bGVUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU3R5bGVzKCRzdHlsZVRhZywgY3NzKSB7XG5cdGlmICgkc3R5bGVUYWcgJiYgJHN0eWxlVGFnWzBdKSB7XG5cdFx0aWYgKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0ICYmICFpc1VuZCgkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0KSkge1xuXHRcdFx0JHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN0eWxlVGFnLnRleHQoY3NzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxubGV0IF9fdGhlbWVUaW1lciA9IDAsXG5cdF9fdGhlbWVBamF4ID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb249fSB0aGVtZVRyaWdnZXIgPSBub29wXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRoZW1lKHZhbHVlLCB0aGVtZVRyaWdnZXIgPSBub29wKSB7XG5cdGNvbnN0IHRoZW1lTGluayA9ICQoJyNhcHAtdGhlbWUtbGluaycpLFxuXHRcdGNsZWFyVGltZXIgPSAoKSA9PiB7XG5cdFx0XHRfX3RoZW1lVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgMTAwMCk7XG5cdFx0XHRfX3RoZW1lQWpheCA9IG51bGw7XG5cdFx0fTtcblxuXHRsZXQgdGhlbWVTdHlsZSA9ICQoJyNhcHAtdGhlbWUtc3R5bGUnKSxcblx0XHR1cmwgPSB0aGVtZUxpbmsuYXR0cignaHJlZicpO1xuXG5cdGlmICghdXJsKSB7XG5cdFx0dXJsID0gdGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnKTtcblx0fVxuXG5cdGlmICh1cmwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8tXFwvW14vXStcXC8tXFwvLywgJy8tLycgKyB2YWx1ZSArICcvLS8nKTtcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvXFwvQ3NzXFwvW14vXStcXC9Vc2VyXFwvLywgJy9Dc3MvMC9Vc2VyLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9IYXNoXFwvW14vXStcXC8vLCAnL0hhc2gvLS8nKTtcblxuXHRcdGlmICgnSnNvbi8nICE9PSB1cmwuc3Vic3RyaW5nKHVybC5sZW5ndGggLSA1LCB1cmwubGVuZ3RoKSkge1xuXHRcdFx0dXJsICs9ICdKc29uLyc7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dChfX3RoZW1lVGltZXIpO1xuXG5cdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cblx0XHRpZiAoX190aGVtZUFqYXggJiYgX190aGVtZUFqYXguYWJvcnQpIHtcblx0XHRcdF9fdGhlbWVBamF4LmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0X190aGVtZUFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nXG5cdFx0fSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGlzQXJyYXkoZGF0YSkgJiYgMiA9PT0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAodGhlbWVMaW5rICYmIHRoZW1lTGlua1swXSAmJiAoIXRoZW1lU3R5bGUgfHwgIXRoZW1lU3R5bGVbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGVtZVN0eWxlID0gJCgnPHN0eWxlIGlkPVwiYXBwLXRoZW1lLXN0eWxlXCI+PC9zdHlsZT4nKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5hZnRlcih0aGVtZVN0eWxlKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGhlbWVTdHlsZSAmJiB0aGVtZVN0eWxlWzBdKSB7XG5cdFx0XHRcdFx0XHRpZiAoYXBwZW5kU3R5bGVzKHRoZW1lU3R5bGUsIGRhdGFbMV0pKSB7XG5cdFx0XHRcdFx0XHRcdHRoZW1lU3R5bGUuYXR0cignZGF0YS1ocmVmJywgdXJsKS5hdHRyKCdkYXRhLXRoZW1lJywgZGF0YVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQudGhlbihjbGVhclRpbWVyLCBjbGVhclRpbWVyKTtcblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyKGtvQ3VycmVudFBhZ2UsIGtvUGFnZUNvdW50KSB7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSBrb0N1cnJlbnRQYWdlKCksXG5cdFx0XHRwYWdlQ291bnQgPSBrb1BhZ2VDb3VudCgpLFxuXHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRmQWRkID0gKGluZGV4LCBwdXNoID0gdHJ1ZSwgY3VzdG9tTmFtZSA9ICcnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdFx0Y3VycmVudDogaW5kZXggPT09IGN1cnJlbnRQYWdlLFxuXHRcdFx0XHRcdG5hbWU6ICcnID09PSBjdXN0b21OYW1lID8gaW5kZXgudG9TdHJpbmcoKSA6IGN1c3RvbU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRjdXN0b206ICcnICE9PSBjdXN0b21OYW1lLFxuXHRcdFx0XHRcdHRpdGxlOiAnJyA9PT0gY3VzdG9tTmFtZSA/ICcnIDogaW5kZXgudG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2YWx1ZTogaW5kZXgudG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChwdXNoKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LnVuc2hpZnQoZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRsZXQgcHJldiA9IDAsXG5cdFx0XHRuZXh0ID0gMCxcblx0XHRcdGxpbWl0ID0gMjtcblxuXHRcdGlmICgxIDwgcGFnZUNvdW50IHx8ICgwIDwgcGFnZUNvdW50ICYmIHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSkge1xuXHRcdFx0aWYgKHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50KTtcblx0XHRcdFx0cHJldiA9IHBhZ2VDb3VudDtcblx0XHRcdFx0bmV4dCA9IHBhZ2VDb3VudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgzID49IGN1cnJlbnRQYWdlIHx8IHBhZ2VDb3VudCAtIDIgPD0gY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0XHRsaW1pdCArPSAyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZkFkZChjdXJyZW50UGFnZSk7XG5cdFx0XHRcdHByZXYgPSBjdXJyZW50UGFnZTtcblx0XHRcdFx0bmV4dCA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0XHRcdHByZXYgLT0gMTtcblx0XHRcdFx0bmV4dCArPSAxO1xuXG5cdFx0XHRcdGlmICgwIDwgcHJldikge1xuXHRcdFx0XHRcdGZBZGQocHJldiwgZmFsc2UpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFnZUNvdW50ID49IG5leHQpIHtcblx0XHRcdFx0XHRmQWRkKG5leHQsIHRydWUpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoMCA+PSBwcmV2KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKDMgPT09IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKDMgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocHJldiAtIDEpIC8gMiksIGZhbHNlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgLSAyID09PSBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50IC0gMSwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VDb3VudCAtIDIgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocGFnZUNvdW50ICsgbmV4dCkgLyAyKSwgdHJ1ZSwgJy4uLicpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmaXJzdCBhbmQgbGFzdFxuXHRcdFx0aWYgKDEgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoMSwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFnZUNvdW50ID4gbmV4dCkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB7XG5cdGZpbGVOYW1lID0gdHJpbShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuXHRjb25zdCByZXN1bHQgPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuXHRyZXR1cm4gcmVzdWx0ID09PSBmaWxlTmFtZSA/ICcnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbWVDb250ZW50VHlwZShmaWxlTmFtZSkge1xuXHRsZXQgZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmICgnd2lubWFpbC5kYXQnID09PSBmaWxlTmFtZSkge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vbXMtdG5lZic7XG5cdH1cblxuXHRleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcblx0aWYgKGV4dCAmJiAwIDwgZXh0Lmxlbmd0aCAmJiAhaXNVbmQoTWltZVtleHRdKSkge1xuXHRcdHJlc3VsdCA9IE1pbWVbZXh0XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNwYXJlbnQoY29sb3IpIHtcblx0cmV0dXJuICdyZ2JhKDAsIDAsIDAsIDApJyA9PT0gY29sb3IgfHwgJ3RyYW5zcGFyZW50JyA9PT0gY29sb3I7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9ICRlbFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxIZWlnaHQoJGVsKSB7XG5cdCRlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LnNob3coKVxuXHRcdC5hcHBlbmRUbygkaGNvbnQpO1xuXHRjb25zdCByZXN1bHQgPSAkaGNvbnQuaGVpZ2h0KCk7XG5cdCRoY29udC5lbXB0eSgpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVBbmRDcm9wKHVybCwgdmFsdWUsIGZDYWxsYmFjaykge1xuXHRjb25zdCBpbWcgPSBuZXcgd2luZG93LkltYWdlKCk7XG5cdGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRsZXQgZGlmZiA9IFswLCAwXTtcblxuXHRcdGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcblx0XHRcdGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0Y2FudmFzLndpZHRoID0gdmFsdWU7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMud2lkdGggPiB0aGlzLmhlaWdodCkge1xuXHRcdFx0ZGlmZiA9IFt0aGlzLndpZHRoIC0gdGhpcy5oZWlnaHQsIDBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWZmID0gWzAsIHRoaXMuaGVpZ2h0IC0gdGhpcy53aWR0aF07XG5cdFx0fVxuXG5cdFx0Y3R4LmZpbGxTdHlsZSA9ICcjZmZmJztcblx0XHRjdHguZmlsbFJlY3QoMCwgMCwgdmFsdWUsIHZhbHVlKTtcblx0XHRjdHguZHJhd0ltYWdlKHRoaXMsIGRpZmZbMF0gLyAyLCBkaWZmWzFdIC8gMiwgdGhpcy53aWR0aCAtIGRpZmZbMF0sIHRoaXMuaGVpZ2h0IC0gZGlmZlsxXSwgMCwgMCwgdmFsdWUsIHZhbHVlKTtcblxuXHRcdGZDYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykpO1xuXHR9O1xuXG5cdGltZy5zcmMgPSB1cmw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1haWxUb1VybFxuICogQHBhcmFtIHtGdW5jdGlvbn0gUG9wdXBDb21wb3NlVmlld01vZGVsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxUb0hlbHBlcihtYWlsVG9VcmwsIFBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRpZiAoXG5cdFx0bWFpbFRvVXJsICYmXG5cdFx0J21haWx0bzonID09PVxuXHRcdFx0bWFpbFRvVXJsXG5cdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdC5zdWJzdHIoMCwgNylcblx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0KSB7XG5cdFx0aWYgKCFQb3B1cENvbXBvc2VWaWV3TW9kZWwpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdG1haWxUb1VybCA9IG1haWxUb1VybC50b1N0cmluZygpLnN1YnN0cig3KTtcblxuXHRcdGxldCB0byA9IFtdLFxuXHRcdFx0Y2MgPSBudWxsLFxuXHRcdFx0YmNjID0gbnVsbCxcblx0XHRcdHBhcmFtcyA9IHt9O1xuXG5cdFx0Y29uc3QgZW1haWwgPSBtYWlsVG9VcmwucmVwbGFjZSgvXFw/LiskLywgJycpLFxuXHRcdFx0cXVlcnkgPSBtYWlsVG9VcmwucmVwbGFjZSgvXlteP10qXFw/LywgJycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdDtcblxuXHRcdHBhcmFtcyA9IHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLnRvKSkge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChlbWFpbCArICcsJyArIHBhcmFtcy50bykpO1xuXHRcdFx0dG8gPSBfLnZhbHVlcyhcblx0XHRcdFx0dG8ucmVkdWNlKChyZXN1bHQsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlLmVtYWlsXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXJlc3VsdFt2YWx1ZS5lbWFpbF0ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdFt2YWx1ZS5lbWFpbF0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LCB7fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShlbWFpbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuY2MpKSB7XG5cdFx0XHRjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5jYykpO1xuXHRcdH1cblxuXHRcdGlmICghaXNVbmQocGFyYW1zLmJjYykpIHtcblx0XHRcdGJjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5iY2MpKTtcblx0XHR9XG5cblx0XHRyZXF1aXJlKCdLbm9pbi9Lbm9pbicpLnNob3dTY3JlZW5Qb3B1cChQb3B1cENvbXBvc2VWaWV3TW9kZWwsIFtcblx0XHRcdENvbXBvc2VUeXBlLkVtcHR5LFxuXHRcdFx0bnVsbCxcblx0XHRcdHRvLFxuXHRcdFx0Y2MsXG5cdFx0XHRiY2MsXG5cdFx0XHRpc1VuZChwYXJhbXMuc3ViamVjdCkgPyBudWxsIDogcFN0cmluZyhkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnN1YmplY3QpKSxcblx0XHRcdGlzVW5kKHBhcmFtcy5ib2R5KSA/IG51bGwgOiBwbGFpblRvSHRtbChwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuYm9keSkpKVxuXHRcdF0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tUmVhZHkoZm4pIHtcblx0JCgoKSA9PiBmbigpKTtcblx0Ly9cblx0Ly9cdGlmICgnbG9hZGluZycgIT09IHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlKVxuXHQvL1x0e1xuXHQvL1x0XHRmbigpO1xuXHQvL1x0fVxuXHQvL1x0ZWxzZVxuXHQvL1x0e1xuXHQvL1x0XHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0Ly9cdH1cbn1cblxuZXhwb3J0IGNvbnN0IHdpbmRvd1Jlc2l6ZSA9IF8uZGVib3VuY2UoKHRpbWVvdXQpID0+IHtcblx0aWYgKGlzVW5kKHRpbWVvdXQpIHx8IGlzTnVsbCh0aW1lb3V0KSkge1xuXHRcdCR3aW4ucmVzaXplKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fVxufSwgNTApO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2luZG93UmVzaXplQ2FsbGJhY2soKSB7XG5cdHdpbmRvd1Jlc2l6ZSgpO1xufVxuXG5sZXQgc3Vic3RyID0gd2luZG93LlN0cmluZy5zdWJzdHI7XG5pZiAoJ2InICE9PSAnYWInLnN1YnN0cigtMSkpIHtcblx0c3Vic3RyID0gKHN0ciwgc3RhcnQsIGxlbmd0aCkgPT4ge1xuXHRcdHN0YXJ0ID0gMCA+IHN0YXJ0ID8gc3RyLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbmd0aCk7XG5cdH07XG5cblx0d2luZG93LlN0cmluZy5zdWJzdHIgPSBzdWJzdHI7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5fOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGlzVW5kLCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBTRVRUSU5HUyA9IHdpbmRvdy5fX3JsYWhfZGF0YSgpIHx8IG51bGw7XG5TRVRUSU5HUyA9IGlzTm9ybWFsKFNFVFRJTkdTKSA/IFNFVFRJTkdTIDoge307XG5cbmxldCBBUFBfU0VUVElOR1MgPSBTRVRUSU5HUy5TeXN0ZW0gfHwgbnVsbDtcbkFQUF9TRVRUSU5HUyA9IGlzTm9ybWFsKEFQUF9TRVRUSU5HUykgPyBBUFBfU0VUVElOR1MgOiB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChTRVRUSU5HU1tuYW1lXSkgPyBudWxsIDogU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2V0KG5hbWUsIHZhbHVlKSB7XG5cdFNFVFRJTkdTW25hbWVdID0gdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwU2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gaXNVbmQoQVBQX1NFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBBUFBfU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYShuYW1lKSB7XG5cdGNvbnN0IHZhbHVlcyA9IHNldHRpbmdzR2V0KCdDYXBhJyk7XG5cdHJldHVybiBpc0FycmF5KHZhbHVlcykgJiYgaXNOb3JtYWwobmFtZSkgJiYgLTEgPCBpbkFycmF5KG5hbWUsIHZhbHVlcyk7XG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY29uc3QgJHdpbiA9ICQod2luZG93KTtcbiR3aW4uX19zaXplcyA9IFswLCAwXTtcblxuZXhwb3J0IHsgJHdpbiB9O1xuXG5leHBvcnQgY29uc3QgJGRvYyA9ICQod2luZG93LmRvY3VtZW50KTtcblxuZXhwb3J0IGNvbnN0ICRodG1sID0gJCgnaHRtbCcpO1xuXG5leHBvcnQgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cbmV4cG9ydCBjb25zdCAkZGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcblxuZXhwb3J0IGNvbnN0ICRoY29udCA9ICQoJzxkaXY+PC9kaXY+Jyk7XG4kaGNvbnRcblx0LmF0dHIoJ2FyZWEnLCAnaGlkZGVuJylcblx0LmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtNTAwMCB9KVxuXHQuYXBwZW5kVG8oJGJvZHkpO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRNaWNyb3RpbWUgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBjb21tdW5pdHkgPSBSTF9DT01NVU5JVFk7XG5cbi8qKlxuICogQHR5cGUgez99XG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wZG93blZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VLZXlib2FyZFNob3J0Y3V0cyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHNVc2VyQWdlbnQgPVxuXHQoJ25hdmlnYXRvcicgaW4gd2luZG93ICYmICd1c2VyQWdlbnQnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgfHwgJyc7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSUUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignbXNpZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkNocm9tZSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJTYWZhcmkgPSAhYkNocm9tZSAmJiAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiTW9iaWxlRGV2aWNlID1cblx0KC9hbmRyb2lkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGhvbmUvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwb2QvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwYWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2JsYWNrYmVycnkvaSkudGVzdChzVXNlckFnZW50KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJEaXNhYmxlTmFub1Njcm9sbCA9IGJNb2JpbGVEZXZpY2U7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQW5pbWF0aW9uU3VwcG9ydGVkID1cblx0IWJNb2JpbGVEZXZpY2UgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc3RyYW5zaXRpb25zJykgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc2FuaW1hdGlvbnMnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCA9ICEhd2luZG93LlhNTEh0dHBSZXF1ZXN0O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklzSHR0cHMgPVxuXHR3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmxvY2F0aW9uID8gJ2h0dHBzOicgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA6IGZhbHNlO1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcblx0J3RpdGxlJzogZmFsc2UsXG5cdCdzdHlsZXNTZXQnOiBmYWxzZSxcblx0J2N1c3RvbUNvbmZpZyc6ICcnLFxuXHQnY29udGVudHNDc3MnOiAnJyxcblx0J3Rvb2xiYXJHcm91cHMnOiBbXG5cdFx0eyBuYW1lOiAnc3BlYycgfSxcblx0XHR7IG5hbWU6ICdzdHlsZXMnIH0sXG5cdFx0eyBuYW1lOiAnYmFzaWNzdHlsZXMnLCBncm91cHM6IFsnYmFzaWNzdHlsZXMnLCAnY2xlYW51cCcsICdiaWRpJ10gfSxcblx0XHR7IG5hbWU6ICdjb2xvcnMnIH0sXG5cdFx0Yk1vYmlsZURldmljZSA/IHt9IDogeyBuYW1lOiAncGFyYWdyYXBoJywgZ3JvdXBzOiBbJ2xpc3QnLCAnaW5kZW50JywgJ2Jsb2NrcycsICdhbGlnbiddIH0sXG5cdFx0eyBuYW1lOiAnbGlua3MnIH0sXG5cdFx0eyBuYW1lOiAnaW5zZXJ0JyB9LFxuXHRcdHsgbmFtZTogJ2RvY3VtZW50JywgZ3JvdXBzOiBbJ21vZGUnLCAnZG9jdW1lbnQnLCAnZG9jdG9vbHMnXSB9LFxuXHRcdHsgbmFtZTogJ290aGVycycgfVxuXHRdLFxuXG5cdCdyZW1vdmVQbHVnaW5zJzogJ2xpc3RzdHlsZScsXG5cdCdyZW1vdmVCdXR0b25zJzogJ0Zvcm1hdCxVbmRvLFJlZG8sQ3V0LENvcHksUGFzdGUsQW5jaG9yLFN0cmlrZSxTdWJzY3JpcHQsU3VwZXJzY3JpcHQsSW1hZ2UsU2VsZWN0QWxsLFNvdXJjZScsXG5cdCdyZW1vdmVEaWFsb2dUYWJzJzogJ2xpbms6YWR2YW5jZWQ7bGluazp0YXJnZXQ7aW1hZ2U6YWR2YW5jZWQ7aW1hZ2VzOmFkdmFuY2VkJyxcblxuXHQnZXh0cmFQbHVnaW5zJzogJ3BsYWluLHNpZ25hdHVyZScsXG5cblx0J2FsbG93ZWRDb250ZW50JzogdHJ1ZSxcblx0J2V4dHJhQWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXG5cdCdmaWxsRW1wdHlCbG9ja3MnOiBmYWxzZSxcblx0J2lnbm9yZUVtcHR5UGFyYWdyYXBoJzogdHJ1ZSxcblx0J2Rpc2FibGVOYXRpdmVTcGVsbENoZWNrZXInOiBmYWxzZSxcblxuXHQnY29sb3JCdXR0b25fZW5hYmxlQXV0b21hdGljJzogZmFsc2UsXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVNb3JlJzogdHJ1ZSxcblxuXHQnZm9udF9kZWZhdWx0TGFiZWwnOiAnQXJpYWwnLFxuXHQnZm9udFNpemVfZGVmYXVsdExhYmVsJzogJzEzJyxcblx0J2ZvbnRTaXplX3NpemVzJzogJzEwLzEwcHg7MTIvMTJweDsxMy8xM3B4OzE0LzE0cHg7MTYvMTZweDsxOC8xOHB4OzIwLzIwcHg7MjQvMjRweDsyOC8yOHB4OzM2LzM2cHg7NDgvNDhweCdcbn07XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JMYW5nc01hcCA9IHtcblx0J2FyX3NhJzogJ2FyLXNhJyxcblx0J2JnX2JnJzogJ2JnJyxcblx0J2NzX0NaJzogJ2NzJyxcblx0J2RlX2RlJzogJ2RlJyxcblx0J2VsX2dyJzogJ2VsJyxcblx0J2VzX2VzJzogJ2VzJyxcblx0J2V0X2VlJzogJ2V0Jyxcblx0J2ZyX2ZyJzogJ2ZyJyxcblx0J2h1X2h1JzogJ2h1Jyxcblx0J2lzX2lzJzogJ2lzJyxcblx0J2l0X2l0JzogJ2l0Jyxcblx0J2phX2pwJzogJ2phJyxcblx0J2tvX2tyJzogJ2tvJyxcblx0J2x0X2x0JzogJ2x0Jyxcblx0J2x2X2x2JzogJ2x2Jyxcblx0J2ZhX2lyJzogJ2ZhJyxcblx0J25iX25vJzogJ25iJyxcblx0J25sX25sJzogJ25sJyxcblx0J3BsX3BsJzogJ3BsJyxcblx0J3B0X2JyJzogJ3B0LWJyJyxcblx0J3B0X3B0JzogJ3B0Jyxcblx0J3JvX3JvJzogJ3JvJyxcblx0J3J1X3J1JzogJ3J1Jyxcblx0J3NrX3NrJzogJ3NrJyxcblx0J3NsX3NpJzogJ3NsJyxcblx0J3N2X3NlJzogJ3N2Jyxcblx0J3RyX3RyJzogJ3RyJyxcblx0J3VrX3VhJzogJ3VrJyxcblx0J3poX2NuJzogJ3poLWNuJyxcblx0J3poX3R3JzogJ3poJ1xufTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xubGV0IGJBbGxvd1BkZlByZXZpZXcgPSAhYk1vYmlsZURldmljZTtcblxuaWYgKGJBbGxvd1BkZlByZXZpZXcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuXHRiQWxsb3dQZGZQcmV2aWV3ID0gISFfLmZpbmQod2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMsICh0eXBlKSA9PiB0eXBlICYmICdhcHBsaWNhdGlvbi9wZGYnID09PSB0eXBlLnR5cGUpO1xuXG5cdGlmICghYkFsbG93UGRmUHJldmlldykge1xuXHRcdGJBbGxvd1BkZlByZXZpZXcgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi9wZGYnXTtcblx0fVxufVxuXG5leHBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3IH07XG5cbmV4cG9ydCBjb25zdCBWSUVXX01PREVMUyA9IHtcblx0c2V0dGluZ3M6IFtdLFxuXHQnc2V0dGluZ3MtcmVtb3ZlZCc6IFtdLFxuXHQnc2V0dGluZ3MtZGlzYWJsZWQnOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVBY3Rpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxEaXNhYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFR5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxXaWR0aCA9IGtvLm9ic2VydmFibGUoMCk7XG5cbmxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIG1vdmVBY3Rpb24oKSkge1xuXHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHR9XG59KTtcblxubW92ZUFjdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBsZWZ0UGFuZWxEaXNhYmxlZCgpKSB7XG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHR9XG59KTtcblxuLy8gcG9wdXBzXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5TmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoKTtcblxucG9wdXBWaXNpYmlsaXR5LnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tb2RhbCcsIGJWYWx1ZSk7XG59KTtcblxuLy8ga2V5c1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlUmVhbCA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcbmV4cG9ydCBjb25zdCBrZXlTY29wZUZha2UgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5cbmV4cG9ydCBjb25zdCBrZXlTY29wZSA9IGtvLmNvbXB1dGVkKHtcblx0cmVhZDogKCkgPT4ga2V5U2NvcGVGYWtlKCksXG5cdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRpZiAoS2V5U3RhdGUuTWVudSAhPT0gdmFsdWUpIHtcblx0XHRcdGlmIChLZXlTdGF0ZS5Db21wb3NlID09PSB2YWx1ZSkge1xuXHRcdFx0XHQvLyBkaXNhYmxlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoKSA9PiB1c2VLZXlib2FyZFNob3J0Y3V0cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzdG9yZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHVzZUtleWJvYXJkU2hvcnRjdXRzKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRhZ05hbWUgPSBlbCA/IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIShcblx0XHRcdFx0XHRcdFx0J0lOUFVUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnU0VMRUNUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnVEVYVEFSRUEnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdChlbCAmJiAnRElWJyA9PT0gdGFnTmFtZSAmJiAoJ2VkaXRvckh0bWxBcmVhJyA9PT0gZWwuY2xhc3NOYW1lIHx8ICd0cnVlJyA9PT0gJycgKyBlbC5jb250ZW50RWRpdGFibGUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGtleVNjb3BlRmFrZSh2YWx1ZSk7XG5cdFx0XHRpZiAoZHJvcGRvd25WaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0dmFsdWUgPSBLZXlTdGF0ZS5NZW51O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGtleVNjb3BlUmVhbCh2YWx1ZSk7XG5cdH1cbn0pO1xuXG5rZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKCdrZXlTY29wZT0nICsgc1ZhbHVlKTsgLy8gREVCVUdcblx0a2V5LnNldFNjb3BlKHZhbHVlKTtcbn0pO1xuXG5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUpIHtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZW51KTtcblx0fSBlbHNlIGlmIChLZXlTdGF0ZS5NZW51ID09PSBrZXkuZ2V0U2NvcGUoKSkge1xuXHRcdGtleVNjb3BlKGtleVNjb3BlRmFrZSgpKTtcblx0fVxufSk7XG5cbi8qKlxuICogQHR5cGUgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhID0ge1xuXHRfX0FQUF9fOiBudWxsLFxuXHRpQWpheEVycm9yQ291bnQ6IDAsXG5cdGlUb2tlbkVycm9yQ291bnQ6IDAsXG5cdGFCb290c3RyYXBEcm9wZG93bnM6IFtdLFxuXHRpTWVzc2FnZUJvZHlDYWNoZUNvdW50OiAwLFxuXHRiVW5sb2FkOiBmYWxzZVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGhhc2hlciBmcm9tICdoYXNoZXInO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgJGh0bWwsIFZJRVdfTU9ERUxTLCBwb3B1cFZpc2liaWxpdHlOYW1lcyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmQsIHBTdHJpbmcsIGxvZywgaXNGdW5jLCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkZWxlZ2F0ZVJ1biwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IGN1cnJlbnRTY3JlZW4gPSBudWxsLFxuXHRkZWZhdWx0U2NyZWVuTmFtZSA9ICcnO1xuXG5jb25zdCBTQ1JFRU5TID0ge307XG5cbmV4cG9ydCBjb25zdCBWaWV3VHlwZSA9IHtcblx0UG9wdXA6ICdQb3B1cHMnLFxuXHRMZWZ0OiAnTGVmdCcsXG5cdFJpZ2h0OiAnUmlnaHQnLFxuXHRDZW50ZXI6ICdDZW50ZXInXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG5cdCQoJyNybC1jb250ZW50JykuYWRkQ2xhc3MoJ3JsLWNvbnRlbnQtc2hvdycpO1xuXHQkKCcjcmwtbG9hZGluZycpXG5cdFx0LmhpZGUoKVxuXHRcdC5yZW1vdmUoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZChmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiBjcmVhdGVDb21tYW5kTGVnYWN5KG51bGwsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRGVmYXVsdCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlLCBpc0RlZmF1bHQgPSBmYWxzZSkge1xuXHRTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLl9fcmxTZXR0aW5nc0RhdGEgPSB7XG5cdFx0TGFiZWw6IGxhYmVsTmFtZSxcblx0XHRUZW1wbGF0ZTogdGVtcGxhdGUsXG5cdFx0Um91dGU6IHJvdXRlLFxuXHRcdElzRGVmYXVsdDogISFpc0RlZmF1bHRcblx0fTtcblxuXHRWSUVXX01PREVMUy5zZXR0aW5ncy5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPZmYoKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPbigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMgez9PYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW4oc2NyZWVuTmFtZSkge1xuXHRyZXR1cm4gJycgIT09IHNjcmVlbk5hbWUgJiYgIWlzVW5kKFNDUkVFTlNbc2NyZWVuTmFtZV0pID8gU0NSRUVOU1tzY3JlZW5OYW1lXSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyZWVuUG9wdXAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzO1xuXHRcdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdCkge1xuXHRcdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvSGlkZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpO1xuXHRpZiAoTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eShmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge21peGVkPX0gcGFyYW1zID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdm1SdW5Ib29rKGhvb2tOYW1lLCBWaWV3TW9kZWxDbGFzcywgcGFyYW1zID0gbnVsbCkge1xuXHRfLmVhY2goVmlld01vZGVsQ2xhc3MuX19uYW1lcywgKG5hbWUpID0+IHtcblx0XHRydW5Ib29rKGhvb2tOYW1lLCBbbmFtZSwgVmlld01vZGVsQ2xhc3MuX192bSwgcGFyYW1zXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdD19IHZtU2NyZWVuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbikge1xuXHRpZiAoVmlld01vZGVsQ2xhc3MgJiYgIVZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCkge1xuXHRcdGxldCB2bURvbSA9IG51bGw7XG5cdFx0Y29uc3Qgdm0gPSBuZXcgVmlld01vZGVsQ2xhc3Modm1TY3JlZW4pLFxuXHRcdFx0cG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGUgfHwgJycsXG5cdFx0XHR2bVBsYWNlID0gcG9zaXRpb24gPyAkKCcjcmwtY29udGVudCAjcmwtJyArIHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIDogbnVsbDtcblxuXHRcdFZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0Vmlld01vZGVsQ2xhc3MuX192bSA9IHZtO1xuXG5cdFx0dm0ub25TaG93VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHZtLm9uSGlkZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHZtLnZpZXdNb2RlbE5hbWUgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWU7XG5cdFx0dm0udmlld01vZGVsTmFtZXMgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWVzO1xuXHRcdHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgPSBWaWV3TW9kZWxDbGFzcy5fX3RlbXBsYXRlSUQ7XG5cdFx0dm0udmlld01vZGVsUG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGU7XG5cblx0XHRpZiAodm1QbGFjZSAmJiAxID09PSB2bVBsYWNlLmxlbmd0aCkge1xuXHRcdFx0dm1Eb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygncmwtdmlldy1tb2RlbCcpXG5cdFx0XHRcdC5hZGRDbGFzcygnUkwtJyArIHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQpXG5cdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHR2bURvbS5hcHBlbmRUbyh2bVBsYWNlKTtcblxuXHRcdFx0dm0udmlld01vZGVsRG9tID0gdm1Eb207XG5cdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSA9IHZtRG9tO1xuXG5cdFx0XHRpZiAoVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLmNhbmNlbENvbW1hbmQgPSB2bS5jbG9zZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2bS5tb2RhbFZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdHZtLnN0b3JlQW5kU2V0S2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucHVzaCh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAzMDAwICsgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGggKyAxMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uU2hvd1RyaWdnZXIoIXZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDUwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vbkhpZGVUcmlnZ2VyKCF2bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2bS5yZXN0b3JlS2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLWhpZGUnLCBWaWV3TW9kZWxDbGFzcyk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnJlbW92ZSh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAyMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB2bS52aWV3TW9kZWxEb20uaGlkZSgpLCAzMDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wcmUtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXG5cdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdHZtRG9tWzBdLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+ICh7IG5hbWU6IHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgfSlcblx0XHRcdFx0fSxcblx0XHRcdFx0dm1cblx0XHRcdCk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25CdWlsZCcsIFt2bURvbV0pO1xuXHRcdFx0aWYgKHZtICYmIFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5yZWdpc3RlclBvcHVwS2V5RG93bigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcG9zdC1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZygnQ2Fubm90IGZpbmQgdmlldyBtb2RlbCBwb3NpdGlvbjogJyArIHBvc2l0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVmlld01vZGVsQ2xhc3MgPyBWaWV3TW9kZWxDbGFzcy5fX3ZtIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3csIHBhcmFtcyA9IFtdKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uQmVmb3JlU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvblNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIE1vZGFsVmlldywgcGFyYW1zIHx8IFtdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJtVXBTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbldhcm1VcCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9wdXBWaXNpYmxlKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0cmV0dXJuIE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSA/IE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSgpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXJ0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbk9uUm91dGUoc2NyZWVuTmFtZSwgc3ViUGFydCkge1xuXHRsZXQgdm1TY3JlZW4gPSBudWxsLFxuXHRcdGlzU2FtZVNjcmVlbiA9IGZhbHNlLFxuXHRcdGNyb3NzID0gbnVsbDtcblxuXHRpZiAoJycgPT09IHBTdHJpbmcoc2NyZWVuTmFtZSkpIHtcblx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdH1cblxuXHRpZiAoJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHR2bVNjcmVlbiA9IHNjcmVlbihzY3JlZW5OYW1lKTtcblx0XHRpZiAoIXZtU2NyZWVuKSB7XG5cdFx0XHR2bVNjcmVlbiA9IHNjcmVlbihkZWZhdWx0U2NyZWVuTmFtZSk7XG5cdFx0XHRpZiAodm1TY3JlZW4pIHtcblx0XHRcdFx0c3ViUGFydCA9IHNjcmVlbk5hbWUgKyAnLycgKyBzdWJQYXJ0O1xuXHRcdFx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fc3RhcnRlZCkge1xuXHRcdFx0aXNTYW1lU2NyZWVuID0gY3VycmVudFNjcmVlbiAmJiB2bVNjcmVlbiA9PT0gY3VycmVudFNjcmVlbjtcblxuXHRcdFx0aWYgKCF2bVNjcmVlbi5fX2J1aWxkZWQpIHtcblx0XHRcdFx0dm1TY3JlZW4uX19idWlsZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHZtU2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRfLmVhY2godm1TY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uQnVpbGQnKTtcblx0XHRcdH1cblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdC8vIGhpZGUgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGN1cnJlbnRTY3JlZW4gPSB2bVNjcmVlbjtcblxuXHRcdFx0XHQvLyBzaG93IHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcighY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1vbi1zaG93JywgW2N1cnJlbnRTY3JlZW4uc2NyZWVuTmFtZSgpLCBjdXJyZW50U2NyZWVuXSk7XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkJlZm9yZVNob3cnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXHRcdFx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjcm9zcyA9IHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fY3Jvc3MgPyB2bVNjcmVlbi5fX2Nyb3NzKCkgOiBudWxsO1xuXHRcdFx0XHRpZiAoY3Jvc3MpIHtcblx0XHRcdFx0XHRjcm9zcy5wYXJzZShzdWJQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc2NyZWVuc0NsYXNzZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTY3JlZW5zKHNjcmVlbnNDbGFzc2VzKSB7XG5cdF8uZWFjaChzY3JlZW5zQ2xhc3NlcywgKENTY3JlZW4pID0+IHtcblx0XHRpZiAoQ1NjcmVlbikge1xuXHRcdFx0Y29uc3Qgdm1TY3JlZW4gPSBuZXcgQ1NjcmVlbigpLFxuXHRcdFx0XHRzY3JlZW5OYW1lID0gdm1TY3JlZW4gPyB2bVNjcmVlbi5zY3JlZW5OYW1lKCkgOiAnJztcblxuXHRcdFx0aWYgKHZtU2NyZWVuICYmICcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0XHRcdGlmICgnJyA9PT0gZGVmYXVsdFNjcmVlbk5hbWUpIHtcblx0XHRcdFx0XHRkZWZhdWx0U2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRTQ1JFRU5TW3NjcmVlbk5hbWVdID0gdm1TY3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRfLmVhY2goU0NSRUVOUywgKHZtU2NyZWVuKSA9PiB7XG5cdFx0aWYgKHZtU2NyZWVuICYmICF2bVNjcmVlbi5fX3N0YXJ0ZWQgJiYgdm1TY3JlZW4uX19zdGFydCkge1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnQoKTtcblxuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXByZS1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uU3RhcnQnKTtcblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wb3N0LXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGNyb3NzID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblx0Y3Jvc3MuYWRkUm91dGUoL14oW2EtekEtWjAtOS1dKilcXC8/KC4qKSQvLCBzY3JlZW5PblJvdXRlKTtcblxuXHRoYXNoZXIuaW5pdGlhbGl6ZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5jaGFuZ2VkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuaW5pdCgpO1xuXG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXN0YXJ0ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1zdGFydGVkJyksIDEwMCk7XG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQtZGVsYXknKSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHNpbGVuY2UgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goaGFzaCwgc2lsZW5jZSA9IGZhbHNlLCByZXBsYWNlID0gZmFsc2UpIHtcblx0aGFzaCA9ICcjJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cdGhhc2ggPSAnLycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXG5cdGNvbnN0IGNtZCA9IHJlcGxhY2UgPyAncmVwbGFjZUhhc2gnIDogJ3NldEhhc2gnO1xuXG5cdGlmIChzaWxlbmNlKSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5zZXRIYXNoKGhhc2gpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiAodGFyZ2V0KSA9PiB7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IG5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBbbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQuX19uYW1lID0gdGFyZ2V0Ll9fbmFtZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHRhcmdldC5fX3R5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVtcGxhdGVJRCkge1xuXHRcdFx0XHR0YXJnZXQuX190ZW1wbGF0ZUlEID0gdGVtcGxhdGVJRDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwb3B1cERlY29yYXRvcih7IG5hbWUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGU6IFZpZXdUeXBlLlBvcHVwLCB0ZW1wbGF0ZUlEIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbkV4ZWN1dGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tbWFuZERlY29yYXRvcihjYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSA9PiB7XG5cdFx0aWYgKCFrZXkgfHwgIWtleS5tYXRjaCgvQ29tbWFuZCQvKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBuYW1lIFwiJHtrZXl9XCIgc2hvdWxkIGVuZCB3aXRoIENvbW1hbmQgc3VmZml4YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlIHx8IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKSxcblx0XHRcdG5vcm1DYW5FeGVjdXRlID0gaXNGdW5jKGNhbkV4ZWN1dGUpID8gY2FuRXhlY3V0ZSA6ICgpID0+ICEhY2FuRXhlY3V0ZTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobm9ybUNhbkV4ZWN1dGUuY2FsbCh0aGlzLCB0aGlzKSkge1xuXHRcdFx0XHR2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlLl9fcmVhbENhbkV4ZWN1dGUgPSBub3JtQ2FuRXhlY3V0ZTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlLmlzQ29tbWFuZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGVzY3JpcHRvcjtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21pY2VkfSAkaXRlbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJGl0ZW1zKSB7XG5cdHJldHVybiBfLnRocm90dGxlKChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdGNvbnN0IHVwID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0O1xuXG5cdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSk7XG5cdFx0XHRpZiAodXAgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHR9IGVsc2UgaWYgKCF1cCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdEhhc2ggPSAkaXRlbXMuZXEoaW5kZXgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGlmIChyZXN1bHRIYXNoKSB7XG5cdFx0XHRcdHNldEhhc2gocmVzdWx0SGFzaCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG59XG5cbmV4cG9ydCB7XG5cdGNvbW1hbmREZWNvcmF0b3IsXG5cdGNvbW1hbmREZWNvcmF0b3IgYXMgY29tbWFuZCxcblx0dmlld0RlY29yYXRvcixcblx0dmlld0RlY29yYXRvciBhcyB2aWV3LFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXdNb2RlbCxcblx0cG9wdXBEZWNvcmF0b3IsXG5cdHBvcHVwRGVjb3JhdG9yIGFzIHBvcHVwLFxuXHRzZXR0aW5nc01lbnVLZXlzSGFuZGxlclxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmpRdWVyeTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiwgVXBsb2FkRXJyb3JDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzVW5kLCBpc051bGwsIGhhcywgbWljcm90aW1lLCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICRodG1sLCBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIG1vbWVudG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGxhbmdMaW5rIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxubGV0IEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEEgPSB7fTtcbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX01BUCA9IFtcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5BdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FVVEhfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDRVNTX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05ORUNUSU9OX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FwdGNoYUVycm9yLCAnTk9USUZJQ0FUSU9OUy9DQVBUQ0hBX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9GQUNFQk9PS19MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9UV0lUVEVSX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfR09PR0xFX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvRE9NQUlOX05PVF9BTExPV0VEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfTk9UX0FMTE9XRUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX1JFUVVJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkLCAnTk9USUZJQ0FUSU9OUy9DT1VMRF9OT1RfU0FWRV9ORVdfUEFTU1dPUkQnXSxcblx0W05vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QsICdOT1RJRklDQVRJT05TL0NVUlJFTlRfUEFTU1dPUkRfSU5DT1JSRUNUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRTaG9ydCwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1NIT1JUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRXZWFrLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfV0VBSyddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkRm9yYmlkZGVuLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfRk9SQklEREVOVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ29udGFjdHNTeW5jRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTlRBQ1RTX1NZTkNfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRNb3ZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NFTkRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRSZWNpcGllbnRzLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1JFQ0lQSUVOVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkZpbHRlcnNBcmVOb3RDb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9GSUxURVJTX0FSRV9OT1RfQ09SUkVDVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9DUkVBVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9SRU5BTUVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9OT05fRU1QVFlfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9TVUJTQ1JJQkVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFVuc3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1VOU1VCU0NSSUJFX0ZPTERFUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVTZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1NFVFRJTkdTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1BMVUdJTl9TRVRUSU5HUyddLFxuXG5cdFtOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfSU5TVEFMTF9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9QTFVHSU5fUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvVU5TVVBQT1JURURfUExVR0lOX1BBQ0tBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19TRVJWRVJfSVNfVU5BVkFJTEFCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfRVhQSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0Jhbm5lZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0JBTk5FRCddLFxuXG5cdFtOb3RpZmljYXRpb24uRGVtb1NlbmRNZXNzYWdlRXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fU0VORF9NRVNTQUdFX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uRGVtb0FjY291bnRFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19BQ0NPVU5UX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50QWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9BTFJFQURZX0VYSVNUUyddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnREb2VzTm90RXhpc3QsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfRE9FU19OT1RfRVhJU1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvciwgJ05PVElGSUNBVElPTlMvTUFJTF9TRVJWRVJfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudCwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9JTlBVVF9BUkdVTUVOVCddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IsICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXVxuXTtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlTGlzdFxuICogQHBhcmFtIHtzdHJpbmc9fSBkZWZhdWxWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG4oa2V5LCB2YWx1ZUxpc3QsIGRlZmF1bFZhbHVlKSB7XG5cdGxldCB2YWx1ZU5hbWUgPSAnJyxcblx0XHRyZXN1bHQgPSBJMThOX0RBVEFba2V5XTtcblxuXHRpZiAoaXNVbmQocmVzdWx0KSkge1xuXHRcdHJlc3VsdCA9IGlzVW5kKGRlZmF1bFZhbHVlKSA/IGtleSA6IGRlZmF1bFZhbHVlO1xuXHR9XG5cblx0aWYgKCFpc1VuZCh2YWx1ZUxpc3QpICYmICFpc051bGwodmFsdWVMaXN0KSkge1xuXHRcdGZvciAodmFsdWVOYW1lIGluIHZhbHVlTGlzdCkge1xuXHRcdFx0aWYgKGhhcyh2YWx1ZUxpc3QsIHZhbHVlTmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJyUnICsgdmFsdWVOYW1lICsgJyUnLCB2YWx1ZUxpc3RbdmFsdWVOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaTE4blRvTm9kZSA9IChlbGVtZW50KSA9PiB7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ2kxOG4nKTtcblxuXHRpZiAoa2V5KSB7XG5cdFx0aWYgKCdbJyA9PT0ga2V5LnN1YnN0cigwLCAxKSkge1xuXHRcdFx0c3dpdGNoIChrZXkuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdGNhc2UgJ1todG1sXSc6XG5cdFx0XHRcdFx0JGVsLmh0bWwoaTE4bihrZXkuc3Vic3RyKDYpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1twbGFjZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bihrZXkuc3Vic3RyKDEzKSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbdGl0bGUnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGkxOG4oa2V5LnN1YnN0cig3KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC50ZXh0KGkxOG4oa2V5KSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFuPX0gYW5pbWF0ZSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVG9Ob2RlcyhlbGVtZW50cywgYW5pbWF0ZSA9IGZhbHNlKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJ1tkYXRhLWkxOG5dJywgZWxlbWVudHMpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRpMThuVG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFuaW1hdGUgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0JCgnLmkxOG4tYW5pbWF0aW9uW2RhdGEtaTE4bl0nLCBlbGVtZW50cykubGV0dGVyZngoe1xuXHRcdFx0XHQnZngnOiAnZmFsbCBmYWRlJyxcblx0XHRcdFx0J2JhY2t3YXJkcyc6IGZhbHNlLFxuXHRcdFx0XHQndGltaW5nJzogNTAsXG5cdFx0XHRcdCdmeF9kdXJhdGlvbic6ICc1MG1zJyxcblx0XHRcdFx0J2xldHRlcl9lbmQnOiAncmVzdG9yZScsXG5cdFx0XHRcdCdlbGVtZW50X2VuZCc6ICdyZXN0b3JlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgcmVsb2FkRGF0YSA9ICgpID0+IHtcblx0aWYgKHdpbmRvdy5yYWlubG9vcEkxOE4pIHtcblx0XHRJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5cdFx0aTE4blRvTm9kZXMod2luZG93LmRvY3VtZW50LCB0cnVlKTtcblxuXHRcdG1vbWVudG9yUmVsb2FkKCk7XG5cdFx0dHJpZ2dlcighdHJpZ2dlcigpKTtcblx0fVxuXG5cdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSgpIHtcblx0STE4Tl9OT1RJRklDQVRJT05fTUFQLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRJMThOX05PVElGSUNBVElPTl9EQVRBW2l0ZW1bMF1dID0gaTE4bihpdGVtWzFdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RhcnRDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGxhbmdDYWxsYmFjayA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKHN0YXJ0Q2FsbGJhY2ssIGxhbmdDYWxsYmFjayA9IG51bGwpIHtcblx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRzdGFydENhbGxiYWNrKCk7XG5cdH1cblxuXHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRcdFx0c3RhcnRDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdFx0XHRsYW5nQ2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoc3RhcnRDYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHsqPX0gbWVzc2FnZSA9ICcnXG4gKiBAcGFyYW0geyo9fSBkZWZDb2RlID0gbnVsbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbihjb2RlLCBtZXNzYWdlID0gJycsIGRlZkNvZGUgPSBudWxsKSB7XG5cdGNvZGUgPSB3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDA7XG5cdGlmIChOb3RpZmljYXRpb24uQ2xpZW50Vmlld0Vycm9yID09PSBjb2RlICYmIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGRlZkNvZGUgPSBkZWZDb2RlID8gd2luZG93LnBhcnNlSW50KGRlZkNvZGUsIDEwKSB8fCAwIDogMDtcblx0cmV0dXJuIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV0pXG5cdFx0PyBkZWZDb2RlICYmIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV0pXG5cdFx0XHQ/IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV1cblx0XHRcdDogJydcblx0XHQ6IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24pIHtcblx0cmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLkVycm9yQ29kZVxuXHRcdD8gZ2V0Tm90aWZpY2F0aW9uKHBJbnQocmVzcG9uc2UuRXJyb3JDb2RlKSwgcmVzcG9uc2UuRXJyb3JNZXNzYWdlIHx8ICcnKVxuXHRcdDogZ2V0Tm90aWZpY2F0aW9uKGRlZkNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gY29kZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShjb2RlKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblx0c3dpdGNoICh3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDApIHtcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlSXNUb29CaWc6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlUGFydGlhbGx5VXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9QQVJUSUFMTFlfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX05PX0ZJTEVfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLk1pc3NpbmdUZW1wRm9sZGVyOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX01JU1NJTkdfVEVNUF9GT0xERVInKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVPblNhdmVpbmdFcnJvcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9PTl9TQVZJTkdfRklMRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9UWVBFJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZChhZG1pbiwgbGFuZ3VhZ2UpIHtcblx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHQkaHRtbC5hZGRDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiBsYW5nTGluayhsYW5ndWFnZSwgYWRtaW4pLFxuXHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxuXHRcdFx0Y2FjaGU6IHRydWVcblx0XHR9KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlbG9hZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNSdGwgPSAtMSA8IGluQXJyYXkoKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBbJ2FyJywgJ2FyX3NhJywgJ2hlJywgJ2hlX2hlJywgJ3VyJywgJ3VyX2lyJ10pO1xuXG5cdFx0XHRcdFx0XHQkaHRtbFxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJylcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1ydGwgcmwtbHRyJylcblx0XHRcdFx0XHRcdFx0Ly8gLmF0dHIoJ2RpcicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKGlzUnRsID8gJ3JsLXJ0bCcgOiAncmwtbHRyJyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdDUwMCA8IG1pY3JvdGltZSgpIC0gc3RhcnQgPyAxIDogNTAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblx0XHRcdFx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0pO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbiRodG1sLmFkZENsYXNzKCdybC0nICsgKCRodG1sLmF0dHIoJ2RpcicpIHx8ICdsdHInKSk7XG4iLCJpbXBvcnQgX09iamVjdCRjcmVhdGUgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbmRcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNVbmQsIGlzTm9ybWFsLCB0cmltLCBlbmNvZGVVUklDb21wb25lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFJPT1QgPSAnLi8nLFxuXHRIQVNIX1BSRUZJWCA9ICcjLycsXG5cdFNFUlZFUl9QUkVGSVggPSAnLi8/Jyxcblx0U1VCX1FVRVJZX1BSRUZJWCA9ICcmcVtdPScsXG5cdFZFUlNJT04gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpLFxuXHRXRUJfUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlBhdGgnKSB8fCAnJyxcblx0VkVSU0lPTl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViVmVyc2lvblBhdGgnKSB8fCAncmFpbmxvb3Avdi8nICsgVkVSU0lPTiArICcvJyxcblx0U1RBVElDX1BSRUZJWCA9IFZFUlNJT05fUFJFRklYICsgJ3N0YXRpYy8nLFxuXHRBRE1JTl9IT1NUX1VTRSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluSG9zdFVzZScpLFxuXHRBRE1JTl9QQVRIID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluUGF0aCcpIHx8ICdhZG1pbic7XG5cbmxldCBBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUF1dGhTdWZmaXgoKSB7XG5cdEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViUXVlcnlQcmVmaXgoKSB7XG5cdHJldHVybiBTVUJfUVVFUllfUFJFRklYO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3RhcnR1cFVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3Qoc3RhcnR1cFVybCA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArIHBTdHJpbmcoc3RhcnR1cFVybCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RBZG1pbigpIHtcblx0cmV0dXJuIEFETUlOX0hPU1RfVVNFID8gUk9PVCA6IFNFUlZFUl9QUkVGSVggKyBBRE1JTl9QQVRIO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VXNlcigpIHtcblx0cmV0dXJuIFJPT1Q7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFJhdyh0eXBlLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRjdXN0b21TcGVjU3VmZml4ID0gaXNVbmQoY3VzdG9tU3BlY1N1ZmZpeCkgPyBBVVRIX1BSRUZJWCA6IGN1c3RvbVNwZWNTdWZmaXg7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRjdXN0b21TcGVjU3VmZml4ICtcblx0XHQnLycgK1xuXHRcdHR5cGUgK1xuXHRcdCcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRkb3dubG9hZFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudERvd25sb2FkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdEb3dubG9hZCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdUaHVtYm5haWwnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4oZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdBc1BsYWluJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudEZyYW1lZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRnJhbWVkVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlcXVlc3QodHlwZSkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvJyArIHR5cGUgKyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRDb250YWN0cygpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZENvbnRhY3RzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEJhY2tncm91bmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRCYWNrZ3JvdW5kJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FwcGVuZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZShlbWFpbCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQ2hhbmdlJykgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhamF4KGFkZCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQWpheCcpICsgYWRkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VWaWV3TGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0QVVUSF9QUkVGSVggK1xuXHRcdCcvVmlld0FzUGxhaW4vJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRyZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VEb3dubG9hZExpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvRG93bmxvYWQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyByZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckxpbmsoZW1haWwpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL0F2YXRhci8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0xpbmsoaGFzaCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvUHVibGljLycgKyBoYXNoICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlckJhY2tncm91bmQoaGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Vc2VyQmFja2dyb3VuZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIGhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhwSW5mbygpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0luZm8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWRtaW5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW5nTGluayhsYW5nLCBpc0FkbWluKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9MYW5nLzAvJyArIChpc0FkbWluID8gJ0FkbWluJyA6ICdBcHAnKSArICcvJyArIHdpbmRvdy5lbmNvZGVVUkkobGFuZykgKyAnLycgKyBWRVJTSU9OICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c1ZjZigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c1ZjZi8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c0NzdigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c0Nzdi8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0geGF1dGggPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEdvb2dsZSh4YXV0aCA9IGZhbHNlKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0J1NvY2lhbEdvb2dsZScgK1xuXHRcdCgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJykgK1xuXHRcdCh4YXV0aCA/ICcmeGF1dGg9MScgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsVHdpdHRlcigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnU29jaWFsVHdpdHRlcicgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxGYWNlYm9vaygpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJ1NvY2lhbEZhY2Vib29rJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY1ByZWZpeChwYXRoKSB7XG5cdHJldHVybiBTVEFUSUNfUFJFRklYICsgcGF0aDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlDb250YWN0UGljKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2VtcHR5LWNvbnRhY3QucG5nJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc291bmQoZmlsZU5hbWUpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnc291bmRzLycgKyBmaWxlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbk1haWxJY29uKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2ljb20tbWVzc2FnZS1ub3RpZmljYXRpb24ucG5nJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3AubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3Aud29ya2VyLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VyUGF0aCgpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lUHJldmlld0xpbmsodGhlbWUpIHtcblx0bGV0IHByZWZpeCA9IFZFUlNJT05fUFJFRklYO1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdFx0cHJlZml4ID0gV0VCX1BSRUZJWDtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAndGhlbWVzLycgKyB3aW5kb3cuZW5jb2RlVVJJKHRoZW1lKSArICcvaW1hZ2VzL3ByZXZpZXcucG5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluYm94KGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCcpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ21haWxib3gvJyArIGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHNjcmVlbk5hbWUgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzKHNjcmVlbk5hbWUgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnc2V0dGluZ3MnICsgKHNjcmVlbk5hbWUgPyAnLycgKyBzY3JlZW5OYW1lIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhYm91dCgpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ2Fib3V0Jztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWluKHNjcmVlbk5hbWUpIHtcblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYO1xuXHRzd2l0Y2ggKHNjcmVlbk5hbWUpIHtcblx0XHRjYXNlICdBZG1pbkRvbWFpbnMnOlxuXHRcdFx0cmVzdWx0ICs9ICdkb21haW5zJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluU2VjdXJpdHknOlxuXHRcdFx0cmVzdWx0ICs9ICdzZWN1cml0eSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pbkxpY2Vuc2luZyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2xpY2Vuc2luZyc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcGFnZSA9IDFcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2VhcmNoID0gJydcbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGhyZWFkVWlkID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsQm94KGZvbGRlciwgcGFnZSA9IDEsIHNlYXJjaCA9ICcnLCB0aHJlYWRVaWQgPSAnJykge1xuXHRwYWdlID0gaXNOb3JtYWwocGFnZSkgPyBwSW50KHBhZ2UpIDogMTtcblx0c2VhcmNoID0gcFN0cmluZyhzZWFyY2gpO1xuXG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWCArICdtYWlsYm94Lyc7XG5cblx0aWYgKCcnICE9PSBmb2xkZXIpIHtcblx0XHRjb25zdCByZXN1bHRUaHJlYWRVaWQgPSBwSW50KHRocmVhZFVpZCk7XG5cdFx0cmVzdWx0ICs9IHdpbmRvdy5lbmNvZGVVUkkoZm9sZGVyKSArICgwIDwgcmVzdWx0VGhyZWFkVWlkID8gJ34nICsgcmVzdWx0VGhyZWFkVWlkIDogJycpO1xuXHR9XG5cblx0aWYgKDEgPCBwYWdlKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnL3AnICsgcGFnZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2VhcmNoKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKHNlYXJjaCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9zbGljZVwiO1xuaW1wb3J0IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCI7XG5pbXBvcnQgX09iamVjdCRrZXlzIGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHksIGRlY29yYXRvcnMsIGRlc2NyaXB0b3IsIGNvbnRleHQpIHtcbiAgdmFyIF9jb250ZXh0LCBfY29udGV4dDIsIF9jb250ZXh0MztcblxuICB2YXIgZGVzYyA9IHt9O1xuXG4gIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qka2V5cyhkZXNjcmlwdG9yKSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG5cbiAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7XG4gIGRlc2MuY29uZmlndXJhYmxlID0gISFkZXNjLmNvbmZpZ3VyYWJsZTtcblxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHtcbiAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlc2MgPSBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShkZWNvcmF0b3JzKS5jYWxsKGRlY29yYXRvcnMpKS5jYWxsKF9jb250ZXh0MykpLmNhbGwoX2NvbnRleHQyLCBmdW5jdGlvbiAoZGVzYywgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjO1xuICB9LCBkZXNjKTtcblxuICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDApIHtcbiAgICBkZXNjLnZhbHVlID0gZGVzYy5pbml0aWFsaXplciA/IGRlc2MuaW5pdGlhbGl6ZXIuY2FsbChjb250ZXh0KSA6IHZvaWQgMDtcbiAgICBkZXNjLmluaXRpYWxpemVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG5cbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkZXNjO1xufSIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCJpbXBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUgfSBmcm9tICdSZW1vdGUvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgUmVtb3RlQWRtaW5BamF4IGV4dGVuZHMgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0xvZ2luXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICovXG5cdGFkbWluTG9naW4oZkNhbGxiYWNrLCBzTG9naW4sIHNQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dpbicsIHtcblx0XHRcdCdMb2dpbic6IHNMb2dpbixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluTG9nb3V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dvdXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVBZG1pbkNvbmZpZyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblNldHRpbmdzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IHZhbHVlRm5cblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZuXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWdIZWxwZXIoa2V5LCB2YWx1ZUZuLCBmbikge1xuXHRcdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFba2V5XSA9IHZhbHVlRm4gPyB2YWx1ZUZuKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0dGhpcy5zYXZlQWRtaW5Db25maWcoZm4gfHwgbnVsbCwgZGF0YSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJJbmNsdWRlQWxpYXNlcyA9IHRydWVcblx0ICovXG5cdGRvbWFpbkxpc3QoZkNhbGxiYWNrLCBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxpc3QnLCB7XG5cdFx0XHQnSW5jbHVkZUFsaWFzZXMnOiBiSW5jbHVkZUFsaWFzZXMgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRwbHVnaW5MaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5MaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGFja2FnZXNMaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QYWNrYWdlc0xpc3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluQ29yZURhdGEnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR1cGRhdGVDb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluVXBkYXRlQ29yZURhdGEnLCB7fSwgOTAwMDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlSW5zdGFsbChmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdBZG1pblBhY2thZ2VJbnN0YWxsJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkJzogb1BhY2thZ2UuaWQsXG5cdFx0XHRcdCdUeXBlJzogb1BhY2thZ2UudHlwZSxcblx0XHRcdFx0J0ZpbGUnOiBvUGFja2FnZS5maWxlXG5cdFx0XHR9LFxuXHRcdFx0NjAwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlRGVsZXRlKGZDYWxsYmFjaywgb1BhY2thZ2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZURlbGV0ZScsIHtcblx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdHBsdWdpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbkRlbGV0ZShmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRlbGV0ZScsIHtcblx0XHRcdCdOYW1lJzogc05hbWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0ZG9tYWluRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQ29uZmlnXG5cdCAqL1xuXHRwbHVnaW5TZXR0aW5nc1VwZGF0ZShmQ2FsbGJhY2ssIG9Db25maWcpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpblNldHRpbmdzVXBkYXRlJywgb0NvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJGb3JjZVxuXHQgKi9cblx0bGljZW5zaW5nKGZDYWxsYmFjaywgYkZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmcnLCB7XG5cdFx0XHRGb3JjZTogYkZvcmNlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0RvbWFpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0tleVxuXHQgKi9cblx0bGljZW5zaW5nQWN0aXZhdGUoZkNhbGxiYWNrLCBzRG9tYWluLCBzS2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmdBY3RpdmF0ZScsIHtcblx0XHRcdERvbWFpbjogc0RvbWFpbixcblx0XHRcdEtleTogc0tleVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpc2FibGVkXG5cdCAqL1xuXHRwbHVnaW5EaXNhYmxlKGZDYWxsYmFjaywgc05hbWUsIGJEaXNhYmxlZCkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luRGlzYWJsZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0RGlzYWJsZWQ6IGJEaXNhYmxlZCA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluQWxpYXMoZkNhbGxiYWNrLCBzTmFtZSwgc0FsaWFzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkFsaWFzU2F2ZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0QWxpYXM6IHNBbGlhc1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdGJDcmVhdGUsXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiSW5jU2hvcnRMb2dpbixcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlQWxsb3dSYXcsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRTaG9ydExvZ2luLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsLFxuXHRcdHNXaGl0ZUxpc3Rcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblNhdmUnLCB7XG5cdFx0XHQnQ3JlYXRlJzogYkNyZWF0ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnSW5jU2hvcnRMb2dpbic6IGJJbmNTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVBbGxvd1Jhdyc6IHNTaWV2ZUFsbG93UmF3ID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlSG9zdCc6IHNTaWV2ZUhvc3QsXG5cdFx0XHQnU2lldmVQb3J0JzogaVNpZXZlUG9ydCxcblx0XHRcdCdTaWV2ZVNlY3VyZSc6IHNTaWV2ZVNlY3VyZSxcblxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRTaG9ydExvZ2luJzogYk91dFNob3J0TG9naW4gPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0QXV0aCc6IGJPdXRBdXRoID8gJzEnIDogJzAnLFxuXHRcdFx0J091dFVzZVBocE1haWwnOiBiT3V0UGhwTWFpbCA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1doaXRlTGlzdCc6IHNXaGl0ZUxpc3Rcblx0XHR9KTtcblx0fVxuXG5cdHRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzTmFtZSxcblx0XHRzSW5jSG9zdCxcblx0XHRpSW5jUG9ydCxcblx0XHRzSW5jU2VjdXJlLFxuXHRcdGJVc2VTaWV2ZSxcblx0XHRzU2lldmVIb3N0LFxuXHRcdGlTaWV2ZVBvcnQsXG5cdFx0c1NpZXZlU2VjdXJlLFxuXHRcdHNPdXRIb3N0LFxuXHRcdGlPdXRQb3J0LFxuXHRcdHNPdXRTZWN1cmUsXG5cdFx0Yk91dEF1dGgsXG5cdFx0Yk91dFBocE1haWxcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblRlc3QnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J0luY0hvc3QnOiBzSW5jSG9zdCxcblx0XHRcdCdJbmNQb3J0JzogaUluY1BvcnQsXG5cdFx0XHQnSW5jU2VjdXJlJzogc0luY1NlY3VyZSxcblx0XHRcdCdVc2VTaWV2ZSc6IGJVc2VTaWV2ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cdFx0XHQnT3V0SG9zdCc6IHNPdXRIb3N0LFxuXHRcdFx0J091dFBvcnQnOiBpT3V0UG9ydCxcblx0XHRcdCdPdXRTZWN1cmUnOiBzT3V0U2VjdXJlLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHRlc3RDb250YWN0cyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvbnRhY3RzVGVzdCcsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVOZXdBZG1pblBhc3N3b3JkKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFzc3dvcmRVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWRtaW5QaW5nKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QaW5nJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFJlbW90ZUFkbWluQWpheCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIGluRm9jdXMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkd2luLCBrZXlTY29wZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0Vmlld05leHQge1xuXHRiRGlzYWJlQ2xvc2VPbkVzYyA9IGZhbHNlO1xuXHRzRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblx0c0N1cnJlbnRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cblx0dmlld01vZGVsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRtb2RhbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0dmlld01vZGVsTmFtZSA9ICcnO1xuXHR2aWV3TW9kZWxOYW1lcyA9IFtdO1xuXHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHN0b3JlQW5kU2V0S2V5U2NvcGUoKSB7XG5cdFx0dGhpcy5zQ3VycmVudEtleVNjb3BlID0ga2V5U2NvcGUoKTtcblx0XHRrZXlTY29wZSh0aGlzLnNEZWZhdWx0S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVzdG9yZUtleVNjb3BlKCkge1xuXHRcdGtleVNjb3BlKHRoaXMuc0N1cnJlbnRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZWdpc3RlclBvcHVwS2V5RG93bigpIHtcblx0XHQkd2luLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgJiYgRXZlbnRLZXlDb2RlLkVzYyA9PT0gZXZlbnQua2V5Q29kZSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5CYWNrc3BhY2UgPT09IGV2ZW50LmtleUNvZGUgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdGNhbmNlbENvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cdGNsb3NlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlID0ge307XG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5nb29nbGUuZW5hYmxlZCgpICYmICh0aGlzLmdvb2dsZS5jYXBhLmF1dGgoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aEdtYWlsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxEcml2ZScpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3JykpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBJRCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBTZWNyZXQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3VwcG9ydGVkRmFjZWJvb2tTb2NpYWwnKSk7XG5cblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lcktleScpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnKSk7XG5cblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0Ryb3Bib3hTb2NpYWwnKSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJvcGJveEFwaUtleScpKTtcblx0fVxuXG5cdGFwcGVuZERyb3Bib3goKSB7XG5cdFx0aWYgKCF3aW5kb3cuRHJvcGJveCAmJiB0aGlzLmRyb3Bib3guZW5hYmxlZCgpICYmIHRoaXMuZHJvcGJveC5hcGlLZXkoKSkge1xuXHRcdFx0aWYgKCF3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bib3hqcycpKSB7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3d3dy5kcm9wYm94LmNvbS9zdGF0aWMvYXBpLzIvZHJvcGlucy5qcyc7XG5cdFx0XHRcdCQoc2NyaXB0KVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsICdkcm9wYm94anMnKVxuXHRcdFx0XHRcdC5hdHRyKCdkYXRhLWFwcC1rZXknLCB0aGlzLmRyb3Bib3guYXBpS2V5KCkpO1xuXG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTb2NpYWxTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZlwiKTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG5Ub05vZGVzIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5jbGFzcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdGRpc3Bvc2FibGUgPSBbXTtcblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcG9zYWJsZS5mb3JFYWNoKChmdW5jVG9EaXNwb3NlKSA9PiB7XG5cdFx0XHRpZiAoZnVuY1RvRGlzcG9zZSAmJiBmdW5jVG9EaXNwb3NlLmRpc3Bvc2UpIHtcblx0XHRcdFx0ZnVuY1RvRGlzcG9zZS5kaXNwb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IENsYXNzT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVJRCA9ICcnXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCBjb21wb25lbnRFeHBvcnRIZWxwZXIgPSAoQ2xhc3NPYmplY3QsIHRlbXBsYXRlSUQgPSAnJykgPT4gKHtcblx0dGVtcGxhdGU6IHRlbXBsYXRlSUQgPyB7IGVsZW1lbnQ6IHRlbXBsYXRlSUQgfSA6ICc8Yj48L2I+Jyxcblx0dmlld01vZGVsOiB7XG5cdFx0Y3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG5cdFx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0XHRwYXJhbXMuZWxlbWVudCA9IG51bGw7XG5cblx0XHRcdGlmIChjb21wb25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uZWxlbWVudCkge1xuXHRcdFx0XHRwYXJhbXMuY29tcG9uZW50ID0gY29tcG9uZW50SW5mbztcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQgPSAkKGNvbXBvbmVudEluZm8uZWxlbWVudCk7XG5cblx0XHRcdFx0aTE4blRvTm9kZXMocGFyYW1zLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGlmICghaXNVbmQocGFyYW1zLmlubGluZSkgJiYga28udW53cmFwKHBhcmFtcy5pbmxpbmUpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgQ2xhc3NPYmplY3QocGFyYW1zKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgQ29yZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvcmVSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVDaGFubmVsID0ga28ub2JzZXJ2YWJsZSgnc3RhYmxlJyk7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQWNjZXNzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVXYXJuaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb3JlQ2hlY2tpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXHRcdHRoaXMuY29yZVVwZGF0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlUmVtb3RlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IGtvLm9ic2VydmFibGUoLTIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlQWRtaW5TdG9yZSgpO1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9iaW5kLWNvbnRleHQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gTmF0aXZlQ29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgKHBhdGhbVEFSR0VUXSA9IHt9KTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhcyhuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbCk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5ncyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSAnZnVuY3Rpb24nKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoRnVuY3Rpb24uY2FsbCwgc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGhpZGUocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkgaGlkZShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdW2tleV0gPSBzb3VyY2VQcm9wZXJ0eTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAhdGFyZ2V0UHJvdG90eXBlW2tleV0pIGhpZGUodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICB9XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLWluc3RhbmNlcy1uYW1lXG5pZiAoREVTQ1JJUFRPUlMgJiYgIShOQU1FIGluIEZ1bmN0aW9uUHJvdG90eXBlKSkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTkFNRSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nLmNhbGwodGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJyAmJiAhaGFzKHZhbHVlLCAnbmFtZScpKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywga2V5KTtcbiAgICBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSkuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sIGtleSwgdmFsdWUpO1xuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSk7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKFJFUExBQ0UsIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSwgcmVhc29uKSB7XG4gIHZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IHJlYXNvbi5SRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTtcbiAgdmFyIFJFUExBQ0VfS0VFUFNfJDAgPSByZWFzb24uUkVQTEFDRV9LRUVQU18kMDtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSAmJiBSRVBMQUNFX0tFRVBTXyQwKSB8fFxuICAgICAgICAodHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZVJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YXJpYWJsZSA9PSAnZnVuY3Rpb24nID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxubGV0IF9tb21lbnQgPSBudWxsO1xubGV0IF9tb21lbnROb3cgPSAwO1xuXG5jb25zdCB1cGRhdGVNb21lbnROb3cgPSBfLmRlYm91bmNlKFxuXHQoKSA9PiB7XG5cdFx0X21vbWVudCA9IG1vbWVudCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vd1VuaXggPSBfLmRlYm91bmNlKFxuXHQoKSA9PiB7XG5cdFx0X21vbWVudE5vdyA9IG1vbWVudCgpLnVuaXgoKTtcblx0fSxcblx0NTAwLFxuXHR0cnVlXG4pO1xuXG4vKipcbiAqIEByZXR1cm5zIHttb21lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3coKSB7XG5cdHVwZGF0ZU1vbWVudE5vdygpO1xuXHRyZXR1cm4gX21vbWVudCB8fCBtb21lbnQoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50Tm93VW5peCgpIHtcblx0dXBkYXRlTW9tZW50Tm93VW5peCgpO1xuXHRyZXR1cm4gX21vbWVudE5vdyB8fCAwO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyKGRhdGUpIHtcblx0cmV0dXJuIG1vbWVudE5vdygpXG5cdFx0LmNsb25lKClcblx0XHQuc3VidHJhY3QoZGF0ZSwgJ2RheXMnKVxuXHRcdC5mb3JtYXQoJ1lZWVkuTU0uREQnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gbVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0Q3VzdG9tU2hvcnREYXRlKG0pIHtcblx0Y29uc3Qgbm93ID0gbW9tZW50Tm93KCk7XG5cdGlmIChtICYmIG5vdykge1xuXHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0Y2FzZSA0ID49IG5vdy5kaWZmKG0sICdob3VycycpOlxuXHRcdFx0XHRyZXR1cm4gbS5mcm9tTm93KCk7XG5cdFx0XHRjYXNlIG5vdy5mb3JtYXQoJ0wnKSA9PT0gbS5mb3JtYXQoJ0wnKTpcblx0XHRcdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9UT0RBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93XG5cdFx0XHRcdC5jbG9uZSgpXG5cdFx0XHRcdC5zdWJ0cmFjdCgxLCAnZGF5cycpXG5cdFx0XHRcdC5mb3JtYXQoJ0wnKSA9PT0gbS5mb3JtYXQoJ0wnKTpcblx0XHRcdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9ZRVNURVJEQVlfQVQnLCB7XG5cdFx0XHRcdFx0VElNRTogbS5mb3JtYXQoJ0xUJylcblx0XHRcdFx0fSk7XG5cdFx0XHRjYXNlIG5vdy55ZWFyKCkgPT09IG0ueWVhcigpOlxuXHRcdFx0XHRyZXR1cm4gbS5mb3JtYXQoJ0QgTU1NLicpO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtID8gbS5mb3JtYXQoJ0xMJykgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZVN0YW1wSW5VVENcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRTdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQodGltZVN0YW1wSW5VVEMsIGZvcm1hdFN0cikge1xuXHRsZXQgbSA9IG51bGwsXG5cdFx0cmVzdWx0ID0gJyc7XG5cblx0Y29uc3Qgbm93ID0gbW9tZW50Tm93VW5peCgpO1xuXG5cdHRpbWVTdGFtcEluVVRDID0gMCA8IHRpbWVTdGFtcEluVVRDID8gdGltZVN0YW1wSW5VVEMgOiAwID09PSB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IDA7XG5cdHRpbWVTdGFtcEluVVRDID0gbm93IDwgdGltZVN0YW1wSW5VVEMgPyBub3cgOiB0aW1lU3RhbXBJblVUQztcblxuXHRtID0gMCA8IHRpbWVTdGFtcEluVVRDID8gbW9tZW50LnVuaXgodGltZVN0YW1wSW5VVEMpIDogbnVsbDtcblxuXHRpZiAobSAmJiAxOTcwID09PSBtLnllYXIoKSkge1xuXHRcdG0gPSBudWxsO1xuXHR9XG5cblx0aWYgKG0pIHtcblx0XHRzd2l0Y2ggKGZvcm1hdFN0cikge1xuXHRcdFx0Y2FzZSAnRlJPTU5PVyc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZnJvbU5vdygpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1NIT1JUJzpcblx0XHRcdFx0cmVzdWx0ID0gZm9ybWF0Q3VzdG9tU2hvcnREYXRlKG0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0ZVTEwnOlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdCgnTExMJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0U3RyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnRUb05vZGUoZWxlbWVudCkge1xuXHRsZXQga2V5ID0gJycsXG5cdFx0dGltZSA9IDA7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0dGltZSA9ICRlbC5kYXRhKCdtb21lbnQtdGltZScpO1xuXHRpZiAodGltZSkge1xuXHRcdGtleSA9ICRlbC5kYXRhKCdtb21lbnQtZm9ybWF0Jyk7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0JGVsLnRleHQoZm9ybWF0KHRpbWUsIGtleSkpO1xuXHRcdH1cblxuXHRcdGtleSA9ICRlbC5kYXRhKCdtb21lbnQtZm9ybWF0LXRpdGxlJyk7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0JGVsLmF0dHIoJ3RpdGxlJywgZm9ybWF0KHRpbWUsIGtleSkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKCkge1xuXHRfLmRlZmVyKCgpID0+IHtcblx0XHQkKCcubW9tZW50Jywgd2luZG93LmRvY3VtZW50KS5lYWNoKChpbmRleCwgaXRlbSkgPT4ge1xuXHRcdFx0bW9tZW50VG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lmhhc2hlcjsiLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIvKipcbiAqIEByZXR1cm5zIHtBcHBBZG1pbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcCgpIHtcblx0cmV0dXJuIHJlcXVpcmUoJ0FwcC9BZG1pbicpLmRlZmF1bHQ7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgc3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIFN5bWJvbFtuYW1lXVxuICAgIHx8IChOQVRJVkVfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgTGFuZ3VhZ2VTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbiA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXNBZG1pbiB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdGNvbnN0IGFMYW5ndWFnZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzJyksXG5cdFx0XHRhTGFuZ3VhZ2VzQWRtaW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzQWRtaW4nKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VzKGlzQXJyYXkoYUxhbmd1YWdlcykgPyBhTGFuZ3VhZ2VzIDogW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4oaXNBcnJheShhTGFuZ3VhZ2VzQWRtaW4pID8gYUxhbmd1YWdlc0FkbWluIDogW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZUFkbWluJykpO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZScpKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2VBZG1pbicpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTGFuZ3VhZ2VTdG9yZSgpO1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IFtdLmpvaW47XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCJ2YXIgTyA9ICdvYmplY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gTyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09IE8gJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSBPICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gTyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBTdG9yZSB9IGZyb20gJ1N0b3Jlcy9BYnN0cmFjdEFwcCc7XG5cbmNsYXNzIEFwcEFkbWluU3RvcmUgZXh0ZW5kcyBBYnN0cmFjdEFwcFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHN1cGVyLnBvcHVsYXRlKCk7XG5cblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSghIXNldHRpbmdzR2V0KCdEZXRlcm1pbmVVc2VyTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluKCEhc2V0dGluZ3NHZXQoJ0RldGVybWluZVVzZXJEb21haW4nKSk7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCghIXNldHRpbmdzR2V0KCdXZWFrUGFzc3dvcmQnKSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMoISFzZXR0aW5nc0dldCgnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJykpO1xuXG5cdFx0aWYgKHNldHRpbmdzR2V0KCdBdXRoJykpIHtcblx0XHRcdCQuZ2V0KCcuL2RhdGEvVkVSU0lPTj8nICsgd2luZG93Lk1hdGgucmFuZG9tKCkpLnRoZW4oKCkgPT4gdGhpcy5kYXRhRm9sZGVyQWNjZXNzKHRydWUpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEFwcEFkbWluU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbnRlZ2VyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNOYU4oYXJndW1lbnQgPSArYXJndW1lbnQpID8gMCA6IChhcmd1bWVudCA+IDAgPyBmbG9vciA6IGNlaWwpKGFyZ3VtZW50KTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBhZGRyZXNzcGFyc2VyIGZyb20gJ2VtYWlsanMtYWRkcmVzc3BhcnNlcic7XG5pbXBvcnQgeyB0cmltLCBlbmNvZGVIdG1sLCBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5jbGFzcyBFbWFpbE1vZGVsIHtcblx0ZW1haWwgPSAnJztcblx0bmFtZSA9ICcnO1xuXHRka2ltU3RhdHVzID0gJyc7XG5cdGRraW1WYWx1ZSA9ICcnO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IGVtYWlsID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltU3RhdHVzID0gJ25vbmUnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVZhbHVlID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVtYWlsID0gJycsIG5hbWUgPSAnJywgZGtpbVN0YXR1cyA9ICdub25lJywgZGtpbVZhbHVlID0gJycpIHtcblx0XHR0aGlzLmVtYWlsID0gZW1haWw7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLmRraW1TdGF0dXMgPSBka2ltU3RhdHVzO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gZGtpbVZhbHVlO1xuXG5cdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0ganNvblxuXHQgKiBAcmV0dXJucyB7P0VtYWlsTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXHRcdHJldHVybiBlbWFpbC5pbml0QnlKc29uKGpzb24pID8gZW1haWwgOiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5lbWFpbCA9ICcnO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gJ25vbmUnO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHR2YWxpZGF0ZSgpIHtcblx0XHRyZXR1cm4gJycgIT09IHRoaXMubmFtZSB8fCAnJyAhPT0gdGhpcy5lbWFpbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHdpdGhvdXROYW1lID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGhhc2god2l0aG91dE5hbWUgPSBmYWxzZSkge1xuXHRcdHJldHVybiAnIycgKyAod2l0aG91dE5hbWUgPyAnJyA6IHRoaXMubmFtZSkgKyAnIycgKyB0aGlzLmVtYWlsICsgJyMnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXJEdXBsaWNhdGVOYW1lKCkge1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IHRoaXMuZW1haWwpIHtcblx0XHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzZWFyY2gocXVlcnkpIHtcblx0XHRyZXR1cm4gLTEgPCAodGhpcy5uYW1lICsgJyAnICsgdGhpcy5lbWFpbCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0gb0pzb25FbWFpbFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0VtYWlsJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSB0cmltKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmVtYWlsID0gdHJpbShqc29uLkVtYWlsKTtcblx0XHRcdHRoaXMuZGtpbVN0YXR1cyA9IHRyaW0oanNvbi5Ea2ltU3RhdHVzIHx8ICcnKTtcblx0XHRcdHRoaXMuZGtpbVZhbHVlID0gdHJpbShqc29uLkRraW1WYWx1ZSB8fCAnJyk7XG5cblx0XHRcdHJlc3VsdCA9ICcnICE9PSB0aGlzLmVtYWlsO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZUVuY29kZUh0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UsIHVzZUVuY29kZUh0bWwgPSBmYWxzZSkge1xuXHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRpZiAoJycgIT09IHRoaXMuZW1haWwpIHtcblx0XHRcdGlmIChmcmllbmRseVZpZXcgJiYgJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRyZXN1bHQgPSB3cmFwV2l0aExpbmtcblx0XHRcdFx0XHQ/ICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0ICAnP3RvPScgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdCAgJ1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5uYW1lKSArXG5cdFx0XHRcdFx0ICAnPC9hPidcblx0XHRcdFx0XHQ6IHVzZUVuY29kZUh0bWxcblx0XHRcdFx0XHQ/IGVuY29kZUh0bWwodGhpcy5uYW1lKVxuXHRcdFx0XHRcdDogdGhpcy5uYW1lO1xuXHRcdFx0XHQvLyByZXN1bHQgPSB3cmFwV2l0aExpbmsgPyAnPGEgaHJlZj1cIm1haWx0bzonICsgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArIGVuY29kZUh0bWwodGhpcy5uYW1lKSArICc8L2E+JyA6ICh1c2VFbmNvZGVIdG1sID8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpIDogdGhpcy5uYW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuZW1haWw7XG5cdFx0XHRcdGlmICgnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArXG5cdFx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdFx0Jz90bz0nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0XHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0XHQvLyByZXN1bHQgPSBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICsgJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdC8vIFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSAnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgcmVzdWx0ICsgJz4nO1xuXHRcdFx0XHRcdFx0aWYgKHVzZUVuY29kZUh0bWwpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gZW5jb2RlSHRtbChyZXN1bHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCc8L2E+Jztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgc3BsaXRFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRcdGxldCBleGlzdHMgPSBmYWxzZTtcblx0XHRcdHBhcnNlZFJlc3VsdC5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZHJlc3MgPSBpdGVtLmFkZHJlc3Ncblx0XHRcdFx0XHQ/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKVxuXHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0XHRpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmVtYWlsKSB7XG5cdFx0XHRcdFx0ZXhpc3RzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGFkZHJlc3MgPyBhZGRyZXNzLnRvTGluZShmYWxzZSkgOiBpdGVtLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBleGlzdHMgPyByZXN1bHQgOiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlRW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIF8uY29tcGFjdChcblx0XHRcdFx0Xy5tYXAocGFyc2VkUmVzdWx0LCAoaXRlbSkgPT5cblx0XHRcdFx0XHRpdGVtLmFkZHJlc3MgPyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJykgOiBudWxsXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbEFkZHJlc3Ncblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwYXJzZShlbWFpbEFkZHJlc3MpIHtcblx0XHRlbWFpbEFkZHJlc3MgPSB0cmltKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKCcnID09PSBlbWFpbEFkZHJlc3MpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShyZXN1bHQpICYmIHJlc3VsdFswXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gcmVzdWx0WzBdLm5hbWUgfHwgJyc7XG5cdFx0XHR0aGlzLmVtYWlsID0gcmVzdWx0WzBdLmFkZHJlc3MgfHwgJyc7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IHsgRW1haWxNb2RlbCwgRW1haWxNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCwgdHJpbSwgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RJbnB1dCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlIHx8ICcnO1xuXHRcdHRoaXMuc2l6ZSA9IHBhcmFtcy5zaXplIHx8IDA7XG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLnByZUxhYmVsID0gcGFyYW1zLnByZUxhYmVsIHx8ICcnO1xuXHRcdHRoaXMuZW5hYmxlID0gaXNVbmQocGFyYW1zLmVuYWJsZSkgPyB0cnVlIDogcGFyYW1zLmVuYWJsZTtcblx0XHR0aGlzLnRyaWdnZXIgPSBwYXJhbXMudHJpZ2dlciAmJiBwYXJhbXMudHJpZ2dlci5zdWJzY3JpYmUgPyBwYXJhbXMudHJpZ2dlciA6IG51bGw7XG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IHBhcmFtcy5wbGFjZWhvbGRlciB8fCAnJztcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMucHJlTGFiZWxlZCA9ICFpc1VuZChwYXJhbXMucHJlTGFiZWwpO1xuXHRcdHRoaXMudHJpZ2dlcmVkID0gIWlzVW5kKHBhcmFtcy50cmlnZ2VyKSAmJiAhIXRoaXMudHJpZ2dlcjtcblxuXHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNsYXNzTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpemUgPSBrby51bndyYXAodGhpcy5zaXplKSxcblx0XHRcdFx0c3VmZml4VmFsdWUgPSB0aGlzLnRyaWdnZXIgPyAnICcgKyB0cmltKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyLWlucHV0ICcgKyB0aGlzLmNsYXNzRm9yVHJpZ2dlcigpKSA6ICcnO1xuXHRcdFx0cmV0dXJuICgwIDwgc2l6ZSA/ICdzcGFuJyArIHNpemUgOiAnJykgKyBzdWZmaXhWYWx1ZTtcblx0XHR9KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLndpZHRoKSAmJiBwYXJhbXMuZWxlbWVudCkge1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQuZmluZCgnaW5wdXQsc2VsZWN0LHRleHRhcmVhJykuY3NzKCd3aWR0aCcsIHBhcmFtcy53aWR0aCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy5jbGFzc05hbWUpO1xuXG5cdFx0aWYgKHRoaXMudHJpZ2dlcikge1xuXHRcdFx0dGhpcy5zZXRUcmlnZ2VyU3RhdGUodGhpcy50cmlnZ2VyKCkpO1xuXG5cdFx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLnRyaWdnZXIuc3Vic2NyaWJlKHRoaXMuc2V0VHJpZ2dlclN0YXRlLCB0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0VHJpZ2dlclN0YXRlKHZhbHVlKSB7XG5cdFx0c3dpdGNoIChwSW50KHZhbHVlKSkge1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCdzdWNjZXNzJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignZXJyb3InKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdElucHV0LCBBYnN0cmFjdElucHV0IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBDYXBhIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBDYXBhQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuYWRkaXRpb25hbEFjY291bnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5pZGVudGl0aWVzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5ncmF2YXRhciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudFRodW1ibmFpbHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maWx0ZXJzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50aGVtZXMgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMudXNlckJhY2tncm91bmQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm9wZW5QR1AgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGhGb3JjZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVtcGxhdGVzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmFkZGl0aW9uYWxBY2NvdW50cyhTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKSk7XG5cdFx0dGhpcy5pZGVudGl0aWVzKFNldHRpbmdzLmNhcGEoQ2FwYS5JZGVudGl0aWVzKSk7XG5cdFx0dGhpcy5ncmF2YXRhcihTZXR0aW5ncy5jYXBhKENhcGEuR3JhdmF0YXIpKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRUaHVtYm5haWxzKFNldHRpbmdzLmNhcGEoQ2FwYS5BdHRhY2htZW50VGh1bWJuYWlscykpO1xuXHRcdHRoaXMuc2lldmUoU2V0dGluZ3MuY2FwYShDYXBhLlNpZXZlKSk7XG5cdFx0dGhpcy5maWx0ZXJzKFNldHRpbmdzLmNhcGEoQ2FwYS5GaWx0ZXJzKSk7XG5cdFx0dGhpcy50aGVtZXMoU2V0dGluZ3MuY2FwYShDYXBhLlRoZW1lcykpO1xuXHRcdHRoaXMudXNlckJhY2tncm91bmQoU2V0dGluZ3MuY2FwYShDYXBhLlVzZXJCYWNrZ3JvdW5kKSk7XG5cdFx0dGhpcy5vcGVuUEdQKFNldHRpbmdzLmNhcGEoQ2FwYS5PcGVuUEdQKSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoKFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGhGb3JjZShTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yRm9yY2UpKTtcblx0XHR0aGlzLnRlbXBsYXRlcyhTZXR0aW5ncy5jYXBhKENhcGEuVGVtcGxhdGVzKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENhcGFBZG1pblN0b3JlKCk7XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIFBhY2thZ2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wYWNrYWdlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5wYWNrYWdlcy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblxuXHRcdHRoaXMucGFja2FnZXNSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnBhY2thZ2VzTWFpblVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBhY2thZ2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKHR5cGVvZiBzdG9yZS5pbnNwZWN0U291cmNlICE9ICdmdW5jdGlvbicpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cubW9tZW50OyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnByb2dyZXNzSnM7IiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG5cbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5cbi8vIGxldCByYWlubG9vcENhY2hlcyA9IHdpbmRvdy5jYWNoZXMgJiYgd2luZG93LmNhY2hlcy5vcGVuID8gd2luZG93LmNhY2hlcyA6IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtzcmN9IHNyY1xuICogQHBhcmFtIHtib29sZWFufSBhc3luYyA9IGZhbHNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGphc3NsKHNyYywgYXN5bmMgPSBmYWxzZSkge1xuXHRpZiAoIXdpbmRvdy5Qcm9taXNlIHx8ICF3aW5kb3cuUHJvbWlzZS5hbGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Byb21pc2VzIGFyZSBub3QgYXZhaWxhYmxlIHlvdXIgZW52aXJvbm1lbnQuJyk7XG5cdH1cblxuXHRpZiAoIXNyYykge1xuXHRcdHRocm93IG5ldyBFcnJvcignc3JjIHNob3VsZCBub3QgYmUgZW1wdHkuJyk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG5cdFx0ZWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XG5cdFx0XHRyZXNvbHZlKHNyYyk7XG5cdFx0fTtcblxuXHRcdGVsZW1lbnQub25lcnJvciA9ICgpID0+IHtcblx0XHRcdHJlamVjdChuZXcgRXJyb3Ioc3JjKSk7XG5cdFx0fTtcblxuXHRcdGVsZW1lbnQuYXN5bmMgPSB0cnVlID09PSBhc3luYztcblx0XHRlbGVtZW50LnNyYyA9IHNyYztcblxuXHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHR9KSAvKiAudGhlbigocykgPT4ge1xuXG5cdFx0Y29uc3QgZm91bmQgPSBzICYmIHJhaW5sb29wQ2FjaGVzID8gcy5tYXRjaCgvcmFpbmxvb3BcXC92XFwvKFteXFwvXSspXFwvc3RhdGljXFwvLykgOiBudWxsO1xuXHRcdGlmIChmb3VuZCAmJiBmb3VuZFsxXSlcblx0XHR7XG5cdFx0XHRyYWlubG9vcENhY2hlcy5vcGVuKCdyYWlubG9vcC1vZmZsaW5lLScgKyBmb3VuZFsxXSkudGhlbihcblx0XHRcdFx0KGNhY2hlKSA9PiBjYWNoZS5hZGQocylcblx0XHRcdCkuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRyYWlubG9vcENhY2hlcyA9IG51bGw7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcztcblx0fSkqLztcbn1cbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQykge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KGl0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4vcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLztcbiAgdmFyIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1kgfHwgc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1k7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSByZWdleHBGbGFncy5jYWxsKHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgneScsICcnKTtcbiAgICAgIGlmIChmbGFncy5pbmRleE9mKCdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IFN0cmluZyhzdHIpLnNsaWNlKHJlLmxhc3RJbmRleCk7XG4gICAgICAvLyBTdXBwb3J0IGFuY2hvcmVkIHN0aWNreSBiZWhhdmlvci5cbiAgICAgIGlmIChyZS5sYXN0SW5kZXggPiAwICYmICghcmUubXVsdGlsaW5lIHx8IHJlLm11bHRpbGluZSAmJiBzdHJbcmUubGFzdEluZGV4IC0gMV0gIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChzdGlja3kgPyByZUNvcHkgOiByZSwgc3RyQ29weSk7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guaW5wdXQgPSBtYXRjaC5pbnB1dC5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcCA9IFN0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIHJmID0gUi5mbGFncztcbiAgICB2YXIgZiA9IFN0cmluZyhyZiA9PT0gdW5kZWZpbmVkICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgPyBmbGFncy5jYWxsKFIpIDogcmYpO1xuICAgIHJldHVybiAnLycgKyBwICsgJy8nICsgZjtcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyKGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFRoZW1lU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRoZW1lID0ga28ub2JzZXJ2YWJsZSgnJykuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMudGhlbWVzIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgdGhlbWVzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3RoZW1lcycpO1xuXG5cdFx0dGhpcy50aGVtZXMoaXNBcnJheSh0aGVtZXMpID8gdGhlbWVzIDogW10pO1xuXHRcdHRoaXMudGhlbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RoZW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmROYW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZVN0b3JlKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQbHVnaW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wbHVnaW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBsdWdpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5wbHVnaW5zLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbkFkbWluU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIExpY2Vuc2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saWNlbnNpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2luZ1Byb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2VWYWxpZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zZUV4cGlyZWQgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMubGljZW5zZUVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxpY2Vuc2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExpY2Vuc2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyICRmZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSkge1xuICAgIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgIGlmIChWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gICAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIGlmICghSVNfTk9ERSAmJiB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ICE9ICdmdW5jdGlvbicpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFByb21pc2VDb25zdHJ1Y3RvcikpIHJldHVybiBmYWxzZTtcbiAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICByZXR1cm4gIShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlKTtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQocHJvbWlzZSwgc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgcHJvbWlzZSwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4ocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHByb21pc2UsIHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgd3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdChwcm9taXNlLCB7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB0aGlzLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHRoaXMsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHRoaXMsIHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHRoaXMsIHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2UucHJvdG90eXBlLnRoZW47XG5cbiAgICAvLyB3cmFwIG5hdGl2ZSBQcm9taXNlI3RoZW4gZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgLy8gd3JhcCBmZXRjaCByZXN1bHRcbiAgICBpZiAodHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShQcm9taXNlQ29uc3RydWN0b3IsICRmZXRjaC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgY2FwYWJpbGl0eS5yZWplY3QuY2FsbCh1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoSVNfUFVSRSAmJiB0aGlzID09PSBQcm9taXNlV3JhcHBlciA/IFByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgLy8gYFByb21pc2UuYWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIFBSRUZFUlJFRF9TVFJJTkcpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGlucHV0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNi40JyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIFN0cmluZyhrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyAoKytpZCArIHBvc3RmaXgpLnRvU3RyaW5nKDM2KTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiB0eXBlb2YgZGV0ZWN0aW9uID09ICdmdW5jdGlvbicgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG5cbnZhciBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBwb3N0ID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmICFmYWlscyhwb3N0KSkge1xuICAgIGRlZmVyID0gcG9zdDtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG4vLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbi8vIFdlZXggSlMgaGFzIGZyb3plbiBidWlsdC1pbiBwcm90b3R5cGVzLCBzbyB1c2UgdHJ5IC8gY2F0Y2ggd3JhcHBlclxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAhPT0gMiB8fCByZXN1bHRbMF0gIT09ICdhJyB8fCByZXN1bHRbMV0gIT09ICdiJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYywgc2hhbSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICEoXG4gICAgICBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyAmJlxuICAgICAgUkVQTEFDRV9LRUVQU18kMCAmJlxuICAgICAgIVJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFXG4gICAgKSkgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9LCB7XG4gICAgICBSRVBMQUNFX0tFRVBTXyQwOiBSRVBMQUNFX0tFRVBTXyQwLFxuICAgICAgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkU6IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFXG4gICAgfSk7XG4gICAgdmFyIHN0cmluZ01ldGhvZCA9IG1ldGhvZHNbMF07XG4gICAgdmFyIHJlZ2V4TWV0aG9kID0gbWV0aG9kc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyaW5nTWV0aG9kKTtcbiAgICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxuXG4gIGlmIChzaGFtKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwLnByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cblxuICByZXR1cm4gcmVnZXhwRXhlYy5jYWxsKFIsIFMpO1xufTtcblxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgY3Jvc3Nyb2FkcyBmcm9tICdjcm9zc3JvYWRzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNjcmVlbiB7XG5cdG9Dcm9zcyA9IG51bGw7XG5cdHNTY3JlZW5OYW1lO1xuXHRhVmlld01vZGVscztcblxuXHRjb25zdHJ1Y3RvcihzY3JlZW5OYW1lLCB2aWV3TW9kZWxzID0gW10pIHtcblx0XHR0aGlzLnNTY3JlZW5OYW1lID0gc2NyZWVuTmFtZTtcblx0XHR0aGlzLmFWaWV3TW9kZWxzID0gaXNBcnJheSh2aWV3TW9kZWxzKSA/IHZpZXdNb2RlbHMgOiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHR2aWV3TW9kZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLmFWaWV3TW9kZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzY3JlZW5OYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLnNTY3JlZW5OYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/QXJyYXkpfVxuXHQgKi9cblx0cm91dGVzKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/T2JqZWN0fVxuXHQgKi9cblx0X19jcm9zcygpIHtcblx0XHRyZXR1cm4gdGhpcy5vQ3Jvc3M7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRfX3N0YXJ0KCkge1xuXHRcdGxldCByb3V0ZSA9IG51bGwsXG5cdFx0XHRmTWF0Y2hlciA9IG51bGw7XG5cdFx0Y29uc3Qgcm91dGVzID0gdGhpcy5yb3V0ZXMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocm91dGVzKSkge1xuXHRcdFx0Zk1hdGNoZXIgPSBfLmJpbmQodGhpcy5vblJvdXRlIHx8IG5vb3AsIHRoaXMpO1xuXHRcdFx0cm91dGUgPSBjcm9zc3JvYWRzLmNyZWF0ZSgpO1xuXG5cdFx0XHRyb3V0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiByb3V0ZSkge1xuXHRcdFx0XHRcdHJvdXRlLmFkZFJvdXRlKGl0ZW1bMF0sIGZNYXRjaGVyKS5ydWxlcyA9IGl0ZW1bMV07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm9Dcm9zcyA9IHJvdXRlO1xuXHRcdH1cblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnNzbTsiLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIGl0ZXJhdGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZm4sIHRoYXQsIEFTX0VOVFJJRVMsIElTX0lURVJBVE9SKSB7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChmbiwgdGhhdCwgQVNfRU5UUklFUyA/IDIgOiAxKTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoJ1RhcmdldCBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IEFTX0VOVFJJRVNcbiAgICAgICAgICA/IGJvdW5kRnVuY3Rpb24oYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pXG4gICAgICAgICAgOiBib3VuZEZ1bmN0aW9uKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpO1xuICB9XG5cbiAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgYm91bmRGdW5jdGlvbiwgc3RlcC52YWx1ZSwgQVNfRU5UUklFUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuXG5pdGVyYXRlLnN0b3AgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIHJlc3VsdCk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhbWV0aG9kIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBEb21haW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kb21haW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmRvbWFpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICd0aHJvdHRsZSc6IDEwMCB9KTtcblx0XHR0aGlzLmRvbWFpbnNXaXRob3V0QWxpYXNlcyA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMuZG9tYWlucygpLCAoaXRlbSkgPT4gaXRlbSAmJiAhaXRlbS5hbGlhcykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEb21haW5BZG1pblN0b3JlKCk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAqL1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IGRvY3VtZW50LmRvbWFpbiAmJiBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gYWN0aXZlWERvY3VtZW50ID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKCk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNilcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5jcm9zc3JvYWRzOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0Q2hlY2tib3ggZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zID0ge31cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWU7XG5cdFx0aWYgKGlzVW5kKHRoaXMudmFsdWUpIHx8ICF0aGlzLnZhbHVlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy52YWx1ZSkgPyBmYWxzZSA6ICEhdGhpcy52YWx1ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5lbmFibGUgPSBwYXJhbXMuZW5hYmxlO1xuXHRcdGlmIChpc1VuZCh0aGlzLmVuYWJsZSkgfHwgIXRoaXMuZW5hYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5lbmFibGUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMuZW5hYmxlKSA/IHRydWUgOiAhIXRoaXMuZW5hYmxlKTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc2FibGUgPSBwYXJhbXMuZGlzYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5kaXNhYmxlKSB8fCAhdGhpcy5kaXNhYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmRpc2FibGUpID8gZmFsc2UgOiAhIXRoaXMuZGlzYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLmlubGluZSA9IGlzVW5kKHBhcmFtcy5pbmxpbmUpID8gZmFsc2UgOiBwYXJhbXMuaW5saW5lO1xuXG5cdFx0dGhpcy5yZWFkT25seSA9IGlzVW5kKHBhcmFtcy5yZWFkT25seSkgPyBmYWxzZSA6ICEhcGFyYW1zLnJlYWRPbmx5O1xuXHRcdHRoaXMuaW52ZXJ0ZWQgPSBpc1VuZChwYXJhbXMuaW52ZXJ0ZWQpID8gZmFsc2UgOiAhIXBhcmFtcy5pbnZlcnRlZDtcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMubGFiZWxBbmltYXRlZCA9ICEhcGFyYW1zLmxhYmVsQW5pbWF0ZWQ7XG5cdH1cblxuXHRjbGljaygpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdGhpcy5lbmFibGUoKSAmJiAhdGhpcy5kaXNhYmxlKCkpIHtcblx0XHRcdHRoaXMudmFsdWUoIXRoaXMudmFsdWUoKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0Q2hlY2tib3gsIEFic3RyYWN0Q2hlY2tib3ggYXMgZGVmYXVsdCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBwYXJzZTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBQYXJzZXMgc3RydWN0dXJlZCBlLW1haWwgYWRkcmVzc2VzIGZyb20gYW4gYWRkcmVzcyBmaWVsZFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgXCJOYW1lIDxhZGRyZXNzQGRvbWFpbj5cIlxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvXG4gKlxuICogICAgIFt7bmFtZTogXCJOYW1lXCIsIGFkZHJlc3M6IFwiYWRkcmVzc0Bkb21haW5cIn1dXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYWRkcmVzcyBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihzdHIpO1xuICB2YXIgdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKCk7XG5cbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgYWRkcmVzcyA9IFtdO1xuICB2YXIgcGFyc2VkQWRkcmVzc2VzID0gW107XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIGFkZHJlc3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzcy5wdXNoKHRva2VuKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICB9XG5cbiAgYWRkcmVzc2VzLmZvckVhY2goZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICBhZGRyZXNzID0gX2hhbmRsZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZEFkZHJlc3Nlcztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyh0b2tlbnMpIHtcbiAgdmFyIGlzR3JvdXAgPSBmYWxzZTtcbiAgdmFyIHN0YXRlID0gJ3RleHQnO1xuICB2YXIgYWRkcmVzcyA9IHZvaWQgMDtcbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgZGF0YSA9IHtcbiAgICBhZGRyZXNzOiBbXSxcbiAgICBjb21tZW50OiBbXSxcbiAgICBncm91cDogW10sXG4gICAgdGV4dDogW11cblxuICAgIC8vIEZpbHRlciBvdXQgPGFkZHJlc3Nlcz4sIChjb21tZW50cykgYW5kIHJlZ3VsYXIgdGV4dFxuICB9O2ZvciAodmFyIGkgPSAwLCBsZW4gPSB0b2tlbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgIHN0YXRlID0gJ2dyb3VwJztcbiAgICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdGF0ZSA9ICd0ZXh0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnZhbHVlKSB7XG4gICAgICAgIGRhdGFbc3RhdGVdLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgIGRhdGEuY29tbWVudCA9IFtdO1xuICB9XG5cbiAgaWYgKGlzR3JvdXApIHtcbiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI2FwcGVuZGl4LUEuMS4zXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgYWRkcmVzcyAmJiBhZGRyZXNzLm5hbWUsXG4gICAgICBncm91cDogZGF0YS5ncm91cC5sZW5ndGggPyBwYXJzZShkYXRhLmdyb3VwLmpvaW4oJywnKSkgOiBbXVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIGFkZHJlc3Mgd2FzIGZvdW5kLCB0cnkgdG8gZGV0ZWN0IG9uZSBmcm9tIHJlZ3VsYXIgdGV4dFxuICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCAmJiBkYXRhLnRleHQubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBfaSA+PSAwOyBfaS0tKSB7XG4gICAgICAgIGlmIChkYXRhLnRleHRbX2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKF9pLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIF9yZWdleEhhbmRsZXIoYWRkcmVzcykge1xuICAgICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBbYWRkcmVzcy50cmltKCldO1xuICAgICAgICAgIHJldHVybiAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIHN0aWxsIG5vIGFkZHJlc3NcbiAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kyID49IDA7IF9pMi0tKSB7XG4gICAgICAgICAgZGF0YS50ZXh0W19pMl0gPSBkYXRhLnRleHRbX2kyXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpO1xuICAgICAgICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCBleGl4dHMsIHJlcGxhY2UgdGhlIHR3b1xuICAgIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLmNvbW1lbnQ7XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIG9ubHkgdGhlIGZpcnN0IGFkZHJlc3Mgb2NjdXJlbmNlLCBwdXNoIG90aGVycyB0byByZWd1bGFyIHRleHRcbiAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5jb25jYXQoZGF0YS5hZGRyZXNzLnNwbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy8gSm9pbiB2YWx1ZXMgd2l0aCBzcGFjZXNcbiAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuam9pbignICcpO1xuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJyk7XG5cbiAgICBpZiAoIWRhdGEuYWRkcmVzcyAmJiBpc0dyb3VwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MgPSB7XG4gICAgICAgIGFkZHJlc3M6IGRhdGEuYWRkcmVzcyB8fCBkYXRhLnRleHQgfHwgJycsXG4gICAgICAgIG5hbWU6IGRhdGEudGV4dCB8fCBkYXRhLmFkZHJlc3MgfHwgJydcbiAgICAgIH07XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcyA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXM7XG59O1xuXG4vKlxuICogT3BlcmF0b3IgdG9rZW5zIGFuZCB3aGljaCB0b2tlbnMgYXJlIGV4cGVjdGVkIHRvIGVuZCB0aGUgc2VxdWVuY2VcbiAqL1xudmFyIE9QRVJBVE9SUyA9IHtcbiAgJ1wiJzogJ1wiJyxcbiAgJygnOiAnKScsXG4gICc8JzogJz4nLFxuICAnLCc6ICcnLFxuICAvLyBHcm91cHMgYXJlIGVuZGVkIGJ5IHNlbWljb2xvbnNcbiAgJzonOiAnOycsXG4gIC8vIFNlbWljb2xvbnMgYXJlIG5vdCBhIGxlZ2FsIGRlbGltaXRlciBwZXIgdGhlIFJGQzI4MjIgZ3JhbW1hciBvdGhlclxuICAvLyB0aGFuIGZvciB0ZXJtaW5hdGluZyBhIGdyb3VwLCBidXQgdGhleSBhcmUgYWxzbyBub3QgdmFsaWQgZm9yIGFueVxuICAvLyBvdGhlciB1c2UgaW4gdGhpcyBjb250ZXh0LiAgR2l2ZW4gdGhhdCBzb21lIG1haWwgY2xpZW50cyBoYXZlXG4gIC8vIGhpc3RvcmljYWxseSBhbGxvd2VkIHRoZSBzZW1pY29sb24gYXMgYSBkZWxpbWl0ZXIgZXF1aXZhbGVudCB0byB0aGVcbiAgLy8gY29tbWEgaW4gdGhlaXIgVUksIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IHRoZW0gdGhlIHNhbWUgYXMgYSBjb21tYVxuICAvLyB3aGVuIHVzZWQgb3V0c2lkZSBvZiBhIGdyb3VwLlxuICAnOyc6ICcnXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICAgKi9cbn07XG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb2tlbml6ZXIoc3RyKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuaXplcik7XG5cbiAgICB0aGlzLnN0ciA9IChzdHIgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJztcbiAgICB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nID0gJyc7XG4gICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxpc3QgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZXMgdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygb3BlcmF0b3J8dGV4dCB0b2tlbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoVG9rZW5pemVyLCBbe1xuICAgIGtleTogJ3Rva2VuaXplJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9rZW5pemUoKSB7XG4gICAgICB2YXIgY2hyID0gdm9pZCAwO1xuICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjaHIgPSB0aGlzLnN0ci5jaGFyQXQoaSk7XG4gICAgICAgIHRoaXMuY2hlY2tDaGFyKGNocik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSAobm9kZS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbGlzdC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgY2hhcmFjdGVyIGlzIGFuIG9wZXJhdG9yIG9yIHRleHQgYW5kIGFjdHMgYWNjb3JkaW5nbHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjaHIgQ2hhcmFjdGVyIGZyb20gdGhlIGFkZHJlc3MgZmllbGRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2hlY2tDaGFyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tDaGFyKGNocikge1xuICAgICAgaWYgKChjaHIgaW4gT1BFUkFUT1JTIHx8IGNociA9PT0gJ1xcXFwnKSAmJiB0aGlzLmVzY2FwZWQpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyID09PSB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9IE9QRVJBVE9SU1tjaHJdO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZXNjYXBlZCAmJiBjaHIgPT09ICdcXFxcJykge1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5ub2RlLnZhbHVlICs9ICdcXFxcJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2RlLnZhbHVlICs9IGNocjtcbiAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2tlbml6ZXI7XG59KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OWhaR1J5WlhOemNHRnljMlZ5TG1weklsMHNJbTVoYldWeklqcGJJbkJoY25ObElpd2ljM1J5SWl3aWRHOXJaVzVwZW1WeUlpd2lWRzlyWlc1cGVtVnlJaXdpZEc5clpXNXpJaXdpZEc5clpXNXBlbVVpTENKaFpHUnlaWE56WlhNaUxDSmhaR1J5WlhOeklpd2ljR0Z5YzJWa1FXUmtjbVZ6YzJWeklpd2labTl5UldGamFDSXNJblJ2YTJWdUlpd2lkSGx3WlNJc0luWmhiSFZsSWl3aWJHVnVaM1JvSWl3aWNIVnphQ0lzSWw5b1lXNWtiR1ZCWkdSeVpYTnpJaXdpWTI5dVkyRjBJaXdpYVhOSGNtOTFjQ0lzSW5OMFlYUmxJaXdpWkdGMFlTSXNJbU52YlcxbGJuUWlMQ0puY205MWNDSXNJblJsZUhRaUxDSnBJaXdpYkdWdUlpd2lhbTlwYmlJc0ltNWhiV1VpTENKdFlYUmphQ0lzSW5Od2JHbGpaU0lzSWw5eVpXZGxlRWhoYm1Sc1pYSWlMQ0owY21sdElpd2ljbVZ3YkdGalpTSXNJazlRUlZKQlZFOVNVeUlzSW5SdlUzUnlhVzVuSWl3aWIzQmxjbUYwYjNKRGRYSnlaVzUwSWl3aWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jaUxDSnViMlJsSWl3aVpYTmpZWEJsWkNJc0lteHBjM1FpTENKamFISWlMQ0pqYUdGeVFYUWlMQ0pqYUdWamEwTm9ZWElpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN08ydENRV04zUWtFc1N6czdPenRCUVdSNFFqczdPenM3T3pzN096czdPenM3UVVGalpTeFRRVUZUUVN4TFFVRlVMRU5CUVdkQ1F5eEhRVUZvUWl4RlFVRnhRanRCUVVOc1F5eE5RVUZOUXl4WlFVRlpMRWxCUVVsRExGTkJRVW9zUTBGQlkwWXNSMEZCWkN4RFFVRnNRanRCUVVOQkxFMUJRVTFITEZOQlFWTkdMRlZCUVZWSExGRkJRVllzUlVGQlpqczdRVUZGUVN4TlFVRk5ReXhaUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCU1VNc1ZVRkJWU3hGUVVGa08wRkJRMEVzVFVGQlNVTXNhMEpCUVd0Q0xFVkJRWFJDT3p0QlFVVkJTaXhUUVVGUFN5eFBRVUZRTEVOQlFXVXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVU01UWl4UlFVRkpRU3hOUVVGTlF5eEpRVUZPTEV0QlFXVXNWVUZCWml4TFFVRTRRa1FzVFVGQlRVVXNTMEZCVGl4TFFVRm5RaXhIUVVGb1FpeEpRVUYxUWtZc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRnlSU3hEUVVGS0xFVkJRU3RGTzBGQlF6ZEZMRlZCUVVsTUxGRkJRVkZOTEUxQlFWb3NSVUZCYjBJN1FVRkRiRUpRTEd0Q1FVRlZVU3hKUVVGV0xFTkJRV1ZRTEU5QlFXWTdRVUZEUkR0QlFVTkVRU3huUWtGQlZTeEZRVUZXTzBGQlEwUXNTMEZNUkN4TlFVdFBPMEZCUTB4QkxHTkJRVkZQTEVsQlFWSXNRMEZCWVVvc1MwRkJZanRCUVVORU8wRkJRMFlzUjBGVVJEczdRVUZYUVN4TlFVRkpTQ3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1VDeGpRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEczdRVUZGUkVRc1dVRkJWVWNzVDBGQlZpeERRVUZyUWl4VlFVRlZSaXhQUVVGV0xFVkJRVzFDTzBGQlEyNURRU3hqUVVGVlVTeGxRVUZsVWl4UFFVRm1MRU5CUVZZN1FVRkRRU3hSUVVGSlFTeFJRVUZSVFN4TlFVRmFMRVZCUVc5Q08wRkJRMnhDVEN4M1FrRkJhMEpCTEdkQ1FVRm5RbEVzVFVGQmFFSXNRMEZCZFVKVUxFOUJRWFpDTEVOQlFXeENPMEZCUTBRN1FVRkRSaXhIUVV4RU96dEJRVTlCTEZOQlFVOURMR1ZCUVZBN1FVRkRSRHM3UVVGRlJEczdPenM3TzBGQlRVRXNVMEZCVTA4c1kwRkJWQ3hEUVVGNVFsZ3NUVUZCZWtJc1JVRkJhVU03UVVGREwwSXNUVUZCU1dFc1ZVRkJWU3hMUVVGa08wRkJRMEVzVFVGQlNVTXNVVUZCVVN4TlFVRmFPMEZCUTBFc1RVRkJTVmdzWjBKQlFVbzdRVUZEUVN4TlFVRk5SQ3haUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCVFdFc1QwRkJUenRCUVVOWVdpeGhRVUZUTEVWQlJFVTdRVUZGV0dFc1lVRkJVeXhGUVVaRk8wRkJSMWhETEZkQlFVOHNSVUZJU1R0QlFVbFlReXhWUVVGTk96dEJRVWRTTzBGQlVHRXNSMEZCWWl4RFFWRkJMRXRCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZTTEVWQlFWZERMRTFCUVUxd1FpeFBRVUZQVXl4TlFVRTNRaXhGUVVGeFExVXNTVUZCU1VNc1IwRkJla01zUlVGQk9FTkVMRWRCUVRsRExFVkJRVzFFTzBGQlEycEVMRkZCUVUxaUxGRkJRVkZPTEU5QlFVOXRRaXhEUVVGUUxFTkJRV1E3TzBGQlJVRXNVVUZCU1dJc1RVRkJUVU1zU1VGQlRpeExRVUZsTEZWQlFXNUNMRVZCUVN0Q08wRkJRemRDTEdOQlFWRkVMRTFCUVUxRkxFdEJRV1E3UVVGRFJTeGhRVUZMTEVkQlFVdzdRVUZEUlUwc2EwSkJRVkVzVTBGQlVqdEJRVU5CTzBGQlEwWXNZVUZCU3l4SFFVRk1PMEZCUTBWQkxHdENRVUZSTEZOQlFWSTdRVUZEUVR0QlFVTkdMR0ZCUVVzc1IwRkJURHRCUVVORlFTeHJRa0ZCVVN4UFFVRlNPMEZCUTBGRUxHOUNRVUZWTEVsQlFWWTdRVUZEUVR0QlFVTkdPMEZCUTBWRExHdENRVUZSTEUxQlFWSTdRVUZhU2p0QlFXTkVMRXRCWmtRc1RVRmxUenRCUVVOTUxGVkJRVWxTTEUxQlFVMUZMRXRCUVZZc1JVRkJhVUk3UVVGRFprOHNZVUZCUzBRc1MwRkJUQ3hGUVVGWlNpeEpRVUZhTEVOQlFXbENTaXhOUVVGTlJTeExRVUYyUWp0QlFVTkVPMEZCUTBZN1FVRkRSanM3UVVGRlJEdEJRVU5CTEUxQlFVa3NRMEZCUTA4c1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRllMRWxCUVhGQ1RTeExRVUZMUXl4UFFVRk1MRU5CUVdGUUxFMUJRWFJETEVWQlFUaERPMEZCUXpWRFRTeFRRVUZMUnl4SlFVRk1MRWRCUVZsSUxFdEJRVXRETEU5QlFXcENPMEZCUTBGRUxGTkJRVXRETEU5QlFVd3NSMEZCWlN4RlFVRm1PMEZCUTBRN08wRkJSVVFzVFVGQlNVZ3NUMEZCU2l4RlFVRmhPMEZCUTFnN1FVRkRRVVVzVTBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVkhMRWxCUVZZc1EwRkJaU3hIUVVGbUxFTkJRVm83UVVGRFFXNUNMR05CUVZWUkxFbEJRVllzUTBGQlpUdEJRVU5pV1N4WlFVRk5VQ3hMUVVGTFJ5eEpRVUZNTEVsQlFXTm1MRmRCUVZkQkxGRkJRVkZ0UWl4SlFVUXhRanRCUVVWaVRDeGhRVUZQUml4TFFVRkxSU3hMUVVGTUxFTkJRVmRTTEUxQlFWZ3NSMEZCYjBKaUxFMUJRVTF0UWl4TFFVRkxSU3hMUVVGTUxFTkJRVmRKTEVsQlFWZ3NRMEZCWjBJc1IwRkJhRUlzUTBGQlRpeERRVUZ3UWl4SFFVRnJSRHRCUVVZMVF5eExRVUZtTzBGQlNVUXNSMEZRUkN4TlFVOVBPMEZCUTB3N1FVRkRRU3hSUVVGSkxFTkJRVU5PTEV0QlFVdGFMRTlCUVV3c1EwRkJZVTBzVFVGQlpDeEpRVUYzUWswc1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRjBReXhGUVVFNFF6dEJRVU0xUXl4WFFVRkxMRWxCUVVsVkxFdEJRVWxLTEV0QlFVdEhMRWxCUVV3c1EwRkJWVlFzVFVGQlZpeEhRVUZ0UWl4RFFVRm9ReXhGUVVGdFExVXNUVUZCU3l4RFFVRjRReXhGUVVFeVEwRXNTVUZCTTBNc1JVRkJaMFE3UVVGRE9VTXNXVUZCU1Vvc1MwRkJTMGNzU1VGQlRDeERRVUZWUXl4RlFVRldMRVZCUVdGSkxFdEJRV0lzUTBGQmJVSXNiVUpCUVc1Q0xFTkJRVW9zUlVGQk5rTTdRVUZETTBOU0xHVkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMGNzU1VGQlRDeERRVUZWVFN4TlFVRldMRU5CUVdsQ1RDeEZRVUZxUWl4RlFVRnZRaXhEUVVGd1FpeERRVUZtTzBGQlEwRTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGVkJRVWxOTEdkQ1FVRm5RaXhUUVVGb1FrRXNZVUZCWjBJc1EwRkJWWFJDTEU5QlFWWXNSVUZCYlVJN1FVRkRja01zV1VGQlNTeERRVUZEV1N4TFFVRkxXaXhQUVVGTUxFTkJRV0ZOTEUxQlFXeENMRVZCUVRCQ08wRkJRM2hDVFN4bFFVRkxXaXhQUVVGTUxFZEJRV1VzUTBGQlEwRXNVVUZCVVhWQ0xFbEJRVklzUlVGQlJDeERRVUZtTzBGQlEwRXNhVUpCUVU4c1IwRkJVRHRCUVVORUxGTkJTRVFzVFVGSFR6dEJRVU5NTEdsQ1FVRlBka0lzVDBGQlVEdEJRVU5FTzBGQlEwWXNUMEZRUkRzN1FVRlRRVHRCUVVOQkxGVkJRVWtzUTBGQlExa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaFRTeE5RVUZzUWl4RlFVRXdRanRCUVVONFFpeGhRVUZMTEVsQlFVbFZMRTFCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVDBGQlN5eERRVUY0UXl4RlFVRXlRMEVzUzBGQk0wTXNSVUZCWjBRN1FVRkRPVU5LTEdWQlFVdEhMRWxCUVV3c1EwRkJWVU1zUjBGQlZpeEpRVUZsU2l4TFFVRkxSeXhKUVVGTUxFTkJRVlZETEVkQlFWWXNSVUZCWVZFc1QwRkJZaXhEUVVGeFFpd3lRa0ZCY2tJc1JVRkJhMFJHTEdGQlFXeEVMRVZCUVdsRlF5eEpRVUZxUlN4RlFVRm1PMEZCUTBFc1kwRkJTVmdzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGcVFpeEZRVUY1UWp0QlFVTjJRanRCUVVORU8wRkJRMFk3UVVGRFJqdEJRVU5HT3p0QlFVVkVPMEZCUTBFc1VVRkJTU3hEUVVGRFRTeExRVUZMUnl4SlFVRk1MRU5CUVZWVUxFMUJRVmdzU1VGQmNVSk5MRXRCUVV0RExFOUJRVXdzUTBGQllWQXNUVUZCZEVNc1JVRkJPRU03UVVGRE5VTk5MRmRCUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBNc1QwRkJha0k3UVVGRFFVUXNWMEZCUzBNc1QwRkJUQ3hIUVVGbExFVkJRV1k3UVVGRFJEczdRVUZGUkR0QlFVTkJMRkZCUVVsRUxFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJZaXhIUVVGelFpeERRVUV4UWl4RlFVRTJRanRCUVVNelFrMHNWMEZCUzBjc1NVRkJUQ3hIUVVGWlNDeExRVUZMUnl4SlFVRk1MRU5CUVZWT0xFMUJRVllzUTBGQmFVSkhMRXRCUVV0YUxFOUJRVXdzUTBGQllYRkNMRTFCUVdJc1EwRkJiMElzUTBGQmNFSXNRMEZCYWtJc1EwRkJXanRCUVVORU96dEJRVVZFTzBGQlEwRlVMRk5CUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlJ5eEpRVUZXTEVOQlFXVXNSMEZCWml4RFFVRmFPMEZCUTBGT0xGTkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMW9zVDBGQlRDeERRVUZoYTBJc1NVRkJZaXhEUVVGclFpeEhRVUZzUWl4RFFVRm1PenRCUVVWQkxGRkJRVWtzUTBGQlEwNHNTMEZCUzFvc1QwRkJUaXhKUVVGcFFsVXNUMEZCY2tJc1JVRkJPRUk3UVVGRE5VSXNZVUZCVHl4RlFVRlFPMEZCUTBRc1MwRkdSQ3hOUVVWUE8wRkJRMHhXTEdkQ1FVRlZPMEZCUTFKQkxHbENRVUZUV1N4TFFVRkxXaXhQUVVGTUxFbEJRV2RDV1N4TFFVRkxSeXhKUVVGeVFpeEpRVUUyUWl4RlFVUTVRanRCUVVWU1NTeGpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV0ZJTEV0QlFVdGFMRTlCUVd4Q0xFbEJRVFpDTzBGQlJqTkNMRTlCUVZZN08wRkJTMEVzVlVGQlNVRXNVVUZCVVVFc1QwRkJVaXhMUVVGdlFrRXNVVUZCVVcxQ0xFbEJRV2hETEVWQlFYTkRPMEZCUTNCRExGbEJRVWtzUTBGQlEyNUNMRkZCUVZGQkxFOUJRVklzU1VGQmJVSXNSVUZCY0VJc1JVRkJkMEp2UWl4TFFVRjRRaXhEUVVFNFFpeEhRVUU1UWl4RFFVRktMRVZCUVhkRE8wRkJRM1JEY0VJc2EwSkJRVkZ0UWl4SlFVRlNMRWRCUVdVc1JVRkJaanRCUVVORUxGTkJSa1FzVFVGRlR6dEJRVU5NYmtJc2EwSkJRVkZCTEU5QlFWSXNSMEZCYTBJc1JVRkJiRUk3UVVGRFJEdEJRVU5HT3p0QlFVVkVSQ3huUWtGQlZWRXNTVUZCVml4RFFVRmxVQ3hQUVVGbU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlBSQ3hUUVVGUU8wRkJRMFE3TzBGQlJVUTdPenRCUVVkQkxFbEJRVTB3UWl4WlFVRlpPMEZCUTJoQ0xFOUJRVXNzUjBGRVZ6dEJRVVZvUWl4UFFVRkxMRWRCUmxjN1FVRkhhRUlzVDBGQlN5eEhRVWhYTzBGQlNXaENMRTlCUVVzc1JVRktWenRCUVV0b1FqdEJRVU5CTEU5QlFVc3NSMEZPVnp0QlFVOW9RanRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4UFFVRkxPenRCUVVkUU96czdPenM3UVVGb1FtdENMRU5CUVd4Q08wbEJjMEpOTjBJc1V6dEJRVU5LTEhGQ1FVRmhSaXhIUVVGaUxFVkJRV3RDTzBGQlFVRTdPMEZCUTJoQ0xGTkJRVXRCTEVkQlFVd3NSMEZCVnl4RFFVRkRRU3hQUVVGUExFVkJRVklzUlVGQldXZERMRkZCUVZvc1JVRkJXRHRCUVVOQkxGTkJRVXRETEdWQlFVd3NSMEZCZFVJc1JVRkJka0k3UVVGRFFTeFRRVUZMUXl4cFFrRkJUQ3hIUVVGNVFpeEZRVUY2UWp0QlFVTkJMRk5CUVV0RExFbEJRVXdzUjBGQldTeEpRVUZhTzBGQlEwRXNVMEZCUzBNc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFTeFRRVUZMUXl4SlFVRk1MRWRCUVZrc1JVRkJXanRCUVVORU96dEJRVVZFT3pzN096czdPenM3SzBKQlMxazdRVUZEVml4VlFVRkpReXhaUVVGS08wRkJRMEVzVlVGQlNVUXNUMEZCVHl4RlFVRllPMEZCUTBFc1YwRkJTeXhKUVVGSlppeEpRVUZKTEVOQlFWSXNSVUZCVjBNc1RVRkJUU3hMUVVGTGRrSXNSMEZCVEN4RFFVRlRXU3hOUVVFdlFpeEZRVUYxUTFVc1NVRkJTVU1zUjBGQk0wTXNSVUZCWjBSRUxFZEJRV2hFTEVWQlFYRkVPMEZCUTI1RVowSXNZMEZCVFN4TFFVRkxkRU1zUjBGQlRDeERRVUZUZFVNc1RVRkJWQ3hEUVVGblFtcENMRU5CUVdoQ0xFTkJRVTQ3UVVGRFFTeGhRVUZMYTBJc1UwRkJUQ3hEUVVGbFJpeEhRVUZtTzBGQlEwUTdPMEZCUlVRc1YwRkJTMFFzU1VGQlRDeERRVUZWTjBJc1QwRkJWaXhEUVVGclFpeFZRVUZWTWtJc1NVRkJWaXhGUVVGblFqdEJRVU5vUTBFc1lVRkJTM2hDTEV0QlFVd3NSMEZCWVN4RFFVRkRkMElzUzBGQlMzaENMRXRCUVV3c1NVRkJZeXhGUVVGbUxFVkJRVzFDY1VJc1VVRkJia0lzUjBGQk9FSklMRWxCUVRsQ0xFVkJRV0k3UVVGRFFTeFpRVUZKVFN4TFFVRkxlRUlzUzBGQlZDeEZRVUZuUWp0QlFVTmtNRUlzWlVGQlMzaENMRWxCUVV3c1EwRkJWWE5DTEVsQlFWWTdRVUZEUkR0QlFVTkdMRTlCVEVRN08wRkJUMEVzWVVGQlQwVXNTVUZCVUR0QlFVTkVPenRCUVVWRU96czdPenM3T3pzNFFrRkxWME1zUnl4RlFVRkxPMEZCUTJRc1ZVRkJTU3hEUVVGRFFTeFBRVUZQVUN4VFFVRlFMRWxCUVc5Q1R5eFJRVUZSTEVsQlFUZENMRXRCUVhORExFdEJRVXRHTEU5QlFTOURMRVZCUVhkRU8wRkJRM1JFTEdGQlFVdEJMRTlCUVV3c1IwRkJaU3hMUVVGbU8wRkJRMFFzVDBGR1JDeE5RVVZQTEVsQlFVa3NTMEZCUzBZc2FVSkJRVXdzU1VGQk1FSkpMRkZCUVZFc1MwRkJTMG9zYVVKQlFUTkRMRVZCUVRoRU8wRkJRMjVGTEdGQlFVdERMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDTEVWQlFYcENPMEZCUTBFc1lVRkJTMFVzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVMRTlCVmswc1RVRlZRU3hKUVVGSkxFTkJRVU1zUzBGQlMwWXNhVUpCUVU0c1NVRkJNa0pKTEU5QlFVOVFMRk5CUVhSRExFVkJRV2xFTzBGQlEzUkVMR0ZCUVV0SkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVlVGRVNUdEJRVVZXUXl4cFFrRkJUekpDTzBGQlJrY3NVMEZCV2p0QlFVbEJMR0ZCUVV0RUxFbEJRVXdzUTBGQlZYaENMRWxCUVZZc1EwRkJaU3hMUVVGTGMwSXNTVUZCY0VJN1FVRkRRU3hoUVVGTFFTeEpRVUZNTEVkQlFWa3NTVUZCV2p0QlFVTkJMR0ZCUVV0RUxHbENRVUZNTEVkQlFYbENTQ3hWUVVGVlR5eEhRVUZXTEVOQlFYcENPMEZCUTBFc1lVRkJTMFlzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVWtzUTBGQlF5eExRVUZMUVN4UFFVRk9MRWxCUVdsQ1JTeFJRVUZSTEVsQlFUZENMRVZCUVcxRE8wRkJRMnBETEdGQlFVdEdMRTlCUVV3c1IwRkJaU3hKUVVGbU8wRkJRMEU3UVVGRFJEczdRVUZGUkN4VlFVRkpMRU5CUVVNc1MwRkJTMFFzU1VGQlZpeEZRVUZuUWp0QlFVTmtMR0ZCUVV0QkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVFVGRVNUdEJRVVZXUXl4cFFrRkJUenRCUVVaSExGTkJRVm83UVVGSlFTeGhRVUZMTUVJc1NVRkJUQ3hEUVVGVmVFSXNTVUZCVml4RFFVRmxMRXRCUVV0elFpeEpRVUZ3UWp0QlFVTkVPenRCUVVWRUxGVkJRVWtzUzBGQlMwTXNUMEZCVEN4SlFVRm5Ra1VzVVVGQlVTeEpRVUUxUWl4RlFVRnJRenRCUVVOb1F5eGhRVUZMU0N4SlFVRk1MRU5CUVZWNFFpeExRVUZXTEVsQlFXMUNMRWxCUVc1Q08wRkJRMFE3TzBGQlJVUXNWMEZCUzNkQ0xFbEJRVXdzUTBGQlZYaENMRXRCUVZZc1NVRkJiVUl5UWl4SFFVRnVRanRCUVVOQkxGZEJRVXRHTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRaUxDSm1hV3hsSWpvaVlXUmtjbVZ6YzNCaGNuTmxjaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1VHRnljMlZ6SUhOMGNuVmpkSFZ5WldRZ1pTMXRZV2xzSUdGa1pISmxjM05sY3lCbWNtOXRJR0Z1SUdGa1pISmxjM01nWm1sbGJHUmNiaUFxWEc0Z0tpQkZlR0Z0Y0d4bE9seHVJQ3BjYmlBcUlDQWdJRndpVG1GdFpTQThZV1JrY21WemMwQmtiMjFoYVc0K1hDSmNiaUFxWEc0Z0tpQjNhV3hzSUdKbElHTnZiblpsY25SbFpDQjBiMXh1SUNwY2JpQXFJQ0FnSUNCYmUyNWhiV1U2SUZ3aVRtRnRaVndpTENCaFpHUnlaWE56T2lCY0ltRmtaSEpsYzNOQVpHOXRZV2x1WENKOVhWeHVJQ3BjYmlBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCemRISWdRV1JrY21WemN5Qm1hV1ZzWkZ4dUlDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JR0ZrWkhKbGMzTWdiMkpxWldOMGMxeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaUJ3WVhKelpTQW9jM1J5S1NCN1hHNGdJR052Ym5OMElIUnZhMlZ1YVhwbGNpQTlJRzVsZHlCVWIydGxibWw2WlhJb2MzUnlLVnh1SUNCamIyNXpkQ0IwYjJ0bGJuTWdQU0IwYjJ0bGJtbDZaWEl1ZEc5clpXNXBlbVVvS1Z4dVhHNGdJR052Ym5OMElHRmtaSEpsYzNObGN5QTlJRnRkWEc0Z0lHeGxkQ0JoWkdSeVpYTnpJRDBnVzExY2JpQWdiR1YwSUhCaGNuTmxaRUZrWkhKbGMzTmxjeUE5SUZ0ZFhHNWNiaUFnZEc5clpXNXpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLSFJ2YTJWdUtTQjdYRzRnSUNBZ2FXWWdLSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZHZjR1Z5WVhSdmNpY2dKaVlnS0hSdmEyVnVMblpoYkhWbElEMDlQU0FuTENjZ2ZId2dkRzlyWlc0dWRtRnNkV1VnUFQwOUlDYzdKeWtwSUh0Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoaFpHUnlaWE56S1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWVdSa2NtVnpjeUE5SUZ0ZFhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR0ZrWkhKbGMzTXVjSFZ6YUNoMGIydGxiaWxjYmlBZ0lDQjlYRzRnSUgwcFhHNWNiaUFnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnWVdSa2NtVnpjMlZ6TG5CMWMyZ29ZV1JrY21WemN5bGNiaUFnZlZ4dVhHNGdJR0ZrWkhKbGMzTmxjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hoWkdSeVpYTnpLU0I3WEc0Z0lDQWdZV1JrY21WemN5QTlJRjlvWVc1a2JHVkJaR1J5WlhOektHRmtaSEpsYzNNcFhHNGdJQ0FnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1JCWkdSeVpYTnpaWE1nUFNCd1lYSnpaV1JCWkdSeVpYTnpaWE11WTI5dVkyRjBLR0ZrWkhKbGMzTXBYRzRnSUNBZ2ZWeHVJQ0I5S1Z4dVhHNGdJSEpsZEhWeWJpQndZWEp6WldSQlpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cUtseHVJQ29nUTI5dWRtVnlkSE1nZEc5clpXNXpJR1p2Y2lCaElITnBibWRzWlNCaFpHUnlaWE56SUdsdWRHOGdZVzRnWVdSa2NtVnpjeUJ2WW1wbFkzUmNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1ZlNCMGIydGxibk1nVkc5clpXNXpJRzlpYW1WamRGeHVJQ29nUUhKbGRIVnliaUI3VDJKcVpXTjBmU0JCWkdSeVpYTnpJRzlpYW1WamRGeHVJQ292WEc1bWRXNWpkR2x2YmlCZmFHRnVaR3hsUVdSa2NtVnpjeUFvZEc5clpXNXpLU0I3WEc0Z0lHeGxkQ0JwYzBkeWIzVndJRDBnWm1Gc2MyVmNiaUFnYkdWMElITjBZWFJsSUQwZ0ozUmxlSFFuWEc0Z0lHeGxkQ0JoWkdSeVpYTnpYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR052Ym5OMElHUmhkR0VnUFNCN1hHNGdJQ0FnWVdSa2NtVnpjem9nVzEwc1hHNGdJQ0FnWTI5dGJXVnVkRG9nVzEwc1hHNGdJQ0FnWjNKdmRYQTZJRnRkTEZ4dUlDQWdJSFJsZUhRNklGdGRYRzRnSUgxY2JseHVJQ0F2THlCR2FXeDBaWElnYjNWMElEeGhaR1J5WlhOelpYTStMQ0FvWTI5dGJXVnVkSE1wSUdGdVpDQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJ2YTJWdWN5NXNaVzVuZEdnN0lHa2dQQ0JzWlc0N0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElIUnZhMlZ1SUQwZ2RHOXJaVzV6VzJsZFhHNWNiaUFnSUNCcFppQW9kRzlyWlc0dWRIbHdaU0E5UFQwZ0oyOXdaWEpoZEc5eUp5a2dlMXh1SUNBZ0lDQWdjM2RwZEdOb0lDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJQ2M4SnpwY2JpQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlDZGhaR1J5WlhOekoxeHVJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lHTmhjMlVnSnlnbk9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKMk52YlcxbGJuUW5YRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbk9pYzZYRzRnSUNBZ0lDQWdJQ0FnYzNSaGRHVWdQU0FuWjNKdmRYQW5YRzRnSUNBZ0lDQWdJQ0FnYVhOSGNtOTFjQ0E5SUhSeWRXVmNiaUFnSUNBZ0lDQWdJQ0JpY21WaGExeHVJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNoMGIydGxiaTUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaFczTjBZWFJsWFM1d2RYTm9LSFJ2YTJWdUxuWmhiSFZsS1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklFbG1JSFJvWlhKbElHbHpJRzV2SUhSbGVIUWdZblYwSUdFZ1kyOXRiV1Z1ZEN3Z2NtVndiR0ZqWlNCMGFHVWdkSGR2WEc0Z0lHbG1JQ2doWkdGMFlTNTBaWGgwTG14bGJtZDBhQ0FtSmlCa1lYUmhMbU52YlcxbGJuUXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdaR0YwWVM1amIyMXRaVzUwSUQwZ1cxMWNiaUFnZlZ4dVhHNGdJR2xtSUNocGMwZHliM1Z3S1NCN1hHNGdJQ0FnTHk4Z2FIUjBjRG92TDNSdmIyeHpMbWxsZEdZdWIzSm5MMmgwYld3dmNtWmpNamd5TWlOaGNIQmxibVJwZUMxQkxqRXVNMXh1SUNBZ0lHUmhkR0V1ZEdWNGRDQTlJR1JoZEdFdWRHVjRkQzVxYjJsdUtDY2dKeWxjYmlBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoN1hHNGdJQ0FnSUNCdVlXMWxPaUJrWVhSaExuUmxlSFFnZkh3Z0tHRmtaSEpsYzNNZ0ppWWdZV1JrY21WemN5NXVZVzFsS1N4Y2JpQWdJQ0FnSUdkeWIzVndPaUJrWVhSaExtZHliM1Z3TG14bGJtZDBhQ0EvSUhCaGNuTmxLR1JoZEdFdVozSnZkWEF1YW05cGJpZ25MQ2NwS1NBNklGdGRYRzRnSUNBZ2ZTbGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQXZMeUJKWmlCdWJ5QmhaR1J5WlhOeklIZGhjeUJtYjNWdVpDd2dkSEo1SUhSdklHUmxkR1ZqZENCdmJtVWdabkp2YlNCeVpXZDFiR0Z5SUhSbGVIUmNiaUFnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dnSmlZZ1pHRjBZUzUwWlhoMExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHRjBZUzUwWlhoMFcybGRMbTFoZEdOb0tDOWVXMTVBWEZ4elhTdEFXMTVBWEZ4elhTc2tMeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoTG1Ga1pISmxjM01nUFNCa1lYUmhMblJsZUhRdWMzQnNhV05sS0drc0lERXBYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ1gzSmxaMlY0U0dGdVpHeGxjaUE5SUdaMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWkdGMFlTNWhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlGdGhaR1J5WlhOekxuUnlhVzBvS1YxY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5QW5YRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0ZrWkhKbGMzTmNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCemRHbHNiQ0J1YnlCaFpHUnlaWE56WEc0Z0lDQWdJQ0JwWmlBb0lXUmhkR0V1WVdSa2NtVnpjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlHUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdWRHVjRkRnRwWFNBOUlHUmhkR0V1ZEdWNGRGdHBYUzV5WlhCc1lXTmxLQzljWEhNcVhGeGlXMTVBWEZ4elhTdEFXMTVBWEZ4elhTdGNYR0pjWEhNcUx5d2dYM0psWjJWNFNHRnVaR3hsY2lrdWRISnBiU2dwWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnU1dZZ2RHaGxjbVVuY3lCemRHbHNiQ0JwY3lCdWJ5QjBaWGgwSUdKMWRDQmhJR052YlcxbGJuUWdaWGhwZUhSekxDQnlaWEJzWVdObElIUm9aU0IwZDI5Y2JpQWdJQ0JwWmlBb0lXUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0ppWWdaR0YwWVM1amIyMXRaVzUwTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzVqYjIxdFpXNTBYRzRnSUNBZ0lDQmtZWFJoTG1OdmJXMWxiblFnUFNCYlhWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFdGxaWEFnYjI1c2VTQjBhR1VnWm1seWMzUWdZV1JrY21WemN5QnZZMk4xY21WdVkyVXNJSEIxYzJnZ2IzUm9aWEp6SUhSdklISmxaM1ZzWVhJZ2RHVjRkRnh1SUNBZ0lHbG1JQ2hrWVhSaExtRmtaSEpsYzNNdWJHVnVaM1JvSUQ0Z01Ta2dlMXh1SUNBZ0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1OdmJtTmhkQ2hrWVhSaExtRmtaSEpsYzNNdWMzQnNhV05sS0RFcEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFcHZhVzRnZG1Gc2RXVnpJSGRwZEdnZ2MzQmhZMlZ6WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1wdmFXNG9KeUFuS1Z4dUlDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlHUmhkR0V1WVdSa2NtVnpjeTVxYjJsdUtDY2dKeWxjYmx4dUlDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpJQ1ltSUdselIzSnZkWEFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJiWFZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmhaR1J5WlhOeklEMGdlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpPaUJrWVhSaExtRmtaSEpsYzNNZ2ZId2daR0YwWVM1MFpYaDBJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2daR0YwWVM1aFpHUnlaWE56SUh4OElDY25YRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoaFpHUnlaWE56TG1Ga1pISmxjM01nUFQwOUlHRmtaSEpsYzNNdWJtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9LR0ZrWkhKbGMzTXVZV1JrY21WemN5QjhmQ0FuSnlrdWJXRjBZMmdvTDBBdktTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdGa1pISmxjM011Ym1GdFpTQTlJQ2NuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtjbVZ6Y3k1aFpHUnlaWE56SUQwZ0p5ZGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCaFpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cVhHNGdLaUJQY0dWeVlYUnZjaUIwYjJ0bGJuTWdZVzVrSUhkb2FXTm9JSFJ2YTJWdWN5QmhjbVVnWlhod1pXTjBaV1FnZEc4Z1pXNWtJSFJvWlNCelpYRjFaVzVqWlZ4dUlDb3ZYRzVqYjI1emRDQlBVRVZTUVZSUFVsTWdQU0I3WEc0Z0lDZGNJaWM2SUNkY0lpY3NYRzRnSUNjb0p6b2dKeWtuTEZ4dUlDQW5QQ2M2SUNjK0p5eGNiaUFnSnl3bk9pQW5KeXhjYmlBZ0x5OGdSM0p2ZFhCeklHRnlaU0JsYm1SbFpDQmllU0J6WlcxcFkyOXNiMjV6WEc0Z0lDYzZKem9nSnpzbkxGeHVJQ0F2THlCVFpXMXBZMjlzYjI1eklHRnlaU0J1YjNRZ1lTQnNaV2RoYkNCa1pXeHBiV2wwWlhJZ2NHVnlJSFJvWlNCU1JrTXlPREl5SUdkeVlXMXRZWElnYjNSb1pYSmNiaUFnTHk4Z2RHaGhiaUJtYjNJZ2RHVnliV2x1WVhScGJtY2dZU0JuY205MWNDd2dZblYwSUhSb1pYa2dZWEpsSUdGc2MyOGdibTkwSUhaaGJHbGtJR1p2Y2lCaGJubGNiaUFnTHk4Z2IzUm9aWElnZFhObElHbHVJSFJvYVhNZ1kyOXVkR1Y0ZEM0Z0lFZHBkbVZ1SUhSb1lYUWdjMjl0WlNCdFlXbHNJR05zYVdWdWRITWdhR0YyWlZ4dUlDQXZMeUJvYVhOMGIzSnBZMkZzYkhrZ1lXeHNiM2RsWkNCMGFHVWdjMlZ0YVdOdmJHOXVJR0Z6SUdFZ1pHVnNhVzFwZEdWeUlHVnhkV2wyWVd4bGJuUWdkRzhnZEdobFhHNGdJQzh2SUdOdmJXMWhJR2x1SUhSb1pXbHlJRlZKTENCcGRDQnRZV3RsY3lCelpXNXpaU0IwYnlCMGNtVmhkQ0IwYUdWdElIUm9aU0J6WVcxbElHRnpJR0VnWTI5dGJXRmNiaUFnTHk4Z2QyaGxiaUIxYzJWa0lHOTFkSE5wWkdVZ2IyWWdZU0JuY205MWNDNWNiaUFnSnpzbk9pQW5KMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQlViMnRsYm1sNlpYSWdiMkpxWldOMElHWnZjaUIwYjJ0bGJtbDZhVzVuSUdGa1pISmxjM01nWm1sbGJHUWdjM1J5YVc1bmMxeHVJQ3BjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvZ1FIQmhjbUZ0SUh0VGRISnBibWQ5SUhOMGNpQkJaR1J5WlhOeklHWnBaV3hrSUhOMGNtbHVaMXh1SUNvdlhHNWpiR0Z6Y3lCVWIydGxibWw2WlhJZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lBb2MzUnlLU0I3WEc0Z0lDQWdkR2hwY3k1emRISWdQU0FvYzNSeUlIeDhJQ2NuS1M1MGIxTjBjbWx1WnlncFhHNGdJQ0FnZEdocGN5NXZjR1Z5WVhSdmNrTjFjbkpsYm5RZ1BTQW5KMXh1SUNBZ0lIUm9hWE11YjNCbGNtRjBiM0pGZUhCbFkzUnBibWNnUFNBbkoxeHVJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lIUm9hWE11YkdsemRDQTlJRnRkWEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHOXJaVzVwZW1WeklIUm9aU0J2Y21sbmFXNWhiQ0JwYm5CMWRDQnpkSEpwYm1kY2JpQWdJQ3BjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JRzl3WlhKaGRHOXlmSFJsZUhRZ2RHOXJaVzV6WEc0Z0lDQXFMMXh1SUNCMGIydGxibWw2WlNBb0tTQjdYRzRnSUNBZ2JHVjBJR05vY2x4dUlDQWdJR3hsZENCc2FYTjBJRDBnVzExY2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2diR1Z1SUQwZ2RHaHBjeTV6ZEhJdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR05vY2lBOUlIUm9hWE11YzNSeUxtTm9ZWEpCZENocEtWeHVJQ0FnSUNBZ2RHaHBjeTVqYUdWamEwTm9ZWElvWTJoeUtWeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXViR2x6ZEM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNodWIyUmxLU0I3WEc0Z0lDQWdJQ0J1YjJSbExuWmhiSFZsSUQwZ0tHNXZaR1V1ZG1Gc2RXVWdmSHdnSnljcExuUnZVM1J5YVc1bktDa3VkSEpwYlNncFhHNGdJQ0FnSUNCcFppQW9ibTlrWlM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FYTjBMbkIxYzJnb2JtOWtaU2xjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1WEc0Z0lDQWdjbVYwZFhKdUlHeHBjM1JjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGFHVmphM01nYVdZZ1lTQmphR0Z5WVdOMFpYSWdhWE1nWVc0Z2IzQmxjbUYwYjNJZ2IzSWdkR1Y0ZENCaGJtUWdZV04wY3lCaFkyTnZjbVJwYm1kc2VWeHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdZMmh5SUVOb1lYSmhZM1JsY2lCbWNtOXRJSFJvWlNCaFpHUnlaWE56SUdacFpXeGtYRzRnSUNBcUwxeHVJQ0JqYUdWamEwTm9ZWElnS0dOb2Npa2dlMXh1SUNBZ0lHbG1JQ2dvWTJoeUlHbHVJRTlRUlZKQlZFOVNVeUI4ZkNCamFISWdQVDA5SUNkY1hGeGNKeWtnSmlZZ2RHaHBjeTVsYzJOaGNHVmtLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ1BUMDlJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJSHRjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dKMjl3WlhKaGRHOXlKeXhjYmlBZ0lDQWdJQ0FnZG1Gc2RXVTZJR05vY2x4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnYm5Wc2JGeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUE5SUNjblhHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ2FXNGdUMUJGVWtGVVQxSlRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtNXZaR1VnUFNCN1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUNkdmNHVnlZWFJ2Y2ljc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lCamFISmNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11YkdsemRDNXdkWE5vS0hSb2FYTXVibTlrWlNsY2JpQWdJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQlBVRVZTUVZSUFVsTmJZMmh5WFZ4dUlDQWdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdJQ0FnSUhKbGRIVnlibHh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWxjMk5oY0dWa0lDWW1JR05vY2lBOVBUMGdKMXhjWEZ3bktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCMGNuVmxYRzRnSUNBZ0lDQnlaWFIxY201Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lYUm9hWE11Ym05a1pTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnZTF4dUlDQWdJQ0FnSUNCMGVYQmxPaUFuZEdWNGRDY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQW5KMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1c2FYTjBMbkIxYzJnb2RHaHBjeTV1YjJSbEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1WelkyRndaV1FnSmlZZ1kyaHlJQ0U5UFNBblhGeGNYQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlM1MllXeDFaU0FyUFNBblhGeGNYQ2RjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG01dlpHVXVkbUZzZFdVZ0t6MGdZMmh5WEc0Z0lDQWdkR2hwY3k1bGMyTmhjR1ZrSUQwZ1ptRnNjMlZjYmlBZ2ZWeHVmVnh1SWwxOSIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChTUExJVCwgbmF0aXZlU3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJy5zcGxpdCgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sICFTVVBQT1JUU19ZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubGlua1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2xpbmsnKSB9LCB7XG4gIGxpbms6IGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIUlTX0lPUykge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBtYXRjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gbWF0Y2hlciAhPT0gdW5kZWZpbmVkID8gbWF0Y2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIFBSRUZFUlJFRF9TVFJJTkcpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGlucHV0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4xLjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuY29uc3QgT3BlbnRpcCA9IHdpbmRvdy5PcGVudGlwIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcyA9IE9wZW50aXAuc3R5bGVzIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcCA9IHtcblx0J2V4dGVuZHMnOiAnc3RhbmRhcmQnLFxuXG5cdCdmaXhlZCc6IHRydWUsXG5cdCd0YXJnZXQnOiB0cnVlLFxuXG5cdCdkZWxheSc6IDAuMixcblx0J2hpZGVEZWxheSc6IDAsXG5cblx0J2hpZGVFZmZlY3QnOiAnZmFkZScsXG5cdCdoaWRlRWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dFZmZlY3QnOiAnZmFkZScsXG5cdCdzaG93RWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dPbic6ICdtb3VzZW92ZXIgY2xpY2snLFxuXHQncmVtb3ZlRWxlbWVudHNPbkhpZGUnOiB0cnVlLFxuXG5cdCdiYWNrZ3JvdW5kJzogJyNmZmYnLFxuXHQnc2hhZG93JzogZmFsc2UsXG5cblx0J2JvcmRlckNvbG9yJzogJyM5OTknLFxuXHQnYm9yZGVyUmFkaXVzJzogMixcblx0J2JvcmRlcldpZHRoJzogMVxufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2RlbGF5JzogMC40LFxuXHQnZ3JvdXAnOiAncmFpbmxvb3BUaXBzJ1xufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BFcnJvclRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnY2xhc3NOYW1lJzogJ3JhaW5sb29wRXJyb3JUaXAnXG59O1xuXG5leHBvcnQgeyBPcGVudGlwLCBPcGVudGlwIGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICogUGlrYWRheVxuICpcbiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXlcbiAqL1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIG1vbWVudDtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAocmVxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgICAgICB2YXIgaWQgPSAnbW9tZW50JztcbiAgICAgICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcShpZCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShtb21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlBpa2FkYXkgPSBmYWN0b3J5KHJvb3QubW9tZW50KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogZmVhdHVyZSBkZXRlY3Rpb24gYW5kIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICB2YXIgaGFzTW9tZW50ID0gdHlwZW9mIG1vbWVudCA9PT0gJ2Z1bmN0aW9uJyxcblxuICAgIGhhc0V2ZW50TGlzdGVuZXJzID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixcblxuICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LFxuXG4gICAgc3RvID0gd2luZG93LnNldFRpbWVvdXQsXG5cbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmF0dGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5kZXRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHRyaW0gPSBmdW5jdGlvbihzdHIpXG4gICAge1xuICAgICAgICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csJycpO1xuICAgIH0sXG5cbiAgICBoYXNDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIHJldHVybiAoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNuICsgJyAnKSAhPT0gLTE7XG4gICAgfSxcblxuICAgIGFkZENsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY24pKSB7XG4gICAgICAgICAgICBlbC5jbGFzc05hbWUgPSAoZWwuY2xhc3NOYW1lID09PSAnJykgPyBjbiA6IGVsLmNsYXNzTmFtZSArICcgJyArIGNuO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gdHJpbSgoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5yZXBsYWNlKCcgJyArIGNuICsgJyAnLCAnICcpKTtcbiAgICB9LFxuXG4gICAgaXNBcnJheSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0FycmF5LykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSk7XG4gICAgfSxcblxuICAgIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0RhdGUvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSAmJiAhaXNOYU4ob2JqLmdldFRpbWUoKSk7XG4gICAgfSxcblxuICAgIGlzV2Vla2VuZCA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7XG4gICAgfSxcblxuICAgIGlzTGVhcFllYXIgPSBmdW5jdGlvbih5ZWFyKVxuICAgIHtcbiAgICAgICAgLy8gc29sdXRpb24gYnkgTWF0dGkgVmlya2t1bmVuOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80ODgxOTUxXG4gICAgICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpXG4gICAge1xuICAgICAgICByZXR1cm4gWzMxLCBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcbiAgICB9LFxuXG4gICAgc2V0VG9TdGFydE9mRGF5ID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChpc0RhdGUoZGF0ZSkpIGRhdGUuc2V0SG91cnMoMCwwLDAsMCk7XG4gICAgfSxcblxuICAgIGNvbXBhcmVEYXRlcyA9IGZ1bmN0aW9uKGEsYilcbiAgICB7XG4gICAgICAgIC8vIHdlYWsgZGF0ZSBjb21wYXJpc29uICh1c2Ugc2V0VG9TdGFydE9mRGF5KGRhdGUpIHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdClcbiAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICB9LFxuXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24odG8sIGZyb20sIG92ZXJ3cml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBwcm9wLCBoYXNQcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gZnJvbSkge1xuICAgICAgICAgICAgaGFzUHJvcCA9IHRvW3Byb3BdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaGFzUHJvcCAmJiB0eXBlb2YgZnJvbVtwcm9wXSA9PT0gJ29iamVjdCcgJiYgZnJvbVtwcm9wXSAhPT0gbnVsbCAmJiBmcm9tW3Byb3BdLm5vZGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlKGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gbmV3IERhdGUoZnJvbVtwcm9wXS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBleHRlbmQoe30sIGZyb21bcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvdmVyd3JpdGUgfHwgIWhhc1Byb3ApIHtcbiAgICAgICAgICAgICAgICB0b1twcm9wXSA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH0sXG5cbiAgICBmaXJlRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZlbnROYW1lLCBkYXRhKVxuICAgIHtcbiAgICAgICAgdmFyIGV2O1xuXG4gICAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgICAgICAgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgICAgICAgICAgZXYuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgZXYgPSBleHRlbmQoZXYsIGRhdGEpO1xuICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmZpcmVFdmVudCgnb24nICsgZXZlbnROYW1lLCBldik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRqdXN0Q2FsZW5kYXIgPSBmdW5jdGlvbihjYWxlbmRhcikge1xuICAgICAgICBpZiAoY2FsZW5kYXIubW9udGggPCAwKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyIC09IE1hdGguY2VpbChNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoID4gMTEpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLnllYXIgKz0gTWF0aC5mbG9vcihNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggLT0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0cyBhbmQgbG9jYWxpc2F0aW9uXG4gICAgICovXG4gICAgZGVmYXVsdHMgPSB7XG5cbiAgICAgICAgLy8gYmluZCB0aGUgcGlja2VyIHRvIGEgZm9ybSBmaWVsZFxuICAgICAgICBmaWVsZDogbnVsbCxcblxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNob3cvaGlkZSB0aGUgcGlja2VyIG9uIGBmaWVsZGAgZm9jdXMgKGRlZmF1bHQgYHRydWVgIGlmIGBmaWVsZGAgaXMgc2V0KVxuICAgICAgICBib3VuZDogdW5kZWZpbmVkLFxuXG4gICAgICAgIC8vIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGFuIGFyaWEgYXNzaXN0YW5jZSB0ZWtzdCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIHJlbmRlcldlZWsgPSBmdW5jdGlvbiAoZCwgbSwgeSkge1xuICAgICAgICAvLyBMaWZ0ZWQgZnJvbSBodHRwOi8vamF2YXNjcmlwdC5hYm91dC5jb20vbGlicmFyeS9ibHdlZWt5ZWFyLmh0bSwgbGlnaHRseSBtb2RpZmllZC5cbiAgICAgICAgdmFyIG9uZWphbiA9IG5ldyBEYXRlKHksIDAsIDEpLFxuICAgICAgICAgICAgd2Vla051bSA9IE1hdGguY2VpbCgoKChuZXcgRGF0ZSh5LCBtLCBkKSAtIG9uZWphbikgLyA4NjQwMDAwMCkgKyBvbmVqYW4uZ2V0RGF5KCkrMSkvNyk7XG4gICAgICAgIHJldHVybiAnPHRkIGNsYXNzPVwicGlrYS13ZWVrXCI+JyArIHdlZWtOdW0gKyAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJSb3cgPSBmdW5jdGlvbihkYXlzLCBpc1JUTCwgcGlja1dob2xlV2VlaywgaXNSb3dTZWxlY3RlZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRyIGNsYXNzPVwicGlrYS1yb3cnICsgKHBpY2tXaG9sZVdlZWsgPyAnIHBpY2std2hvbGUtd2VlaycgOiAnJykgKyAoaXNSb3dTZWxlY3RlZCA/ICcgaXMtc2VsZWN0ZWQnIDogJycpICsgJ1wiPicgKyAoaXNSVEwgPyBkYXlzLnJldmVyc2UoKSA6IGRheXMpLmpvaW4oJycpICsgJzwvdHI+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKHJvd3MpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0Ym9keT4nICsgcm93cy5qb2luKCcnKSArICc8L3Rib2R5Pic7XG4gICAgfSxcblxuICAgIHJlbmRlckhlYWQgPSBmdW5jdGlvbihvcHRzKVxuICAgIHtcbiAgICAgICAgdmFyIGksIGFyciA9IFtdO1xuICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgYXJyLnB1c2goJzx0aD48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGggc2NvcGU9XCJjb2xcIj48YWJiciB0aXRsZT1cIicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGkpICsgJ1wiPicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGksIHRydWUpICsgJzwvYWJicj48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHRoZWFkPjx0cj4nICsgKG9wdHMuaXNSVEwgPyBhcnIucmV2ZXJzZSgpIDogYXJyKS5qb2luKCcnKSArICc8L3RyPjwvdGhlYWQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGl0bGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgYywgeWVhciwgbW9udGgsIHJlZlllYXIsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHZhciBpLCBqLCBhcnIsXG4gICAgICAgICAgICBvcHRzID0gaW5zdGFuY2UuX28sXG4gICAgICAgICAgICBpc01pblllYXIgPSB5ZWFyID09PSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICBpc01heFllYXIgPSB5ZWFyID09PSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICBodG1sID0gJzxkaXYgaWQ9XCInICsgcmFuZElkICsgJ1wiIGNsYXNzPVwicGlrYS10aXRsZVwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+JyxcbiAgICAgICAgICAgIG1vbnRoSHRtbCxcbiAgICAgICAgICAgIHllYXJIdG1sLFxuICAgICAgICAgICAgcHJldiA9IHRydWUsXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGFyciA9IFtdLCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArICh5ZWFyID09PSByZWZZZWFyID8gaSAtIGMgOiAxMiArIGkgLSBjKSArICdcIicgK1xuICAgICAgICAgICAgICAgIChpID09PSBtb250aCA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICtcbiAgICAgICAgICAgICAgICAoKGlzTWluWWVhciAmJiBpIDwgb3B0cy5taW5Nb250aCkgfHwgKGlzTWF4WWVhciAmJiBpID4gb3B0cy5tYXhNb250aCkgPyAnZGlzYWJsZWQ9XCJkaXNhYmxlZFwiJyA6ICcnKSArICc+JyArXG4gICAgICAgICAgICAgICAgb3B0cy5pMThuLm1vbnRoc1tpXSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoSHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyBvcHRzLmkxOG4ubW9udGhzW21vbnRoXSArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGhcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgaSA9IG9wdHMueWVhclJhbmdlWzBdO1xuICAgICAgICAgICAgaiA9IG9wdHMueWVhclJhbmdlWzFdICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSB5ZWFyIC0gb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICBqID0gMSArIHllYXIgKyBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoYXJyID0gW107IGkgPCBqICYmIGkgPD0gb3B0cy5tYXhZZWFyOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG9wdHMubWluWWVhcikge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCInICsgKGkgPT09IHllYXIgPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArICc+JyArIChpKSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5ZWFySHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyB5ZWFyICsgb3B0cy55ZWFyU3VmZml4ICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAob3B0cy5zaG93TW9udGhBZnRlclllYXIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0geWVhckh0bWwgKyBtb250aEh0bWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sICs9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWluWWVhciAmJiAobW9udGggPT09IDAgfHwgb3B0cy5taW5Nb250aCA+PSBtb250aCkpIHtcbiAgICAgICAgICAgIHByZXYgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heFllYXIgJiYgKG1vbnRoID09PSAxMSB8fCBvcHRzLm1heE1vbnRoIDw9IG1vbnRoKSkge1xuICAgICAgICAgICAgbmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLXByZXYnICsgKHByZXYgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5wcmV2aW91c01vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IChpbnN0YW5jZS5fby5udW1iZXJPZk1vbnRocyAtIDEpICkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtbmV4dCcgKyAobmV4dCA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLm5leHRNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgfSxcblxuICAgIHJlbmRlclRhYmxlID0gZnVuY3Rpb24ob3B0cywgZGF0YSwgcmFuZElkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGFibGUgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJwaWthLXRhYmxlXCIgcm9sZT1cImdyaWRcIiBhcmlhLWxhYmVsbGVkYnk9XCInICsgcmFuZElkICsgJ1wiPicgKyByZW5kZXJIZWFkKG9wdHMpICsgcmVuZGVyQm9keShkYXRhKSArICc8L3RhYmxlPic7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUGlrYWRheSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFBpa2FkYXkgPSBmdW5jdGlvbihvcHRpb25zKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgb3B0cyA9IHNlbGYuY29uZmlnKG9wdGlvbnMpO1xuXG4gICAgICAgIHNlbGYuX29uTW91c2VEb3duID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl92KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1idXR0b24nKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZW1wdHknKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LnBhcmVudE5vZGUsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShuZXcgRGF0ZSh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EteWVhcicpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtbW9udGgnKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLWRheScpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG8oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYmx1ckZpZWxkT25TZWxlY3QgJiYgb3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtcHJldicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucHJldk1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0b3VjaCBldmVudCBwcmV2ZW50IG1vdXNlIGV2ZW50cyBlbXVsYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9jID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC1tb250aCcpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvTW9udGgodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LXllYXInKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b1llYXIodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbktleUNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuICAgICAgICAgICAgaWYgKHNlbGYuaXNWaXNpYmxlKCkpIHtcblxuICAgICAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRlO1xuXG4gICAgICAgICAgICBpZiAoZS5maXJlZEJ5ID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMucGFyc2UpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gb3B0cy5wYXJzZShvcHRzLmZpZWxkLnZhbHVlLCBvcHRzLmZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICBkYXRlID0gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBvcHRzLmZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0cy5zZXREZWZhdWx0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVmRGF0ZSA9IG9wdHMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKGlzRGF0ZShkZWZEYXRlKSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuc2V0RGVmYXVsdERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGVmRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b0RhdGUoZGVmRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgKz0gJyBpcy1ib3VuZCc7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHNlbGYuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdmb2N1cycsIHNlbGYuX29uSW5wdXRGb2N1cyk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgc2VsZi5fb25JbnB1dEJsdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgUGlrYWRheSBBUElcbiAgICAgKi9cbiAgICBQaWthZGF5LnByb3RvdHlwZSA9IHtcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb25maWd1cmUgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgY29uZmlnOiBmdW5jdGlvbihvcHRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX28pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRzID0gZXh0ZW5kKHRoaXMuX28sIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgICAgICAgICBvcHRzLmlzUlRMID0gISFvcHRzLmlzUlRMO1xuXG4gICAgICAgICAgICBvcHRzLmZpZWxkID0gKG9wdHMuZmllbGQgJiYgb3B0cy5maWVsZC5ub2RlTmFtZSkgPyBvcHRzLmZpZWxkIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy50aGVtZSA9ICh0eXBlb2Ygb3B0cy50aGVtZSkgPT09ICdzdHJpbmcnICYmIG9wdHMudGhlbWUgPyBvcHRzLnRoZW1lIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy5ib3VuZCA9ICEhKG9wdHMuYm91bmQgIT09IHVuZGVmaW5lZCA/IG9wdHMuZmllbGQgJiYgb3B0cy5ib3VuZCA6IG9wdHMuZmllbGQpO1xuXG4gICAgICAgICAgICBvcHRzLnRyaWdnZXIgPSAob3B0cy50cmlnZ2VyICYmIG9wdHMudHJpZ2dlci5ub2RlTmFtZSkgPyBvcHRzLnRyaWdnZXIgOiBvcHRzLmZpZWxkO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVXZWVrZW5kcyA9ICEhb3B0cy5kaXNhYmxlV2Vla2VuZHM7XG5cbiAgICAgICAgICAgIG9wdHMuZGlzYWJsZURheUZuID0gKHR5cGVvZiBvcHRzLmRpc2FibGVEYXlGbikgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRpc2FibGVEYXlGbiA6IG51bGw7XG5cbiAgICAgICAgICAgIHZhciBub20gPSBwYXJzZUludChvcHRzLm51bWJlck9mTW9udGhzLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIG9wdHMubnVtYmVyT2ZNb250aHMgPSBub20gPiA0ID8gNCA6IG5vbTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5taW5EYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWluRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5tYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWF4RGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChvcHRzLm1pbkRhdGUgJiYgb3B0cy5tYXhEYXRlKSAmJiBvcHRzLm1heERhdGUgPCBvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1pbkRhdGUob3B0cy5taW5EYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heERhdGUob3B0cy5tYXhEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMTA7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2VbMF0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVswXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzFdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMV0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2UgPSBNYXRoLmFicyhwYXJzZUludChvcHRzLnllYXJSYW5nZSwgMTApKSB8fCBkZWZhdWx0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMueWVhclJhbmdlID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICh1c2luZyBNb21lbnQuanMgaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMuX28uZm9ybWF0O1xuICAgICAgICAgICAgaWYgKCFpc0RhdGUodGhpcy5fZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fby50b1N0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fby50b1N0cmluZyh0aGlzLl9kLCBmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMuX2QpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2QudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIE1vbWVudC5qcyBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBnZXRNb21lbnQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGhhc01vbWVudCA/IG1vbWVudCh0aGlzLl9kKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbSBhIE1vbWVudC5qcyBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHNldE1vbWVudDogZnVuY3Rpb24oZGF0ZSwgcHJldmVudE9uU2VsZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaGFzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShkYXRlLnRvRGF0ZSgpLCBwcmV2ZW50T25TZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBEYXRlIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGdldERhdGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZSh0aGlzLl9kKSA/IG5ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldERhdGU6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuX28ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLl9vLm1heERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUobWluKSAmJiBkYXRlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG1pbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG1heCkgJiYgZGF0ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtYXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodGhpcy5fZCk7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKHRoaXMuX2QpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZmllbGQudmFsdWUgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KHRoaXMuX28uZmllbGQsICdjaGFuZ2UnLCB7IGZpcmVkQnk6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXZlbnRPblNlbGVjdCAmJiB0eXBlb2YgdGhpcy5fby5vblNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLCB0aGlzLmdldERhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b0RhdGU6IGZ1bmN0aW9uKGRhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdDYWxlbmRhciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhcnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsIHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVEYXRlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBlbmQgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldE1vbnRoKGxhc3RWaXNpYmxlRGF0ZS5nZXRNb250aCgpKzEpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXREYXRlKGxhc3RWaXNpYmxlRGF0ZS5nZXREYXRlKCktMSk7XG4gICAgICAgICAgICAgICAgbmV3Q2FsZW5kYXIgPSAodmlzaWJsZURhdGUgPCBmaXJzdFZpc2libGVEYXRlLmdldFRpbWUoKSB8fCBsYXN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIDwgdmlzaWJsZURhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3Q2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFycyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLm1haW5DYWxlbmRhciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArPSAxIC0gdGhpcy5fby5udW1iZXJPZk1vbnRocztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0RGF0ZTogZnVuY3Rpb24oc2lnbiwgZGF5cykge1xuXG4gICAgICAgICAgICB2YXIgZGF5ID0gdGhpcy5nZXREYXRlKCkgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaWZmZXJlbmNlID0gcGFyc2VJbnQoZGF5cykqMjQqNjAqNjAqMTAwMDtcblxuICAgICAgICAgICAgdmFyIG5ld0RheTtcblxuICAgICAgICAgICAgaWYgKHNpZ24gPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSArIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSAtIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGUobmV3RGF5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0gPSBhZGp1c3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgYyA8IHRoaXMuX28ubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzW2NdID0gYWRqdXN0Q2FsZW5kYXIoe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKyBjLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLmNhbGVuZGFyc1swXS55ZWFyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnb3RvVG9kYXk6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBtb250aCAoemVyby1pbmRleCwgZS5nLiAwOiBKYW51YXJ5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b01vbnRoOiBmdW5jdGlvbihtb250aClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBuZXh0TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKztcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcHJldk1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS07XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGZ1bGwgeWVhciAoZS5nLiBcIjIwMTJcIilcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9ZZWFyOiBmdW5jdGlvbih5ZWFyKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1pbkRhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1pbkRhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSBkZWZhdWx0cy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSBkZWZhdWx0cy5taW5ZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSBkZWZhdWx0cy5taW5Nb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSBkZWZhdWx0cy5zdGFydFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtYXhEYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNYXhEYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSBkZWZhdWx0cy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IGRlZmF1bHRzLm1heFllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IGRlZmF1bHRzLm1heE1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSBkZWZhdWx0cy5lbmRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0U3RhcnRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEVuZFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZWZyZXNoIHRoZSBIVE1MXG4gICAgICAgICAqL1xuICAgICAgICBkcmF3OiBmdW5jdGlvbihmb3JjZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl92ICYmICFmb3JjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBtaW5ZZWFyID0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgICAgIG1heFllYXIgPSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICAgICAgbWluTW9udGggPSBvcHRzLm1pbk1vbnRoLFxuICAgICAgICAgICAgICAgIG1heE1vbnRoID0gb3B0cy5tYXhNb250aCxcbiAgICAgICAgICAgICAgICBodG1sID0gJycsXG4gICAgICAgICAgICAgICAgcmFuZElkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5feSA8PSBtaW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1pblllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtaW5Nb250aCkgJiYgdGhpcy5fbSA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtaW5Nb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5feSA+PSBtYXhZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1heFllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtYXhNb250aCkgJiYgdGhpcy5fbSA+IG1heE1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtYXhNb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmRJZCA9ICdwaWthLXRpdGxlLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKS5zdWJzdHIoMCwgMik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgb3B0cy5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInBpa2EtbGVuZGFyXCI+JyArIHJlbmRlclRpdGxlKHRoaXMsIGMsIHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCB0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCByYW5kSWQpICsgdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbY10ueWVhciwgdGhpcy5jYWxlbmRhcnNbY10ubW9udGgsIHJhbmRJZCkgKyAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGlmKG9wdHMuZmllbGQudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy50cmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9vLm9uRHJhdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25EcmF3KHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgc2NyZWVuIHJlYWRlciB1c2VyIGtub3cgdG8gdXNlIGFycm93IGtleXNcbiAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG9wdHMuYXJpYUxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RQb3NpdGlvbjogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmllbGQsIHBFbCwgd2lkdGgsIGhlaWdodCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCwgbGVmdCwgdG9wLCBjbGllbnRSZWN0LCBsZWZ0QWxpZ25lZCwgYm90dG9tQWxpZ25lZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuX28udHJpZ2dlcjtcbiAgICAgICAgICAgIHBFbCA9IGZpZWxkO1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgbGVmdEFsaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2xpZW50UmVjdCA9IGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdG9wID0gY2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBwRWwub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICB0b3AgID0gcEVsLm9mZnNldFRvcCArIHBFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgd2hpbGUoKHBFbCA9IHBFbC5vZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcEVsLm9mZnNldFRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlZmF1bHQgcG9zaXRpb24gaXMgYm90dG9tICYgbGVmdFxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgbGVmdCArIHdpZHRoID4gdmlld3BvcnRXaWR0aCkgfHxcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigncmlnaHQnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIGxlZnQgLSB3aWR0aCArIGZpZWxkLm9mZnNldFdpZHRoID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBsZWZ0QWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgdG9wICsgaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQgKyBzY3JvbGxUb3ApIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3RvcCcpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0ID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRvcCA9IHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICBib3R0b21BbGlnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuXG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBsZWZ0QWxpZ25lZCA/ICdsZWZ0LWFsaWduZWQnIDogJ3JpZ2h0LWFsaWduZWQnKTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsIGJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhYm90dG9tQWxpZ25lZCA/ICdib3R0b20tYWxpZ25lZCcgOiAndG9wLWFsaWduZWQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVuZGVyIEhUTUwgZm9yIGEgcGFydGljdWxhciBtb250aFxuICAgICAgICAgKi9cbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgcmFuZElkKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgb3B0cyAgID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBub3cgICAgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRheXMgICA9IGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCksXG4gICAgICAgICAgICAgICAgZGF0YSAgID0gW10sXG4gICAgICAgICAgICAgICAgcm93ICAgID0gW107XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkobm93KTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZpcnN0RGF5ID4gMCkge1xuICAgICAgICAgICAgICAgIGJlZm9yZSAtPSBvcHRzLmZpcnN0RGF5O1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZSArPSA3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyAxMSA6IG1vbnRoIC0gMSxcbiAgICAgICAgICAgICAgICBuZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyAwIDogbW9udGggKyAxLFxuICAgICAgICAgICAgICAgIHllYXJPZlByZXZpb3VzTW9udGggPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcixcbiAgICAgICAgICAgICAgICB5ZWFyT2ZOZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgZGF5c0luUHJldmlvdXNNb250aCA9IGdldERheXNJbk1vbnRoKHllYXJPZlByZXZpb3VzTW9udGgsIHByZXZpb3VzTW9udGgpO1xuICAgICAgICAgICAgdmFyIGNlbGxzID0gZGF5cyArIGJlZm9yZSxcbiAgICAgICAgICAgICAgICBhZnRlciA9IGNlbGxzO1xuICAgICAgICAgICAgd2hpbGUoYWZ0ZXIgPiA3KSB7XG4gICAgICAgICAgICAgICAgYWZ0ZXIgLT0gNztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxzICs9IDcgLSBhZnRlcjtcbiAgICAgICAgICAgIHZhciBpc1dlZWtTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwgY2VsbHM7IGkrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEgKyAoaSAtIGJlZm9yZSkpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gaXNEYXRlKHRoaXMuX2QpID8gY29tcGFyZURhdGVzKGRheSwgdGhpcy5fZCkgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNUb2RheSA9IGNvbXBhcmVEYXRlcyhkYXksIG5vdyksXG4gICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50ID0gb3B0cy5ldmVudHMuaW5kZXhPZihkYXkudG9EYXRlU3RyaW5nKCkpICE9PSAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSA9IGkgPCBiZWZvcmUgfHwgaSA+PSAoZGF5cyArIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIGRheU51bWJlciA9IDEgKyAoaSAtIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbW9udGgsXG4gICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuc3RhcnRSYW5nZSwgZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbmRSYW5nZSA9IG9wdHMuZW5kUmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuZW5kUmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzSW5SYW5nZSA9IG9wdHMuc3RhcnRSYW5nZSAmJiBvcHRzLmVuZFJhbmdlICYmIG9wdHMuc3RhcnRSYW5nZSA8IGRheSAmJiBkYXkgPCBvcHRzLmVuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkID0gKG9wdHMubWluRGF0ZSAmJiBkYXkgPCBvcHRzLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5tYXhEYXRlICYmIGRheSA+IG9wdHMubWF4RGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVXZWVrZW5kcyAmJiBpc1dlZWtlbmQoZGF5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVEYXlGbiAmJiBvcHRzLmRpc2FibGVEYXlGbihkYXkpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlzSW5QcmV2aW91c01vbnRoICsgZGF5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBwcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZlByZXZpb3VzTW9udGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlOdW1iZXIgLSBkYXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBuZXh0TW9udGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck9mTmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRheUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheTogZGF5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6IG1vbnRoTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogeWVhck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50OiBoYXNFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiBpc1RvZGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2U6IGlzU3RhcnRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2U6IGlzRW5kUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2U6IGlzSW5SYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczogb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHNcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzLnBpY2tXaG9sZVdlZWsgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93LnB1c2gocmVuZGVyRGF5KGRheUNvbmZpZykpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCsrciA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LnVuc2hpZnQocmVuZGVyV2VlayhpIC0gYmVmb3JlLCBtb250aCwgeWVhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsgLy8gcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3YgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHQU1FIE9WRVJcbiAgICAgICAgICovXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vO1xuXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy5maWVsZCwgJ2NoYW5nZScsIHRoaXMuX29uSW5wdXRDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCB0aGlzLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgdGhpcy5fb25JbnB1dEJsdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICByZXR1cm4gUGlrYWRheTtcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LkF1dG9saW5rZXI7IiwiLyogZXNsaW50IGtleS1zcGFjaW5nOiAwICovXG4vKiBlc2xpbnQgcXVvdGUtcHJvcHM6IDAgKi9cblxuY29uc3QgTWltZSA9IHtcblx0J2VtbCc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCdtaW1lJzogJ21lc3NhZ2UvcmZjODIyJyxcblx0J3R4dCc6ICd0ZXh0L3BsYWluJyxcblx0J3RleHQnOiAndGV4dC9wbGFpbicsXG5cdCdkZWYnOiAndGV4dC9wbGFpbicsXG5cdCdsaXN0JzogJ3RleHQvcGxhaW4nLFxuXHQnaW4nOiAndGV4dC9wbGFpbicsXG5cdCdpbmknOiAndGV4dC9wbGFpbicsXG5cdCdsb2cnOiAndGV4dC9wbGFpbicsXG5cdCdzcWwnOiAndGV4dC9wbGFpbicsXG5cdCdjZmcnOiAndGV4dC9wbGFpbicsXG5cdCdjb25mJzogJ3RleHQvcGxhaW4nLFxuXHQnYXNjJzogJ3RleHQvcGxhaW4nLFxuXHQncnR4JzogJ3RleHQvcmljaHRleHQnLFxuXHQndmNhcmQnOiAndGV4dC92Y2FyZCcsXG5cdCd2Y2YnOiAndGV4dC92Y2FyZCcsXG5cdCdodG0nOiAndGV4dC9odG1sJyxcblx0J2h0bWwnOiAndGV4dC9odG1sJyxcblx0J2Nzdic6ICd0ZXh0L2NzdicsXG5cdCdpY3MnOiAndGV4dC9jYWxlbmRhcicsXG5cdCdpZmInOiAndGV4dC9jYWxlbmRhcicsXG5cdCd4bWwnOiAndGV4dC94bWwnLFxuXHQnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0J3N3Zic6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsXG5cdCdobHAnOiAnYXBwbGljYXRpb24vd2luaGxwJyxcblx0J3dndCc6ICdhcHBsaWNhdGlvbi93aWRnZXQnLFxuXHQnY2htJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCcsXG5cdCdwMTAnOiAnYXBwbGljYXRpb24vcGtjczEwJyxcblx0J3A3Yyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3bSc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3cyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUnLFxuXHQndG9ycmVudCc6ICdhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQnLFxuXG5cdC8vIHNjcmlwdHNcblx0J2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxuXHQncGwnOiAndGV4dC9wZXJsJyxcblx0J2Nzcyc6ICd0ZXh0L2NzcycsXG5cdCdhc3AnOiAndGV4dC9hc3AnLFxuXHQncGhwJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDMnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHA1JzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BodG1sJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblxuXHQvLyBpbWFnZXNcblx0J3BuZyc6ICdpbWFnZS9wbmcnLFxuXHQnanBnJzogJ2ltYWdlL2pwZWcnLFxuXHQnanBlZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZSc6ICdpbWFnZS9qcGVnJyxcblx0J2pmaWYnOiAnaW1hZ2UvanBlZycsXG5cdCdnaWYnOiAnaW1hZ2UvZ2lmJyxcblx0J2JtcCc6ICdpbWFnZS9ibXAnLFxuXHQnY2dtJzogJ2ltYWdlL2NnbScsXG5cdCdpZWYnOiAnaW1hZ2UvaWVmJyxcblx0J2ljbyc6ICdpbWFnZS94LWljb24nLFxuXHQndGlmJzogJ2ltYWdlL3RpZmYnLFxuXHQndGlmZic6ICdpbWFnZS90aWZmJyxcblx0J3N2Zyc6ICdpbWFnZS9zdmcreG1sJyxcblx0J3N2Z3onOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdkanYnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnZGp2dSc6ICdpbWFnZS92bmQuZGp2dScsXG5cdCd3ZWJwJzogJ2ltYWdlL3dlYnAnLFxuXG5cdC8vIGFyY2hpdmVzXG5cdCd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcblx0Jzd6JzogJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsXG5cdCdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXG5cdCdleGUnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2RsbCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnc2NyJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjb20nOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2JhdCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnbXNpJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjYWInOiAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJyxcblx0J2d6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCd0Z3onOiAnYXBwbGljYXRpb24veC1nemlwJyxcblx0J2J6JzogJ2FwcGxpY2F0aW9uL3gtYnppcCcsXG5cdCdiejInOiAnYXBwbGljYXRpb24veC1iemlwMicsXG5cdCdkZWInOiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsXG5cblx0Ly8gZm9udHNcblx0J3BzZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmJyxcblx0J290Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtb3RmJyxcblx0J3BjZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtcGNmJyxcblx0J3NuZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJyxcblx0J3R0Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblx0J3R0Yyc6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblxuXHQvLyBhdWRpb1xuXHQnbXAzJzogJ2F1ZGlvL21wZWcnLFxuXHQnYW1yJzogJ2F1ZGlvL2FtcicsXG5cdCdhYWMnOiAnYXVkaW8veC1hYWMnLFxuXHQnYWlmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZjJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCd3YXYnOiAnYXVkaW8veC13YXYnLFxuXHQnd21hJzogJ2F1ZGlvL3gtbXMtd21hJyxcblx0J3dheCc6ICdhdWRpby94LW1zLXdheCcsXG5cdCdtaWRpJzogJ2F1ZGlvL21pZGknLFxuXHQnbXA0YSc6ICdhdWRpby9tcDQnLFxuXHQnb2dnJzogJ2F1ZGlvL29nZycsXG5cdCd3ZWJhJzogJ2F1ZGlvL3dlYm0nLFxuXHQncmEnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8nLFxuXHQncmFtJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JtcCc6ICdhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4nLFxuXHQnbTN1JzogJ2F1ZGlvL3gtbXBlZ3VybCcsXG5cblx0Ly8gdmlkZW9cblx0J2Zsdic6ICd2aWRlby94LWZsdicsXG5cdCdxdCc6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnbW92JzogJ3ZpZGVvL3F1aWNrdGltZScsXG5cdCd3bXYnOiAndmlkZW8vd2luZG93cy1tZWRpYScsXG5cdCdhdmknOiAndmlkZW8veC1tc3ZpZGVvJyxcblx0J21wZyc6ICd2aWRlby9tcGVnJyxcblx0J21wZWcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGUnOiAndmlkZW8vbXBlZycsXG5cdCdtMXYnOiAndmlkZW8vbXBlZycsXG5cdCdtMnYnOiAndmlkZW8vbXBlZycsXG5cdCczZ3AnOiAndmlkZW8vM2dwcCcsXG5cdCczZzInOiAndmlkZW8vM2dwcDInLFxuXHQnaDI2MSc6ICd2aWRlby9oMjYxJyxcblx0J2gyNjMnOiAndmlkZW8vaDI2MycsXG5cdCdoMjY0JzogJ3ZpZGVvL2gyNjQnLFxuXHQnanBndic6ICd2aWRlby9qcGd2Jyxcblx0J21wNCc6ICd2aWRlby9tcDQnLFxuXHQnbXA0dic6ICd2aWRlby9tcDQnLFxuXHQnbXBnNCc6ICd2aWRlby9tcDQnLFxuXHQnb2d2JzogJ3ZpZGVvL29nZycsXG5cdCd3ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuXHQnbTR2JzogJ3ZpZGVvL3gtbTR2Jyxcblx0J2FzZic6ICd2aWRlby94LW1zLWFzZicsXG5cdCdhc3gnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnd20nOiAndmlkZW8veC1tcy13bScsXG5cdCd3bXgnOiAndmlkZW8veC1tcy13bXgnLFxuXHQnd3Z4JzogJ3ZpZGVvL3gtbXMtd3Z4Jyxcblx0J21vdmllJzogJ3ZpZGVvL3gtc2dpLW1vdmllJyxcblxuXHQvLyBhZG9iZVxuXHQncGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXG5cdCdwc2QnOiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsXG5cdCdhaSc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J2Vwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J3BzJzogJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLFxuXG5cdC8vIG1zIG9mZmljZVxuXHQnZG9jJzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdkb3QnOiAnYXBwbGljYXRpb24vbXN3b3JkJyxcblx0J3J0Zic6ICdhcHBsaWNhdGlvbi9ydGYnLFxuXHQneGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG5cdCdwcHQnOiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLFxuXHQnZG9jeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG5cdCd4bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyxcblx0J2RvdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLFxuXHQncHB0eCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcblxuXHQvLyBvcGVuIG9mZmljZVxuXHQnb2R0JzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCcsXG5cdCdvZHMnOiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbn07XG5cbmV4cG9ydCB7IE1pbWUsIE1pbWUgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInJlcXVpcmUoJy4vZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICBoaWRlKENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogaW5kZXgsIGRvbmU6IGZhbHNlIH07XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogdGFyZ2V0W2luZGV4XSwgZG9uZTogZmFsc2UgfTtcbiAgcmV0dXJuIHsgdmFsdWU6IFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGRvbmU6IGZhbHNlIH07XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaXNGdW5jIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Bc2snLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQXNrJ1xufSlcbmNsYXNzIEFza1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5hc2tEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy55ZXNCdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5vQnV0dG9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnllc0ZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZZZXNBY3Rpb24gPSBudWxsO1xuXHRcdHRoaXMuZk5vQWN0aW9uID0gbnVsbDtcblxuXHRcdHRoaXMuYkZvY3VzWWVzT25TaG93ID0gdHJ1ZTtcblx0XHR0aGlzLmJEaXNhYmVDbG9zZU9uRXNjID0gdHJ1ZTtcblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cEFzaztcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5hc2tEZXNjKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbihpMThuKCdQT1BVUFNfQVNLL0JVVFRPTl9ZRVMnKSk7XG5cdFx0dGhpcy5ub0J1dHRvbihpMThuKCdQT1BVUFNfQVNLL0JVVFRPTl9OTycpKTtcblxuXHRcdHRoaXMueWVzRm9jdXMoZmFsc2UpO1xuXHRcdHRoaXMubm9Gb2N1cyhmYWxzZSk7XG5cblx0XHR0aGlzLmZZZXNBY3Rpb24gPSBudWxsO1xuXHRcdHRoaXMuZk5vQWN0aW9uID0gbnVsbDtcblx0fVxuXG5cdHllc0NsaWNrKCkge1xuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXG5cdFx0aWYgKGlzRnVuYyh0aGlzLmZZZXNBY3Rpb24pKSB7XG5cdFx0XHR0aGlzLmZZZXNBY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHRub0NsaWNrKCkge1xuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXG5cdFx0aWYgKGlzRnVuYyh0aGlzLmZOb0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZk5vQWN0aW9uLmNhbGwobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQXNrRGVzY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZlllc0Z1bmNcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZOb0Z1bmNcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzWWVzQnV0dG9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc05vQnV0dG9uXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJGb2N1c1llc09uU2hvdyA9IHRydWVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblNob3coYXNrRGVzYywgZlllc0Z1bmMgPSBudWxsLCBmTm9GdW5jID0gbnVsbCwgeWVzQnV0dG9uID0gJycsIG5vQnV0dG9uID0gJycsIGlzRm9jdXNZZXNPblNob3cgPSB0cnVlKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHR0aGlzLmZZZXNBY3Rpb24gPSBmWWVzRnVuYyB8fCBudWxsO1xuXHRcdHRoaXMuZk5vQWN0aW9uID0gZk5vRnVuYyB8fCBudWxsO1xuXG5cdFx0dGhpcy5hc2tEZXNjKGFza0Rlc2MgfHwgJycpO1xuXG5cdFx0aWYgKHllc0J1dHRvbikge1xuXHRcdFx0dGhpcy55ZXNCdXR0b24oeWVzQnV0dG9uKTtcblx0XHR9XG5cblx0XHRpZiAobm9CdXR0b24pIHtcblx0XHRcdHRoaXMubm9CdXR0b24obm9CdXR0b24pO1xuXHRcdH1cblxuXHRcdHRoaXMuYkZvY3VzWWVzT25TaG93ID0gISFpc0ZvY3VzWWVzT25TaG93O1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICh0aGlzLmJGb2N1c1llc09uU2hvdykge1xuXHRcdFx0dGhpcy55ZXNGb2N1cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgndGFiLCBzaGlmdCt0YWIsIHJpZ2h0LCBsZWZ0JywgS2V5U3RhdGUuUG9wdXBBc2ssICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnllc0ZvY3VzKCkpIHtcblx0XHRcdFx0dGhpcy5ub0ZvY3VzKHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy55ZXNGb2N1cyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnZXNjJywgS2V5U3RhdGUuUG9wdXBBc2ssICgpID0+IHtcblx0XHRcdHRoaXMubm9DbGljaygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFza1BvcHVwVmlldywgQXNrUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY2FjaGUgPSB7fTtcblxudmFyIHRocm93ZXIgPSBmdW5jdGlvbiAoaXQpIHsgdGhyb3cgaXQ7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBvcHRpb25zKSB7XG4gIGlmIChoYXMoY2FjaGUsIE1FVEhPRF9OQU1FKSkgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXTtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHZhciBBQ0NFU1NPUlMgPSBoYXMob3B0aW9ucywgJ0FDQ0VTU09SUycpID8gb3B0aW9ucy5BQ0NFU1NPUlMgOiBmYWxzZTtcbiAgdmFyIGFyZ3VtZW50MCA9IGhhcyhvcHRpb25zLCAwKSA/IG9wdGlvbnNbMF0gOiB0aHJvd2VyO1xuICB2YXIgYXJndW1lbnQxID0gaGFzKG9wdGlvbnMsIDEpID8gb3B0aW9uc1sxXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdID0gISFtZXRob2QgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoQUNDRVNTT1JTICYmICFERVNDUklQVE9SUykgcmV0dXJuIHRydWU7XG4gICAgdmFyIE8gPSB7IGxlbmd0aDogLTEgfTtcblxuICAgIGlmIChBQ0NFU1NPUlMpIGRlZmluZVByb3BlcnR5KE8sIDEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiB0aHJvd2VyIH0pO1xuICAgIGVsc2UgT1sxXSA9IDE7XG5cbiAgICBtZXRob2QuY2FsbChPLCBhcmd1bWVudDAsIGFyZ3VtZW50MSk7XG4gIH0pO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gQXJyYXlWYWx1ZXMpIHRyeSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gPSBBcnJheVZhbHVlcztcbiAgICB9XG4gICAgaWYgKCFDb2xsZWN0aW9uUHJvdG90eXBlW1RPX1NUUklOR19UQUddKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICB9XG4gICAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSBmb3IgKHZhciBNRVRIT0RfTkFNRSBpbiBBcnJheUl0ZXJhdG9yTWV0aG9kcykge1xuICAgICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gIT09IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSkgdHJ5IHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvcixcbi8vIHNvIHdlIHVzZSBhbiBpbnRlcm1lZGlhdGUgZnVuY3Rpb24uXG5mdW5jdGlvbiBSRShzLCBmKSB7XG4gIHJldHVybiBSZWdFeHAocywgZik7XG59XG5cbmV4cG9ydHMuVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbiAgdmFyIHJlID0gUkUoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9IG51bGw7XG59KTtcblxuZXhwb3J0cy5CUk9LRU5fQ0FSRVQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSBSRSgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9IG51bGw7XG59KTtcbiIsInZhciByZWR1Y2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gcmVkdWNlIDogb3duO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG5pZiAoSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuaWYgKCFJU19QVVJFICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIHNjcmlwdCA9ICdzY3JpcHQnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBqcyA9ICdqYXZhJyArIHNjcmlwdCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gU3RyaW5nKGpzKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArIHNjcmlwdCArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy8nICsgc2NyaXB0ICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4obGVuZ3RoLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIE1FVEhPRF9SRVFVSVJFRCA9IHRvU3RyaW5nICE9PSAoe30pLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmIE1FVEhPRF9SRVFVSVJFRCkgaGlkZSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCIvLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNhcnJheVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjbGFzc29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgY29udmVydExhbmdOYW1lIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuLy8gaW1wb3J0IHt2aWV3LCBWaWV3VHlwZX0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0xhbmd1YWdlcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNMYW5ndWFnZXMnXG59KVxuY2xhc3MgTGFuZ3VhZ2VzUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZXJMYW5ndWFnZSA9IHRoaXMudXNlckxhbmd1YWdlKCk7XG5cdFx0XHRyZXR1cm4gXy5tYXAodGhpcy5sYW5ncygpLCAobGFuZ3VhZ2UpID0+ICh7XG5cdFx0XHRcdGtleTogbGFuZ3VhZ2UsXG5cdFx0XHRcdHVzZXI6IGxhbmd1YWdlID09PSB1c2VyTGFuZ3VhZ2UsXG5cdFx0XHRcdHNlbGVjdGVkOiBrby5vYnNlcnZhYmxlKGZhbHNlKSxcblx0XHRcdFx0ZnVsbE5hbWU6IGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSlcblx0XHRcdH0pKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubGFuZ3Muc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0fVxuXG5cdGxhbmd1YWdlVG9vbHRpcE5hbWUobGFuZ3VhZ2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIHRydWUpO1xuXHRcdHJldHVybiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIGZhbHNlKSA9PT0gcmVzdWx0ID8gJycgOiByZXN1bHQ7XG5cdH1cblxuXHRzZXRMYW5ndWFnZVNlbGVjdGlvbigpIHtcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuZkxhbmcgPyBrby51bndyYXAodGhpcy5mTGFuZykgOiAnJztcblx0XHRfLmVhY2godGhpcy5sYW5ndWFnZXMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdGl0ZW0uc2VsZWN0ZWQoaXRlbS5rZXkgPT09IGN1cnJlbnRMYW5nKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmVmb3JlU2hvdygpIHtcblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSgnJyk7XG5cblx0XHR0aGlzLmxhbmdzKFtdKTtcblx0fVxuXG5cdG9uU2hvdyhmTGFuZ3VhZ2UsIGxhbmdzLCB1c2VyTGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmZMYW5nID0gZkxhbmd1YWdlO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlKHVzZXJMYW5ndWFnZSB8fCAnJyk7XG5cblx0XHR0aGlzLmxhbmdzKGxhbmdzKTtcblx0fVxuXG5cdGNoYW5nZUxhbmd1YWdlKGxhbmcpIHtcblx0XHRpZiAodGhpcy5mTGFuZykge1xuXHRcdFx0dGhpcy5mTGFuZyhsYW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBMYW5ndWFnZXNQb3B1cFZpZXcsIExhbmd1YWdlc1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBraWxsQ3RybEFDdHJsUywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkb21SZWFkeSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyAkd2luLCAkaHRtbCwgZGF0YSBhcyBHbG9iYWxzRGF0YSwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIEVudW1zIGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBQbHVnaW5zIGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuXG5leHBvcnQgZGVmYXVsdCAoQXBwKSA9PiB7XG5cdEdsb2JhbHNEYXRhLl9fQVBQX18gPSBBcHA7XG5cblx0JHdpbi5vbigna2V5ZG93bicsIGtpbGxDdHJsQUN0cmxTKS5vbigndW5sb2FkJywgKCkgPT4ge1xuXHRcdEdsb2JhbHNEYXRhLmJVbmxvYWQgPSB0cnVlO1xuXHR9KTtcblxuXHQkaHRtbC5hZGRDbGFzcyhiTW9iaWxlRGV2aWNlID8gJ21vYmlsZScgOiAnbm8tbW9iaWxlJykub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KTtcblxuXHRjb25zdCBybCA9IHdpbmRvdy5ybCB8fCB7fTtcblxuXHRybC5pMThuID0gaTE4bjtcblx0cmwuY3JlYXRlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRMZWdhY3k7XG5cblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWwgPSBQbHVnaW5zLmFkZFNldHRpbmdzVmlld01vZGVsO1xuXHRybC5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluO1xuXG5cdHJsLmFkZEhvb2sgPSBQbHVnaW5zLmFkZEhvb2s7XG5cdHJsLnNldHRpbmdzR2V0ID0gUGx1Z2lucy5tYWluU2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblNldHRpbmdzR2V0ID0gUGx1Z2lucy5zZXR0aW5nc0dldDtcblx0cmwucGx1Z2luUmVtb3RlUmVxdWVzdCA9IFBsdWdpbnMucmVtb3RlUmVxdWVzdDtcblxuXHRybC5FbWFpbE1vZGVsID0gRW1haWxNb2RlbDtcblx0cmwuRW51bXMgPSBFbnVtcztcblxuXHR3aW5kb3cucmwgPSBybDtcblxuXHR3aW5kb3cuX19BUFBfQk9PVCA9IChmRXJyb3JDYWxsYmFjaykgPT4ge1xuXHRcdGRvbVJlYWR5KCgpID0+IHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFUyAmJiB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF0pIHtcblx0XHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JsLXRlbXBsYXRlcycpLmlubmVySFRNTCA9IHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFU1swXTtcblxuXHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCduby1qcyBybC1ib290ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1ib290ZWQnKTtcblxuXHRcdFx0XHRcdFx0QXBwLmJvb3RzdGFydCgpO1xuXHRcdFx0XHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZkVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdpbmRvdy5fX0FQUF9CT09UID0gbnVsbDtcblx0XHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdFx0fSk7XG5cdH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGVcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7ICRodG1sLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGFuaW0gPSBiTW9iaWxlRGV2aWNlIHx8ICF2YWx1ZTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1hbmltJywgIWFuaW0pLnRvZ2dsZUNsYXNzKCduby1ybC1hbmltJywgYW5pbSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdHRoaXMucHJlbSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25Mb2dpbicpKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnKSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnTmV3TW92ZVRvRm9sZGVyJykpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnSW50ZXJmYWNlQW5pbWF0aW9uJykpO1xuXG5cdFx0dGhpcy5wcmVtKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1ByZW1UeXBlJykpO1xuXHRcdHRoaXMuY29tbXVuaXR5KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbW11bml0eScpKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlLCBBYnN0cmFjdEFwcFN0b3JlIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQsIERFRkFVTFRfQUpBWF9USU1FT1VUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGluQXJyYXksIHBJbnQsIHBTdHJpbmcsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVHlwZVxuXHQgKiBAcGFyYW0gez9BamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqIEBwYXJhbSB7Kj19IG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHQgKi9cblx0ZGVmYXVsdFJlc3BvbnNlKGZDYWxsYmFjaywgc1JlcXVlc3RBY3Rpb24sIHNUeXBlLCBvRGF0YSwgYkNhY2hlZCwgb1JlcXVlc3RQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgZkNhbGwgPSAoKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gc1R5cGUgJiYgR2xvYmFsc0RhdGEuYlVubG9hZCkge1xuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0LTEgPFxuXHRcdFx0XHRcdFx0aW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YS5DbGVhckF1dGggfHwgb0RhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cblx0XHRcdFx0XHRcdGlmICghb0RhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgPSAwO1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdF0pO1xuXG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjayhcblx0XHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKHNUeXBlKSB7XG5cdFx0XHRjYXNlICdzdWNjZXNzJzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Fib3J0Jzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3IgPT09IHNUeXBlKSB7XG5cdFx0XHRfLmRlbGF5KGZDYWxsLCAzMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmQ2FsbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZlJlc3VsdENhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZU91dCA9IDIwMDAwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICogQHJldHVybnMge2pRdWVyeS5qcVhIUn1cblx0ICovXG5cdGFqYXhSZXF1ZXN0KGZSZXN1bHRDYWxsYmFjaywgcGFyYW1zLCBpVGltZU91dCA9IDIwMDAwLCBzR2V0QWRkID0gJycsIGFib3J0QWN0aW9ucyA9IFtdKSB7XG5cdFx0Y29uc3QgaXNQb3N0ID0gJycgPT09IHNHZXRBZGQsXG5cdFx0XHRoZWFkZXJzID0ge30sXG5cdFx0XHRzdGFydCA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCBhY3Rpb24gPSAnJztcblxuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRhY3Rpb24gPSBwYXJhbXMuQWN0aW9uIHx8ICcnO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGFib3J0QWN0aW9ucywgKGFjdGlvblRvQWJvcnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0cGFyYW1zLlhUb2tlbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0b2tlbicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EZWZBamF4ID0gJC5hamF4KHtcblx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0dXJsOiBhamF4KHNHZXRBZGQpLFxuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIDoge30sXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0dGltZW91dDogaVRpbWVPdXQsXG5cdFx0XHRnbG9iYWw6IHRydWVcblx0XHR9KTtcblxuXHRcdG9EZWZBamF4LmFsd2F5cygob0RhdGEsIHNUeXBlKSA9PiB7XG5cdFx0XHRsZXQgY2FjaGVkID0gZmFsc2U7XG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVGltZSkge1xuXHRcdFx0XHRjYWNoZWQgPSBwSW50KG9EYXRhLlRpbWUpID4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKG9EYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uICYmIHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSAnYWJvcnQnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVmYXVsdFJlc3BvbnNlKGZSZXN1bHRDYWxsYmFjaywgYWN0aW9uLCBzVHlwZSwgb0RhdGEsIGNhY2hlZCwgcGFyYW1zKTtcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGFjdGlvbiwgYWJvcnRBY3Rpb25zKSkge1xuXHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9EZWZBamF4O1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdFx0b0RlZkFqYXguY2F0Y2goY29uc29sZS5sb2cpO1xuXHRcdHJldHVybiBvRGVmQWpheDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVvdXRcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKi9cblx0ZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCBzQWN0aW9uLCBvUGFyYW1ldGVycywgaVRpbWVvdXQsIHNHZXRBZGQsIGFBYm9ydEFjdGlvbnMpIHtcblx0XHRvUGFyYW1ldGVycyA9IG9QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdG9QYXJhbWV0ZXJzLkFjdGlvbiA9IHNBY3Rpb247XG5cblx0XHRzR2V0QWRkID0gcFN0cmluZyhzR2V0QWRkKTtcblxuXHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXF1ZXN0JywgW3NBY3Rpb24sIG9QYXJhbWV0ZXJzLCBzR2V0QWRkXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdG9QYXJhbWV0ZXJzLFxuXHRcdFx0aXNVbmQoaVRpbWVvdXQpID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBwSW50KGlUaW1lb3V0KSxcblx0XHRcdHNHZXRBZGQsXG5cdFx0XHRhQWJvcnRBY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRub29wKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTm9vcCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbJ3tzdWJuYW1lfS8nLCBydWxlc10sXG5cdFx0XHRbJ3tzdWJuYW1lfScsIHJ1bGVzXSxcblx0XHRcdFsnJywgcnVsZXNdXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuLCBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IHNzbSBmcm9tICdzc20nO1xuXG5pbXBvcnQge1xuXHQkd2luLFxuXHQkaHRtbCxcblx0JGRvYyxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc05vcm1hbCwgcFN0cmluZywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcm9vdCwgcm9vdEFkbWluLCByb290VXNlciwgcG9wdWxhdGVBdXRoU3VmZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IHJvdXRlT2ZmLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RCb290IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RCb290JztcblxuY2xhc3MgQWJzdHJhY3RBcHAgZXh0ZW5kcyBBYnN0cmFjdEJvb3Qge1xuXHQvKipcblx0ICogQHBhcmFtIHtSZW1vdGVTdG9yYWdlfEFkbWluUmVtb3RlU3RvcmFnZX0gUmVtb3RlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPSBudWxsO1xuXHRcdHRoaXMuaXNMb2NhbEF1dG9jb21wbGV0ZSA9IHRydWU7XG5cdFx0dGhpcy5pZnJhbWUgPSBudWxsO1xuXHRcdHRoaXMubGFzdEVycm9yVGltZSA9IDA7XG5cblx0XHR0aGlzLmlmcmFtZSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJpbnRlcm5hbC1oaWRkZGVuXCIgLz4nKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZScpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpSCA9ICR3aW4uaGVpZ2h0KCksXG5cdFx0XHRcdFx0aVcgPSAkd2luLmhlaWdodCgpO1xuXG5cdFx0XHRcdGlmICgkd2luLl9fc2l6ZXNbMF0gIT09IGlIIHx8ICR3aW4uX19zaXplc1sxXSAhPT0gaVcpIHtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMF0gPSBpSDtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMV0gPSBpVztcblxuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdC8vIERFQlVHXG5cdFx0Ly9cdFx0RXZlbnRzLnN1Yih7XG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZSc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUnKTtcblx0XHQvL1x0XHRcdH0sXG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZS5yZWFsJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0Ly9cdFx0XHR9XG5cdFx0Ly9cdFx0fSk7XG5cblx0XHQkZG9jXG5cdFx0XHQub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdCRkb2Mub24oXG5cdFx0XHQnbW91c2Vtb3ZlIGtleXByZXNzIGNsaWNrJyxcblx0XHRcdF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTVzKVxuXHRcdCk7XG5cblx0XHRrZXkoJ2VzYywgZW50ZXInLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbihuYW1lLCBkZWZhdWx0Xykge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbltuYW1lXSB8fCBkZWZhdWx0Xztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGRvd25sb2FkKGxpbmspIHtcblx0XHRpZiAoc1VzZXJBZ2VudCAmJiAoLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpIHx8IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSkpIHtcblx0XHRcdGNvbnN0IG9MaW5rID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdG9MaW5rLmhyZWYgPSBsaW5rO1xuXG5cdFx0XHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudCkge1xuXHRcdFx0XHRjb25zdCBvRSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudC5Nb3VzZUV2ZW50cztcblx0XHRcdFx0aWYgKG9FICYmIG9FLmluaXRFdmVudCAmJiBvTGluay5kaXNwYXRjaEV2ZW50KSB7XG5cdFx0XHRcdFx0b0UuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdG9MaW5rLmRpc3BhdGNoRXZlbnQob0UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHdpbmRvdy5vcGVuKGxpbmssICdfc2VsZicpO1xuXHRcdFx0d2luZG93LmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWZyYW1lLmF0dHIoJ3NyYycsIGxpbmspO1xuXHRcdFx0Ly8gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Z29vZ2xlUHJldmlld1N1cHBvcnRlZCgpIHtcblx0XHRpZiAobnVsbCA9PT0gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUpIHtcblx0XHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID1cblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdCAqL1xuXHRzZXRXaW5kb3dUaXRsZSh0aXRsZSkge1xuXHRcdHRpdGxlID0gaXNOb3JtYWwodGl0bGUpICYmIDAgPCB0aXRsZS5sZW5ndGggPyAnJyArIHRpdGxlIDogJyc7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpKSB7XG5cdFx0XHR0aXRsZSArPSAodGl0bGUgPyAnIC0gJyA6ICcnKSArIFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlICsgJyAuLi4nO1xuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHR9XG5cblx0cmVkaXJlY3RUb0FkbWluUGFuZWwoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvb3RBZG1pbigpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHR9XG5cblx0Y2xlYXJDbGllbnRTaWRlVG9rZW4oKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfY2xlYXIpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfY2xlYXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqL1xuXHRzZXRDbGllbnRTaWRlVG9rZW4odG9rZW4pIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9zZXQpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfc2V0KHRva2VuKTtcblxuXHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0F1dGhBY2NvdW50SGFzaCcsIHRva2VuKTtcblx0XHRcdHBvcHVsYXRlQXV0aFN1ZmZpeCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBhZG1pbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxvZ291dCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNsb3NlID0gZmFsc2Vcblx0ICovXG5cdGxvZ2luQW5kTG9nb3V0UmVsb2FkKGFkbWluID0gZmFsc2UsIGxvZ291dCA9IGZhbHNlLCBjbG9zZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5JZnJhbWUgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpO1xuXHRcdGxldCBjdXN0b21Mb2dvdXRMaW5rID0gcFN0cmluZyhTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnY3VzdG9tTG9nb3V0TGluaycpKTtcblxuXHRcdGlmIChsb2dvdXQpIHtcblx0XHRcdHRoaXMuY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblx0XHR9XG5cblx0XHRpZiAobG9nb3V0ICYmIGNsb3NlICYmIHdpbmRvdy5jbG9zZSkge1xuXHRcdFx0d2luZG93LmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0Y3VzdG9tTG9nb3V0TGluayA9IGN1c3RvbUxvZ291dExpbmsgfHwgKGFkbWluID8gcm9vdEFkbWluKCkgOiByb290VXNlcigpKTtcblxuXHRcdGlmIChsb2dvdXQgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGN1c3RvbUxvZ291dExpbmspIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRoaXN0b3J5QmFjaygpIHtcblx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0Ly8gbG9nKCdQcycgKyAnc3MsIGhhYycgKyAna2VycyEgVGhlJyArICdyZVxcJ3Mgbm90JyArICdoaW5nIGludGUnICsgJ3Jlc3RpbmcgOicgKyAnKScpO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0Jyk7XG5cblx0XHRjb25zdCBtb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTYXZlVHJpZ2dlcicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TYXZlVHJpZ2dlcicpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0lucHV0JywgcmVxdWlyZSgnQ29tcG9uZW50L0lucHV0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2VsZWN0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NlbGVjdCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1JhZGlvJywgcmVxdWlyZSgnQ29tcG9uZW50L1JhZGlvJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignVGV4dEFyZWEnLCByZXF1aXJlKCdDb21wb25lbnQvVGV4dEFyZWEnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdEYXRlJywgcmVxdWlyZSgnQ29tcG9uZW50L0RhdGUnKS5kZWZhdWx0KTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3gtc2NyaXB0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NjcmlwdCcpLmRlZmF1bHQpO1xuXHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N2Zy1pY29uJywgcmVxdWlyZSgnQ29tcG9uZW50L1N2Z0ljb24nKS5kZWZhdWx0KTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbWF0ZXJpYWxEZXNpZ24nKSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fVxuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKTtcblxuXHRcdF8uZGVsYXkod2luZG93UmVzaXplQ2FsbGJhY2ssIE1hZ2ljcy5UaW1lMXMpO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1lbnRlcicsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1sZWF2ZScsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdGlmICghbW9iaWxlKSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtZGVza3RvcCcpO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ21vYmlsZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1heC13aWR0aDogNzY3cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWxlYXZlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ3RhYmxldCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDE0MDBweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcC1sYXJnZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTQwMXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKS5hZGRDbGFzcygncmwtbW9iaWxlJyk7XG5cdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWRpc2FibGVkJywgYlZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWVuYWJsZWQnLCAhYlZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbFR5cGUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLW5vbmUnLCAnbm9uZScgPT09IHNWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1zaG9ydCcsICdzaG9ydCcgPT09IHNWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdExhbmd1YWdlU3RvcmUucG9wdWxhdGUoKTtcblx0XHRUaGVtZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0U29jaWFsU3RvcmUucG9wdWxhdGUoKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcCwgQWJzdHJhY3RBcHAgYXMgZGVmYXVsdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0Qm9vdCB7XG5cdGJvb3RzdGFydCgpIHtcblx0XHQvKiBuby1lbXB0eSAqL1xuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0UmFkaW8gZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cblx0XHRpZiAocGFyYW1zLnZhbHVlcykge1xuXHRcdFx0dGhpcy52YWx1ZXMoXy5tYXAocGFyYW1zLnZhbHVlcywgKGxhYmVsLCB2YWx1ZSkgPT4gKHsgbGFiZWw6IGxhYmVsLCB2YWx1ZTogdmFsdWUgfSkpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrID0gXy5iaW5kKHRoaXMuY2xpY2ssIHRoaXMpO1xuXHR9XG5cblx0Y2xpY2sodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdmFsdWUpIHtcblx0XHRcdHRoaXMudmFsdWUodmFsdWUudmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJhZGlvLCBBYnN0cmFjdFJhZGlvIGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIHNlYXJjaGVyICE9PSB1bmRlZmluZWQgPyBzZWFyY2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZWh0bWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgc2xvcHB5QXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2xvcHB5LWFycmF5LW1ldGhvZCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBzbG9wcHlBcnJheU1ldGhvZCgncmVkdWNlJykgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyB2YWx1ZXMgOiBvd247XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGhpZGUoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcuY2FsbChXZWFrTWFwKSk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNoYXJlZCgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBoaWRlKGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBoaWRlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGhpZGUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSAhPT0gJ1tvYmplY3Qgel0nID8gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn0gOiB0ZXN0LnRvU3RyaW5nO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG4iLCJ2YXIgY29uY2F0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IGNvbmNhdCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcbnZhciBNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQgPSAnTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJztcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luZGV4LW9mJyk7XG4iLCJ2YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gaW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuaW5kZXhPZjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gW10uaW5kZXhPZjtcblxudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUluZGV4T2YgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG52YXIgU0xPUFBZX01FVEhPRCA9IHNsb3BweUFycmF5TWV0aG9kKCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCBTTE9QUFlfTUVUSE9EIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbmQnKTtcbiIsInZhciBmaW5kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maW5kJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbmQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maW5kKSA/IGZpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmluZDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9sYXN0LWluZGV4LW9mJyk7XG4iLCJ2YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2xhc3QtaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubGFzdEluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5sYXN0SW5kZXhPZikgPyBsYXN0SW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5sYXN0SW5kZXhPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGxhc3RJbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubGFzdGluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGxhc3RJbmRleE9mICE9PSBbXS5sYXN0SW5kZXhPZiB9LCB7XG4gIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBuYXRpdmVMYXN0SW5kZXhPZiA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ2xhc3RJbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2ZgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IChORUdBVElWRV9aRVJPIHx8IFNMT1BQWV9NRVRIT0QpID8gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAvLyBjb252ZXJ0IC0wIHRvICswXG4gIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gbmF0aXZlTGFzdEluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IG1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTyAmJiBPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gIHJldHVybiAtMTtcbn0gOiBuYXRpdmVMYXN0SW5kZXhPZjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9mdW5jdGlvbi92aXJ0dWFsL2JpbmQnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuYmluZDtcbiAgcmV0dXJuIGl0ID09PSBGdW5jdGlvblByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gYmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmZ1bmN0aW9uLmJpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnRnVuY3Rpb24nKS5iaW5kO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghKGFyZ3NMZW5ndGggaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIGxpc3QgPSBbXSwgaSA9IDA7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSBGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgbGlzdC5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogZm4uYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS90cmltJyk7XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGl0IGluc3RhbmNlb2YgU3RyaW5nICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gdHJpbSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ1N0cmluZycpLnRyaW07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKSB8fCBub25bTUVUSE9EX05BTUVdKCkgIT0gbm9uIHx8IHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG4iLCJ2YXIgbWFwID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1hcCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKSB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZS5mXG59KTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7ICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KVxufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9IHNsb3BweUFycmF5TWV0aG9kKCdmb3JFYWNoJykgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgXCI8aHRtbD5cXG48aGVhZD5cXG5cXHQ8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwidXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlXFxcIiBjb250ZW50PVxcXCJ5ZXNcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwicm9ib3RzXFxcIiBjb250ZW50PVxcXCJub2luZGV4LCBub2ZvbGxvdywgbm9vZHBcXFwiIC8+XFxuXFx0PHRpdGxlPnt7dGl0bGV9fTwvdGl0bGU+XFxuXFx0PHN0eWxlPlxcbmh0bWwsIGJvZHkge1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFx0Zm9udC1zaXplOiAxM3B4O1xcblxcdGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuYSB7Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfVxcbmE6dmlzaXRlZCB7Y29sb3I6ICM2MDl9XFxuYTphY3RpdmUge2NvbG9yOiByZWR9XFxuYmxvY2txdW90ZSB7Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwcHggMTBweH1cXG5cXG5wcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmJvZHktd3JwIHtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4uYm9keS13cnAuaHRtbCBwcmUge1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4ge1xcblxcdHBhZGRpbmc6IDE1cHg7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gcHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsdWU7XFxuXFx0Y29sb3I6IGJsdWU7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JlZW47XFxuXFx0Y29sb3I6IGdyZWVuO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgcmVkO1xcblxcdGNvbG9yOiByZWQ7XFxufVxcbi5ybC1wcmV2aWV3LXN1YmplY3Qge1xcblxcdGZvbnQtc2l6ZTogMTZweDtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1jcmVkcy1mcm9tLCAucmwtcHJldmlldy1jcmVkcy10bywgLnJsLXByZXZpZXctY3JlZHMtY2Mge1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiA1cHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctZGF0ZSB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiAxMHB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LXNlY3Rpb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucmwtcHJldmlldy1oaWRlIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXHQ8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc3ViamVjdFxcXCI+e3tzdWJqZWN0fX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWZyb21cXFwiPnt7ZnJvbUNyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLXRvXFxcIj57e3RvTGFiZWx9fToge3t0b0NyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWNjIHt7Y2NDbGFzc319XFxcIj57e2NjTGFiZWx9fToge3tjY0NyZWRzfX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJib2R5LXdycCB7e2JvZHlDbGFzc319XFxcIj57e2h0bWx9fTwvZGl2PlxcbjwvYm9keT5cXG48L2h0bWw+XCI7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcbiIsInZhciBmaWx0ZXIgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gZmlsdGVyIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcbiIsInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBzbGljZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc2xpY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKSB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCJpbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNhdmVUcmlnZ2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IHBhcmFtcy5lbGVtZW50IHx8IG51bGw7XG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSAmJiBwYXJhbXMudmFsdWUuc3Vic2NyaWJlID8gcGFyYW1zLnZhbHVlIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cblx0XHRcdFx0aWYgKHBhcmFtcy52ZXJ0aWNhbEFsaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygndmVydGljYWwtYWxpZ24nLCBwYXJhbXMudmVydGljYWxBbGlnbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHRoaXMudmFsdWUoKSk7XG5cblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy52YWx1ZS5zdWJzY3JpYmUodGhpcy5zZXRTdGF0ZSwgdGhpcykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGU6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTYXZlVHJpZ2dlckNvbXBvbmVudCwgJ1NhdmVUcmlnZ2VyQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihJbnB1dENvbXBvbmVudCwgJ0lucHV0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyB8fCAnJztcblxuXHRcdHRoaXMub3B0aW9uc1RleHQgPSBwYXJhbXMub3B0aW9uc1RleHQgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNWYWx1ZSA9IHBhcmFtcy5vcHRpb25zVmFsdWUgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gcGFyYW1zLm9wdGlvbnNDYXB0aW9uIHx8IG51bGw7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zQ2FwdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IGkxOG4odGhpcy5vcHRpb25zQ2FwdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNlbGVjdENvbXBvbmVudCwgJ1NlbGVjdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0UmFkaW8gfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RSYWRpbyc7XG5cbmNsYXNzIFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RSYWRpbyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoUmFkaW9Db21wb25lbnQsICdSYWRpb0NvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfUk9XUyA9IDU7XG5cbmNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5yb3dzID0gcGFyYW1zLnJvd3MgfHwgREVGQVVMVF9ST1dTO1xuXHRcdHRoaXMuc3BlbGxjaGVjayA9IGlzVW5kKHBhcmFtcy5zcGVsbGNoZWNrKSA/IGZhbHNlIDogISFwYXJhbXMuc3BlbGxjaGVjaztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoVGV4dEFyZWFDb21wb25lbnQsICdUZXh0QXJlYUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihEYXRlQ29tcG9uZW50LCAnRGF0ZUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2NyaXB0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHBhcmFtcy5jb21wb25lbnQgJiZcblx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2RlcyAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnQgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUxcblx0XHQpIHtcblx0XHRcdGxldCBzY3JpcHQgPSBwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUw7XG5cdFx0XHRzY3JpcHQgPSAhc2NyaXB0ID8gJycgOiBzY3JpcHQucmVwbGFjZSgvPHgtc2NyaXB0L2ksICc8c2NyaXB0JykucmVwbGFjZSgvPGI+PFxcL2I+PFxcL3gtc2NyaXB0Pi9pLCAnPC9zY3JpcHQ+Jyk7XG5cblx0XHRcdGlmIChzY3JpcHQpIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQudGV4dCgnJyk7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlcGxhY2VXaXRoKFxuXHRcdFx0XHRcdCQoc2NyaXB0KS50ZXh0KFxuXHRcdFx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdICYmIHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0PyBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdDogJydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNjcmlwdENvbXBvbmVudCwgJ1NjcmlwdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCB0aGlzKTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKFxuXHRcdFx0dGhpcy52YWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0XHR9LCB0aGlzKVxuXHRcdCk7XG5cdH1cblxuXHRhbmltYXRpb25Cb3hTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQm94KHRydWUpO1xuXHR9XG5cblx0YW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayh0cnVlKTtcblx0fVxuXG5cdHRyaWdnZXJBbmltYXRpb24oYm94KSB7XG5cdFx0aWYgKGJveCkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgMjAwKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQsICdDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHsgcm9vdCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBMaWNlbnNlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0xpY2Vuc2UnO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgQ29yZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Db3JlJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBTZXR0aW5nc0FkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL1NldHRpbmdzJztcbmltcG9ydCB7IExvZ2luQWRtaW5TY3JlZW4gfSBmcm9tICdTY3JlZW4vQWRtaW4vTG9naW4nO1xuXG5pbXBvcnQgeyBoaWRlTG9hZGluZywgcm91dGVPZmYsIHNldEhhc2gsIHN0YXJ0U2NyZWVucyB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0QXBwIH0gZnJvbSAnQXBwL0Fic3RyYWN0JztcblxuY2xhc3MgQWRtaW5BcHAgZXh0ZW5kcyBBYnN0cmFjdEFwcCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFJlbW90ZSk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIFJlbW90ZTtcblx0fVxuXG5cdHJlbG9hZERvbWFpbkxpc3QoKSB7XG5cdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5kb21haW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKFtlbmFibGVkLCBhbGlhc10sIG5hbWUpID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IGtvLm9ic2VydmFibGUoIWVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0XHRcdFx0ZGVsZXRlQWNjZXNzOiBrby5vYnNlcnZhYmxlKGZhbHNlKVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmVsb2FkUGx1Z2luTGlzdCgpIHtcblx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLnBsdWdpbkxpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zKFxuXHRcdFx0XHRcdF8ubWFwKGRhdGEuUmVzdWx0LCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uTmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFpdGVtLkVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJlZDoga28ub2JzZXJ2YWJsZSghIWl0ZW0uQ29uZmlndXJlZClcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBhY2thZ2VzTGlzdCgpIHtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXMubG9hZGluZyh0cnVlKTtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5wYWNrYWdlc0xpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZSghIWRhdGEuUmVzdWx0Lk1haW5VcGRhdGFibGUpO1xuXG5cdFx0XHRcdGxldCBsaXN0ID0gW107XG5cdFx0XHRcdGNvbnN0IGxvYWRpbmcgPSB7fTtcblxuXHRcdFx0XHRfLmVhY2goUGFja2FnZVN0b3JlLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5sb2FkaW5nKCkpIHtcblx0XHRcdFx0XHRcdGxvYWRpbmdbaXRlbS5maWxlXSA9IGl0ZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoaXNBcnJheShkYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdGxpc3QgPSBfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5MaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0ubG9hZGluZyA9IGtvLm9ic2VydmFibGUoIWlzVW5kKGxvYWRpbmdbaXRlbS5maWxlXSkpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAnY29yZScgPT09IGl0ZW0udHlwZSAmJiAhaXRlbS5jYW5CZUluc3RhbGxlZCA/IG51bGwgOiBpdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzKGxpc3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR1cGRhdGVDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKHRydWUpO1xuXHRcdFJlbW90ZS51cGRhdGVDb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKGZhbHNlKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbignJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUoLTIpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZENvcmVEYXRhKCkge1xuXHRcdENvcmVTdG9yZS5jb3JlQ2hlY2tpbmcodHJ1ZSk7XG5cdFx0Q29yZVN0b3JlLmNvcmVSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5jb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKGRhdGEuUmVzdWx0LkNoYW5uZWwgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoZGF0YS5SZXN1bHQuVHlwZSB8fCAnc3RhYmxlJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlKCEhZGF0YS5SZXN1bHQuVXBkYXRhYmxlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVBY2Nlc3MoISFkYXRhLlJlc3VsdC5BY2Nlc3MpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoISFkYXRhLlJlc3VsdC5XYXJuaW5nKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKGRhdGEuUmVzdWx0LlZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oZGF0YS5SZXN1bHQuUmVtb3RlVmVyc2lvbiB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZShkYXRhLlJlc3VsdC5SZW1vdGVSZWxlYXNlIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZShwSW50KGRhdGEuUmVzdWx0LlZlcnNpb25Db21wYXJlKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZUNoYW5uZWwoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZSA9IGZhbHNlXG5cdCAqL1xuXHRyZWxvYWRMaWNlbnNpbmcoZm9yY2UgPSBmYWxzZSkge1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmdQcm9jZXNzKHRydWUpO1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoJycpO1xuXHRcdFJlbW90ZS5saWNlbnNpbmcoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGlzTm9ybWFsKGRhdGEuUmVzdWx0LkV4cGlyZWQpKSB7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlVmFsaWQodHJ1ZSk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXhwaXJlZChwSW50KGRhdGEuUmVzdWx0LkV4cGlyZWQpKTtcblx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcignJyk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcodHJ1ZSk7XG5cdFx0XHRcdEFwcFN0b3JlLnByZW0odHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZGF0YSAmJlxuXHRcdFx0XHRcdGRhdGEuRXJyb3JDb2RlICYmXG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KHBJbnQoZGF0YS5FcnJvckNvZGUpLCBbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsIE5vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkXSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcihnZXROb3RpZmljYXRpb24ocEludChkYXRhLkVycm9yQ29kZSkpKTtcblx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCA9PT0gcmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSkpO1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyhmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgZm9yY2UpO1xuXHR9XG5cblx0Ym9vdGVuZChib290ZW5kQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKHByb2dyZXNzSnMpIHtcblx0XHRcdHByb2dyZXNzSnMuZW5kKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJvb3RlbmRDYWxsYmFjaykge1xuXHRcdFx0Ym9vdGVuZENhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdHN1cGVyLmJvb3RzdGFydCgpO1xuXG5cdFx0QXBwU3RvcmUucG9wdWxhdGUoKTtcblx0XHRDYXBhU3RvcmUucG9wdWxhdGUoKTtcblxuXHRcdGhpZGVMb2FkaW5nKCk7XG5cblx0XHRpZiAoIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0FkbWluUGFuZWwnKSkge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvJztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0XHRzdGFydFNjcmVlbnMoW1NldHRpbmdzQWRtaW5TY3JlZW5dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXJ0U2NyZWVucyhbTG9naW5BZG1pblNjcmVlbl0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuYm9vdGVuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBZG1pbkFwcCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgU2VydmVyU2VjdXJlLCBQb3J0cywgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IElNQVBfREVGQVVMVF9QT1JULCBTSUVWRV9ERUZBVUxUX1BPUlQsIFNNVFBfREVGQVVMVF9QT1JUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdHJpbSwgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRG9tYWluJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0RvbWFpbidcbn0pXG5jbGFzcyBEb21haW5Qb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFnZSA9IGtvLm9ic2VydmFibGUoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudGVzdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cFNlcnZlckZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5pbWFwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5pbWFwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlU2lldmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlQWxsb3dSYXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgU0lFVkVfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNpZXZlU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zbXRwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBTTVRQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zbXRwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cEF1dGggPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuc210cFBocE1haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLndoaXRlTGlzdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWxpYXNOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxsb3dTaWV2ZSA9IGtvLmNvbXB1dGVkKCgpID0+IENhcGFBZG1pblN0b3JlLmZpbHRlcnMoKSAmJiBDYXBhQWRtaW5TdG9yZS5zaWV2ZSgpKTtcblxuXHRcdHRoaXMuaGVhZGVyVGV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB0aGlzLm5hbWUoKSxcblx0XHRcdFx0YWxpYXNOYW1lID0gdGhpcy5hbGlhc05hbWUoKTtcblxuXHRcdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0XHRpZiAodGhpcy5lZGl0KCkpIHtcblx0XHRcdFx0cmVzdWx0ID0gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9FRElUX0RPTUFJTicsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0XHRpZiAoYWxpYXNOYW1lKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9ICcg4oaQICcgKyBhbGlhc05hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0JycgPT09IG5hbWVcblx0XHRcdFx0XHRcdD8gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOJylcblx0XHRcdFx0XHRcdDogaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOX1dJVEhfTkFNRScsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kb21haW5EZXNjID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHRoaXMubmFtZSgpO1xuXHRcdFx0cmV0dXJuICF0aGlzLmVkaXQoKSAmJiBuYW1lID8gaTE4bignUE9QVVBTX0RPTUFJTi9ORVdfRE9NQUlOX0RFU0MnLCB7ICdOQU1FJzogJypAJyArIG5hbWUgfSkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZG9tYWluSXNDb21wdXRlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZVBocE1haWwgPSB0aGlzLnNtdHBQaHBNYWlsKCksXG5cdFx0XHRcdGFsbG93U2lldmUgPSB0aGlzLmFsbG93U2lldmUoKSxcblx0XHRcdFx0dXNlU2lldmUgPSB0aGlzLnVzZVNpZXZlKCk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCcnICE9PSB0aGlzLm5hbWUoKSAmJlxuXHRcdFx0XHQnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiZcblx0XHRcdFx0JycgIT09IHRoaXMuaW1hcFBvcnQoKSAmJlxuXHRcdFx0XHQoYWxsb3dTaWV2ZSAmJiB1c2VTaWV2ZSA/ICcnICE9PSB0aGlzLnNpZXZlU2VydmVyKCkgJiYgJycgIT09IHRoaXMuc2lldmVQb3J0KCkgOiB0cnVlKSAmJlxuXHRcdFx0XHQoKCcnICE9PSB0aGlzLnNtdHBTZXJ2ZXIoKSAmJiAnJyAhPT0gdGhpcy5zbXRwUG9ydCgpKSB8fCB1c2VQaHBNYWlsKVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVUZXN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy50ZXN0aW5nKCkgJiYgdGhpcy5kb21haW5Jc0NvbXB1dGVkKCkpO1xuXHRcdHRoaXMuY2FuQmVTYXZlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNhdmluZygpICYmIHRoaXMuZG9tYWluSXNDb21wdXRlZCgpKTtcblxuXHRcdHRoaXMucGFnZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdC8vIHNtYXJ0IGZvcm0gaW1wcm92ZW1lbnRzXG5cdFx0dGhpcy5pbWFwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLm5hbWUoKSAmJiAnJyA9PT0gdGhpcy5pbWFwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5pbWFwU2VydmVyKHRoaXMubmFtZSgpLnJlcGxhY2UoL1suXT9bKl1bLl0/L2csICcnKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNpZXZlU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zaWV2ZVNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodGhpcy5pbWFwU2VydmVyKCkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zbXRwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5zbXRwU2VydmVyKHRoaXMuaW1hcFNlcnZlcigpLnJlcGxhY2UoL2ltYXAvZ2ksICdzbXRwJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbWFwU2VjdXJlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoKSkge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gcEludCh0aGlzLmltYXBQb3J0KCkpO1xuXHRcdFx0XHRzd2l0Y2ggKHBTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0Y2FzZSAnMic6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcFNzbCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNtdHBTZWN1cmUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW5hYmxlU21hcnRQb3J0cygpKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBwSW50KHRoaXMuc210cFBvcnQoKSk7XG5cdFx0XHRcdHN3aXRjaCAocFN0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwU3NsID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTdGFydFRscyA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3RhcnRUbHMgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHBTc2wpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHAgPT09IHBvcnQgfHwgUG9ydHMuU210cFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cFN0YXJ0VGxzKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2F2ZWQoKSlcblx0Y3JlYXRlT3JBZGRDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVPclVwZGF0ZURvbWFpbihcblx0XHRcdF8uYmluZCh0aGlzLm9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpLFxuXHRcdFx0IXRoaXMuZWRpdCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cblx0XHRcdHRoaXMuaW1hcFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLmltYXBQb3J0KCkpLFxuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKCksXG5cdFx0XHR0aGlzLmltYXBTaG9ydExvZ2luKCksXG5cblx0XHRcdHRoaXMudXNlU2lldmUoKSxcblx0XHRcdHRoaXMuc2lldmVBbGxvd1JhdygpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNpZXZlUG9ydCgpKSxcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy5zbXRwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc210cFBvcnQoKSksXG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUoKSxcblx0XHRcdHRoaXMuc210cFNob3J0TG9naW4oKSxcblx0XHRcdHRoaXMuc210cEF1dGgoKSxcblx0XHRcdHRoaXMuc210cFBocE1haWwoKSxcblxuXHRcdFx0dGhpcy53aGl0ZUxpc3QoKVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVRlc3RlZCgpKVxuXHR0ZXN0Q29ubmVjdGlvbkNvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cblx0XHR0aGlzLnRlc3RpbmdEb25lKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdFx0Xy5iaW5kKHRoaXMub25UZXN0Q29ubmVjdGlvblJlc3BvbnNlLCB0aGlzKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5pbWFwUG9ydCgpKSxcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnVzZVNpZXZlKCksXG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc2lldmVQb3J0KCkpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnNtdHBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zbXRwUG9ydCgpKSxcblx0XHRcdHRoaXMuc210cFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5zbXRwQXV0aCgpLFxuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCgpXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0d2hpdGVMaXN0Q29tbWFuZCgpIHtcblx0XHR0aGlzLnBhZ2UoJ3doaXRlLWxpc3QnKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0YmFja0NvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHNpZXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoIXRoaXMuc2lldmVTZXR0aW5ncygpKTtcblx0XHR0aGlzLmNsZWFyVGVzdGluZygpO1xuXHR9XG5cblx0b25UZXN0Q29ubmVjdGlvblJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdGxldCBiSW1hcCA9IGZhbHNlLFxuXHRcdFx0XHRiU2lldmUgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy50ZXN0aW5nRG9uZSh0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5TaWV2ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LlNtdHApO1xuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nSW1hcEVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LkltYXApIHtcblx0XHRcdFx0YkltYXAgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyhvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LlNpZXZlKSB7XG5cdFx0XHRcdGJTaWV2ZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2Mob0RhdGEuUmVzdWx0LlNpZXZlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ1NtdHBFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5TbXRwKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MoJycpO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5TbXRwKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2lldmVTZXR0aW5ncygpKSB7XG5cdFx0XHRcdGlmICghYlNpZXZlICYmIGJJbWFwKSB7XG5cdFx0XHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiU2lldmUgJiYgIWJJbWFwKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0b25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSkge1xuXHRcdFx0aWYgKG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2VDb21tYW5kKCk7XG5cdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9VTktOT1dOX0VSUk9SJykpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyVGVzdGluZygpIHtcblx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKGZhbHNlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KG9Eb21haW4pIHtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5jbGVhclRlc3RpbmcoKTtcblxuXHRcdHRoaXMuY2xlYXJGb3JtKCk7XG5cdFx0aWYgKG9Eb21haW4pIHtcblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyhmYWxzZSk7XG5cblx0XHRcdHRoaXMuZWRpdCh0cnVlKTtcblxuXHRcdFx0dGhpcy5uYW1lKHRyaW0ob0RvbWFpbi5OYW1lKSk7XG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIodHJpbShvRG9tYWluLkluY0hvc3QpKTtcblx0XHRcdHRoaXMuaW1hcFBvcnQoJycgKyBwSW50KG9Eb21haW4uSW5jUG9ydCkpO1xuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKHRyaW0ob0RvbWFpbi5JbmNTZWN1cmUpKTtcblx0XHRcdHRoaXMuaW1hcFNob3J0TG9naW4oISFvRG9tYWluLkluY1Nob3J0TG9naW4pO1xuXHRcdFx0dGhpcy51c2VTaWV2ZSghIW9Eb21haW4uVXNlU2lldmUpO1xuXHRcdFx0dGhpcy5zaWV2ZUFsbG93UmF3KCEhb0RvbWFpbi5TaWV2ZUFsbG93UmF3KTtcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodHJpbShvRG9tYWluLlNpZXZlSG9zdCkpO1xuXHRcdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBwSW50KG9Eb21haW4uU2lldmVQb3J0KSk7XG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKHRyaW0ob0RvbWFpbi5TaWV2ZVNlY3VyZSkpO1xuXHRcdFx0dGhpcy5zbXRwU2VydmVyKHRyaW0ob0RvbWFpbi5PdXRIb3N0KSk7XG5cdFx0XHR0aGlzLnNtdHBQb3J0KCcnICsgcEludChvRG9tYWluLk91dFBvcnQpKTtcblx0XHRcdHRoaXMuc210cFNlY3VyZSh0cmltKG9Eb21haW4uT3V0U2VjdXJlKSk7XG5cdFx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKCEhb0RvbWFpbi5PdXRTaG9ydExvZ2luKTtcblx0XHRcdHRoaXMuc210cEF1dGgoISFvRG9tYWluLk91dEF1dGgpO1xuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCghIW9Eb21haW4uT3V0VXNlUGhwTWFpbCk7XG5cdFx0XHR0aGlzLndoaXRlTGlzdCh0cmltKG9Eb21haW4uV2hpdGVMaXN0KSk7XG5cdFx0XHR0aGlzLmFsaWFzTmFtZSh0cmltKG9Eb21haW4uQWxpYXNOYW1lKSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJGb3JtKCkge1xuXHRcdHRoaXMuZWRpdChmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKGZhbHNlKTtcblxuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuaW1hcFBvcnQoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLmltYXBTaG9ydExvZ2luKGZhbHNlKTtcblxuXHRcdHRoaXMudXNlU2lldmUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVBbGxvd1JhdyhmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlcignJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBTSUVWRV9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc2lldmVTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyKCcnKTtcblx0XHR0aGlzLnNtdHBQb3J0KCcnICsgU01UUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc210cFNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbihmYWxzZSk7XG5cdFx0dGhpcy5zbXRwQXV0aCh0cnVlKTtcblx0XHR0aGlzLnNtdHBQaHBNYWlsKGZhbHNlKTtcblxuXHRcdHRoaXMud2hpdGVMaXN0KCcnKTtcblx0XHR0aGlzLmFsaWFzTmFtZSgnJyk7XG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IERvbWFpblBvcHVwVmlldywgRG9tYWluUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IGFkZFNldHRpbmdzVmlld01vZGVsIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0IHsgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB9IGZyb20gJ1NjcmVlbi9BYnN0cmFjdFNldHRpbmdzJztcblxuaW1wb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9HZW5lcmFsJztcbmltcG9ydCB7IERvbWFpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vRG9tYWlucyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Mb2dpbic7XG5pbXBvcnQgeyBDb250YWN0c0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Db250YWN0cyc7XG5pbXBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9TZWN1cml0eSc7XG5pbXBvcnQgeyBTb2NpYWxBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vU29jaWFsJztcbmltcG9ydCB7IFBsdWdpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vUGx1Z2lucyc7XG5pbXBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9QYWNrYWdlcyc7XG5pbXBvcnQgeyBBYm91dEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9BYm91dCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTWVudVNldHRpbmdzQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9TZXR0aW5ncy9NZW51JztcbmltcG9ydCB7IFBhbmVTZXR0aW5nc0FkbWluVmlldyB9IGZyb20gJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZSc7XG5cbmNsYXNzIFNldHRpbmdzQWRtaW5TY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoW01lbnVTZXR0aW5nc0FkbWluVmlldywgUGFuZVNldHRpbmdzQWRtaW5WaWV3XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFjayA9IG51bGxcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGxldCBicmFuZGluZyA9IG51bGwsXG5cdFx0XHRsaWNlbnNpbmcgPSBudWxsO1xuXG5cdFx0aWYgKFJMX0NPTU1VTklUWSkge1xuXHRcdFx0YnJhbmRpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyYW5kaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vUHJlbS9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0XHRsaWNlbnNpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9QcmVtL0xpY2Vuc2luZycpLmRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRHZW5lcmFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzR2VuZXJhbCcsXG5cdFx0XHQnVEFCU19MQUJFTFMvTEFCRUxfR0VORVJBTF9OQU1FJyxcblx0XHRcdCdnZW5lcmFsJyxcblx0XHRcdHRydWVcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRG9tYWluc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzRG9tYWlucycsICdUQUJTX0xBQkVMUy9MQUJFTF9ET01BSU5TX05BTUUnLCAnZG9tYWlucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoTG9naW5BZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0xvZ2luJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xPR0lOX05BTUUnLCAnbG9naW4nKTtcblxuXHRcdGlmIChicmFuZGluZykge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoYnJhbmRpbmcsICdBZG1pblNldHRpbmdzQnJhbmRpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfQlJBTkRJTkdfTkFNRScsICdicmFuZGluZycpO1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKENvbnRhY3RzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NDb250YWN0cycsICdUQUJTX0xBQkVMUy9MQUJFTF9DT05UQUNUU19OQU1FJywgJ2NvbnRhY3RzJyk7XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZWN1cml0eUFkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzU2VjdXJpdHknLCAnVEFCU19MQUJFTFMvTEFCRUxfU0VDVVJJVFlfTkFNRScsICdzZWN1cml0eScpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRTb2NpYWxBZG1pblNldHRpbmdzLFxuXHRcdFx0J0FkbWluU2V0dGluZ3NTb2NpYWwnLFxuXHRcdFx0J1RBQlNfTEFCRUxTL0xBQkVMX0lOVEVHUkFUSU9OX05BTUUnLFxuXHRcdFx0J2ludGVncmF0aW9ucydcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGx1Z2luc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzUGx1Z2lucycsICdUQUJTX0xBQkVMUy9MQUJFTF9QTFVHSU5TX05BTUUnLCAncGx1Z2lucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGFja2FnZXNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BhY2thZ2VzJywgJ1RBQlNfTEFCRUxTL0xBQkVMX1BBQ0tBR0VTX05BTUUnLCAncGFja2FnZXMnKTtcblxuXHRcdGlmIChsaWNlbnNpbmcpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKGxpY2Vuc2luZywgJ0FkbWluU2V0dGluZ3NMaWNlbnNpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfTElDRU5TSU5HX05BTUUnLCAnbGljZW5zaW5nJyk7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoQWJvdXRBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0Fib3V0JywgJ1RBQlNfTEFCRUxTL0xBQkVMX0FCT1VUX05BTUUnLCAnYWJvdXQnKTtcblxuXHRcdHJ1blNldHRpbmdzVmlld01vZGVsSG9va3ModHJ1ZSk7XG5cblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2soKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNldHRpbmdzQWRtaW5TY3JlZW4sIFNldHRpbmdzQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQge1xuXHR0cmltLFxuXHRwSW50LFxuXHRib29sVG9BamF4LFxuXHRzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbixcblx0Y2hhbmdlVGhlbWUsXG5cdGNvbnZlcnRUaGVtZU5hbWUsXG5cdGNvbnZlcnRMYW5nTmFtZVxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IEFwcEFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5jbGFzcyBHZW5lcmFsQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2UgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlO1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXM7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZUFkbWluO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlc0FkbWluO1xuXG5cdFx0dGhpcy50aGVtZSA9IFRoZW1lU3RvcmUudGhlbWU7XG5cdFx0dGhpcy50aGVtZXMgPSBUaGVtZVN0b3JlLnRoZW1lcztcblxuXHRcdHRoaXMuY2FwYVRoZW1lcyA9IENhcGFBZG1pblN0b3JlLnRoZW1lcztcblx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZCA9IENhcGFBZG1pblN0b3JlLnVzZXJCYWNrZ3JvdW5kO1xuXHRcdHRoaXMuY2FwYUdyYXZhdGFyID0gQ2FwYUFkbWluU3RvcmUuZ3JhdmF0YXI7XG5cdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzID0gQ2FwYUFkbWluU3RvcmUuYWRkaXRpb25hbEFjY291bnRzO1xuXHRcdHRoaXMuY2FwYUlkZW50aXRpZXMgPSBDYXBhQWRtaW5TdG9yZS5pZGVudGl0aWVzO1xuXHRcdHRoaXMuY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzID0gQ2FwYUFkbWluU3RvcmUuYXR0YWNobWVudFRodW1ibmFpbHM7XG5cdFx0dGhpcy5jYXBhVGVtcGxhdGVzID0gQ2FwYUFkbWluU3RvcmUudGVtcGxhdGVzO1xuXG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBBcHBBZG1pblN0b3JlLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncztcblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IEFwcEFkbWluU3RvcmUud2Vha1Bhc3N3b3JkO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0gQXBwQWRtaW5TdG9yZS5uZXdNb3ZlVG9Gb2xkZXI7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBBcHBBZG1pblN0b3JlLmRhdGFGb2xkZXJBY2Nlc3M7XG5cblx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUocEludChzZXR0aW5nc0dldCgnQXR0YWNobWVudExpbWl0JykpIC8gKE1hZ2ljcy5CaXRMZW5ndGgxMDI0ICogTWFnaWNzLkJpdExlbmd0aDEwMjQpKVxuXHRcdFx0LmV4dGVuZCh7IHBvc0ludGVyZXI6IDI1IH0pO1xuXG5cdFx0dGhpcy51cGxvYWREYXRhID0gc2V0dGluZ3NHZXQoJ1BocFVwbG9hZFNpemVzJyk7XG5cdFx0dGhpcy51cGxvYWREYXRhRGVzYyA9XG5cdFx0XHR0aGlzLnVwbG9hZERhdGEgJiYgKHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplIHx8IHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplKVxuXHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplXG5cdFx0XHRcdFx0XHRcdD8gJ3VwbG9hZF9tYXhfZmlsZXNpemUgPSAnICsgdGhpcy51cGxvYWREYXRhLnVwbG9hZF9tYXhfZmlsZXNpemUgKyAnOyAnXG5cdFx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSA/ICdwb3N0X21heF9zaXplID0gJyArIHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplIDogJydcblx0XHRcdFx0ICBdLmpvaW4oJycpXG5cdFx0XHRcdDogJyc7XG5cblx0XHR0aGlzLnRoZW1lc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy50aGVtZXMoKSwgKHRoZW1lKSA9PiAoeyBvcHRWYWx1ZTogdGhlbWUsIG9wdFRleHQ6IGNvbnZlcnRUaGVtZU5hbWUodGhlbWUpIH0pKVxuXHRcdCk7XG5cblx0XHR0aGlzLmxhbmd1YWdlRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZSgpKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZUFkbWluKCkpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudExpbWl0VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXHRcdHRoaXMudGhlbWVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5hdHRhY2htZW50TGltaXRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxhbmd1YWdlVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50aGVtZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIgPSAoc2F2ZVNldHRpbmdzU3RlcCkgPT4gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoc2F2ZVNldHRpbmdzU3RlcCk7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSksIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0F0dGFjaG1lbnRMaW1pdCc6IHBJbnQodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xhbmd1YWdlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXHRcdFx0XHR0cmFuc2xhdG9yUmVsb2FkKHRydWUsIHZhbHVlKVxuXHRcdFx0XHRcdC50aGVuKGZSZWxvYWRMYW5ndWFnZUhlbHBlcihTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQpLCBmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdCkpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0XHRcdCdMYW5ndWFnZUFkbWluJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjaGFuZ2VUaGVtZSh2YWx1ZSwgdGhpcy50aGVtZVRyaWdnZXIpO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J1RoZW1lJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFBZGRpdGlvbmFsQWNjb3VudHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFJZGVudGl0aWVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFJZGVudGl0aWVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVGVtcGxhdGVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFUZW1wbGF0ZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFHcmF2YXRhci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhR3JhdmF0YXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFBdHRhY2htZW50VGh1bWJuYWlscy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhQXR0YWNobWVudFRodW1ibmFpbHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFUaGVtZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYVRoZW1lcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFVc2VyQmFja2dyb3VuZCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0FsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J05ld01vdmVUb0ZvbGRlcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0xhbmd1YWdlcycpLCBbdGhpcy5sYW5ndWFnZSwgdGhpcy5sYW5ndWFnZXMoKSwgTGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2UoKV0pO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2VBZG1pbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW1xuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLFxuXHRcdFx0dGhpcy5sYW5ndWFnZXNBZG1pbigpLFxuXHRcdFx0TGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2VBZG1pbigpXG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHBocEluZm9MaW5rKCkge1xuXHRcdHJldHVybiBwaHBJbmZvKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MsIEdlbmVyYWxBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBEb21haW5zQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IERvbWFpblN0b3JlLmRvbWFpbnM7XG5cblx0XHR0aGlzLnZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5kb21haW5zLmxvYWRpbmcoKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSk7XG5cblx0XHR0aGlzLmRvbWFpbkZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25Eb21haW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbicpKTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbkFsaWFzKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbkFsaWFzJykpO1xuXHR9XG5cblx0ZGVsZXRlRG9tYWluKGRvbWFpbikge1xuXHRcdHRoaXMuZG9tYWlucy5yZW1vdmUoZG9tYWluKTtcblx0XHRSZW1vdGUuZG9tYWluRGVsZXRlKHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCwgZG9tYWluLm5hbWUpO1xuXHR9XG5cblx0ZGlzYWJsZURvbWFpbihkb21haW4pIHtcblx0XHRkb21haW4uZGlzYWJsZWQoIWRvbWFpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUuZG9tYWluRGlzYWJsZSh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIGRvbWFpbi5uYW1lLCBkb21haW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRvRG9tLm9uKCdjbGljaycsICcuYi1hZG1pbi1kb21haW5zLWxpc3QtdGFibGUgLmUtaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRjb25zdCBkb21haW5JdGVtID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChkb21haW5JdGVtKSB7XG5cdFx0XHRcdFJlbW90ZS5kb21haW4oc2VsZi5vbkRvbWFpbkxvYWRSZXF1ZXN0LCBkb21haW5JdGVtLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHR9XG5cblx0b25Eb21haW5Mb2FkUmVxdWVzdChzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRG9tYWluJyksIFtvRGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0KCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5zQWRtaW5TZXR0aW5ncywgRG9tYWluc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgYm9vbFRvQWpheCwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5jbGFzcyBMb2dpbkFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSA9IEFwcFN0b3JlLmRldGVybWluZVVzZXJMYW5ndWFnZTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4gPSBBcHBTdG9yZS5kZXRlcm1pbmVVc2VyRG9tYWluO1xuXG5cdFx0dGhpcy5kZWZhdWx0RG9tYWluID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5EZWZhdWx0RG9tYWluJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uTG9naW47XG5cblx0XHR0aGlzLmR1bW15ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmRlZmF1bHREb21haW4udHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0RldGVybWluZVVzZXJMYW5ndWFnZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdEZXRlcm1pbmVVc2VyRG9tYWluJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQWxsb3dMYW5ndWFnZXNPbkxvZ2luJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kZWZhdWx0RG9tYWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdMb2dpbkRlZmF1bHREb21haW4nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIDUwKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MsIExvZ2luQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLCBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIsIGluQXJyYXksIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBTdG9yYWdlUmVzdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBDb250YWN0c0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb250YWN0c0VuYWJsZScpKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luYyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jJykpO1xuXG5cdFx0Y29uc3Qgc3VwcG9ydGVkVHlwZXMgPSBbXSxcblx0XHRcdHR5cGVzID0gWydzcWxpdGUnLCAnbXlzcWwnLCAncGdzcWwnXSxcblx0XHRcdGdldFR5cGVOYW1lID0gKG5hbWUpID0+IHtcblx0XHRcdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSAnc3FsaXRlJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnU1FMaXRlJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ215c3FsJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnTXlTUUwnO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncGdzcWwnOlxuXHRcdFx0XHRcdFx0bmFtZSA9ICdQb3N0Z3JlU1FMJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuYW1lO1xuXHRcdFx0fTtcblxuXHRcdGlmIChzZXR0aW5nc0dldCgnU1FMaXRlSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgnc3FsaXRlJyk7XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5nc0dldCgnTXlTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdteXNxbCcpO1xuXHRcdH1cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ1Bvc3RncmVTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdwZ3NxbCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGFjdHNTdXBwb3J0ZWQgPSAwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKHRoaXMuY29udGFjdHNUeXBlcygpLCAodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZWQgPSAtMSA9PT0gaW5BcnJheSh2YWx1ZSwgc3VwcG9ydGVkVHlwZXMpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdCdpZCc6IHZhbHVlLFxuXHRcdFx0XHRcdCduYW1lJzogZ2V0VHlwZU5hbWUodmFsdWUpICsgKGRpc2FibGVkID8gJyAoJyArIGkxOG4oJ0hJTlRTL05PVF9TVVBQT1JURUQnKSArICcpJyA6ICcnKSxcblx0XHRcdFx0XHQnZGlzYWJsZWQnOiBkaXNhYmxlZFxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzKHR5cGVzKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5tYWluQ29udGFjdHNUeXBlID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRoaXMuY29udGFjdHNUeXBlLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlICE9PSB0aGlzLmNvbnRhY3RzVHlwZSgpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBpbkFycmF5KHZhbHVlLCBzdXBwb3J0ZWRUeXBlcykpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUodmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlKCcnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wZG9Ec24gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb0RzbicpKTtcblx0XHR0aGlzLnBkb1VzZXIgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1VzZXInKSk7XG5cdFx0dGhpcy5wZG9QYXNzd29yZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvUGFzc3dvcmQnKSk7XG5cblx0XHR0aGlzLnBkb0RzblRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5wZG9Vc2VyVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnBkb1Bhc3N3b3JkVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnRlc3RpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1R5cGUnKSk7XG5cblx0XHR0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gc2VsZi5wZG9Ec24oKSAmJiAnJyAhPT0gc2VsZi5wZG9Vc2VyKCkpXG5cdHRlc3RDb250YWN0c0NvbW1hbmQoKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb250YWN0cyh0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UsIHtcblx0XHRcdCdDb250YWN0c1Bkb1R5cGUnOiB0aGlzLmNvbnRhY3RzVHlwZSgpLFxuXHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdGhpcy5wZG9Ec24oKSxcblx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0aGlzLnBkb1VzZXIoKSxcblx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdGhpcy5wZG9QYXNzd29yZCgpXG5cdFx0fSk7XG5cdH1cblxuXHRvblRlc3RDb250YWN0c1Jlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlc3VsdCkge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKHRydWUpO1xuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoZGF0YS5SZXN1bHQuTWVzc2FnZSB8fCAnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvRHNuVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9Vc2VyVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGY0ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9QYXNzd29yZFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuY29udGFjdHNUeXBlVHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZW5hYmxlQ29udGFjdHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNFbmFibGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzU3luYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1N5bmMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjUsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9UeXBlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Ec24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Vc2VyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnBkb1Bhc3N3b3JkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1R5cGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvVHlwZScpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzQWRtaW5TZXR0aW5ncywgQ29udGFjdHNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDYXBhQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBTZWN1cml0eUFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyA9IEFwcEFkbWluU3RvcmUudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBBcHBBZG1pblN0b3JlLndlYWtQYXNzd29yZDtcblxuXHRcdHRoaXMuY2FwYU9wZW5QR1AgPSBDYXBhQWRtaW5TdG9yZS5vcGVuUEdQO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aCA9IENhcGFBZG1pblN0b3JlLnR3b0ZhY3RvckF1dGg7XG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlID0gQ2FwYUFkbWluU3RvcmUudHdvRmFjdG9yQXV0aEZvcmNlO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZlcmlmeVNzbENlcnRpZmljYXRlID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdWZXJpZnlTc2xDZXJ0aWZpY2F0ZScpKTtcblx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZCA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQWxsb3dTZWxmU2lnbmVkJykpO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93biA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0FkbWluTG9naW4nKSk7XG5cdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbi5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gdHJpbShzZWxmLmFkbWluTG9naW4oKSkgJiYgJycgIT09IHNlbGYuYWRtaW5QYXNzd29yZCgpKVxuXHRzYXZlTmV3QWRtaW5QYXNzd29yZENvbW1hbmQoKSB7XG5cdFx0aWYgKCcnID09PSB0cmltKHRoaXMuYWRtaW5Mb2dpbigpKSkge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYWRtaW5QYXNzd29yZE5ldygpICE9PSB0aGlzLmFkbWluUGFzc3dvcmROZXcyKCkpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblxuXHRcdFJlbW90ZS5zYXZlTmV3QWRtaW5QYXNzd29yZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB7XG5cdFx0XHQnTG9naW4nOiB0aGlzLmFkbWluTG9naW4oKSxcblx0XHRcdCdQYXNzd29yZCc6IHRoaXMuYWRtaW5QYXNzd29yZCgpLFxuXHRcdFx0J05ld1Bhc3N3b3JkJzogdGhpcy5hZG1pblBhc3N3b3JkTmV3KClcblx0XHR9KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2hvd1R3b0ZhY3RvckRyb3BwZXIoKSB7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bih0cnVlKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKHRydWUpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MignJyk7XG5cblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3ModHJ1ZSk7XG5cblx0XHRcdHRoaXMud2Vha1Bhc3N3b3JkKCEhZGF0YS5SZXN1bHQuV2Vhayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5jYXBhT3BlblBHUC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFPcGVuUEdQJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFUd29GYWN0b3JBdXRoJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQ2FwYVR3b0ZhY3RvckF1dGhGb3JjZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J1ZlcmlmeVNzbENlcnRpZmljYXRlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdBbGxvd1NlbGZTaWduZWQnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoJycpO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bihmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cGhwSW5mb0xpbmsoKSB7XG5cdFx0cmV0dXJuIHBocEluZm8oKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MsIFNlY3VyaXR5QWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmNsYXNzIFNvY2lhbEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5lbmFibGVkO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGg7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoR21haWw7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVEcml2ZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmRyaXZlO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLnByZXZpZXc7XG5cblx0XHR0aGlzLmdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUmVxdWlyZUFwaUtleSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmFwaUtleVNldHRpbmdzO1xuXG5cdFx0dGhpcy5nb29nbGVDbGllbnRJRCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRJRDtcblx0XHR0aGlzLmdvb2dsZUNsaWVudFNlY3JldCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRTZWNyZXQ7XG5cdFx0dGhpcy5nb29nbGVBcGlLZXkgPSBTb2NpYWxTdG9yZS5nb29nbGUuYXBpS2V5O1xuXG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjMgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLmZhY2Vib29rU3VwcG9ydGVkID0gU29jaWFsU3RvcmUuZmFjZWJvb2suc3VwcG9ydGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tFbmFibGUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5lbmFibGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBJRCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmFwcElEO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBTZWNyZXQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5hcHBTZWNyZXQ7XG5cblx0XHR0aGlzLmZhY2Vib29rVHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5mYWNlYm9va1RyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy50d2l0dGVyRW5hYmxlID0gU29jaWFsU3RvcmUudHdpdHRlci5lbmFibGVkO1xuXHRcdHRoaXMudHdpdHRlckNvbnN1bWVyS2V5ID0gU29jaWFsU3RvcmUudHdpdHRlci5jb25zdW1lcktleTtcblx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lclNlY3JldCA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQ7XG5cblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMiA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuZHJvcGJveEVuYWJsZSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdHRoaXMuZHJvcGJveFRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYWNlYm9va1RyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmZhY2Vib29rVHJpZ2dlcjIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudHdpdHRlclRyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjQgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnR3aXR0ZXJUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY1ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMSwgdGhpcyksXG5cdFx0XHRcdGY2ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY3ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMywgdGhpcyksXG5cdFx0XHRcdGY4ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5kcm9wYm94VHJpZ2dlcjEsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rRW5hYmxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rRW5hYmxlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tBcHBJRC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZhY2Vib29rU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tBcHBJRCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rQXBwU2VjcmV0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjIsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0FwcFNlY3JldCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnR3aXR0ZXJFbmFibGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lcktleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckNvbnN1bWVyS2V5JywgdHJpbSwgZjMpKTtcblx0XHRcdHRoaXMudHdpdHRlckNvbnN1bWVyU2VjcmV0LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnLCB0cmltLCBmNCkpO1xuXG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVBdXRoJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZUF1dGhHbWFpbCcsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlRHJpdmUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZURyaXZlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVQcmV2aWV3JywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRJRC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQ2xpZW50SUQnLCB0cmltLCBmNSkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRTZWNyZXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUNsaWVudFNlY3JldCcsIHRyaW0sIGY2KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUFwaUtleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQXBpS2V5JywgdHJpbSwgZjcpKTtcblxuXHRcdFx0dGhpcy5kcm9wYm94RW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94RW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5kcm9wYm94QXBpS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94QXBpS2V5JywgdHJpbSwgZjgpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNvY2lhbEFkbWluU2V0dGluZ3MsIFNvY2lhbEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgUGx1Z2luU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BsdWdpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIFBsdWdpbnNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5lbmFibGVkUGx1Z2lucyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnRW5hYmxlZFBsdWdpbnMnKSk7XG5cblx0XHR0aGlzLnBsdWdpbnMgPSBQbHVnaW5TdG9yZS5wbHVnaW5zO1xuXHRcdHRoaXMucGx1Z2luc0Vycm9yID0gUGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcjtcblxuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZIHx8IEFwcFN0b3JlLmNvbW11bml0eSgpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblxuXHRcdHRoaXMub25QbHVnaW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25QbHVnaW5EaXNhYmxlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0ZGlzYWJsZVBsdWdpbihwbHVnaW4pIHtcblx0XHRwbHVnaW4uZGlzYWJsZWQoIXBsdWdpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUucGx1Z2luRGlzYWJsZSh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHBsdWdpbi5uYW1lLCBwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRjb25maWd1cmVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0UmVtb3RlLnBsdWdpbih0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHBsdWdpbi5uYW1lKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1pdGVtIC5jb25maWd1cmUtcGx1Z2luLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5jb25maWd1cmVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuZGlzYWJsZWQtcGx1Z2luJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IHBsdWdpbiA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChwbHVnaW4pIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmVuYWJsZWRQbHVnaW5zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnRW5hYmxlZFBsdWdpbnMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcignJyk7XG5cdFx0Z2V0QXBwKCkucmVsb2FkUGx1Z2luTGlzdCgpO1xuXHR9XG5cblx0b25QbHVnaW5Mb2FkUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1BsdWdpbicpLCBbZGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvblBsdWdpbkRpc2FibGVSZXF1ZXN0KHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKCFkYXRhLlJlc3VsdCAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRpZiAoTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSA9PT0gZGF0YS5FcnJvckNvZGUgJiYgZGF0YS5FcnJvck1lc3NhZ2UgJiYgJycgIT09IGRhdGEuRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihkYXRhLkVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncywgUGx1Z2luc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQYWNrYWdlc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucGFja2FnZXMgPSBQYWNrYWdlU3RvcmUucGFja2FnZXM7XG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZTtcblxuXHRcdHRoaXMucGFja2FnZXNDdXJyZW50ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICFpdGVtLmNvbXBhcmUpXG5cdFx0KTtcblx0XHR0aGlzLnBhY2thZ2VzQXZhaWxhYmxlRm9yVXBkYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICEhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmluc3RhbGxlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMucGFja2FnZXNFcnJvcignJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZFBhY2thZ2VzTGlzdCgpO1xuXHR9XG5cblx0cmVxdWVzdEhlbHBlcihwYWNrYWdlVG9SZXF1ZXN0LCBpbnN0YWxsKSB7XG5cdFx0cmV0dXJuIChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWNrYWdlc0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihcblx0XHRcdFx0XHRcdGdldE5vdGlmaWNhdGlvbihpbnN0YWxsID8gTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSA6IE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCh0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIHBhY2thZ2VUb1JlcXVlc3QgJiYgaXRlbS5sb2FkaW5nICYmIGl0ZW0ubG9hZGluZygpICYmIHBhY2thZ2VUb1JlcXVlc3QuZmlsZSA9PT0gaXRlbS5maWxlKSB7XG5cdFx0XHRcdFx0cGFja2FnZVRvUmVxdWVzdC5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRpdGVtLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlbG9hZCkge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZGVsZXRlUGFja2FnZShwYWNrYWdlVG9EZWxldGUpIHtcblx0XHRpZiAocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0XHRwYWNrYWdlVG9EZWxldGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlRGVsZXRlKHRoaXMucmVxdWVzdEhlbHBlcihwYWNrYWdlVG9EZWxldGUsIGZhbHNlKSwgcGFja2FnZVRvRGVsZXRlKTtcblx0XHR9XG5cdH1cblxuXHRpbnN0YWxsUGFja2FnZShwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0luc3RhbGwpIHtcblx0XHRcdHBhY2thZ2VUb0luc3RhbGwubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlSW5zdGFsbCh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvSW5zdGFsbCwgdHJ1ZSksIHBhY2thZ2VUb0luc3RhbGwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MsIFBhY2thZ2VzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgYXBwU2V0dGluZ3NHZXQsIHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDb3JlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NvcmUnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIEFib3V0QWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cdFx0dGhpcy5hY2Nlc3MgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvcmVBY2Nlc3MnKSk7XG5cdFx0dGhpcy5lcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29yZVJlYWwgPSBDb3JlU3RvcmUuY29yZVJlYWw7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IENvcmVTdG9yZS5jb3JlQ2hhbm5lbDtcblx0XHR0aGlzLmNvcmVUeXBlID0gQ29yZVN0b3JlLmNvcmVUeXBlO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IENvcmVTdG9yZS5jb3JlQWNjZXNzO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0gQ29yZVN0b3JlLmNvcmVDaGVja2luZztcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IENvcmVTdG9yZS5jb3JlVXBkYXRpbmc7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IENvcmVTdG9yZS5jb3JlV2FybmluZztcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb247XG5cdFx0dGhpcy5jb3JlUmVtb3RlUmVsZWFzZSA9IENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmU7XG5cblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWSB8fCBBcHBTdG9yZS5jb21tdW5pdHkoKTtcblxuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb25IdG1sRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gaTE4bignVEFCX0FCT1VUL0hUTUxfTkVXX1ZFUlNJT04nLCB7ICdWRVJTSU9OJzogdGhpcy5jb3JlUmVtb3RlVmVyc2lvbigpIH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdGF0dXNUeXBlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdGNvbnN0IHZlcnNpb25Ub0NvbXBhcmUgPSB0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSgpLFxuXHRcdFx0XHRpc0NoZWNraW5nID0gdGhpcy5jb3JlQ2hlY2tpbmcoKSxcblx0XHRcdFx0aXNVcGRhdGluZyA9IHRoaXMuY29yZVVwZGF0aW5nKCksXG5cdFx0XHRcdGlzUmVhbCA9IHRoaXMuY29yZVJlYWwoKTtcblxuXHRcdFx0aWYgKGlzQ2hlY2tpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICdjaGVja2luZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzVXBkYXRpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICd1cGRhdGluZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAwID09PSB2ZXJzaW9uVG9Db21wYXJlKSB7XG5cdFx0XHRcdHR5cGUgPSAndXAtdG8tZGF0ZSc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAtMSA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ2F2YWlsYWJsZSc7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1JlYWwpIHtcblx0XHRcdFx0dHlwZSA9ICdlcnJvcic7XG5cdFx0XHRcdHRoaXMuZXJyb3JEZXNjKCdDYW5ub3QgYWNjZXNzIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBtb21lbnQuJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0eXBlO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5hY2Nlc3MoKSAmJiAhdGhpcy5jb21tdW5pdHkpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZENvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0aWYgKCF0aGlzLmNvcmVVcGRhdGluZygpICYmICF0aGlzLmNvbW11bml0eSkge1xuXHRcdFx0Z2V0QXBwKCkudXBkYXRlQ29yZURhdGEoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJvdXRBZG1pblNldHRpbmdzLCBBYm91dEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudScsXG5cdHR5cGU6IFZpZXdUeXBlLkxlZnQsXG5cdHRlbXBsYXRlSUQ6ICdBZG1pbk1lbnUnXG59KVxuY2xhc3MgTWVudVNldHRpbmdzQWRtaW5WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gez99IHNjcmVlblxuXHQgKi9cblx0Y29uc3RydWN0b3Ioc2NyZWVuKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubGVmdFBhbmVsRGlzYWJsZWQgPSBsZWZ0UGFuZWxEaXNhYmxlZDtcblxuXHRcdHRoaXMubWVudSA9IHNjcmVlbi5tZW51O1xuXHR9XG5cblx0bGluayhyb3V0ZSkge1xuXHRcdHJldHVybiAnIy8nICsgcm91dGU7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5TZXR0aW5ncywgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJCgnLmItYWRtaW4tbWVudSAuZS1pdGVtJywgZG9tKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lbnVTZXR0aW5nc0FkbWluVmlldywgTWVudVNldHRpbmdzQWRtaW5WaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuaW1wb3J0IFBsdWdpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9QbHVnaW4nO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZScsXG5cdHR5cGU6IFZpZXdUeXBlLlJpZ2h0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5QYW5lJ1xufSlcbmNsYXNzIFBhbmVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5hZG1pbkRvbWFpbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FkbWluRG9tYWluJykpO1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cblx0XHR0aGlzLmNhcGEgPSAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdQcmVtVHlwZScpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZO1xuXG5cdFx0dGhpcy5hZG1pbk1hbkxvYWRpbmcgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdCcwMDAnICE9PVxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoKSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRdLmpvaW4oJycpXG5cdFx0KTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4gKHRoaXMuYWRtaW5NYW5Mb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpXG5cdFx0XHQuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAzMDAgfSk7XG5cdH1cblxuXHRsb2dvdXRDbGljaygpIHtcblx0XHRSZW1vdGUuYWRtaW5Mb2dvdXQoKCkgPT4ge1xuXHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQodHJ1ZSwgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzQWRtaW5WaWV3LCBQYW5lU2V0dGluZ3NBZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTG9naW5BZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL0xvZ2luJztcblxuY2xhc3MgTG9naW5BZG1pblNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ2xvZ2luJywgW0xvZ2luQWRtaW5WaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5TY3JlZW4sIExvZ2luQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyB0cmltLCB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9BZG1pbi9Mb2dpbicsXG5cdHR5cGU6IFZpZXdUeXBlLkNlbnRlcixcblx0dGVtcGxhdGVJRDogJ0FkbWluTG9naW4nXG59KVxuY2xhc3MgTG9naW5BZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuaGlkZVN1Ym1pdEJ1dHRvbiA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2hpZGVTdWJtaXRCdXR0b24nKTtcblxuXHRcdHRoaXMubG9naW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubG9naW5FcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgJ2ZhbHNlVGltZW91dCc6IDUwMCB9KTtcblxuXHRcdHRoaXMubG9naW5Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMubG9naW5FcnJvckFuaW1hdGlvbigpIHx8IHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbigpKTtcblxuXHRcdHRoaXMubG9naW4uc3Vic2NyaWJlKCgpID0+IHRoaXMubG9naW5FcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oISF2KSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oISF2KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdHN1Ym1pdENvbW1hbmQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKCk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoJycgPT09IHRyaW0odGhpcy5sb2dpbigpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMubG9naW5FcnJvcigpIHx8IHRoaXMucGFzc3dvcmRFcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXG5cdFx0UmVtb3RlLmFkbWluTG9naW4oXG5cdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAnQWRtaW5Mb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5sb2dpbigpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMubG9naW5Gb2N1cyh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmxvZ2luRm9jdXMoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UodHJ1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCkge1xuXHRcdHRoaXMuc3VibWl0Q29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5WaWV3LCBMb2dpbkFkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XG5pbXBvcnQgQXBwIGZyb20gJ0FwcC9BZG1pbic7XG5cbmJvb3RzdHJhcChBcHApO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW5BbGlhcydcbn0pXG5jbGFzcyBEb21haW5BbGlhc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5kb21haW5zID0gRG9tYWluU3RvcmUuZG9tYWluc1dpdGhvdXRBbGlhc2VzO1xuXG5cdFx0dGhpcy5kb21haW5zT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+ICh7IG9wdFZhbHVlOiBpdGVtLm5hbWUsIG9wdFRleHQ6IGl0ZW0ubmFtZSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5CZVNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2F2aW5nKCkgJiYgJycgIT09IHRoaXMubmFtZSgpICYmICcnICE9PSB0aGlzLmFsaWFzKCkpO1xuXG5cdFx0dGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTYXZlZCgpKVxuXHRjcmVhdGVDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVEb21haW5BbGlhcyh0aGlzLm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSwgdGhpcy5uYW1lKCksIHRoaXMuYWxpYXMoKSk7XG5cdH1cblxuXHRvbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0XHRcdFx0dGhpcy5jbG9zZUNvbW1hbmQoKTtcblx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhckZvcm0oKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhckZvcm0oKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmFsaWFzKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5BbGlhc1BvcHVwVmlldywgRG9tYWluQWxpYXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzLCBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgZGVsZWdhdGVSdW4gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQsIGlzUG9wdXBWaXNpYmxlLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1BsdWdpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNQbHVnaW4nXG59KVxuY2xhc3MgUGx1Z2luUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSwgdGhpcyk7XG5cblx0XHR0aGlzLnNhdmVFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZWFkbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29uZmlndXJlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmhhc1JlYWRtZSA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnJlYWRtZSgpKTtcblx0XHR0aGlzLmhhc0NvbmZpZ3VyYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5jb25maWd1cmVzKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMucmVhZG1lUG9wb3ZlckNvbmYgPSB7XG5cdFx0XHQncGxhY2VtZW50JzogJ3JpZ2h0Jyxcblx0XHRcdCd0cmlnZ2VyJzogJ2hvdmVyJyxcblx0XHRcdCd0aXRsZSc6IGkxOG4oJ1BPUFVQU19QTFVHSU4vVE9PTFRJUF9BQk9VVF9USVRMRScpLFxuXHRcdFx0J2NvbnRhaW5lcic6ICdib2R5Jyxcblx0XHRcdCdodG1sJzogdHJ1ZSxcblx0XHRcdCdjb250ZW50JzogKCkgPT4gYDxwcmU+JHt0aGlzLnJlYWRtZSgpfTwvcHJlPmBcblx0XHR9O1xuXG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQWxsO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGFzQ29uZmlndXJhdGlvbigpKVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHRjb25zdCBsaXN0ID0ge307XG5cdFx0bGlzdC5OYW1lID0gdGhpcy5uYW1lKCk7XG5cblx0XHRfLmVhY2godGhpcy5jb25maWd1cmVzKCksIChvSXRlbSkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gb0l0ZW0udmFsdWUoKTtcblx0XHRcdGlmIChmYWxzZSA9PT0gdmFsdWUgfHwgdHJ1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/ICcxJyA6ICcwJztcblx0XHRcdH1cblx0XHRcdGxpc3RbJ18nICsgb0l0ZW0uTmFtZV0gPSB2YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRSZW1vdGUucGx1Z2luU2V0dGluZ3NVcGRhdGUodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIGxpc3QpO1xuXHR9XG5cblx0b25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zYXZlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9QbHVnaW4pIHtcblx0XHR0aGlzLm5hbWUoKTtcblx0XHR0aGlzLnJlYWRtZSgpO1xuXHRcdHRoaXMuY29uZmlndXJlcyhbXSk7XG5cblx0XHRpZiAob1BsdWdpbikge1xuXHRcdFx0dGhpcy5uYW1lKG9QbHVnaW4uTmFtZSk7XG5cdFx0XHR0aGlzLnJlYWRtZShvUGx1Z2luLlJlYWRtZSk7XG5cblx0XHRcdGNvbnN0IGNvbmZpZyA9IG9QbHVnaW4uQ29uZmlnO1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb25maWcpKSB7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJlcyhcblx0XHRcdFx0XHRfLm1hcChjb25maWcsIChpdGVtKSA9PiAoe1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoga28ub2JzZXJ2YWJsZShpdGVtWzBdKSxcblx0XHRcdFx0XHRcdCdwbGFjZWhvbGRlcic6IGtvLm9ic2VydmFibGUoaXRlbVs2XSksXG5cdFx0XHRcdFx0XHQnTmFtZSc6IGl0ZW1bMV0sXG5cdFx0XHRcdFx0XHQnVHlwZSc6IGl0ZW1bMl0sXG5cdFx0XHRcdFx0XHQnTGFiZWwnOiBpdGVtWzNdLFxuXHRcdFx0XHRcdFx0J0RlZmF1bHQnOiBpdGVtWzRdLFxuXHRcdFx0XHRcdFx0J0Rlc2MnOiBpdGVtWzVdXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dHJ5VG9DbG9zZVBvcHVwKCkge1xuXHRcdGNvbnN0IFBvcHVwc0Fza1ZpZXdNb2RlbCA9IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyk7XG5cdFx0aWYgKCFpc1BvcHVwVmlzaWJsZShQb3B1cHNBc2tWaWV3TW9kZWwpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAoUG9wdXBzQXNrVmlld01vZGVsLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5Qb3B1cFZpZXcsIFBsdWdpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQnJhbmRpbmdBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jYXBhID0gQXBwU3RvcmUucHJlbTtcblxuXHRcdHRoaXMudGl0bGUgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdUaXRsZScpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9hZGluZ0Rlc2MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2FkaW5nRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmZhdmljb25VcmwgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdGYXZpY29uVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkxvZ28nKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luQmFja2dyb3VuZCcpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyTG9nbycpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ29NZXNzYWdlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29NZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VySWZyYW1lTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJJZnJhbWVNZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyTG9nb1RpdGxlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29UaXRsZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5EZXNjcmlwdGlvbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQ3NzID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5Dc3MnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJDc3MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyQ3NzJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZVVybCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZURpc3BsYXkgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdXZWxjb21lUGFnZURpc3BsYXknKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLndlbGNvbWVQYWdlRGlzcGxheS5vcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdub25lJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9OT05FJykgfSxcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ29uY2UnLCBvcHRUZXh0OiBpMThuKCdUQUJfQlJBTkRJTkcvT1BUSU9OX1dFTENPTUVfUEFHRV9ESVNQTEFZX09OQ0UnKSB9LFxuXHRcdFx0XHR7IG9wdFZhbHVlOiAnYWx3YXlzJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9BTFdBWVMnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb21tdW5pdHkgPSBSTF9DT01NVU5JVFkgfHwgQXBwU3RvcmUuY29tbXVuaXR5KCk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnRpdGxlLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubG9hZGluZ0Rlc2MudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYXZpY29uVXJsLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLnRpdGxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdUaXRsZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubG9hZGluZ0Rlc2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xvYWRpbmdEZXNjcmlwdGlvbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmF2aWNvblVybC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnRmF2aWNvblVybCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBCcmFuZGluZ0FkbWluU2V0dGluZ3MsIEJyYW5kaW5nQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iXSwic291cmNlUm9vdCI6IiJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9MaW5rcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcHBseURlY29yYXRlZERlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmtleVwiIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWRtaW4vQWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Vmlld05leHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Db3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9Nb21lbnRvci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuaGFzaGVyXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL2Rldi9IZWxwZXIvQXBwcy9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvTGFuZ3VhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0FwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvRW1haWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9DYXBhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BhY2thZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93Lm1vbWVudFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5wcm9ncmVzc0pzXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9KYXNzbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9UaGVtZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0xpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0U2NyZWVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnNzbVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuY3Jvc3Nyb2Fkc1wiIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RDaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZW1haWxqcy1hZGRyZXNzcGFyc2VyL2Rpc3QvYWRkcmVzc3BhcnNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0NoZWNrYm94LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSHRtbEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwvT3BlbnRpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGlrYWRheS9waWthZGF5LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5BdXRvbGlua2VyXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9NaW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Bc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0xhbmd1YWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0Fic3RyYWN0QXBwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUmVtb3RlL0Fic3RyYWN0QWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL0Fic3RyYWN0U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RCb290LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RSYWRpby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL2Rldi9IdG1sL1ByZXZpZXdNZXNzYWdlLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2F2ZVRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9JbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1JhZGlvLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvVGV4dEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9EYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2NyaXB0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9BZG1pbi9TZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vR2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vRG9tYWlucy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0NvbnRhY3RzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9TZWN1cml0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vU29jaWFsLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QbHVnaW5zLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QYWNrYWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQWJvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9BZG1pbi9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2FkbWluLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0RvbWFpbkFsaWFzLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcuanMiXSwibmFtZXMiOlsiRmlsZVR5cGUiLCJTdG9yYWdlUmVzdWx0VHlwZSIsIkZvY3VzZWQiLCJTdGF0ZSIsIlN0YXRlVHlwZSIsIkNhcGEiLCJLZXlTdGF0ZSIsIkZvbGRlclR5cGUiLCJTZXJ2ZXJGb2xkZXJUeXBlIiwiTG9naW5TaWduTWVUeXBlQXNTdHJpbmciLCJMb2dpblNpZ25NZVR5cGUiLCJDb21wb3NlVHlwZSIsIlVwbG9hZEVycm9yQ29kZSIsIlNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24iLCJDbGllbnRTaWRlS2V5TmFtZSIsIkV2ZW50S2V5Q29kZSIsIk1lc3NhZ2VTZXRBY3Rpb24iLCJNZXNzYWdlU2VsZWN0QWN0aW9uIiwiRGVza3RvcE5vdGlmaWNhdGlvbiIsIk1lc3NhZ2VQcmlvcml0eSIsIkVkaXRvckRlZmF1bHRUeXBlIiwiU2VydmVyU2VjdXJlIiwiU2VhcmNoRGF0ZVR5cGUiLCJTYXZlU2V0dGluZ3NTdGVwIiwiTGF5b3V0IiwiRmlsdGVyQ29uZGl0aW9uRmllbGQiLCJGaWx0ZXJDb25kaXRpb25UeXBlIiwiRmlsdGVyc0FjdGlvbiIsIkZpbHRlclJ1bGVzVHlwZSIsIlNpZ25lZFZlcmlmeVN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0eVR5cGUiLCJNYWdpY3MiLCJQb3J0cyIsIk5vdGlmaWNhdGlvbiIsImtvIiwid2luZG93IiwiJHdpbiIsIiQiLCJmRGlzcG9zYWxUb29sdGlwSGVscGVyIiwiZWxlbWVudCIsInV0aWxzIiwiZG9tTm9kZURpc3Bvc2FsIiwiYWRkRGlzcG9zZUNhbGxiYWNrIiwiX19vcGVudGlwIiwiZGVhY3RpdmF0ZSIsImJpbmRpbmdIYW5kbGVycyIsInVwZGF0ZVdpZHRoIiwiaW5pdCIsImZWYWx1ZUFjY2Vzc29yIiwiJGVsIiwiZlZhbHVlIiwiZkluaXQiLCJ3aWR0aCIsInNldFRpbWVvdXQiLCJUaW1lNTAwbXMiLCJvbiIsIm9mZiIsImVkaXRvciIsIkh0bWxFZGl0b3IiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImZVcGRhdGVFZGl0b3JWYWx1ZSIsIl9fZWRpdG9yIiwic2V0SHRtbE9yUGxhaW4iLCJmVXBkYXRlS29WYWx1ZSIsImdldERhdGFXaXRoSHRtbE1hcmsiLCJmT25SZWFkeSIsImlzT2JzZXJ2YWJsZSIsIl9fZmV0Y2hFZGl0b3JWYWx1ZSIsInN1YnNjcmliZSIsImpzb24iLCJ0ZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsInVud3JhcCIsInVwZGF0ZSIsInNjcm9sbGVyU2hhZG93cyIsImxpbWl0IiwiY29udCIsImZGdW5jIiwiXyIsInRocm90dGxlIiwidG9nZ2xlQ2xhc3MiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwaWthZGF5IiwiZkFsbEJpbmRpbmdzQWNjZXNzb3IiLCJ2aWV3TW9kZWwiLCJiaW5kaW5nQ29udGV4dCIsInRleHRJbnB1dCIsIlBpa2FkYXkiLCJfX3Bpa2FkYXkiLCJmaWVsZCIsInZpc2libGVBbmltYXRlZCIsImFkZENsYXNzIiwic2hvdyIsImhpZGUiLCJkZWxheSIsInJlbW92ZUNsYXNzIiwidG9vbHRpcCIsImlzTW9iaWxlIiwiZGF0YSIsImlzSTE4TiIsIkdsb2JhbHMiLCJiTW9iaWxlRGV2aWNlIiwic1ZhbHVlIiwiaXNGdW5jdGlvbiIsIk9wZW50aXAiLCJkcm9wZG93blZpc2liaWxpdHkiLCJ2Iiwic2V0Q29udGVudCIsImFjdGl2YXRlIiwiVHJhbnNsYXRvciIsImkxOG4iLCJ0cmlnZ2VyIiwidG9vbHRpcEVycm9yVGlwIiwic3R5bGUiLCJoaWRlT24iLCJ0aXBKb2ludCIsImRvY3VtZW50IiwidmFsdWUiLCJvcGVuVGlwcyIsImlzIiwiVGltZTEwMG1zIiwicmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duIiwiYUJvb3RzdHJhcERyb3Bkb3ducyIsInB1c2giLCJjbGljayIsImRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSIsIm9wZW5Ecm9wZG93blRyaWdnZXIiLCJoYXNDbGFzcyIsImRyb3Bkb3duIiwiZm9jdXMiLCJkcm9wZG93bkNsb3NlciIsImNsb3Nlc3QiLCJwb3BvdmVyIiwiY3NzdGV4dCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwicmVzaXplY3JvcCIsIm9uS2V5RG93biIsImV2ZW50IiwiY2FsbCIsIm9uRW50ZXIiLCJwYXJzZUludCIsImtleUNvZGUiLCJvblNwYWNlIiwib25UYWIiLCJzaGlmdEtleSIsIm9uRXNjIiwiY2xpY2tPblRydWUiLCJtb2RhbCIsIlV0aWxzIiwid2luZG93UmVzaXplQ2FsbGJhY2siLCIkaHRtbCIsIm1vbWVudCIsIm1vbWVudFRvTm9kZSIsImkxOG5Jbml0IiwiaTE4blRvTm9kZXMiLCJ0cmFuc2xhdG9ySW5pdCIsImkxOG5VcGRhdGUiLCJsaW5rIiwiYXR0ciIsInRpdGxlIiwidGV4dEYiLCJpbml0RG9tIiwiaW5pdEZpeGVkVHJpZ2dlciIsInZhbHVlcyIsInRvcCIsIiRjb250YWluZXIiLCJyZXNpemUiLCJvZmZzZXQiLCJjc3MiLCJpbml0UmVzaXplVHJpZ2dlciIsIm9FbGVtZW50IiwicEludCIsInNpemUiLCJoZWlnaHQiLCJhcHBlbmREb20iLCJlbXB0eSIsImFwcGVuZCIsImRyYWdnYWJsZSIsInRyaWdnZXJab25lIiwic2Nyb2xsU3BlZWQiLCJmQWxsVmFsdWVGdW5jIiwiZHJvcHBhYmxlU2VsZWN0b3IiLCJjb25mIiwiZGlzdGFuY2UiLCJoYW5kbGUiLCJjdXJzb3JBdCIsImxlZnQiLCJyZWZyZXNoUG9zaXRpb25zIiwic2Nyb2xsIiwiZHJhZyIsInN0b3AiLCJoZWxwZXIiLCJlYWNoIiwiJHRoaXMiLCJib3R0b21Qb3MiLCJjbGVhckludGVydmFsIiwicGFnZVgiLCJwYWdlWSIsIm1vdmVVcCIsIndpbmRvd1Jlc2l6ZSIsInNldEludGVydmFsIiwibW92ZURvd24iLCJ0YXJnZXQiLCJkYXRhRm9yIiwicmVtb3ZlSW5Gb2N1cyIsImRyb3BwYWJsZSIsImZWYWx1ZUZ1bmMiLCJmT3ZlckNhbGxiYWNrIiwiZHJvcHBhYmxlT3ZlciIsImZPdXRDYWxsYmFjayIsImRyb3BwYWJsZU91dCIsInRvbGVyYW5jZSIsImhvdmVyQ2xhc3MiLCJkcm9wIiwib3ZlciIsIm91dCIsInVpIiwibmFubyIsIlNldHRpbmdzIiwiYkRpc2FibGVOYW5vU2Nyb2xsIiwiYXBwU2V0dGluZ3NHZXQiLCJuYW5vU2Nyb2xsZXIiLCJpT1NOYXRpdmVTY3JvbGxpbmciLCJwcmV2ZW50UGFnZVNjcm9sbGluZyIsInNhdmVUcmlnZ2VyIiwidG9TdHJpbmciLCJlbmQiLCJlbWFpbHNUYWdzIiwiRW1haWxNb2RlbCIsImZBbGxCaW5kaW5ncyIsImZBdXRvQ29tcGxldGVTb3VyY2UiLCJhdXRvQ29tcGxldGVTb3VyY2UiLCJpbnB1dERlbGltaXRlcnMiLCJmRm9jdXNDYWxsYmFjayIsImZvY3VzZWQiLCJpbnB1dG9zYXVydXMiLCJwYXJzZU9uQmx1ciIsImFsbG93RHJhZ0FuZERyb3AiLCJmb2N1c0NhbGxiYWNrIiwic3BsaXRIb29rIiwic3Vic3RyIiwic3BsaXRFbWFpbExpbmUiLCJwYXJzZUhvb2siLCJpbnB1dCIsImZsYXR0ZW4iLCJpbnB1dFZhbHVlIiwicGFyc2VFbWFpbExpbmUiLCJsZW5ndGgiLCJpdGVtIiwiaXNPYmplY3QiLCJ0b0xpbmUiLCJjaGFuZ2UiLCIkb0VsIiwidmFsIiwiY29tbWFuZCIsImpxRWxlbWVudCIsImlzQ29tbWFuZCIsIkVycm9yIiwiZW5hYmxlZCIsIm9ic2VydmFibGUiLCJjYW5FeGVjdXRlIiwiX19yZWFsQ2FuRXhlY3V0ZSIsImNvbXB1dGVkIiwicmVzdWx0IiwicHJvcCIsImV4dGVuZGVycyIsInRyaW1tZXIiLCJyZWFkIiwid3JpdGUiLCJuZXdWYWx1ZSIsInBvc0ludGVyZXIiLCJkZWZhdWx0VmFsIiwibGltaXRlZExpc3QiLCJjdXJyZW50VmFsdWUiLCJsaXN0IiwiaXNOb25FbXB0eUFycmF5IiwiaW5BcnJheSIsImV4dGVuZCIsIm5vdGlmeSIsInZhbHVlSGFzTXV0YXRlZCIsInJldmVyc2libGUiLCJjb21taXQiLCJyZXZlcnNlIiwiY29tbWl0ZWRWYWx1ZSIsInRvZ2dsZVN1YnNjcmliZSIsIm9wdGlvbnMiLCJ0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSIsInByZXYiLCJuZXh0IiwiZmFsc2VUaW1lb3V0Iiwib3B0aW9uIiwiaUZhbHNlVGltZW91dFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzcGVjaWFsVGhyb3R0bGUiLCJpU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQiLCJ2YWx1ZUZvclJlYWQiLCJiVmFsdWUiLCJpZGxlVHJpZ2dlciIsIklkbGUiLCJmbiIsInZhbGlkYXRlTm9uZSIsImhhc0Vycm9yIiwidmFsaWRhdGVFbWFpbCIsInRlc3QiLCJ2YWxpZGF0ZVNpbXBsZUVtYWlsIiwiZGVsZXRlQWNjZXNzSGVscGVyIiwidmFsaWRhdGVGdW5jIiwiaGFzRnVuY0Vycm9yIiwidHJpbSIsImlzQXJyYXkiLCJpc0Z1bmMiLCJpc1VuZCIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiaGFzIiwiYmluZCIsIm5vb3AiLCJub29wVHJ1ZSIsIm5vb3BGYWxzZSIsInNpbGVudFRyeUNhdGNoIiwiZnVuYyIsImUiLCJpc05vcm1hbCIsImlzUG9zTnVtZXJpYyIsImluY2x1ZGVaZXJvIiwiZGVmYXVsdFZhbHVyIiwiaXNOYU4iLCJwU3RyaW5nIiwicEJvb2wiLCJib29sVG9BamF4IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29tcG9uZW50IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlVVJJIiwidXJsIiwiZW5jb2RlVVJJIiwic2ltcGxlUXVlcnlQYXJzZXIiLCJxdWVyeVN0cmluZyIsImluZGV4IiwibGVuIiwidGVtcCIsInF1ZXJpZXMiLCJzcGxpdCIsInBhcmFtcyIsImZha2VNZDUiLCJsaW5lIiwibGluZUxlbiIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsImVuY29kZUh0bWwiLCJlc2NhcGUiLCJzcGxpdFBsYWluVGV4dCIsInByZWZpeCIsInN1YlRleHQiLCJzcGFjZVBvcyIsIm5ld0xpbmVQb3MiLCJzdWJzdHJpbmciLCJ0aW1lT3V0QWN0aW9uIiwidGltZU91dHMiLCJhY3Rpb24iLCJmRnVuY3Rpb24iLCJ0aW1lT3V0IiwidGltZU91dEFjdGlvblNlY29uZCIsImRlTW9kdWxlIiwibSIsImluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX19pbkZvY3VzQ2FjaGUiLCJmb3JjZSIsImJsdXIiLCJhY3RpdmVFbCIsInJlbW92ZVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInNlbCIsInJlbW92ZUFsbFJhbmdlcyIsInNlbGVjdGlvbiIsInJlcGx5U3ViamVjdEFkZCIsInN1YmplY3QiLCJ0b1VwcGVyQ2FzZSIsInJlcGxhY2UiLCJyZSIsImZ3ZCIsInBhcnRzIiwicHJlZml4SXNSZSIsInBhcnQiLCJ0cmltbWVkUGFydCIsImpvaW4iLCJyb3VuZE51bWJlciIsIm51bSIsImRlYyIsInBvdyIsImZyaWVuZGx5U2l6ZSIsInNpemVJbkJ5dGVzIiwibG9nIiwiZGVzYyIsImNvbnNvbGUiLCJkZWxlZ2F0ZVJ1biIsIm9iamVjdCIsIm1ldGhvZE5hbWUiLCJraWxsQ3RybEFDdHJsUyIsImN0cmxLZXkiLCJhbHRLZXkiLCJrZXkiLCJ3aGljaCIsIlMiLCJwcmV2ZW50RGVmYXVsdCIsIkEiLCJzZW5kZXIiLCJzcmNFbGVtZW50IiwiY29udGVudEVkaXRhYmxlIiwidGFnTmFtZSIsIm1hdGNoIiwiY2xlYXIiLCJjcmVhdGVDb21tYW5kTGVnYWN5IiwiY29udGV4dCIsImZFeGVjdXRlIiwiZkNhbkV4ZWN1dGUiLCJmUmVzdWx0IiwiZk5vbkVtcHR5IiwiYXJncyIsImFwcGx5IiwiY29udmVydFRoZW1lTmFtZSIsIm1lbW9pemUiLCJ0aGVtZSIsInF1b3RlTmFtZSIsIm5hbWUiLCJtaWNyb3RpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVzdGFtcCIsImNvbnZlcnRMYW5nTmFtZSIsImxhbmd1YWdlIiwiaXNFbmciLCJkcmFnZ2FibGVQbGFjZSIsImFwcGVuZFRvIiwiZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIiwiZG9tSXRlbSIsImRpc2FibGVkIiwiY2xlYXJCcVN3aXRjaGVyIiwiYm9keSIsInJlbW92ZSIsInJlbW92ZUF0dHIiLCJwcmV2aWV3TWVzc2FnZSIsImlzSHRtbCIsInByaW50IiwiZGF0ZSIsImZyb21DcmVkcyIsInRvQ3JlZHMiLCJ0b0xhYmVsIiwiY2NDbGFzcyIsImNjQ3JlZHMiLCJjY0xhYmVsIiwid2luIiwib3BlbiIsImRvYyIsImJvZHlDbG9uZSIsImNsb25lIiwiYm9keUNsYXNzIiwiaHRtbCIsImNsb3NlIiwic2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24iLCJmQ2FsbGJhY2siLCJrb1RyaWdnZXIiLCJ0aW1lciIsInR5cGUiLCJjYWNoZWQiLCJyZXF1ZXN0QWN0aW9uIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJSZXN1bHQiLCJUcnVlUmVzdWx0IiwiRmFsc2VSZXN1bHQiLCJzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiIsInNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uIiwicmVtb3RlIiwic2V0dGluZ05hbWUiLCJmVHJpZ2dlckZ1bmN0aW9uIiwic2F2ZUFkbWluQ29uZmlnIiwic2F2ZVNldHRpbmdzIiwiZmluZEVtYWlsQW5kTGlua3MiLCJBdXRvbGlua2VyIiwibmV3V2luZG93Iiwic3RyaXBQcmVmaXgiLCJ1cmxzIiwiZW1haWwiLCJtZW50aW9uIiwicGhvbmUiLCJoYXNodGFnIiwicmVwbGFjZUZuIiwiZ2V0VHlwZSIsIm1hdGNoZWRUZXh0IiwiaHRtbFRvUGxhaW4iLCJwb3MiLCJpUDEiLCJpUDIiLCJpUDMiLCJjb252ZXJ0QmxvY2txdW90ZSIsImJsb2NrcXVvdGVUZXh0IiwiY29udmVydERpdnMiLCJkaXZUZXh0IiwiY29udmVydFByZSIsImZpeEF0dGlidXRlVmFsdWUiLCJjb252ZXJ0TGlua3MiLCIkZGl2IiwicGxhaW5Ub0h0bWwiLCJwbGFpbiIsImZpbmRFbWFpbEFuZExpbmtzSW5UZXh0IiwiYkluIiwiYkRvIiwiYlN0YXJ0IiwiYU5leHRUZXh0Iiwic0xpbmUiLCJpSW5kZXgiLCJhVGV4dCIsImZvbGRlckxpc3RPcHRpb25zQnVpbGRlciIsImFTeXN0ZW0iLCJhTGlzdCIsImFEaXNhYmxlZCIsImFIZWFkZXJMaW5lcyIsImlVbkRlZXAiLCJmRGlzYWJsZUNhbGxiYWNrIiwiZlZpc2libGVDYWxsYmFjayIsImZSZW5hbWVDYWxsYmFjayIsImJTeXN0ZW0iLCJiQnVpbGRVbnZpc2libGUiLCJvSXRlbSIsImJTZXAiLCJpTGVuIiwiYVJlc3VsdCIsInNEZWVwUHJlZml4IiwiaWQiLCJzeXN0ZW0iLCJzZXBvcmF0b3IiLCJmdWxsTmFtZVJhdyIsInNlbGVjdGFibGUiLCJzdWJTY3JpYmVkIiwiZXhpc3RlbiIsImhhc1N1YlNjcmliZWRTdWJmb2xkZXJzIiwiVXNlciIsIkFycmF5IiwiZGVlcCIsInN1YkZvbGRlcnMiLCJzZWxlY3RFbGVtZW50IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImFkZFJhbmdlIiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZWxlY3QiLCJkZWJvdW5jZSIsIkdsb2JhbHNEYXRhIiwidHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIiwiY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlIiwiZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWciLCJjb25maWd1cmF0aW9uIiwicGFyc2UiLCJkaXNwb3NlT25lIiwicHJvcE9yVmFsdWUiLCJkaXNwb3NhYmxlIiwiZGlzcG9zZSIsImRpc3Bvc2VPYmplY3QiLCJkaXNwb3NhYmxlcyIsIm9iamVjdEZvckVhY2giLCJkZWxlZ2F0ZVJ1bk9uRGVzdHJveSIsIm9iamVjdE9yT2JqZWN0cyIsIm9uRGVzdHJveSIsImFwcGVuZFN0eWxlcyIsIiRzdHlsZVRhZyIsIl9fdGhlbWVUaW1lciIsIl9fdGhlbWVBamF4IiwiY2hhbmdlVGhlbWUiLCJ0aGVtZVRyaWdnZXIiLCJ0aGVtZUxpbmsiLCJjbGVhclRpbWVyIiwidGhlbWVTdHlsZSIsIkFuaW1hdGUiLCJhYm9ydCIsImFqYXgiLCJkYXRhVHlwZSIsInRoZW4iLCJhZnRlciIsImNvbXB1dGVkUGFnZW5hdG9ySGVscGVyIiwia29DdXJyZW50UGFnZSIsImtvUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJwYWdlQ291bnQiLCJmQWRkIiwiY3VzdG9tTmFtZSIsImN1cnJlbnQiLCJjdXN0b20iLCJ1bnNoaWZ0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsImZpbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwb3AiLCJtaW1lQ29udGVudFR5cGUiLCJleHQiLCJNaW1lIiwiaXNUcmFuc3BhcmVudCIsImNvbG9yIiwiZ2V0UmVhbEhlaWdodCIsIiRoY29udCIsInJlc2l6ZUFuZENyb3AiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsImRpZmYiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwidG9EYXRhVVJMIiwic3JjIiwibWFpbFRvSGVscGVyIiwibWFpbFRvVXJsIiwiUG9wdXBDb21wb3NlVmlld01vZGVsIiwidG8iLCJjYyIsImJjYyIsInF1ZXJ5Iiwic2hvd1NjcmVlblBvcHVwIiwiRW1wdHkiLCJkb21SZWFkeSIsInRpbWVvdXQiLCJTdHJpbmciLCJzdHIiLCJzdGFydCIsIlNFVFRJTkdTIiwiX19ybGFoX2RhdGEiLCJBUFBfU0VUVElOR1MiLCJTeXN0ZW0iLCJzZXR0aW5nc0dldCIsInNldHRpbmdzU2V0IiwiY2FwYSIsIl9fc2l6ZXMiLCIkZG9jIiwiJGJvZHkiLCJwb3NpdGlvbiIsInN0YXJ0TWljcm90aW1lIiwiY29tbXVuaXR5IiwiUkxfQ09NTVVOSVRZIiwicmF0ZUxpbWl0IiwidXNlS2V5Ym9hcmRTaG9ydGN1dHMiLCJzVXNlckFnZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYklFIiwiYkNocm9tZSIsImJTYWZhcmkiLCJiQW5pbWF0aW9uU3VwcG9ydGVkIiwiYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJiSXNIdHRwcyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJodG1sRWRpdG9yRGVmYXVsdENvbmZpZyIsImdyb3VwcyIsImh0bWxFZGl0b3JMYW5nc01hcCIsImJBbGxvd1BkZlByZXZpZXciLCJtaW1lVHlwZXMiLCJWSUVXX01PREVMUyIsInNldHRpbmdzIiwibW92ZUFjdGlvbiIsImxlZnRQYW5lbERpc2FibGVkIiwibGVmdFBhbmVsVHlwZSIsImxlZnRQYW5lbFdpZHRoIiwicG9wdXBWaXNpYmlsaXR5TmFtZXMiLCJvYnNlcnZhYmxlQXJyYXkiLCJwb3B1cFZpc2liaWxpdHkiLCJrZXlTY29wZVJlYWwiLCJBbGwiLCJrZXlTY29wZUZha2UiLCJrZXlTY29wZSIsIk1lbnUiLCJDb21wb3NlIiwiZmlsdGVyIiwiZWwiLCJjbGFzc05hbWUiLCJzZXRTY29wZSIsImdldFNjb3BlIiwiX19BUFBfXyIsImlBamF4RXJyb3JDb3VudCIsImlUb2tlbkVycm9yQ291bnQiLCJpTWVzc2FnZUJvZHlDYWNoZUNvdW50IiwiYlVubG9hZCIsImN1cnJlbnRTY3JlZW4iLCJkZWZhdWx0U2NyZWVuTmFtZSIsIlNDUkVFTlMiLCJWaWV3VHlwZSIsIlBvcHVwIiwiTGVmdCIsIlJpZ2h0IiwiQ2VudGVyIiwiaGlkZUxvYWRpbmciLCJjcmVhdGVDb21tYW5kIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWwiLCJTZXR0aW5nc1ZpZXdNb2RlbENsYXNzIiwidGVtcGxhdGUiLCJsYWJlbE5hbWUiLCJyb3V0ZSIsImlzRGVmYXVsdCIsIl9fcmxTZXR0aW5nc0RhdGEiLCJMYWJlbCIsIlRlbXBsYXRlIiwiUm91dGUiLCJJc0RlZmF1bHQiLCJyZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsImRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbCIsInJvdXRlT2ZmIiwiaGFzaGVyIiwiY2hhbmdlZCIsImFjdGl2ZSIsInJvdXRlT24iLCJzY3JlZW4iLCJzY3JlZW5OYW1lIiwiZ2V0U2NyZWVuUG9wdXAiLCJQb3B1Vmlld01vZGVsQ2xhc3MiLCJoaWRlU2NyZWVuUG9wdXAiLCJWaWV3TW9kZWxDbGFzc1RvSGlkZSIsIk1vZGFsVmlldyIsIl9fdm0iLCJfX2RvbSIsIm1vZGFsVmlzaWJpbGl0eSIsInZtUnVuSG9vayIsImhvb2tOYW1lIiwiVmlld01vZGVsQ2xhc3MiLCJfX25hbWVzIiwicnVuSG9vayIsImJ1aWxkVmlld01vZGVsIiwidm1TY3JlZW4iLCJfX2J1aWxkZWQiLCJ2bURvbSIsInZtIiwiX190eXBlIiwidm1QbGFjZSIsIm9uU2hvd1RyaWdnZXIiLCJvbkhpZGVUcmlnZ2VyIiwidmlld01vZGVsTmFtZSIsIl9fbmFtZSIsInZpZXdNb2RlbE5hbWVzIiwidmlld01vZGVsVGVtcGxhdGVJRCIsIl9fdGVtcGxhdGVJRCIsInZpZXdNb2RlbFBvc2l0aW9uIiwidmlld01vZGVsRG9tIiwiY2FuY2VsQ29tbWFuZCIsImNsb3NlQ29tbWFuZCIsInN0b3JlQW5kU2V0S2V5U2NvcGUiLCJyZXN0b3JlS2V5U2NvcGUiLCJhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUiLCJyZWdpc3RlclBvcHVwS2V5RG93biIsIlZpZXdNb2RlbENsYXNzVG9TaG93Iiwid2FybVVwU2NyZWVuUG9wdXAiLCJpc1BvcHVwVmlzaWJsZSIsInNjcmVlbk9uUm91dGUiLCJzdWJQYXJ0IiwiaXNTYW1lU2NyZWVuIiwiY3Jvc3MiLCJfX3N0YXJ0ZWQiLCJ2aWV3TW9kZWxzIiwiZGVmZXIiLCJ2aWV3TW9kZWxWaXNpYmlsaXR5IiwiX19jcm9zcyIsInN0YXJ0U2NyZWVucyIsInNjcmVlbnNDbGFzc2VzIiwiQ1NjcmVlbiIsIl9fc3RhcnQiLCJjcm9zc3JvYWRzIiwiY3JlYXRlIiwiYWRkUm91dGUiLCJpbml0aWFsaXplZCIsImFkZCIsInNldEhhc2giLCJoYXNoIiwic2lsZW5jZSIsImNtZCIsInZpZXdEZWNvcmF0b3IiLCJ0ZW1wbGF0ZUlEIiwicG9wdXBEZWNvcmF0b3IiLCJjb21tYW5kRGVjb3JhdG9yIiwiZGVzY3JpcHRvciIsImluaXRpYWxpemVyIiwibm9ybUNhbkV4ZWN1dGUiLCJzZXR0aW5nc01lbnVLZXlzSGFuZGxlciIsIiRpdGVtcyIsImhhbmRsZXIiLCJ1cCIsInNob3J0Y3V0IiwicmVzdWx0SGFzaCIsImVxIiwiVGltZTIwMG1zIiwiSTE4Tl9EQVRBIiwicmFpbmxvb3BJMThOIiwiSTE4Tl9OT1RJRklDQVRJT05fREFUQSIsIkkxOE5fTk9USUZJQ0FUSU9OX01BUCIsIkludmFsaWRUb2tlbiIsIkF1dGhFcnJvciIsIkFjY2Vzc0Vycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiQ2FwdGNoYUVycm9yIiwiU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlIiwiRG9tYWluTm90QWxsb3dlZCIsIkFjY291bnROb3RBbGxvd2VkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IiLCJDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCIsIkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCIsIk5ld1Bhc3N3b3JkU2hvcnQiLCJOZXdQYXNzd29yZFdlYWsiLCJOZXdQYXNzd29yZEZvcmJpZGRlbiIsIkNvbnRhY3RzU3luY0Vycm9yIiwiQ2FudEdldE1lc3NhZ2VMaXN0IiwiQ2FudEdldE1lc3NhZ2UiLCJDYW50RGVsZXRlTWVzc2FnZSIsIkNhbnRNb3ZlTWVzc2FnZSIsIkNhbnRDb3B5TWVzc2FnZSIsIkNhbnRTYXZlTWVzc2FnZSIsIkNhbnRTZW5kTWVzc2FnZSIsIkludmFsaWRSZWNpcGllbnRzIiwiQ2FudFNhdmVGaWx0ZXJzIiwiQ2FudEdldEZpbHRlcnMiLCJGaWx0ZXJzQXJlTm90Q29ycmVjdCIsIkNhbnRDcmVhdGVGb2xkZXIiLCJDYW50UmVuYW1lRm9sZGVyIiwiQ2FudERlbGV0ZUZvbGRlciIsIkNhbnREZWxldGVOb25FbXB0eUZvbGRlciIsIkNhbnRTdWJzY3JpYmVGb2xkZXIiLCJDYW50VW5zdWJzY3JpYmVGb2xkZXIiLCJDYW50U2F2ZVNldHRpbmdzIiwiQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyIsIkRvbWFpbkFscmVhZHlFeGlzdHMiLCJDYW50SW5zdGFsbFBhY2thZ2UiLCJDYW50RGVsZXRlUGFja2FnZSIsIkludmFsaWRQbHVnaW5QYWNrYWdlIiwiVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlIiwiTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSIsIkxpY2Vuc2luZ0V4cGlyZWQiLCJMaWNlbnNpbmdCYW5uZWQiLCJEZW1vU2VuZE1lc3NhZ2VFcnJvciIsIkRlbW9BY2NvdW50RXJyb3IiLCJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJNYWlsU2VydmVyRXJyb3IiLCJJbnZhbGlkSW5wdXRBcmd1bWVudCIsIlVua25vd25Ob3RpZmljYXRpb24iLCJVbmtub3duRXJyb3IiLCJ2YWx1ZUxpc3QiLCJkZWZhdWxWYWx1ZSIsInZhbHVlTmFtZSIsImkxOG5Ub05vZGUiLCJlbGVtZW50cyIsImFuaW1hdGUiLCJsZXR0ZXJmeCIsInJlbG9hZERhdGEiLCJtb21lbnRvclJlbG9hZCIsImluaXROb3RpZmljYXRpb25MYW5ndWFnZSIsImluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlIiwic3RhcnRDYWxsYmFjayIsImxhbmdDYWxsYmFjayIsImdldE5vdGlmaWNhdGlvbiIsImNvZGUiLCJtZXNzYWdlIiwiZGVmQ29kZSIsIkNsaWVudFZpZXdFcnJvciIsImdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZSIsInJlc3BvbnNlIiwiRXJyb3JDb2RlIiwiRXJyb3JNZXNzYWdlIiwiZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIiwiRmlsZUlzVG9vQmlnIiwiRmlsZVBhcnRpYWxseVVwbG9hZGVkIiwiRmlsZU5vVXBsb2FkZWQiLCJNaXNzaW5nVGVtcEZvbGRlciIsIkZpbGVPblNhdmVpbmdFcnJvciIsInJlbG9hZCIsImFkbWluIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsYW5nTGluayIsImNhY2hlIiwiaXNSdGwiLCJST09UIiwiSEFTSF9QUkVGSVgiLCJTRVJWRVJfUFJFRklYIiwiU1VCX1FVRVJZX1BSRUZJWCIsIlZFUlNJT04iLCJXRUJfUFJFRklYIiwiVkVSU0lPTl9QUkVGSVgiLCJTVEFUSUNfUFJFRklYIiwiQURNSU5fSE9TVF9VU0UiLCJBRE1JTl9QQVRIIiwiQVVUSF9QUkVGSVgiLCJwb3B1bGF0ZUF1dGhTdWZmaXgiLCJzdWJRdWVyeVByZWZpeCIsInJvb3QiLCJzdGFydHVwVXJsIiwicm9vdEFkbWluIiwicm9vdFVzZXIiLCJhdHRhY2htZW50UmF3IiwiZG93bmxvYWQiLCJjdXN0b21TcGVjU3VmZml4IiwiYXR0YWNobWVudERvd25sb2FkIiwiYXR0YWNobWVudFByZXZpZXciLCJhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyIsImF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbiIsImF0dGFjaG1lbnRGcmFtZWQiLCJzZXJ2ZXJSZXF1ZXN0IiwidXBsb2FkIiwidXBsb2FkQ29udGFjdHMiLCJ1cGxvYWRCYWNrZ3JvdW5kIiwibWVzc2FnZVZpZXdMaW5rIiwicmVxdWVzdEhhc2giLCJtZXNzYWdlRG93bmxvYWRMaW5rIiwiYXZhdGFyTGluayIsInB1YmxpY0xpbmsiLCJ1c2VyQmFja2dyb3VuZCIsInBocEluZm8iLCJsYW5nIiwiaXNBZG1pbiIsImV4cG9ydENvbnRhY3RzVmNmIiwiZXhwb3J0Q29udGFjdHNDc3YiLCJzb2NpYWxHb29nbGUiLCJ4YXV0aCIsInNvY2lhbFR3aXR0ZXIiLCJzb2NpYWxGYWNlYm9vayIsInN0YXRpY1ByZWZpeCIsInBhdGgiLCJlbXB0eUNvbnRhY3RQaWMiLCJzb3VuZCIsIm5vdGlmaWNhdGlvbk1haWxJY29uIiwib3BlblBncEpzIiwib3BlblBncFdvcmtlckpzIiwib3BlblBncFdvcmtlclBhdGgiLCJ0aGVtZVByZXZpZXdMaW5rIiwiaW5ib3giLCJpbmJveEZvbGRlck5hbWUiLCJhYm91dCIsIm1haWxCb3giLCJmb2xkZXIiLCJwYWdlIiwic2VhcmNoIiwidGhyZWFkVWlkIiwicmVzdWx0VGhyZWFkVWlkIiwiUmVtb3RlQWRtaW5BamF4Iiwib1JlcXVlc3RzIiwiYWRtaW5Mb2dpbiIsInNMb2dpbiIsInNQYXNzd29yZCIsImRlZmF1bHRSZXF1ZXN0IiwiYWRtaW5Mb2dvdXQiLCJvRGF0YSIsInNhdmVBZG1pbkNvbmZpZ0hlbHBlciIsInZhbHVlRm4iLCJkb21haW5MaXN0IiwiYkluY2x1ZGVBbGlhc2VzIiwicGx1Z2luTGlzdCIsInBhY2thZ2VzTGlzdCIsImNvcmVEYXRhIiwidXBkYXRlQ29yZURhdGEiLCJwYWNrYWdlSW5zdGFsbCIsIm9QYWNrYWdlIiwiZmlsZSIsInBhY2thZ2VEZWxldGUiLCJkb21haW4iLCJzTmFtZSIsInBsdWdpbiIsImRvbWFpbkRlbGV0ZSIsImRvbWFpbkRpc2FibGUiLCJiRGlzYWJsZWQiLCJOYW1lIiwiRGlzYWJsZWQiLCJwbHVnaW5TZXR0aW5nc1VwZGF0ZSIsIm9Db25maWciLCJsaWNlbnNpbmciLCJiRm9yY2UiLCJGb3JjZSIsImxpY2Vuc2luZ0FjdGl2YXRlIiwic0RvbWFpbiIsInNLZXkiLCJEb21haW4iLCJLZXkiLCJwbHVnaW5EaXNhYmxlIiwiY3JlYXRlRG9tYWluQWxpYXMiLCJzQWxpYXMiLCJBbGlhcyIsImNyZWF0ZU9yVXBkYXRlRG9tYWluIiwiYkNyZWF0ZSIsInNJbmNIb3N0IiwiaUluY1BvcnQiLCJzSW5jU2VjdXJlIiwiYkluY1Nob3J0TG9naW4iLCJiVXNlU2lldmUiLCJzU2lldmVBbGxvd1JhdyIsInNTaWV2ZUhvc3QiLCJpU2lldmVQb3J0Iiwic1NpZXZlU2VjdXJlIiwic091dEhvc3QiLCJpT3V0UG9ydCIsInNPdXRTZWN1cmUiLCJiT3V0U2hvcnRMb2dpbiIsImJPdXRBdXRoIiwiYk91dFBocE1haWwiLCJzV2hpdGVMaXN0IiwidGVzdENvbm5lY3Rpb25Gb3JEb21haW4iLCJ0ZXN0Q29udGFjdHMiLCJzYXZlTmV3QWRtaW5QYXNzd29yZCIsImFkbWluUGluZyIsIkFic3RyYWN0QWpheFJlbW90ZSIsIlNVQlMiLCJzdWIiLCJzdWJGdW5jIiwic3ViTmFtZSIsInB1YiIsIlBsdWdpbnMiLCJpdGVtcyIsIk1FU1NBR0VTX1BFUl9QQUdFIiwiTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIiwiQ09OVEFDVFNfUEVSX1BBR0UiLCJERUZBVUxUX0FKQVhfVElNRU9VVCIsIlNFQVJDSF9BSkFYX1RJTUVPVVQiLCJTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUIiwiU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCIsIkNPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUIiwiVU5VU0VEX09QVElPTl9WQUxVRSIsIkNMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSIsIklNQVBfREVGQVVMVF9QT1JUIiwiSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU01UUF9ERUZBVUxUX1BPUlQiLCJTTVRQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTSUVWRV9ERUZBVUxUX1BPUlQiLCJNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQiLCJBSkFYX0VSUk9SX0xJTUlUIiwiVE9LRU5fRVJST1JfTElNSVQiLCJSQUlOTE9PUF9UUklBTF9LRVkiLCJEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyIsIkRBVEFfSU1BR0VfVFJBTlNQX1BJQyIsIkRBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMiLCJBYnN0cmFjdFZpZXdOZXh0IiwiTm9uZSIsInNDdXJyZW50S2V5U2NvcGUiLCJzRGVmYXVsdEtleVNjb3BlIiwiYkRpc2FiZUNsb3NlT25Fc2MiLCJFc2MiLCJCYWNrc3BhY2UiLCJTb2NpYWxTdG9yZSIsImdvb2dsZSIsInR3aXR0ZXIiLCJmYWNlYm9vayIsImRyb3Bib3giLCJjbGllbnRJRCIsImNsaWVudFNlY3JldCIsImFwaUtleSIsImxvYWRpbmciLCJ1c2VyTmFtZSIsImxvZ2dpbmVkIiwiYXV0aCIsImF1dGhHbWFpbCIsImRyaXZlIiwicHJldmlldyIsImNsaWVudFNldHRpbmdzIiwiYXBpS2V5U2V0dGluZ3MiLCJhcHBJRCIsImFwcFNlY3JldCIsInN1cHBvcnRlZCIsImNvbnN1bWVyS2V5IiwiY29uc3VtZXJTZWNyZXQiLCJwb3B1bGF0ZSIsImFwcGVuZERyb3Bib3giLCJEcm9wYm94IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JpcHQiLCJhcHBlbmRDaGlsZCIsIkFic3RyYWN0Q29tcG9uZW50IiwiZnVuY1RvRGlzcG9zZSIsImNvbXBvbmVudEV4cG9ydEhlbHBlciIsIkNsYXNzT2JqZWN0IiwiY3JlYXRlVmlld01vZGVsIiwiY29tcG9uZW50SW5mbyIsImlubGluZSIsIlNJTVBMRV9IT09LUyIsIlVTRVJfVklFV19NT0RFTFNfSE9PS1MiLCJBRE1JTl9WSUVXX01PREVMU19IT09LUyIsImFkZEhvb2siLCJjYWxsYmFjayIsIm1haW5TZXR0aW5nc0dldCIsInJlbW90ZVJlcXVlc3QiLCJwYXJhbWV0ZXJzIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiIsInJ1blNldHRpbmdzVmlld01vZGVsSG9va3MiLCJLbm9pbiIsInZpZXciLCJwbHVnaW5TZWN0aW9uIiwicGx1Z2lucyIsIkNvcmVBZG1pblN0b3JlIiwiY29yZVJlYWwiLCJjb3JlQ2hhbm5lbCIsImNvcmVUeXBlIiwiY29yZVVwZGF0YWJsZSIsImNvcmVBY2Nlc3MiLCJjb3JlV2FybmluZyIsImNvcmVDaGVja2luZyIsImNvcmVVcGRhdGluZyIsImNvcmVWZXJzaW9uIiwiY29yZVJlbW90ZVZlcnNpb24iLCJjb3JlUmVtb3RlUmVsZWFzZSIsImNvcmVWZXJzaW9uQ29tcGFyZSIsIl9tb21lbnQiLCJfbW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93VW5peCIsInVuaXgiLCJtb21lbnROb3ciLCJtb21lbnROb3dVbml4Iiwic2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyIiwic3VidHJhY3QiLCJmb3JtYXQiLCJmb3JtYXRDdXN0b21TaG9ydERhdGUiLCJub3ciLCJmcm9tTm93IiwiVElNRSIsInllYXIiLCJ0aW1lU3RhbXBJblVUQyIsImZvcm1hdFN0ciIsInRpbWUiLCJnZXRBcHAiLCJMYW5ndWFnZVN0b3JlIiwibGFuZ3VhZ2VzIiwibGFuZ3VhZ2VzQWRtaW4iLCJsYW5ndWFnZUFkbWluIiwidXNlckxhbmd1YWdlIiwidXNlckxhbmd1YWdlQWRtaW4iLCJhTGFuZ3VhZ2VzIiwiYUxhbmd1YWdlc0FkbWluIiwiQXBwQWRtaW5TdG9yZSIsImRldGVybWluZVVzZXJMYW5ndWFnZSIsImRldGVybWluZVVzZXJEb21haW4iLCJ3ZWFrUGFzc3dvcmQiLCJ1c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMiLCJkYXRhRm9sZGVyQWNjZXNzIiwiZ2V0IiwiQWJzdHJhY3RBcHBTdG9yZSIsImRraW1TdGF0dXMiLCJka2ltVmFsdWUiLCJjbGVhckR1cGxpY2F0ZU5hbWUiLCJuZXdJbnN0YW5jZUZyb21Kc29uIiwiaW5pdEJ5SnNvbiIsInZhbGlkYXRlIiwid2l0aG91dE5hbWUiLCJFbWFpbCIsIkRraW1TdGF0dXMiLCJEa2ltVmFsdWUiLCJmcmllbmRseVZpZXciLCJ3cmFwV2l0aExpbmsiLCJ1c2VFbmNvZGVIdG1sIiwicGFyc2VkUmVzdWx0IiwiYWRkcmVzc3BhcnNlciIsImV4aXN0cyIsImFkZHJlc3MiLCJjb21wYWN0IiwiZW1haWxBZGRyZXNzIiwiQWJzdHJhY3RJbnB1dCIsImxhYmVsIiwicHJlTGFiZWwiLCJlbmFibGUiLCJwbGFjZWhvbGRlciIsImxhYmVsZWQiLCJwcmVMYWJlbGVkIiwidHJpZ2dlcmVkIiwiY2xhc3NGb3JUcmlnZ2VyIiwic3VmZml4VmFsdWUiLCJzZXRUcmlnZ2VyU3RhdGUiLCJDYXBhQWRtaW5TdG9yZSIsImFkZGl0aW9uYWxBY2NvdW50cyIsImlkZW50aXRpZXMiLCJncmF2YXRhciIsImF0dGFjaG1lbnRUaHVtYm5haWxzIiwic2lldmUiLCJmaWx0ZXJzIiwidGhlbWVzIiwib3BlblBHUCIsInR3b0ZhY3RvckF1dGgiLCJ0d29GYWN0b3JBdXRoRm9yY2UiLCJ0ZW1wbGF0ZXMiLCJBZGRpdGlvbmFsQWNjb3VudHMiLCJJZGVudGl0aWVzIiwiR3JhdmF0YXIiLCJBdHRhY2htZW50VGh1bWJuYWlscyIsIlNpZXZlIiwiRmlsdGVycyIsIlRoZW1lcyIsIlVzZXJCYWNrZ3JvdW5kIiwiT3BlblBHUCIsIlR3b0ZhY3RvciIsIlR3b0ZhY3RvckZvcmNlIiwiVGVtcGxhdGVzIiwiUGFja2FnZUFkbWluU3RvcmUiLCJwYWNrYWdlcyIsInBhY2thZ2VzUmVhbCIsInBhY2thZ2VzTWFpblVwZGF0YWJsZSIsImphc3NsIiwiYXN5bmMiLCJhbGwiLCJvbmVycm9yIiwiVGhlbWVTdG9yZSIsInRoZW1lQmFja2dyb3VuZE5hbWUiLCJ0aGVtZUJhY2tncm91bmRIYXNoIiwiUGx1Z2luQWRtaW5TdG9yZSIsImVycm9yIiwiTGljZW5zZUFkbWluU3RvcmUiLCJsaWNlbnNpbmdQcm9jZXNzIiwibGljZW5zZVZhbGlkIiwibGljZW5zZUV4cGlyZWQiLCJsaWNlbnNlRXJyb3IiLCJsaWNlbnNlVHJpZ2dlciIsIkFic3RyYWN0U2NyZWVuIiwic1NjcmVlbk5hbWUiLCJhVmlld01vZGVscyIsInJvdXRlcyIsIm9Dcm9zcyIsImZNYXRjaGVyIiwib25Sb3V0ZSIsInJ1bGVzIiwiRG9tYWluQWRtaW5TdG9yZSIsImRvbWFpbnMiLCJkb21haW5zV2l0aG91dEFsaWFzZXMiLCJhbGlhcyIsIkFic3RyYWN0Q2hlY2tib3giLCJkaXNhYmxlIiwicmVhZE9ubHkiLCJpbnZlcnRlZCIsImxhYmVsQW5pbWF0ZWQiLCJDaGVja2JveENvbXBvbmVudCIsIm9uQmx1ciIsIm9uUmVhZHkiLCJvbk1vZGVDaGFuZ2UiLCIkZWxlbWVudCIsInJlc2l6ZUVkaXRvciIsInJ1bk9uQmx1ciIsImJsdXJUcmlnZ2VyIiwiYmx1clRpbWVyIiwiZm9jdXNUcmlnZ2VyIiwibW9kZSIsImNsZWFyQ2FjaGVkU2lnbmF0dXJlIiwiZXhlY0NvbW1hbmQiLCJjbGVhckNhY2hlIiwic2V0U2lnbmF0dXJlIiwic2lnbmF0dXJlIiwiaW5zZXJ0QmVmb3JlIiwiY2hlY2tEaXJ0eSIsInJlc2V0RGlydHkiLCJnZXREYXRhIiwid3JhcElzSHRtbCIsIl9fcGxhaW4iLCJnZXRSYXdEYXRhIiwibW9kZVRvZ2dsZSIsInNldE1vZGUiLCJzZXRIdG1sIiwic2V0UGxhaW4iLCJfX2luaXRlZCIsInNldERhdGEiLCJyZXBsYWNlSHRtbCIsImZpbmQiLCJzZXRSYXdEYXRhIiwiaW5pdEZ1bmMiLCJjb25maWciLCJhbGxvd1NvdXJjZSIsImJpdGkiLCJ0b29sYmFyR3JvdXBzIiwiX19jZmdJbml0ZWQiLCJyZW1vdmVCdXR0b25zIiwicmVtb3ZlUGx1Z2lucyIsImVudGVyTW9kZSIsIkNLRURJVE9SIiwiRU5URVJfQlIiLCJzaGlmdEVudGVyTW9kZSIsIkVOVEVSX1AiLCJlbnYiLCJpc0NvbXBhdGlibGUiLCJUYWIiLCJGaWxlUmVhZGVyIiwiZGF0YVRyYW5zZmVyIiwiZ2V0RmlsZXNDb3VudCIsImdldEZpbGUiLCJpbWFnZUlkIiwicmVhZGVyIiwib25sb2FkZW5kIiwicmVhZEFzRGF0YVVSTCIsInJlbW92ZU1lbnVJdGVtIiwiX19yZXNpemFibGUiLCJfX2luaXRFZGl0b3IiLCJoYXNGb2N1cyIsImZvY3VzTWFuYWdlciIsImlubmVySGVpZ2h0Iiwic2V0UmVhZE9ubHkiLCJzdHlsZXMiLCJyYWlubG9vcCIsInJhaW5sb29wVGlwIiwicmFpbmxvb3BFcnJvclRpcCIsIkFza1BvcHVwVmlldyIsInBvcHVwIiwiYXNrRGVzYyIsInllc0J1dHRvbiIsIm5vQnV0dG9uIiwieWVzRm9jdXMiLCJub0ZvY3VzIiwiZlllc0FjdGlvbiIsImZOb0FjdGlvbiIsImJGb2N1c1llc09uU2hvdyIsIlBvcHVwQXNrIiwiY2xlYXJQb3B1cCIsInllc0NsaWNrIiwibm9DbGljayIsIm9uU2hvdyIsImZZZXNGdW5jIiwiZk5vRnVuYyIsImlzRm9jdXNZZXNPblNob3ciLCJvblNob3dXaXRoRGVsYXkiLCJvbkJ1aWxkIiwiTGFuZ3VhZ2VzUG9wdXBWaWV3IiwiZkxhbmciLCJsYW5ncyIsInVzZXIiLCJzZWxlY3RlZCIsImZ1bGxOYW1lIiwic2V0TGFuZ3VhZ2VTZWxlY3Rpb24iLCJsYW5ndWFnZVRvb2x0aXBOYW1lIiwiY3VycmVudExhbmciLCJvbkJlZm9yZVNob3ciLCJmTGFuZ3VhZ2UiLCJjaGFuZ2VMYW5ndWFnZSIsIkFwcCIsInJsIiwicGx1Z2luU2V0dGluZ3NHZXQiLCJwbHVnaW5SZW1vdGVSZXF1ZXN0IiwiRW51bXMiLCJib290c3RhcnQiLCJUaW1lMTBtcyIsIl9fQVBQX0JPT1QiLCJmRXJyb3JDYWxsYmFjayIsInJhaW5sb29wVEVNUExBVEVTIiwiaW5uZXJIVE1MIiwiYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzIiwiYWxsb3dMYW5ndWFnZXNPbkxvZ2luIiwibmV3TW92ZVRvRm9sZGVyIiwiaW50ZXJmYWNlQW5pbWF0aW9uIiwiYW5pbSIsInByZW0iLCJkZWZhdWx0UmVzcG9uc2UiLCJzUmVxdWVzdEFjdGlvbiIsInNUeXBlIiwiYkNhY2hlZCIsIm9SZXF1ZXN0UGFyYW1ldGVycyIsImZDYWxsIiwiU3VjY2VzcyIsIlVubG9hZCIsImxvZ2luQW5kTG9nb3V0UmVsb2FkIiwiQ2xlYXJBdXRoIiwiTG9nb3V0IiwiY2xlYXJDbGllbnRTaWRlVG9rZW4iLCJBYm9ydCIsImFqYXhSZXF1ZXN0IiwiZlJlc3VsdENhbGxiYWNrIiwiaVRpbWVPdXQiLCJzR2V0QWRkIiwiYWJvcnRBY3Rpb25zIiwiaXNQb3N0IiwiaGVhZGVycyIsIkFjdGlvbiIsImFjdGlvblRvQWJvcnQiLCJfX2Fib3J0ZWQiLCJYVG9rZW4iLCJvRGVmQWpheCIsImdsb2JhbCIsImFsd2F5cyIsIlRpbWUiLCJVcGRhdGVUb2tlbiIsInNldENsaWVudFNpZGVUb2tlbiIsImNhdGNoIiwic0FjdGlvbiIsIm9QYXJhbWV0ZXJzIiwiaVRpbWVvdXQiLCJhQWJvcnRBY3Rpb25zIiwiZ2V0UHVibGljS2V5IiwianNWZXJzaW9uIiwic1ZlcnNpb24iLCJBYnN0cmFjdFNldHRpbmdzU2NyZWVuIiwibWVudSIsIm9DdXJyZW50U3ViU2NyZWVuIiwib1ZpZXdNb2RlbFBsYWNlIiwic2V0dXBTZXR0aW5ncyIsInNldHRpbmdzU2NyZWVuIiwiUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ2aWV3TW9kZWxQbGFjZSIsIlNldHRpbmdzVmlld01vZGVsIiwiRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCIsInRtcGwiLCJvbkhpZGUiLCJSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsIkRlZmF1bHRWaWV3TW9kZWwiLCJkZWZhdWx0Um91dGUiLCJzdWJuYW1lIiwibm9ybWFsaXplXyIsInJxdWVzdCIsInZhbHMiLCJBYnN0cmFjdEFwcCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSIsImlzTG9jYWxBdXRvY29tcGxldGUiLCJpZnJhbWUiLCJsYXN0RXJyb3JUaW1lIiwiRXZlbnRzIiwiaUgiLCJpVyIsIlRpbWU1MG1zIiwiVGltZTVzIiwiZ2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwiZGVmYXVsdF8iLCJhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJvTGluayIsImhyZWYiLCJjcmVhdGVFdmVudCIsIm9FIiwiTW91c2VFdmVudHMiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZCIsInNldFdpbmRvd1RpdGxlIiwicmVkaXJlY3RUb0FkbWluUGFuZWwiLCJfX3JsYWhfY2xlYXIiLCJ0b2tlbiIsIl9fcmxhaF9zZXQiLCJsb2dvdXQiLCJpbklmcmFtZSIsImN1c3RvbUxvZ291dExpbmsiLCJwYXJlbnQiLCJoaXN0b3J5QmFjayIsImhpc3RvcnkiLCJiYWNrIiwibW9iaWxlIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyIiwiVGltZTFzIiwic3NtIiwiYWRkU3RhdGUiLCJvbkxlYXZlIiwiQWJzdHJhY3RCb290IiwiQWJzdHJhY3RSYWRpbyIsIlNhdmVUcmlnZ2VyQ29tcG9uZW50IiwidmVydGljYWxBbGlnbiIsInNldFN0YXRlIiwiSW5wdXRDb21wb25lbnQiLCJTZWxlY3RDb21wb25lbnQiLCJvcHRpb25zVGV4dCIsIm9wdGlvbnNWYWx1ZSIsIm9wdGlvbnNDYXB0aW9uIiwiUmFkaW9Db21wb25lbnQiLCJERUZBVUxUX1JPV1MiLCJUZXh0QXJlYUNvbXBvbmVudCIsInJvd3MiLCJzcGVsbGNoZWNrIiwiRGF0ZUNvbXBvbmVudCIsIlNjcmlwdENvbXBvbmVudCIsInRlbXBsYXRlTm9kZXMiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsIm5vZGVWYWx1ZSIsIkNoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQiLCJhbmltYXRpb25Cb3giLCJhbmltYXRpb25DaGVja21hcmsiLCJhbmltYXRpb25Cb3hTZXRUcnVlIiwiYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSIsInRyaWdnZXJBbmltYXRpb24iLCJib3giLCJBZG1pbkFwcCIsIlJlbW90ZSIsInJlbG9hZERvbWFpbkxpc3QiLCJEb21haW5TdG9yZSIsImRlbGV0ZUFjY2VzcyIsInJlbG9hZFBsdWdpbkxpc3QiLCJQbHVnaW5TdG9yZSIsIkVuYWJsZWQiLCJjb25maWd1cmVkIiwiQ29uZmlndXJlZCIsInJlbG9hZFBhY2thZ2VzTGlzdCIsIlBhY2thZ2VTdG9yZSIsIlJlYWwiLCJNYWluVXBkYXRhYmxlIiwiTGlzdCIsImNhbkJlSW5zdGFsbGVkIiwiQ29yZVN0b3JlIiwicmVsb2FkQ29yZURhdGEiLCJDaGFubmVsIiwiVHlwZSIsIlVwZGF0YWJsZSIsIkFjY2VzcyIsIldhcm5pbmciLCJWZXJzaW9uIiwiUmVtb3RlVmVyc2lvbiIsIlJlbW90ZVJlbGVhc2UiLCJWZXJzaW9uQ29tcGFyZSIsInJlbG9hZExpY2Vuc2luZyIsIkxpY2Vuc2VTdG9yZSIsIkV4cGlyZWQiLCJBcHBTdG9yZSIsImJvb3RlbmQiLCJib290ZW5kQ2FsbGJhY2siLCJwcm9ncmVzc0pzIiwiQ2FwYVN0b3JlIiwiU2V0dGluZ3NBZG1pblNjcmVlbiIsIkxvZ2luQWRtaW5TY3JlZW4iLCJEb21haW5Qb3B1cFZpZXciLCJzZWxmIiwiY2FuQmVTYXZlZCIsImNhbkJlVGVzdGVkIiwiZWRpdCIsInNhdmluZyIsInNhdmluZ0Vycm9yIiwic2lldmVTZXR0aW5ncyIsInRlc3RpbmciLCJ0ZXN0aW5nRG9uZSIsInRlc3RpbmdJbWFwRXJyb3IiLCJ0ZXN0aW5nU2lldmVFcnJvciIsInRlc3RpbmdTbXRwRXJyb3IiLCJ0ZXN0aW5nSW1hcEVycm9yRGVzYyIsInRlc3RpbmdTaWV2ZUVycm9yRGVzYyIsInRlc3RpbmdTbXRwRXJyb3JEZXNjIiwiaW1hcFNlcnZlckZvY3VzIiwic2lldmVTZXJ2ZXJGb2N1cyIsInNtdHBTZXJ2ZXJGb2N1cyIsImltYXBTZXJ2ZXIiLCJpbWFwUG9ydCIsImltYXBTZWN1cmUiLCJpbWFwU2hvcnRMb2dpbiIsInVzZVNpZXZlIiwic2lldmVBbGxvd1JhdyIsInNpZXZlU2VydmVyIiwic2lldmVQb3J0Iiwic2lldmVTZWN1cmUiLCJzbXRwU2VydmVyIiwic210cFBvcnQiLCJzbXRwU2VjdXJlIiwic210cFNob3J0TG9naW4iLCJzbXRwQXV0aCIsInNtdHBQaHBNYWlsIiwid2hpdGVMaXN0IiwiYWxpYXNOYW1lIiwiZW5hYmxlU21hcnRQb3J0cyIsImFsbG93U2lldmUiLCJoZWFkZXJUZXh0IiwiZG9tYWluRGVzYyIsImRvbWFpbklzQ29tcHV0ZWQiLCJ1c2VQaHBNYWlsIiwicG9ydCIsIkltYXBTc2wiLCJJbWFwIiwiU210cFNzbCIsIlNtdHBTdGFydFRscyIsIlNtdHAiLCJjcmVhdGVPckFkZENvbW1hbmQiLCJvbkRvbWFpbkNyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwidGVzdENvbm5lY3Rpb25Db21tYW5kIiwib25UZXN0Q29ubmVjdGlvblJlc3BvbnNlIiwid2hpdGVMaXN0Q29tbWFuZCIsImJhY2tDb21tYW5kIiwic2lldmVDb21tYW5kIiwiY2xlYXJUZXN0aW5nIiwic1Jlc3VsdCIsImJJbWFwIiwiYlNpZXZlIiwib0RvbWFpbiIsImNsZWFyRm9ybSIsIkluY0hvc3QiLCJJbmNQb3J0IiwiSW5jU2VjdXJlIiwiSW5jU2hvcnRMb2dpbiIsIlVzZVNpZXZlIiwiU2lldmVBbGxvd1JhdyIsIlNpZXZlSG9zdCIsIlNpZXZlUG9ydCIsIlNpZXZlU2VjdXJlIiwiT3V0SG9zdCIsIk91dFBvcnQiLCJPdXRTZWN1cmUiLCJPdXRTaG9ydExvZ2luIiwiT3V0QXV0aCIsIk91dFVzZVBocE1haWwiLCJXaGl0ZUxpc3QiLCJBbGlhc05hbWUiLCJNZW51U2V0dGluZ3NBZG1pblZpZXciLCJQYW5lU2V0dGluZ3NBZG1pblZpZXciLCJicmFuZGluZyIsIkdlbmVyYWxBZG1pblNldHRpbmdzIiwiRG9tYWluc0FkbWluU2V0dGluZ3MiLCJMb2dpbkFkbWluU2V0dGluZ3MiLCJDb250YWN0c0FkbWluU2V0dGluZ3MiLCJTZWN1cml0eUFkbWluU2V0dGluZ3MiLCJTb2NpYWxBZG1pblNldHRpbmdzIiwiUGx1Z2luc0FkbWluU2V0dGluZ3MiLCJQYWNrYWdlc0FkbWluU2V0dGluZ3MiLCJBYm91dEFkbWluU2V0dGluZ3MiLCJjYXBhVGhlbWVzIiwiY2FwYVVzZXJCYWNrZ3JvdW5kIiwiY2FwYUdyYXZhdGFyIiwiY2FwYUFkZGl0aW9uYWxBY2NvdW50cyIsImNhcGFJZGVudGl0aWVzIiwiY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzIiwiY2FwYVRlbXBsYXRlcyIsIm1haW5BdHRhY2htZW50TGltaXQiLCJCaXRMZW5ndGgxMDI0IiwidXBsb2FkRGF0YSIsInVwbG9hZERhdGFEZXNjIiwidXBsb2FkX21heF9maWxlc2l6ZSIsInBvc3RfbWF4X3NpemUiLCJ0aGVtZXNPcHRpb25zIiwib3B0VmFsdWUiLCJvcHRUZXh0IiwibGFuZ3VhZ2VGdWxsTmFtZSIsImxhbmd1YWdlQWRtaW5GdWxsTmFtZSIsImF0dGFjaG1lbnRMaW1pdFRyaWdnZXIiLCJsYW5ndWFnZVRyaWdnZXIiLCJsYW5ndWFnZUFkbWluVHJpZ2dlciIsImYxIiwiZjIiLCJmMyIsImZSZWxvYWRMYW5ndWFnZUhlbHBlciIsInNhdmVTZXR0aW5nc1N0ZXAiLCJ0cmFuc2xhdG9yUmVsb2FkIiwic2VsZWN0TGFuZ3VhZ2UiLCJzZWxlY3RMYW5ndWFnZUFkbWluIiwicGhwSW5mb0xpbmsiLCJ2aXNpYmlsaXR5IiwiZG9tYWluRm9yRGVsZXRpb24iLCJvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0Iiwib25Eb21haW5Mb2FkUmVxdWVzdCIsImNyZWF0ZURvbWFpbiIsImRlbGV0ZURvbWFpbiIsImRpc2FibGVEb21haW4iLCJvRG9tIiwiZG9tYWluSXRlbSIsImRlZmF1bHREb21haW4iLCJkdW1teSIsInBkb0RzbiIsInBkb1VzZXIiLCJlbmFibGVDb250YWN0cyIsImNvbnRhY3RzU3luYyIsInN1cHBvcnRlZFR5cGVzIiwidHlwZXMiLCJnZXRUeXBlTmFtZSIsImNvbnRhY3RzU3VwcG9ydGVkIiwiY29udGFjdHNUeXBlcyIsImNvbnRhY3RzVHlwZXNPcHRpb25zIiwiY29udGFjdHNUeXBlIiwibWFpbkNvbnRhY3RzVHlwZSIsInRlc3RDb250YWN0c1N1Y2Nlc3MiLCJ0ZXN0Q29udGFjdHNFcnJvciIsInRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSIsInBkb1Bhc3N3b3JkIiwicGRvRHNuVHJpZ2dlciIsInBkb1VzZXJUcmlnZ2VyIiwicGRvUGFzc3dvcmRUcmlnZ2VyIiwiY29udGFjdHNUeXBlVHJpZ2dlciIsIm9uVGVzdENvbnRhY3RzUmVzcG9uc2UiLCJ0ZXN0Q29udGFjdHNDb21tYW5kIiwiTWVzc2FnZSIsImY0IiwiZjUiLCJhZG1pblBhc3N3b3JkIiwiY2FwYU9wZW5QR1AiLCJjYXBhVHdvRmFjdG9yQXV0aCIsImNhcGFUd29GYWN0b3JBdXRoRm9yY2UiLCJ2ZXJpZnlTc2xDZXJ0aWZpY2F0ZSIsImFsbG93U2VsZlNpZ25lZCIsImlzVHdvRmFjdG9yRHJvcHBlclNob3duIiwidHdvRmFjdG9yRHJvcHBlclVzZXIiLCJhZG1pbkxvZ2luRXJyb3IiLCJhZG1pblBhc3N3b3JkTmV3IiwiYWRtaW5QYXNzd29yZE5ldzIiLCJhZG1pblBhc3N3b3JkTmV3RXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyIsIm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlIiwic2F2ZU5ld0FkbWluUGFzc3dvcmRDb21tYW5kIiwic2hvd1R3b0ZhY3RvckRyb3BwZXIiLCJXZWFrIiwiZ29vZ2xlRW5hYmxlIiwiZ29vZ2xlRW5hYmxlQXV0aCIsImdvb2dsZUVuYWJsZUF1dGhHbWFpbCIsImdvb2dsZUVuYWJsZURyaXZlIiwiZ29vZ2xlRW5hYmxlUHJldmlldyIsImdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyIsImdvb2dsZUVuYWJsZVJlcXVpcmVBcGlLZXkiLCJnb29nbGVDbGllbnRJRCIsImdvb2dsZUNsaWVudFNlY3JldCIsImdvb2dsZUFwaUtleSIsImdvb2dsZVRyaWdnZXIxIiwiZ29vZ2xlVHJpZ2dlcjIiLCJnb29nbGVUcmlnZ2VyMyIsImZhY2Vib29rU3VwcG9ydGVkIiwiZmFjZWJvb2tFbmFibGUiLCJmYWNlYm9va0FwcElEIiwiZmFjZWJvb2tBcHBTZWNyZXQiLCJmYWNlYm9va1RyaWdnZXIxIiwiZmFjZWJvb2tUcmlnZ2VyMiIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyQ29uc3VtZXJLZXkiLCJ0d2l0dGVyQ29uc3VtZXJTZWNyZXQiLCJ0d2l0dGVyVHJpZ2dlcjEiLCJ0d2l0dGVyVHJpZ2dlcjIiLCJkcm9wYm94RW5hYmxlIiwiZHJvcGJveEFwaUtleSIsImRyb3Bib3hUcmlnZ2VyMSIsImY2IiwiZjciLCJmOCIsImVuYWJsZWRQbHVnaW5zIiwicGx1Z2luc0Vycm9yIiwib25QbHVnaW5Mb2FkUmVxdWVzdCIsIm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QiLCJkaXNhYmxlUGx1Z2luIiwiY29uZmlndXJlUGx1Z2luIiwicGFja2FnZXNFcnJvciIsInBhY2thZ2VzQ3VycmVudCIsImluc3RhbGxlZCIsImNvbXBhcmUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSIsInBhY2thZ2VzQXZhaWxhYmxlRm9ySW5zdGFsbGF0aW9uIiwicmVxdWVzdEhlbHBlciIsInBhY2thZ2VUb1JlcXVlc3QiLCJpbnN0YWxsIiwiUmVsb2FkIiwiZGVsZXRlUGFja2FnZSIsInBhY2thZ2VUb0RlbGV0ZSIsImluc3RhbGxQYWNrYWdlIiwicGFja2FnZVRvSW5zdGFsbCIsInZlcnNpb24iLCJhY2Nlc3MiLCJlcnJvckRlc2MiLCJjb3JlUmVtb3RlVmVyc2lvbkh0bWxEZXNjIiwidHJhbnNsYXRvclRyaWdnZXIiLCJzdGF0dXNUeXBlIiwidmVyc2lvblRvQ29tcGFyZSIsImlzQ2hlY2tpbmciLCJpc1VwZGF0aW5nIiwiaXNSZWFsIiwiZG9tIiwiYWRtaW5Eb21haW4iLCJhZG1pbk1hbkxvYWRpbmciLCJhZG1pbk1hbkxvYWRpbmdWaXNpYmlsaXR5IiwibG9nb3V0Q2xpY2siLCJMb2dpbkFkbWluVmlldyIsInN1Ym1pdFJlcXVlc3QiLCJtb2JpbGVEZXZpY2UiLCJoaWRlU3VibWl0QnV0dG9uIiwibG9naW4iLCJwYXNzd29yZCIsImxvZ2luRXJyb3IiLCJwYXNzd29yZEVycm9yIiwibG9naW5FcnJvckFuaW1hdGlvbiIsInBhc3N3b3JkRXJyb3JBbmltYXRpb24iLCJsb2dpbkZvY3VzIiwiZm9ybUhpZGRlbiIsImZvcm1FcnJvciIsInN1Ym1pdEVycm9yIiwic3VibWl0Q29tbWFuZCIsInN1Ym1pdEZvcm0iLCJib290c3RyYXAiLCJEb21haW5BbGlhc1BvcHVwVmlldyIsImRvbWFpbnNPcHRpb25zIiwib25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwiUGx1Z2luUG9wdXBWaWV3IiwiaGFzQ29uZmlndXJhdGlvbiIsIm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSIsInNhdmVFcnJvciIsInJlYWRtZSIsImNvbmZpZ3VyZXMiLCJoYXNSZWFkbWUiLCJyZWFkbWVQb3BvdmVyQ29uZiIsInRyeVRvQ2xvc2VQb3B1cCIsInNhdmVDb21tYW5kIiwib1BsdWdpbiIsIlJlYWRtZSIsIkNvbmZpZyIsIlBvcHVwc0Fza1ZpZXdNb2RlbCIsIkJyYW5kaW5nQWRtaW5TZXR0aW5ncyIsImxvYWRpbmdEZXNjIiwiZmF2aWNvblVybCIsImxvZ2luTG9nbyIsImxvZ2luQmFja2dyb3VuZCIsInVzZXJMb2dvIiwidXNlckxvZ29NZXNzYWdlIiwidXNlcklmcmFtZU1lc3NhZ2UiLCJ1c2VyTG9nb1RpdGxlIiwibG9naW5EZXNjcmlwdGlvbiIsImxvZ2luQ3NzIiwidXNlckNzcyIsIndlbGNvbWVQYWdlVXJsIiwid2VsY29tZVBhZ2VEaXNwbGF5Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0Qjs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLDRCQUE0QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RCxnQkFBZ0I7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkJBQTJCLHlCQUF5QjtBQUNwRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7Ozs7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LGVBQVAsQ0FBdUI4bkMsRUFBdkIsRUFBMkI7QUFDMUIsZ0NBQXNCdnlDLHlEQUFJLENBQUNqTSxLQUFEO0FBREEsU0FBM0I7QUFHQSxPQUpEOztBQU1BLFdBQUksQ0FBQzJvRCxVQUFMLENBQWdCL3JELFNBQWhCLENBQTBCLFVBQUNvRCxLQUFELEVBQVc7QUFDcENvMUMseUVBQU0sQ0FBQzErQixlQUFQLENBQXVCK25DLEVBQXZCLEVBQTJCO0FBQzFCLHdCQUFjeHlDLHlEQUFJLENBQUNqTSxLQUFEO0FBRFEsU0FBM0I7QUFHQSxPQUpEO0FBS0EsS0F0QkQsRUFzQkcxRixtREFBTSxDQUFDaTNDLFFBdEJWO0FBdUJBLEciLCJmaWxlIjoianMvYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcInJhaW5sb29wL3YvMC4wLjAvc3RhdGljL2pzL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTQwKTtcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogMCAqL1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlVHlwZSA9IHtcblx0J1Vua25vd24nOiAndW5rbm93bicsXG5cdCdUZXh0JzogJ3RleHQnLFxuXHQnSHRtbCc6ICdodG1sJyxcblx0J0NvZGUnOiAnY29kZScsXG5cdCdFbWwnOiAnZW1sJyxcblx0J1dvcmRUZXh0JzogJ3dvcmQtdGV4dCcsXG5cdCdQZGYnOiAncGRmJyxcblx0J0ltYWdlJzogJ2ltYWdlJyxcblx0J0F1ZGlvJzogJ2F1ZGlvJyxcblx0J1ZpZGVvJzogJ3ZpZGVvJyxcblx0J1NoZWV0JzogJ3NoZWV0Jyxcblx0J1ByZXNlbnRhdGlvbic6ICdwcmVzZW50YXRpb24nLFxuXHQnQ2VydGlmaWNhdGUnOiAnY2VydGlmaWNhdGUnLFxuXHQnQ2VydGlmaWNhdGVCaW4nOiAnY2VydGlmaWNhdGUtYmluJyxcblx0J0FyY2hpdmUnOiAnYXJjaGl2ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFN0b3JhZ2VSZXN1bHRUeXBlID0ge1xuXHQnU3VjY2Vzcyc6ICdzdWNjZXNzJyxcblx0J0Fib3J0JzogJ2Fib3J0Jyxcblx0J0Vycm9yJzogJ2Vycm9yJyxcblx0J1VubG9hZCc6ICd1bmxvYWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2N1c2VkID0ge1xuXHQnTm9uZSc6ICdub25lJyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlID0ge1xuXHQnRW1wdHknOiAxMCxcblx0J0xvZ2luJzogMjAsXG5cdCdBdXRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlVHlwZSA9IHtcblx0J1dlYm1haWwnOiAwLFxuXHQnQWRtaW4nOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDYXBhID0ge1xuXHQnVHdvRmFjdG9yJzogJ1RXT19GQUNUT1InLFxuXHQnVHdvRmFjdG9yRm9yY2UnOiAnVFdPX0ZBQ1RPUl9GT1JDRScsXG5cdCdPcGVuUEdQJzogJ09QRU5fUEdQJyxcblx0J1ByZWZldGNoJzogJ1BSRUZFVENIJyxcblx0J0dyYXZhdGFyJzogJ0dSQVZBVEFSJyxcblx0J0ZvbGRlcnMnOiAnRk9MREVSUycsXG5cdCdDb21wb3Nlcic6ICdDT01QT1NFUicsXG5cdCdDb250YWN0cyc6ICdDT05UQUNUUycsXG5cdCdSZWxvYWQnOiAnUkVMT0FEJyxcblx0J1NlYXJjaCc6ICdTRUFSQ0gnLFxuXHQnU2VhcmNoQWR2JzogJ1NFQVJDSF9BRFYnLFxuXHQnTWVzc2FnZUFjdGlvbnMnOiAnTUVTU0FHRV9BQ1RJT05TJyxcblx0J01lc3NhZ2VMaXN0QWN0aW9ucyc6ICdNRVNTQUdFTElTVF9BQ1RJT05TJyxcblx0J0F0dGFjaG1lbnRzQWN0aW9ucyc6ICdBVFRBQ0hNRU5UU19BQ1RJT05TJyxcblx0J0Rhbmdlcm91c0FjdGlvbnMnOiAnREFOR0VST1VTX0FDVElPTlMnLFxuXHQnU2V0dGluZ3MnOiAnU0VUVElOR1MnLFxuXHQnSGVscCc6ICdIRUxQJyxcblx0J1RoZW1lcyc6ICdUSEVNRVMnLFxuXHQnVXNlckJhY2tncm91bmQnOiAnVVNFUl9CQUNLR1JPVU5EJyxcblx0J1NpZXZlJzogJ1NJRVZFJyxcblx0J0ZpbHRlcnMnOiAnRklMVEVSUycsXG5cdCdBdHRhY2htZW50VGh1bWJuYWlscyc6ICdBVFRBQ0hNRU5UX1RIVU1CTkFJTFMnLFxuXHQnVGVtcGxhdGVzJzogJ1RFTVBMQVRFUycsXG5cdCdBdXRvTG9nb3V0JzogJ0FVVE9MT0dPVVQnLFxuXHQnQWRkaXRpb25hbEFjY291bnRzJzogJ0FERElUSU9OQUxfQUNDT1VOVFMnLFxuXHQnSWRlbnRpdGllcyc6ICdJREVOVElUSUVTJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgS2V5U3RhdGUgPSB7XG5cdCdBbGwnOiAnYWxsJyxcblx0J05vbmUnOiAnbm9uZScsXG5cdCdDb250YWN0TGlzdCc6ICdjb250YWN0LWxpc3QnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0NvbXBvc2UnOiAnY29tcG9zZScsXG5cdCdTZXR0aW5ncyc6ICdzZXR0aW5ncycsXG5cdCdNZW51JzogJ21lbnUnLFxuXHQnUG9wdXBDb21wb3NlT3BlblBHUCc6ICdjb21wb3NlLW9wZW4tcGdwJyxcblx0J1BvcHVwTWVzc2FnZU9wZW5QR1AnOiAnbWVzc2FnZS1vcGVuLXBncCcsXG5cdCdQb3B1cFZpZXdPcGVuUEdQJzogJ3ZpZXctb3Blbi1wZ3AnLFxuXHQnUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAnOiAncG9wdXAta2V5Ym9hcmQtc2hvcnRjdXRzLWhlbHAnLFxuXHQnUG9wdXBBc2snOiAncG9wdXAtYXNrJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRm9sZGVyVHlwZSA9IHtcblx0J0luYm94JzogMTAsXG5cdCdTZW50SXRlbXMnOiAxMSxcblx0J0RyYWZ0JzogMTIsXG5cdCdUcmFzaCc6IDEzLFxuXHQnU3BhbSc6IDE0LFxuXHQnQXJjaGl2ZSc6IDE1LFxuXHQnTm90U3BhbSc6IDgwLFxuXHQnVXNlcic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGb2xkZXJUeXBlID0ge1xuXHQnVVNFUic6IDAsXG5cdCdJTkJPWCc6IDEsXG5cdCdTRU5UJzogMixcblx0J0RSQUZUUyc6IDMsXG5cdCdKVU5LJzogNCxcblx0J1RSQVNIJzogNSxcblx0J0lNUE9SVEFOVCc6IDEwLFxuXHQnRkxBR0dFRCc6IDExLFxuXHQnQUxMJzogMTJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nID0ge1xuXHQnRGVmYXVsdE9mZic6ICdkZWZhdWx0b2ZmJyxcblx0J0RlZmF1bHRPbic6ICdkZWZhdWx0b24nLFxuXHQnVW51c2VkJzogJ3VudXNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZSA9IHtcblx0J0RlZmF1bHRPZmYnOiAwLFxuXHQnRGVmYXVsdE9uJzogMSxcblx0J1VudXNlZCc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBvc2VUeXBlID0ge1xuXHQnRW1wdHknOiAnZW1wdHknLFxuXHQnUmVwbHknOiAncmVwbHknLFxuXHQnUmVwbHlBbGwnOiAncmVwbHlhbGwnLFxuXHQnRm9yd2FyZCc6ICdmb3J3YXJkJyxcblx0J0ZvcndhcmRBc0F0dGFjaG1lbnQnOiAnZm9yd2FyZC1hcy1hdHRhY2htZW50Jyxcblx0J0RyYWZ0JzogJ2RyYWZ0Jyxcblx0J0VkaXRBc05ldyc6ICdlZGl0YXNuZXcnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBVcGxvYWRFcnJvckNvZGUgPSB7XG5cdCdOb3JtYWwnOiAwLFxuXHQnRmlsZUlzVG9vQmlnJzogMSxcblx0J0ZpbGVQYXJ0aWFsbHlVcGxvYWRlZCc6IDIsXG5cdCdGaWxlTm9VcGxvYWRlZCc6IDMsXG5cdCdNaXNzaW5nVGVtcEZvbGRlcic6IDQsXG5cdCdGaWxlT25TYXZlaW5nRXJyb3InOiA1LFxuXHQnRmlsZVR5cGUnOiA5OCxcblx0J1Vua25vd24nOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IHtcblx0J05vbmUnOiAwLFxuXHQnU2VudCc6IDEsXG5cdCdEcmFmdCc6IDIsXG5cdCdTcGFtJzogMyxcblx0J1RyYXNoJzogNCxcblx0J0FyY2hpdmUnOiA1XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRTaWRlS2V5TmFtZSA9IHtcblx0J0ZvbGRlcnNMYXNoSGFzaCc6IDAsXG5cdCdNZXNzYWdlc0luYm94TGFzdEhhc2gnOiAxLFxuXHQnTWFpbEJveExpc3RTaXplJzogMixcblx0J0V4cGFuZGVkRm9sZGVycyc6IDMsXG5cdCdGb2xkZXJMaXN0U2l6ZSc6IDQsXG5cdCdNZXNzYWdlTGlzdFNpemUnOiA1LFxuXHQnTGFzdFJlcGx5QWN0aW9uJzogNixcblx0J0xhc3RTaWduTWUnOiA3LFxuXHQnQ29tcG9zZUxhc3RJZGVudGl0eUlEJzogOCxcblx0J01lc3NhZ2VIZWFkZXJGdWxsSW5mbyc6IDksXG5cdCdNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzJzogMTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50S2V5Q29kZSA9IHtcblx0J0JhY2tzcGFjZSc6IDgsXG5cdCdUYWInOiA5LFxuXHQnRW50ZXInOiAxMyxcblx0J0VzYyc6IDI3LFxuXHQnUGFnZVVwJzogMzMsXG5cdCdQYWdlRG93bic6IDM0LFxuXHQnTGVmdCc6IDM3LFxuXHQnUmlnaHQnOiAzOSxcblx0J1VwJzogMzgsXG5cdCdEb3duJzogNDAsXG5cdCdFbmQnOiAzNSxcblx0J0hvbWUnOiAzNixcblx0J1NwYWNlJzogMzIsXG5cdCdJbnNlcnQnOiA0NSxcblx0J0RlbGV0ZSc6IDQ2LFxuXHQnQSc6IDY1LFxuXHQnUyc6IDgzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2V0QWN0aW9uID0ge1xuXHQnU2V0U2Vlbic6IDAsXG5cdCdVbnNldFNlZW4nOiAxLFxuXHQnU2V0RmxhZyc6IDIsXG5cdCdVbnNldEZsYWcnOiAzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2VsZWN0QWN0aW9uID0ge1xuXHQnQWxsJzogMCxcblx0J05vbmUnOiAxLFxuXHQnSW52ZXJ0JzogMixcblx0J1Vuc2Vlbic6IDMsXG5cdCdTZWVuJzogNCxcblx0J0ZsYWdnZWQnOiA1LFxuXHQnVW5mbGFnZ2VkJzogNlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRGVza3RvcE5vdGlmaWNhdGlvbiA9IHtcblx0J0FsbG93ZWQnOiAwLFxuXHQnTm90QWxsb3dlZCc6IDEsXG5cdCdEZW5pZWQnOiAyLFxuXHQnTm90U3VwcG9ydGVkJzogOVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5ID0ge1xuXHQnTG93JzogNSxcblx0J05vcm1hbCc6IDMsXG5cdCdIaWdoJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRGVmYXVsdFR5cGUgPSB7XG5cdCdIdG1sJzogJ0h0bWwnLFxuXHQnUGxhaW4nOiAnUGxhaW4nLFxuXHQnSHRtbEZvcmNlZCc6ICdIdG1sRm9yY2VkJyxcblx0J1BsYWluRm9yY2VkJzogJ1BsYWluRm9yY2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyU2VjdXJlID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTU0wnOiAxLFxuXHQnVExTJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VhcmNoRGF0ZVR5cGUgPSB7XG5cdCdBbGwnOiAtMSxcblx0J0RheXMzJzogMyxcblx0J0RheXM3JzogNyxcblx0J01vbnRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNhdmVTZXR0aW5nc1N0ZXAgPSB7XG5cdCdBbmltYXRlJzogLTIsXG5cdCdJZGxlJzogLTEsXG5cdCdUcnVlUmVzdWx0JzogMSxcblx0J0ZhbHNlUmVzdWx0JzogMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTGF5b3V0ID0ge1xuXHQnTm9QcmV2aWV3JzogMCxcblx0J1NpZGVQcmV2aWV3JzogMSxcblx0J0JvdHRvbVByZXZpZXcnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25GaWVsZCA9IHtcblx0J0Zyb20nOiAnRnJvbScsXG5cdCdSZWNpcGllbnQnOiAnUmVjaXBpZW50Jyxcblx0J1N1YmplY3QnOiAnU3ViamVjdCcsXG5cdCdIZWFkZXInOiAnSGVhZGVyJyxcblx0J1NpemUnOiAnU2l6ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvblR5cGUgPSB7XG5cdCdDb250YWlucyc6ICdDb250YWlucycsXG5cdCdOb3RDb250YWlucyc6ICdOb3RDb250YWlucycsXG5cdCdFcXVhbFRvJzogJ0VxdWFsVG8nLFxuXHQnTm90RXF1YWxUbyc6ICdOb3RFcXVhbFRvJyxcblx0J1JlZ2V4JzogJ1JlZ2V4Jyxcblx0J092ZXInOiAnT3ZlcicsXG5cdCdVbmRlcic6ICdVbmRlcidcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlcnNBY3Rpb24gPSB7XG5cdCdOb25lJzogJ05vbmUnLFxuXHQnTW92ZVRvJzogJ01vdmVUbycsXG5cdCdEaXNjYXJkJzogJ0Rpc2NhcmQnLFxuXHQnVmFjYXRpb24nOiAnVmFjYXRpb24nLFxuXHQnUmVqZWN0JzogJ1JlamVjdCcsXG5cdCdGb3J3YXJkJzogJ0ZvcndhcmQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJSdWxlc1R5cGUgPSB7XG5cdCdBbGwnOiAnQWxsJyxcblx0J0FueSc6ICdBbnknXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTaWduZWRWZXJpZnlTdGF0dXMgPSB7XG5cdCdVbmtub3duUHVibGljS2V5cyc6IC00LFxuXHQnVW5rbm93blByaXZhdGVLZXknOiAtMyxcblx0J1VudmVyaWZpZWQnOiAtMixcblx0J0Vycm9yJzogLTEsXG5cdCdOb25lJzogMCxcblx0J1N1Y2Nlc3MnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDb250YWN0UHJvcGVydHlUeXBlID0ge1xuXHQnVW5rbm93bic6IDAsXG5cblx0J0Z1bGxOYW1lJzogMTAsXG5cblx0J0ZpcnN0TmFtZSc6IDE1LFxuXHQnTGFzdE5hbWUnOiAxNixcblx0J01pZGRsZU5hbWUnOiAxNixcblx0J05pY2snOiAxOCxcblxuXHQnTmFtZVByZWZpeCc6IDIwLFxuXHQnTmFtZVN1ZmZpeCc6IDIxLFxuXG5cdCdFbWFpbCc6IDMwLFxuXHQnUGhvbmUnOiAzMSxcblx0J1dlYic6IDMyLFxuXG5cdCdCaXJ0aGRheSc6IDQwLFxuXG5cdCdGYWNlYm9vayc6IDkwLFxuXHQnU2t5cGUnOiA5MSxcblx0J0dpdEh1Yic6IDkyLFxuXG5cdCdOb3RlJzogMTEwLFxuXG5cdCdDdXN0b20nOiAyNTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1hZ2ljcyA9IHtcblx0J0V2ZW50V2hpY2hNb3VzZU1pZGRsZSc6IDMsXG5cdCdpZnZpc2libGVJZGxlMTBzJzogMTAsXG5cblx0J0JpdExlbmd0aDIwNDgnOiAyMDQ4LFxuXHQnQml0TGVuZ3RoMTAyNCc6IDEwMjQsXG5cblx0J1NpemUzNTBweCc6IDM1MCxcblx0J1NpemU1MHB4JzogNTAsXG5cdCdTaXplMjBweCc6IDIwLFxuXHQnU2l6ZTFweCc6IDEsXG5cblx0J1RpbWUzMG1Jbk1pbic6IDMwLFxuXG5cdCdUaW1lNjBtJzogNjAwMDAgKiA2MCxcblx0J1RpbWUzMG0nOiA2MDAwMCAqIDMwLFxuXHQnVGltZTIwbSc6IDYwMDAwICogMjAsXG5cdCdUaW1lMTVtJzogNjAwMDAgKiAxNSxcblx0J1RpbWUxMG0nOiA2MDAwMCAqIDEwLFxuXHQnVGltZTVtJzogNjAwMDAgKiA1LFxuXHQnVGltZTNtJzogNjAwMDAgKiAzLFxuXHQnVGltZTJtJzogNjAwMDAgKiAyLFxuXHQnVGltZTFtJzogNjAwMDAsXG5cdCdUaW1lMzBzJzogMzAwMDAsXG5cdCdUaW1lMTBzJzogMTAwMDAsXG5cdCdUaW1lN3MnOiA3MDAwLFxuXHQnVGltZTVzJzogNTAwMCxcblx0J1RpbWUzcyc6IDMwMDAsXG5cdCdUaW1lMXMnOiAxMDAwLFxuXHQnVGltZTUwMG1zJzogNTAwLFxuXHQnVGltZTM1MG1zJzogMzUwLFxuXHQnVGltZTI1MG1zJzogMjUwLFxuXHQnVGltZTIwMG1zJzogMjAwLFxuXHQnVGltZTEwMG1zJzogMTAwLFxuXHQnVGltZTUwbXMnOiA1MCxcblx0J1RpbWUyMG1zJzogMjAsXG5cdCdUaW1lMTBtcyc6IDEwLFxuXHQnVGltZTFtcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBvcnRzID0ge1xuXHQnSW1hcCc6IDE0Myxcblx0J0ltYXBTc2wnOiA5OTMsXG5cdCdTbXRwJzogMjUsXG5cdCdTbXRwU3NsJzogNDY1LFxuXHQnU210cFN0YXJ0VGxzJzogNTg3XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb24gPSB7XG5cdCdJbnZhbGlkVG9rZW4nOiAxMDEsXG5cdCdBdXRoRXJyb3InOiAxMDIsXG5cdCdBY2Nlc3NFcnJvcic6IDEwMyxcblx0J0Nvbm5lY3Rpb25FcnJvcic6IDEwNCxcblx0J0NhcHRjaGFFcnJvcic6IDEwNSxcblx0J1NvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA2LFxuXHQnU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNyxcblx0J1NvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwOCxcblx0J0RvbWFpbk5vdEFsbG93ZWQnOiAxMDksXG5cdCdBY2NvdW50Tm90QWxsb3dlZCc6IDExMCxcblxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCc6IDEyMCxcblx0J0FjY291bnRUd29GYWN0b3JBdXRoRXJyb3InOiAxMjEsXG5cblx0J0NvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkJzogMTMwLFxuXHQnQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0JzogMTMxLFxuXHQnTmV3UGFzc3dvcmRTaG9ydCc6IDEzMixcblx0J05ld1Bhc3N3b3JkV2Vhayc6IDEzMyxcblx0J05ld1Bhc3N3b3JkRm9yYmlkZGVuJzogMTM0LFxuXG5cdCdDb250YWN0c1N5bmNFcnJvcic6IDE0MCxcblxuXHQnQ2FudEdldE1lc3NhZ2VMaXN0JzogMjAxLFxuXHQnQ2FudEdldE1lc3NhZ2UnOiAyMDIsXG5cdCdDYW50RGVsZXRlTWVzc2FnZSc6IDIwMyxcblx0J0NhbnRNb3ZlTWVzc2FnZSc6IDIwNCxcblx0J0NhbnRDb3B5TWVzc2FnZSc6IDIwNSxcblxuXHQnQ2FudFNhdmVNZXNzYWdlJzogMzAxLFxuXHQnQ2FudFNlbmRNZXNzYWdlJzogMzAyLFxuXHQnSW52YWxpZFJlY2lwaWVudHMnOiAzMDMsXG5cblx0J0NhbnRTYXZlRmlsdGVycyc6IDM1MSxcblx0J0NhbnRHZXRGaWx0ZXJzJzogMzUyLFxuXHQnRmlsdGVyc0FyZU5vdENvcnJlY3QnOiAzNTUsXG5cblx0J0NhbnRDcmVhdGVGb2xkZXInOiA0MDAsXG5cdCdDYW50UmVuYW1lRm9sZGVyJzogNDAxLFxuXHQnQ2FudERlbGV0ZUZvbGRlcic6IDQwMixcblx0J0NhbnRTdWJzY3JpYmVGb2xkZXInOiA0MDMsXG5cdCdDYW50VW5zdWJzY3JpYmVGb2xkZXInOiA0MDQsXG5cdCdDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXInOiA0MDUsXG5cblx0J0NhbnRTYXZlU2V0dGluZ3MnOiA1MDEsXG5cdCdDYW50U2F2ZVBsdWdpblNldHRpbmdzJzogNTAyLFxuXG5cdCdEb21haW5BbHJlYWR5RXhpc3RzJzogNjAxLFxuXG5cdCdDYW50SW5zdGFsbFBhY2thZ2UnOiA3MDEsXG5cdCdDYW50RGVsZXRlUGFja2FnZSc6IDcwMixcblx0J0ludmFsaWRQbHVnaW5QYWNrYWdlJzogNzAzLFxuXHQnVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlJzogNzA0LFxuXG5cdCdMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlJzogNzEwLFxuXHQnTGljZW5zaW5nRXhwaXJlZCc6IDcxMSxcblx0J0xpY2Vuc2luZ0Jhbm5lZCc6IDcxMixcblxuXHQnRGVtb1NlbmRNZXNzYWdlRXJyb3InOiA3NTAsXG5cdCdEZW1vQWNjb3VudEVycm9yJzogNzUxLFxuXG5cdCdBY2NvdW50QWxyZWFkeUV4aXN0cyc6IDgwMSxcblx0J0FjY291bnREb2VzTm90RXhpc3QnOiA4MDIsXG5cblx0J01haWxTZXJ2ZXJFcnJvcic6IDkwMSxcblx0J0NsaWVudFZpZXdFcnJvcic6IDkwMixcblx0J0ludmFsaWRJbnB1dEFyZ3VtZW50JzogOTAzLFxuXG5cdCdBamF4RmFsc2UnOiA5NTAsXG5cdCdBamF4QWJvcnQnOiA5NTEsXG5cdCdBamF4UGFyc2UnOiA5NTIsXG5cdCdBamF4VGltZW91dCc6IDk1MyxcblxuXHQnVW5rbm93bk5vdGlmaWNhdGlvbic6IDk5OSxcblx0J1Vua25vd25FcnJvcic6IDk5OVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgT3BlbnRpcCBmcm9tICdPcGVudGlwJztcbmltcG9ydCBQaWthZGF5IGZyb20gJ3Bpa2FkYXknO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCBrbyA9IHdpbmRvdy5rbyxcblx0JHdpbiA9ICQod2luZG93KSxcblx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciA9IChlbGVtZW50KSA9PiB7XG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy51cGRhdGVXaWR0aCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmSW5pdCA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGZWYWx1ZSgkZWwud2lkdGgoKSk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdFx0fTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsIGZJbml0KTtcblx0XHRmSW5pdCgpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkd2luLm9mZigncmVzaXplJywgZkluaXQpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZWRpdG9yID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRsZXQgZWRpdG9yID0gbnVsbDtcblxuXHRcdGNvbnN0IGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRIdG1sRWRpdG9yID0gcmVxdWlyZSgnQ29tbW9uL0h0bWxFZGl0b3InKS5kZWZhdWx0LFxuXHRcdFx0ZlVwZGF0ZUVkaXRvclZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZS5fX2VkaXRvci5zZXRIdG1sT3JQbGFpbihmVmFsdWUoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmVXBkYXRlS29WYWx1ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuX19lZGl0b3IpIHtcblx0XHRcdFx0XHRmVmFsdWUoZlZhbHVlLl9fZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmT25SZWFkeSA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yID0gZWRpdG9yO1xuXHRcdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUoKTtcblx0XHRcdH07XG5cblx0XHRpZiAoa28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgSHRtbEVkaXRvcikge1xuXHRcdFx0ZWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoZWxlbWVudCwgZlVwZGF0ZUtvVmFsdWUsIGZPblJlYWR5LCBmVXBkYXRlS29WYWx1ZSk7XG5cblx0XHRcdGZWYWx1ZS5fX2ZldGNoRWRpdG9yVmFsdWUgPSBmVXBkYXRlS29WYWx1ZTtcblxuXHRcdFx0ZlZhbHVlLnN1YnNjcmliZShmVXBkYXRlRWRpdG9yVmFsdWUpO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmpzb24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudCkudGV4dCh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNjcm9sbGVyU2hhZG93cyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW1pdCA9IDgsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29udCA9ICRlbC5maW5kKCdbZGF0YS1zY3JvbGxlci1zaGFkb3dzLWNvbnRlbnRdJylbMF0gfHwgbnVsbCxcblx0XHRcdGZGdW5jID0gXy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdCRlbFxuXHRcdFx0XHRcdC50b2dnbGVDbGFzcygnc2Nyb2xsZXItc2hhZG93LXRvcCcsIGxpbWl0IDwgY29udC5zY3JvbGxUb3ApXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctYm90dG9tJywgY29udC5zY3JvbGxUb3AgKyBsaW1pdCA8IGNvbnQuc2Nyb2xsSGVpZ2h0IC0gY29udC5jbGllbnRIZWlnaHQpO1xuXHRcdFx0fSwgMTAwKTtcblxuXHRcdGlmIChjb250KSB7XG5cdFx0XHQkKGNvbnQpLm9uKCdzY3JvbGwgcmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0JHdpbi5vbigncmVzaXplJywgZkZ1bmMpO1xuXG5cdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGNvbnQsICgpID0+IHtcblx0XHRcdFx0JChjb250KS5vZmYoKTtcblx0XHRcdFx0JHdpbi5vZmYoJ3Jlc2l6ZScsIGZGdW5jKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBpa2FkYXkgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpID0+IHtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnMudGV4dElucHV0LmluaXQoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChQaWthZGF5KSB7XG5cdFx0XHRlbGVtZW50Ll9fcGlrYWRheSA9IG5ldyBQaWthZGF5KHtcblx0XHRcdFx0ZmllbGQ6IGVsZW1lbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnZpc2libGVBbmltYXRlZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWluaXRlZCcpO1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCRlbC5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLmFkZENsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKS5zaG93KCk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0JGVsLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHRcdH0sIDEwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKS5yZW1vdmVDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudG9vbHRpcCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKTtcblxuXHRcdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRcdCdzdHlsZSc6ICdyYWlubG9vcFRpcCcsXG5cdFx0XHRcdCdlbGVtZW50JzogZWxlbWVudCxcblx0XHRcdFx0J3RpcEpvaW50JzogJGVsLmRhdGEoJ3Rvb2x0aXAtam9pbicpIHx8ICdib3R0b20nXG5cdFx0XHR9KTtcblxuXHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCcnID09PSBzVmFsdWUpIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzSTE4Tikge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdG9yID0gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKTtcblxuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblxuXHRcdFx0XHRUcmFuc2xhdG9yLnRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoc1ZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuYWN0aXZhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UgfHwgaXNNb2JpbGUpICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KGlzSTE4TiA/IHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4bihzVmFsdWUpIDogc1ZhbHVlKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwRXJyb3JUaXAgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRzdHlsZTogJ3JhaW5sb29wRXJyb3JUaXAnLFxuXHRcdFx0aGlkZU9uOiAnbW91c2VvdXQgY2xpY2snLFxuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdHRpcEpvaW50OiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ3RvcCdcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblxuXHRcdCQod2luZG93LmRvY3VtZW50KS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRmRGlzcG9zYWxUb29sdGlwSGVscGVyKGVsZW1lbnQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0dmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpLFxuXHRcdFx0b3BlblRpcHMgPSBlbGVtZW50Ll9fb3BlbnRpcDtcblxuXHRcdGlmIChvcGVuVGlwcykge1xuXHRcdFx0aWYgKCcnID09PSB2YWx1ZSkge1xuXHRcdFx0XHRvcGVuVGlwcy5oaWRlKCk7XG5cdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRpZiAoJGVsLmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmFjdGl2YXRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQoJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmIChHbG9iYWxzICYmIEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zKSB7XG5cdFx0XHRHbG9iYWxzLmRhdGEuYUJvb3RzdHJhcERyb3Bkb3ducy5wdXNoKCQoZWxlbWVudCkpO1xuXG5cdFx0XHQkKGVsZW1lbnQpLmNsaWNrKCgpID0+IHtcblx0XHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vcGVuRHJvcGRvd25UcmlnZ2VyID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0XHRpZiAoISRlbC5oYXNDbGFzcygnb3BlbicpKSB7XG5cdFx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHQkZWwuZmluZCgnLmRyb3Bkb3duLXRvZ2dsZScpLmZvY3VzKCk7XG5cblx0XHRcdHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLmRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJvcGRvd25DbG9zZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmNsb3Nlc3QoJy5kcm9wZG93bicpXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0nLCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudCkuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5wb3BvdmVyID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkucG9wb3Zlcihrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQgPSB7fTtcbmtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LmluaXQgPSBrby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dC51cGRhdGUgPSAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZVNoZWV0ICYmICd1bmRlZmluZWQnICE9PSB0eXBlb2YgZWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQpIHtcblx0XHRlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0fSBlbHNlIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnJlc2l6ZWNyb3AgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmFkZENsYXNzKCdyZXNpemVjcm9wJylcblx0XHRcdC5yZXNpemVjcm9wKHtcblx0XHRcdFx0J3dpZHRoJzogJzEwMCcsXG5cdFx0XHRcdCdoZWlnaHQnOiAnMTAwJyxcblx0XHRcdFx0J3dyYXBwZXJDU1MnOiB7XG5cdFx0XHRcdFx0J2JvcmRlci1yYWRpdXMnOiAnMTBweCdcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKSgpO1xuXHRcdCQoZWxlbWVudCkucmVzaXplY3JvcCh7XG5cdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdCdoZWlnaHQnOiAnMTAwJ1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25LZXlEb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25LZXlEb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0cmV0dXJuIGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIGV2ZW50KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlkb3duLmtvT25LZXlEb3duJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVudGVyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlwcmVzcy5rb09uRW50ZXInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAxMyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXByZXNzLmtvT25FbnRlcicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25TcGFjZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PblNwYWNlJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMzIgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PblNwYWNlJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblRhYiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5ZG93bi5rb09uVGFiJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgOSA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgISFldmVudC5zaGlmdEtleSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PblRhYicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25Fc2MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXVwLmtvT25Fc2MnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAyNyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXVwLmtvT25Fc2MnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNsaWNrT25UcnVlID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5tb2RhbCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpO1xuXG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdmYWRlJywgIUdsb2JhbHMuYk1vYmlsZURldmljZSlcblx0XHRcdC5tb2RhbCh7XG5cdFx0XHRcdCdrZXlib2FyZCc6IGZhbHNlLFxuXHRcdFx0XHQnc2hvdyc6IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKVxuXHRcdFx0fSlcblx0XHRcdC5vbignc2hvd24ua29Nb2RhbCcsIFV0aWxzLndpbmRvd1Jlc2l6ZUNhbGxiYWNrKVxuXHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHQub24oJ2NsaWNrLmtvTW9kYWwnLCAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkoZmFsc2UpO1xuXHRcdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0Lm9mZignc2hvd24ua29Nb2RhbCcpXG5cdFx0XHRcdC5maW5kKCcuY2xvc2UnKVxuXHRcdFx0XHQub2ZmKCdjbGljay5rb01vZGFsJyk7XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpLm1vZGFsKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSA/ICdzaG93JyA6ICdoaWRlJyk7XG5cblx0XHRpZiAoR2xvYmFscy4kaHRtbC5oYXNDbGFzcygncmwtYW5pbScpKSB7XG5cdFx0XHRHbG9iYWxzLiRodG1sLmFkZENsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRHbG9iYWxzLiRodG1sLnJlbW92ZUNsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vbWVudCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKFxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ21vbWVudCcpXG5cdFx0XHRcdC5kYXRhKCdtb21lbnQtdGltZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9Nb21lbnRvcicpLm1vbWVudFRvTm9kZSgkKGVsZW1lbnQpLmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pMThuSW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudHJhbnNsYXRvckluaXQgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5VcGRhdGUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0a28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5saW5rID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCdocmVmJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRpdGxlID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCd0aXRsZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50ZXh0RiA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXREb20gPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKShlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRGaXhlZFRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHR0b3AgPSB2YWx1ZXNbMV0gfHwgMDtcblxuXHRcdGxldCAkY29udGFpbmVyID0gJCh2YWx1ZXNbMF0gfHwgbnVsbCk7XG5cdFx0JGNvbnRhaW5lciA9ICRjb250YWluZXJbMF0gPyAkY29udGFpbmVyIDogbnVsbDtcblx0XHRpZiAoJGNvbnRhaW5lcikge1xuXHRcdFx0JHdpbi5yZXNpemUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvZmZzZXQgPSAkY29udGFpbmVyID8gJGNvbnRhaW5lci5vZmZzZXQoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChvZmZzZXQgJiYgb2Zmc2V0LnRvcCkge1xuXHRcdFx0XHRcdCRlbC5jc3MoJ3RvcCcsIG9mZnNldC50b3AgKyB0b3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0UmVzaXplVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdCQoZWxlbWVudCkuY3NzKHtcblx0XHRcdCdoZWlnaHQnOiB2YWx1ZXNbMV0sXG5cdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlc1sxXVxuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChvRWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHR2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cblx0XHRsZXQgdmFsdWUgPSBVdGlscy5wSW50KHZhbHVlc1sxXSksXG5cdFx0XHRzaXplID0gMCxcblx0XHRcdG9mZnNldCA9ICQob0VsZW1lbnQpLm9mZnNldCgpLnRvcDtcblxuXHRcdGlmICgwIDwgb2Zmc2V0KSB7XG5cdFx0XHRvZmZzZXQgKz0gVXRpbHMucEludCh2YWx1ZXNbMl0pO1xuXHRcdFx0c2l6ZSA9IEdsb2JhbHMuJHdpbi5oZWlnaHQoKSAtIG9mZnNldDtcblxuXHRcdFx0aWYgKHZhbHVlIDwgc2l6ZSkge1xuXHRcdFx0XHR2YWx1ZSA9IHNpemU7XG5cdFx0XHR9XG5cblx0XHRcdCQob0VsZW1lbnQpLmNzcyh7XG5cdFx0XHRcdCdoZWlnaHQnOiB2YWx1ZSxcblx0XHRcdFx0J21pbi1oZWlnaHQnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuYXBwZW5kRG9tID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHRcdC5zaG93KCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgdHJpZ2dlclpvbmUgPSAxMDAsXG5cdFx0XHRcdHNjcm9sbFNwZWVkID0gMyxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGRyb3BwYWJsZVNlbGVjdG9yID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVTZWxlY3RvciA6ICcnLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdGRpc3RhbmNlOiAyMCxcblx0XHRcdFx0XHRoYW5kbGU6ICcuZHJhZ0hhbmRsZScsXG5cdFx0XHRcdFx0Y3Vyc29yQXQ6IHsgdG9wOiAyMiwgbGVmdDogMyB9LFxuXHRcdFx0XHRcdHJlZnJlc2hQb3NpdGlvbnM6IHRydWUsXG5cdFx0XHRcdFx0c2Nyb2xsOiB0cnVlLFxuXHRcdFx0XHRcdGRyYWc6IG51bGwsXG5cdFx0XHRcdFx0c3RvcDogbnVsbCxcblx0XHRcdFx0XHRoZWxwZXI6IG51bGxcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKGRyb3BwYWJsZVNlbGVjdG9yKSB7XG5cdFx0XHRcdGNvbmYuZHJhZyA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHRcdG9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdFx0XHRib3R0b21Qb3MgPSBvZmZzZXQudG9wICsgJHRoaXMuaGVpZ2h0KCk7XG5cblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWCA+PSBvZmZzZXQubGVmdCAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICR0aGlzLndpZHRoKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VZID49IGJvdHRvbVBvcyAtIHRyaWdnZXJab25lICYmIGV2ZW50LnBhZ2VZIDw9IGJvdHRvbVBvcykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVVcCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSArIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlVXAsIDEwKSk7XG5cdFx0XHRcdFx0XHRcdFx0bW92ZVVwKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gb2Zmc2V0LnRvcCAmJiBldmVudC5wYWdlWSA8PSBvZmZzZXQudG9wICsgdHJpZ2dlclpvbmUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb3ZlRG93biA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSAtIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlRG93biwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlRG93bigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uZi5zdG9wID0gKCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCgkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcpKTtcblx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25mLmhlbHBlciA9IChldmVudCkgPT4gZlZhbHVlQWNjZXNzb3IoKShldmVudCAmJiBldmVudC50YXJnZXQgPyBrby5kYXRhRm9yKGV2ZW50LnRhcmdldCkgOiBudWxsKTtcblxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuZHJhZ2dhYmxlKGNvbmYpXG5cdFx0XHRcdC5vbignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFV0aWxzLnJlbW92ZUluRm9jdXMoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0Lm9mZignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJylcblx0XHRcdFx0XHQuZHJhZ2dhYmxlKCdkZXN0cm95Jyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wcGFibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgZlZhbHVlRnVuYyA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRcdGZBbGxWYWx1ZUZ1bmMgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0XHRmT3ZlckNhbGxiYWNrID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgOiBudWxsLFxuXHRcdFx0XHRmT3V0Q2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3V0ID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgOiBudWxsLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdHRvbGVyYW5jZTogJ3BvaW50ZXInLFxuXHRcdFx0XHRcdGhvdmVyQ2xhc3M6ICdkcm9wcGFibGVIb3ZlcicsXG5cdFx0XHRcdFx0ZHJvcDogbnVsbCxcblx0XHRcdFx0XHRvdmVyOiBudWxsLFxuXHRcdFx0XHRcdG91dDogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZlZhbHVlRnVuYykge1xuXHRcdFx0XHRjb25mLmRyb3AgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlRnVuYyhldmVudCwgdWkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChmT3ZlckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdmVyID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdFx0Zk92ZXJDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZk91dENhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdXQgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3V0Q2FsbGJhY2soZXZlbnQsIHVpKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoY29uZik7XG5cblx0XHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubmFubyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFNldHRpbmdzID0gcmVxdWlyZSgnU3RvcmFnZS9TZXR0aW5ncycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJEaXNhYmxlTmFub1Njcm9sbCAmJiAhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZU5hdGl2ZVNjcm9sbGJhcnMnKSkge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ25hbm8nKVxuXHRcdFx0XHQubmFub1Njcm9sbGVyKHtcblx0XHRcdFx0XHRpT1NOYXRpdmVTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdHByZXZlbnRQYWdlU2Nyb2xsaW5nOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNhdmVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHQkZWwuZGF0YShcblx0XHRcdCdzYXZlLXRyaWdnZXItdHlwZScsXG5cdFx0XHQkZWwuaXMoJ2lucHV0W3R5cGU9dGV4dF0saW5wdXRbdHlwZT1lbWFpbF0saW5wdXRbdHlwZT1wYXNzd29yZF0sc2VsZWN0LHRleHRhcmVhJykgPyAnaW5wdXQnIDogJ2N1c3RvbSdcblx0XHQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0JGVsXG5cdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOycgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1zcGlubmVyIGFuaW1hdGVkXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1yZW1vdmUgZXJyb3JcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLW9rIHN1Y2Nlc3NcIj48L2k+J1xuXHRcdFx0XHQpXG5cdFx0XHRcdC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXItaW5wdXQnKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSksXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodmFsdWUudG9TdHJpbmcoKSkge1xuXHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ3N1Y2Nlc3MnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0JGVsLmFkZENsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0yJzpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ2Vycm9yIHN1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lbWFpbHNUYWdzID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZBbGxCaW5kaW5ncyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRmQXV0b0NvbXBsZXRlU291cmNlID0gZkFsbEJpbmRpbmdzLmF1dG9Db21wbGV0ZVNvdXJjZSB8fCBudWxsLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzID0gWycsJywgJzsnLCAnXFxuJ10sXG5cdFx0XHRmRm9jdXNDYWxsYmFjayA9ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5mb2N1c2VkKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLmZvY3VzZWQoISF2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQkZWwuaW5wdXRvc2F1cnVzKHtcblx0XHRcdHBhcnNlT25CbHVyOiB0cnVlLFxuXHRcdFx0YWxsb3dEcmFnQW5kRHJvcDogdHJ1ZSxcblx0XHRcdGZvY3VzQ2FsbGJhY2s6IGZGb2N1c0NhbGxiYWNrLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzOiBpbnB1dERlbGltaXRlcnMsXG5cdFx0XHRhdXRvQ29tcGxldGVTb3VyY2U6IGZBdXRvQ29tcGxldGVTb3VyY2UsXG5cdFx0XHRzcGxpdEhvb2s6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB2ID0gVXRpbHMudHJpbSh2YWx1ZSk7XG5cdFx0XHRcdGlmICh2ICYmIC0xIDwgaW5wdXREZWxpbWl0ZXJzLmluZGV4T2Yodi5zdWJzdHIoLTEpKSkge1xuXHRcdFx0XHRcdHJldHVybiBFbWFpbE1vZGVsLnNwbGl0RW1haWxMaW5lKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRwYXJzZUhvb2s6IChpbnB1dCkgPT5cblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoaW5wdXQsIChpbnB1dFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoaW5wdXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzIDogaW5wdXRWYWx1ZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQoaXRlbSkgPT4gKF8uaXNPYmplY3QoaXRlbSkgPyBbaXRlbS50b0xpbmUoZmFsc2UpLCBpdGVtXSA6IFtpdGVtLCBudWxsXSlcblx0XHRcdFx0KSxcblx0XHRcdGNoYW5nZTogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdCRlbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRmVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQgJiYgZlZhbHVlLmZvY3VzZWQuc3Vic2NyaWJlKSB7XG5cdFx0XHRmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdCRlbC5pbnB1dG9zYXVydXModmFsdWUgPyAnZm9jdXMnIDogJ2JsdXInKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkb0VsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0aWYgKCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJykgIT09IHZhbHVlKSB7XG5cdFx0XHQkb0VsLnZhbCh2YWx1ZSk7XG5cdFx0XHQkb0VsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIHZhbHVlKTtcblx0XHRcdCRvRWwuaW5wdXRvc2F1cnVzKCdyZWZyZXNoJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY29tbWFuZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGpxRWxlbWVudCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb21tYW5kID0gZlZhbHVlQWNjZXNzb3IoKTtcblxuXHRcdGlmICghY29tbWFuZCB8fCAhY29tbWFuZC5pc0NvbW1hbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVmFsdWUgc2hvdWxkIGJlIGEgY29tbWFuZCcpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5lbmFibGVkKSB7XG5cdFx0XHRjb21tYW5kLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5jYW5FeGVjdXRlKSB7XG5cdFx0XHRjb25zdCBfX3JlYWxDYW5FeGVjdXRlID0gY29tbWFuZC5fX3JlYWxDYW5FeGVjdXRlO1xuXHRcdFx0aWYgKF8uaXNGdW5jdGlvbihfX3JlYWxDYW5FeGVjdXRlKSkge1xuXHRcdFx0XHRjb21tYW5kLmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBjb21tYW5kLmVuYWJsZWQoKSAmJiBfX3JlYWxDYW5FeGVjdXRlLmNhbGwodmlld01vZGVsLCB2aWV3TW9kZWwpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmICEhX19yZWFsQ2FuRXhlY3V0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0anFFbGVtZW50LmFkZENsYXNzKCdjb21tYW5kJyk7XG5cdFx0a28uYmluZGluZ0hhbmRsZXJzW2pxRWxlbWVudC5pcygnZm9ybScpID8gJ3N1Ym1pdCcgOiAnY2xpY2snXS5pbml0KFxuXHRcdFx0ZWxlbWVudCxcblx0XHRcdGZWYWx1ZUFjY2Vzc29yLFxuXHRcdFx0ZkFsbEJpbmRpbmdzQWNjZXNzb3IsXG5cdFx0XHR2aWV3TW9kZWwsXG5cdFx0XHRiaW5kaW5nQ29udGV4dFxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0bGV0IHJlc3VsdCA9IGNvbW1hbmQuZW5hYmxlZCgpO1xuXG5cdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLW5vdC1lbmFibGVkJywgIXJlc3VsdCk7XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBjb21tYW5kLmNhbkV4ZWN1dGUoKTtcblx0XHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1jYW4tbm90LWJlLWV4ZWN1dGUnLCAhcmVzdWx0KTtcblx0XHR9XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtZGlzYWJsZWQgZGlzYWJsZSBkaXNhYmxlZCcsICFyZXN1bHQpLnRvZ2dsZUNsYXNzKCduby1kaXNhYmxlZCcsICEhcmVzdWx0KTtcblxuXHRcdGlmIChqcUVsZW1lbnQuaXMoJ2lucHV0JykgfHwganFFbGVtZW50LmlzKCdidXR0b24nKSkge1xuXHRcdFx0anFFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgIXJlc3VsdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBleHRlbmRlcnNcblxua28uZXh0ZW5kZXJzLnRyaW1tZXIgPSAodGFyZ2V0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoVXRpbHMudHJpbShuZXdWYWx1ZS50b1N0cmluZygpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5wb3NJbnRlcmVyID0gKHRhcmdldCwgZGVmYXVsdFZhbCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHZhbCA9IFV0aWxzLnBJbnQobmV3VmFsdWUudG9TdHJpbmcoKSwgZGVmYXVsdFZhbCk7XG5cdFx0XHRcdGlmICgwID49IHZhbCkge1xuXHRcdFx0XHRcdHZhbCA9IGRlZmF1bHRWYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsID09PSB0YXJnZXQoKSAmJiAnJyArIHZhbCAhPT0gJycgKyBuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldCh2YWwgKyAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldCh2YWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMubGltaXRlZExpc3QgPSAodGFyZ2V0LCBsaW1pdGVkTGlzdCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBrby51bndyYXAodGFyZ2V0KSxcblx0XHRcdFx0XHRcdGxpc3QgPSBrby51bndyYXAobGltaXRlZExpc3QpO1xuXG5cdFx0XHRcdFx0aWYgKFV0aWxzLmlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgVXRpbHMuaW5BcnJheShuZXdWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoLTEgPCBVdGlscy5pbkFycmF5KGN1cnJlbnRWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGxpc3RbMF0gKyAnICcpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblxuXHRpZiAoIXJlc3VsdC52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRyZXN1bHQudmFsdWVIYXNNdXRhdGVkID0gKCkgPT4ge1xuXHRcdFx0dGFyZ2V0LnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnJldmVyc2libGUgPSAodGFyZ2V0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHRhcmdldCgpO1xuXG5cdHRhcmdldC5jb21taXQgPSAoKSA9PiB7XG5cdFx0dmFsdWUgPSB0YXJnZXQoKTtcblx0fTtcblxuXHR0YXJnZXQucmV2ZXJzZSA9ICgpID0+IHtcblx0XHR0YXJnZXQodmFsdWUpO1xuXHR9O1xuXG5cdHRhcmdldC5jb21taXRlZFZhbHVlID0gKCkgPT4gdmFsdWU7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMudG9nZ2xlU3Vic2NyaWJlID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMV0sIG9wdGlvbnNbMF0sICdiZWZvcmVDaGFuZ2UnKTtcblx0dGFyZ2V0LnN1YnNjcmliZShvcHRpb25zWzJdLCBvcHRpb25zWzBdKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcCA9IG9wdGlvbnNbMV07XG5cdGlmIChwcm9wKSB7XG5cdFx0dGFyZ2V0LnN1YnNjcmliZShcblx0XHRcdChwcmV2KSA9PiB7XG5cdFx0XHRcdGlmIChwcmV2ICYmIHByZXZbcHJvcF0pIHtcblx0XHRcdFx0XHRwcmV2W3Byb3BdKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnNbMF0sXG5cdFx0XHQnYmVmb3JlQ2hhbmdlJ1xuXHRcdCk7XG5cblx0XHR0YXJnZXQuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG5cdFx0XHRpZiAobmV4dCAmJiBuZXh0W3Byb3BdKSB7XG5cdFx0XHRcdG5leHRbcHJvcF0odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0aW9uc1swXSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmZhbHNlVGltZW91dCA9ICh0YXJnZXQsIG9wdGlvbikgPT4ge1xuXHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHR0YXJnZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQpO1xuXHRcdFx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoZmFsc2UpO1xuXHRcdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHRcdFx0fSwgcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuc3BlY2lhbFRocm90dGxlID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pO1xuXHRpZiAoMCA8IHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKSB7XG5cdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHR0YXJnZXQudmFsdWVGb3JSZWFkID0ga28ub2JzZXJ2YWJsZSghIXRhcmdldCgpKS5leHRlbmQoeyB0aHJvdHRsZTogMTAgfSk7XG5cblx0XHRyZXR1cm4ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LnZhbHVlRm9yUmVhZCxcblx0XHRcdHdyaXRlOiAoYlZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChiVmFsdWUpIHtcblx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldC52YWx1ZUZvclJlYWQoKSkge1xuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHRcdFx0XHRcdH0sIHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChiVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5pZGxlVHJpZ2dlciA9ICh0YXJnZXQpID0+IHtcblx0dGFyZ2V0LnRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBmdW5jdGlvbnNcblxua28ub2JzZXJ2YWJsZS5mbi5pZGxlVHJpZ2dlciA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5leHRlbmQoeyAnaWRsZVRyaWdnZXInOiB0cnVlIH0pO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZU5vbmUgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVFbWFpbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0dGhpcy5oYXNFcnJvcignJyAhPT0gdmFsdWUgJiYgIS9eW15AXFxzXStAW15AXFxzXSskLy50ZXN0KHZhbHVlKSk7XG5cdH0pO1xuXG5cdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZVNpbXBsZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL14uK0AuKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLmRlbGV0ZUFjY2Vzc0hlbHBlciA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMzAwMCB9KS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdkZWxldGVBY2Nlc3MnXSB9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlRnVuYyA9IGZ1bmN0aW9uKGZGdW5jKSB7XG5cdHRoaXMuaGFzRnVuY0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0aWYgKF8uaXNGdW5jdGlvbihmRnVuYykpIHtcblx0XHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHRoaXMuaGFzRnVuY0Vycm9yKCFmRnVuYyh2YWx1ZSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQga287XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBBdXRvbGlua2VyIGZyb20gJ0F1dG9saW5rZXInO1xuXG5pbXBvcnQgeyAkd2luLCAkZGl2LCAkaGNvbnQsIGRyb3Bkb3duVmlzaWJpbGl0eSwgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IENvbXBvc2VUeXBlLCBFdmVudEtleUNvZGUsIFNhdmVTZXR0aW5nc1N0ZXAsIEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgTWltZSB9IGZyb20gJ0NvbW1vbi9NaW1lJztcbmltcG9ydCB7IGphc3NsIH0gZnJvbSAnQ29tbW9uL0phc3NsJztcblxuY29uc3QgdHJpbSA9ICQudHJpbTtcbmNvbnN0IGluQXJyYXkgPSAkLmluQXJyYXk7XG5jb25zdCBpc0FycmF5ID0gXy5pc0FycmF5O1xuY29uc3QgaXNPYmplY3QgPSBfLmlzT2JqZWN0O1xuY29uc3QgaXNGdW5jID0gXy5pc0Z1bmN0aW9uO1xuY29uc3QgaXNVbmQgPSBfLmlzVW5kZWZpbmVkO1xuY29uc3QgaXNOdWxsID0gXy5pc051bGw7XG5jb25zdCBoYXMgPSBfLmhhcztcbmNvbnN0IGJpbmQgPSBfLmJpbmQ7XG5jb25zdCBub29wID0gKCkgPT4ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmNvbnN0IG5vb3BUcnVlID0gKCkgPT4gdHJ1ZTtcbmNvbnN0IG5vb3BGYWxzZSA9ICgpID0+IGZhbHNlO1xuXG5leHBvcnQgeyB0cmltLCBpbkFycmF5LCBpc0FycmF5LCBpc09iamVjdCwgaXNGdW5jLCBpc1VuZCwgaXNOdWxsLCBoYXMsIGJpbmQsIG5vb3AsIG5vb3BUcnVlLCBub29wRmFsc2UsIGphc3NsIH07XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lsZW50VHJ5Q2F0Y2goZnVuYykge1xuXHR0cnkge1xuXHRcdGZ1bmMoKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3JtYWwodmFsdWUpIHtcblx0cmV0dXJuICFpc1VuZCh2YWx1ZSkgJiYgIWlzTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRlWmVybyA9IHRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3NOdW1lcmljKHZhbHVlLCBpbmNsdWRlWmVybyA9IHRydWUpIHtcblx0cmV0dXJuICFpc05vcm1hbCh2YWx1ZSlcblx0XHQ/IGZhbHNlXG5cdFx0OiBpbmNsdWRlWmVyb1xuXHRcdD8gL15bMC05XSokLy50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpXG5cdFx0OiAvXlsxLTldK1swLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBkZWZhdWx0VmFsdXIgPSAwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEludCh2YWx1ZSwgZGVmYXVsdFZhbHVyID0gMCkge1xuXHRjb25zdCByZXN1bHQgPSBpc05vcm1hbCh2YWx1ZSkgJiYgJycgIT09IHZhbHVlID8gd2luZG93LnBhcnNlSW50KHZhbHVlLCAxMCkgOiBkZWZhdWx0VmFsdXI7XG5cdHJldHVybiB3aW5kb3cuaXNOYU4ocmVzdWx0KSA/IGRlZmF1bHRWYWx1ciA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcFN0cmluZyh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb3JtYWwodmFsdWUpID8gJycgKyB2YWx1ZSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEJvb2wodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xUb0FqYXgodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID8gJzEnIDogJzAnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uRW1wdHlBcnJheSh2YWx1ZXMpIHtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiAwIDwgdmFsdWVzLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSSh1cmwpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUkkodXJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5U3RyaW5nKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHR0ZW1wID0gbnVsbDtcblxuXHRjb25zdCBxdWVyaWVzID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKSxcblx0XHRwYXJhbXMgPSB7fTtcblxuXHRmb3IgKGxlbiA9IHF1ZXJpZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdHRlbXAgPSBxdWVyaWVzW2luZGV4XS5zcGxpdCgnPScpO1xuXHRcdHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQodGVtcFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbiA9IDMyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZU1kNShsZW4gPSAzMikge1xuXHRjb25zdCBsaW5lID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdFx0bGluZUxlbiA9IGxpbmUubGVuZ3RoO1xuXG5cdGxlbiA9IHBJbnQobGVuKTtcblxuXHRsZXQgcmVzdWx0ID0gJyc7XG5cdHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbGVuKSB7XG5cdFx0cmVzdWx0ICs9IGxpbmUuc3Vic3RyKHdpbmRvdy5NYXRoLnJvdW5kKHdpbmRvdy5NYXRoLnJhbmRvbSgpICogbGluZUxlbiksIDEpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUh0bWwodGV4dCkge1xuXHRyZXR1cm4gaXNOb3JtYWwodGV4dCkgPyBfLmVzY2FwZSh0ZXh0LnRvU3RyaW5nKCkpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMTAwXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQbGFpblRleHQodGV4dCwgbGVuID0gMTAwKSB7XG5cdGxldCBwcmVmaXggPSAnJyxcblx0XHRzdWJUZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gdGV4dCxcblx0XHRzcGFjZVBvcyA9IDAsXG5cdFx0bmV3TGluZVBvcyA9IDA7XG5cblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPiBsZW4pIHtcblx0XHRzdWJUZXh0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBsZW4pO1xuXHRcdHNwYWNlUG9zID0gc3ViVGV4dC5sYXN0SW5kZXhPZignICcpO1xuXHRcdG5ld0xpbmVQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCdcXG4nKTtcblxuXHRcdGlmICgtMSAhPT0gbmV3TGluZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBuZXdMaW5lUG9zO1xuXHRcdH1cblxuXHRcdGlmICgtMSA9PT0gc3BhY2VQb3MpIHtcblx0XHRcdHNwYWNlUG9zID0gbGVuO1xuXHRcdH1cblxuXHRcdHByZWZpeCArPSBzdWJUZXh0LnN1YnN0cmluZygwLCBzcGFjZVBvcykgKyAnXFxuJztcblx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKHNwYWNlUG9zICsgMSk7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgcmVzdWx0O1xufVxuXG5jb25zdCB0aW1lT3V0QWN0aW9uID0gKGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aW1lT3V0cyA9IHt9O1xuXHRyZXR1cm4gKGFjdGlvbiwgZkZ1bmN0aW9uLCB0aW1lT3V0KSA9PiB7XG5cdFx0dGltZU91dHNbYWN0aW9uXSA9IGlzVW5kKHRpbWVPdXRzW2FjdGlvbl0pID8gMCA6IHRpbWVPdXRzW2FjdGlvbl07XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aW1lT3V0c1thY3Rpb25dKTtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gd2luZG93LnNldFRpbWVvdXQoZkZ1bmN0aW9uLCB0aW1lT3V0KTtcblx0fTtcbn0pKCk7XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb25TZWNvbmQgPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHRpZiAoIXRpbWVPdXRzW2FjdGlvbl0pIHtcblx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZGdW5jdGlvbigpO1xuXHRcdFx0XHR0aW1lT3V0c1thY3Rpb25dID0gMDtcblx0XHRcdH0sIHRpbWVPdXQpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbmV4cG9ydCB7IHRpbWVPdXRBY3Rpb24sIHRpbWVPdXRBY3Rpb25TZWNvbmQgfTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gbVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlTW9kdWxlKG0pIHtcblx0cmV0dXJuIChtICYmIG0uZGVmYXVsdCA/IG0uZGVmYXVsdCA6IG0pIHx8ICcnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5Gb2N1cygpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdGlmIChpc1VuZCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSkpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGUgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhcblx0XHRcdFx0XHQnaW5wdXQsdGV4dGFyZWEsaWZyYW1lLC5ja2VfZWRpdGFibGUnXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhIXdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUluRm9jdXMoZm9yY2UpIHtcblx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFjdGl2ZUVsID0gJCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cdFx0XHRpZiAoYWN0aXZlRWwgJiYgYWN0aXZlRWwuaXMoJ2lucHV0LHRleHRhcmVhJykpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JjZSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5nZXMpIHtcblx0XHRcdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24gJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuXHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbHlTdWJqZWN0QWRkKHByZWZpeCwgc3ViamVjdCkge1xuXHRwcmVmaXggPSB0cmltKHByZWZpeC50b1VwcGVyQ2FzZSgpKTtcblx0c3ViamVjdCA9IHRyaW0oc3ViamVjdC5yZXBsYWNlKC9bXFxzXSsvZywgJyAnKSk7XG5cblx0bGV0IGRyb3AgPSBmYWxzZSxcblx0XHRyZSA9ICdSRScgPT09IHByZWZpeCxcblx0XHRmd2QgPSAnRldEJyA9PT0gcHJlZml4O1xuXG5cdGNvbnN0IHBhcnRzID0gW10sXG5cdFx0cHJlZml4SXNSZSA9ICFmd2Q7XG5cblx0aWYgKCcnICE9PSBzdWJqZWN0KSB7XG5cdFx0Xy5lYWNoKHN1YmplY3Quc3BsaXQoJzonKSwgKHBhcnQpID0+IHtcblx0XHRcdGNvbnN0IHRyaW1tZWRQYXJ0ID0gdHJpbShwYXJ0KTtcblx0XHRcdGlmICghZHJvcCAmJiAoL14oUkV8RldEKSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSB8fCAvXihSRXxGV0QpW1soXVtcXGRdK1tcXF0pXSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSkpIHtcblx0XHRcdFx0aWYgKCFyZSkge1xuXHRcdFx0XHRcdHJlID0gISEvXlJFL2kudGVzdCh0cmltbWVkUGFydCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWZ3ZCkge1xuXHRcdFx0XHRcdGZ3ZCA9ICEhL15GV0QvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydHMucHVzaChwYXJ0KTtcblx0XHRcdFx0ZHJvcCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJlZml4SXNSZSkge1xuXHRcdHJlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0ZndkID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJpbSgocHJlZml4SXNSZSA/ICdSZTogJyA6ICdGd2Q6ICcpICsgKHJlID8gJ1JlOiAnIDogJycpICsgKGZ3ZCA/ICdGd2Q6ICcgOiAnJykgKyB0cmltKHBhcnRzLmpvaW4oJzonKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZE51bWJlcihudW0sIGRlYykge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobnVtICogd2luZG93Lk1hdGgucG93KDEwLCBkZWMpKSAvIHdpbmRvdy5NYXRoLnBvdygxMCwgZGVjKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZUluQnl0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseVNpemUoc2l6ZUluQnl0ZXMpIHtcblx0c2l6ZUluQnl0ZXMgPSBwSW50KHNpemVJbkJ5dGVzKTtcblxuXHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlIDEwNzM3NDE4MjQgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDczNzQxODI0LCAxKSArICdHQic7XG5cdFx0Y2FzZSAxMDQ4NTc2IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTA0ODU3NiwgMSkgKyAnTUInO1xuXHRcdGNhc2UgMTAyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwMjQsIDApICsgJ0tCJztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gc2l6ZUluQnl0ZXMgKyAnQic7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZyhkZXNjKSB7XG5cdGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpIHtcblx0XHR3aW5kb3cuY29uc29sZS5sb2coZGVzYyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gez99IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEBwYXJhbSB7bnVtYmVyPX0gZGVsYXkgPSAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bihvYmplY3QsIG1ldGhvZE5hbWUsIHBhcmFtcywgZGVsYXkgPSAwKSB7XG5cdGlmIChvYmplY3QgJiYgb2JqZWN0W21ldGhvZE5hbWVdKSB7XG5cdFx0ZGVsYXkgPSBwSW50KGRlbGF5KTtcblx0XHRwYXJhbXMgPSBpc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbXTtcblxuXHRcdGlmICgwID49IGRlbGF5KSB7XG5cdFx0XHRvYmplY3RbbWV0aG9kTmFtZV0oLi4ucGFyYW1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdFx0fSwgZGVsYXkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxDdHJsQUN0cmxTKGV2ZW50KSB7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuXHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG5cdFx0aWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLlMpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIGlmIChrZXkgPT09IEV2ZW50S2V5Q29kZS5BKSB7XG5cdFx0XHRjb25zdCBzZW5kZXIgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VuZGVyICYmXG5cdFx0XHRcdCgndHJ1ZScgPT09ICcnICsgc2VuZGVyLmNvbnRlbnRFZGl0YWJsZSB8fCAoc2VuZGVyLnRhZ05hbWUgJiYgc2VuZGVyLnRhZ05hbWUubWF0Y2goL0lOUFVUfFRFWFRBUkVBL2kpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNsZWFyKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhPYmplY3R8bnVsbHx1bmRlZmluZWQpfSBjb250ZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExlZ2FjeShjb250ZXh0LCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdGxldCBmUmVzdWx0ID0gbnVsbDtcblx0Y29uc3QgZk5vbkVtcHR5ID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoZlJlc3VsdCAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUgJiYgZlJlc3VsdC5jYW5FeGVjdXRlKCkpIHtcblx0XHRcdGZFeGVjdXRlLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0ZlJlc3VsdCA9IGZFeGVjdXRlID8gZk5vbkVtcHR5IDogbm9vcDtcblx0ZlJlc3VsdC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0ZlJlc3VsdC5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdGlmIChpc0Z1bmMoZkNhbkV4ZWN1dGUpKSB7XG5cdFx0ZlJlc3VsdC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gZlJlc3VsdCAmJiBmUmVzdWx0LmVuYWJsZWQoKSAmJiBmQ2FuRXhlY3V0ZS5jYWxsKGNvbnRleHQpKTtcblx0fSBlbHNlIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmICEhZkNhbkV4ZWN1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGZSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRoZW1lTmFtZSA9IF8ubWVtb2l6ZSgodGhlbWUpID0+IHtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHR9XG5cblx0cmV0dXJuIHRyaW0oXG5cdFx0dGhlbWVcblx0XHRcdC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJylcblx0XHRcdC5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKVxuXHRcdFx0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpXG5cdCk7XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlTmFtZShuYW1lKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1tcIl0vZywgJ1xcXFxcIicpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWNyb3RpbWUoKSB7XG5cdHJldHVybiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcblx0cmV0dXJuIHdpbmRvdy5NYXRoLnJvdW5kKG1pY3JvdGltZSgpIC8gMTAwMCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNFbmcgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgaXNFbmcgPSBmYWxzZSkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKFxuXHRcdCdMQU5HU19OQU1FUycgKyAodHJ1ZSA9PT0gaXNFbmcgPyAnX0VOJyA6ICcnKSArICcvTEFOR18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICdfJyksXG5cdFx0bnVsbCxcblx0XHRsYW5ndWFnZVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVQbGFjZSgpIHtcblx0cmV0dXJuICQoXG5cdFx0JzxkaXYgY2xhc3M9XCJkcmFnZ2FibGVQbGFjZVwiPicgK1xuXHRcdFx0JzxzcGFuIGNsYXNzPVwidGV4dFwiPjwvc3Bhbj4mbmJzcDsnICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tY29weSBpY29uLXdoaXRlIHZpc2libGUtb24tY3RybFwiPjwvaT4nICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tbWFpbCBpY29uLXdoaXRlIGhpZGRlbi1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzwvZGl2Pidcblx0KS5hcHBlbmRUbygnI3JsLWhpZGRlbicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkb21PcHRpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcihkb21JdGVtLCBpdGVtKSB7XG5cdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmRpc2FibGVkKSAmJiBkb21JdGVtKSB7XG5cdFx0JChkb21JdGVtKVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBpdGVtLmRpc2FibGVkKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJxU3dpdGNoZXIoYm9keSkge1xuXHRib2R5LmZpbmQoJ2Jsb2NrcXVvdGUucmwtYnEtc3dpdGNoZXInKS5yZW1vdmVDbGFzcygncmwtYnEtc3dpdGNoZXIgaGlkZGVuLWJxJyk7XG5cdGJvZHlcblx0XHQuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHQub2ZmKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5yZW1vdmUoKTtcblx0Ym9keS5maW5kKCdbZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXJdJykucmVtb3ZlQXR0cignZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXInKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbWVzc2FnZURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHRtbFxuICogQHBhcmFtIHtib29sZWFufSBwcmludFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aWV3TWVzc2FnZShcblx0eyB0aXRsZSwgc3ViamVjdCwgZGF0ZSwgZnJvbUNyZWRzLCB0b0NyZWRzLCB0b0xhYmVsLCBjY0NsYXNzLCBjY0NyZWRzLCBjY0xhYmVsIH0sXG5cdGJvZHksXG5cdGlzSHRtbCxcblx0cHJpbnRcbikge1xuXHRjb25zdCB3aW4gPSB3aW5kb3cub3BlbignJyksXG5cdFx0ZG9jID0gd2luLmRvY3VtZW50LFxuXHRcdGJvZHlDbG9uZSA9IGJvZHkuY2xvbmUoKSxcblx0XHRib2R5Q2xhc3MgPSBpc0h0bWwgPyAnaHRtbCcgOiAncGxhaW4nO1xuXG5cdGNsZWFyQnFTd2l0Y2hlcihib2R5Q2xvbmUpO1xuXG5cdGNvbnN0IGh0bWwgPSBib2R5Q2xvbmUgPyBib2R5Q2xvbmUuaHRtbCgpIDogJyc7XG5cblx0ZG9jLndyaXRlKFxuXHRcdGRlTW9kdWxlKHJlcXVpcmUoJ0h0bWwvUHJldmlld01lc3NhZ2UuaHRtbCcpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVuY29kZUh0bWwodGl0bGUpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7c3ViamVjdH19JywgZW5jb2RlSHRtbChzdWJqZWN0KSlcblx0XHRcdC5yZXBsYWNlKCd7e2RhdGV9fScsIGVuY29kZUh0bWwoZGF0ZSkpXG5cdFx0XHQucmVwbGFjZSgne3tmcm9tQ3JlZHN9fScsIGVuY29kZUh0bWwoZnJvbUNyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvQ3JlZHN9fScsIGVuY29kZUh0bWwodG9DcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3t0b0xhYmVsfX0nLCBlbmNvZGVIdG1sKHRvTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDbGFzc319JywgZW5jb2RlSHRtbChjY0NsYXNzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjQ3JlZHN9fScsIGVuY29kZUh0bWwoY2NDcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3tjY0xhYmVsfX0nLCBlbmNvZGVIdG1sKGNjTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Ym9keUNsYXNzfX0nLCBib2R5Q2xhc3MpXG5cdFx0XHQucmVwbGFjZSgne3todG1sfX0nLCBodG1sKVxuXHQpO1xuXG5cdGRvYy5jbG9zZSgpO1xuXG5cdGlmIChwcmludCkge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbi5wcmludCgpLCAxMDApO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKiBAcGFyYW0gez99IGtvVHJpZ2dlclxuICogQHBhcmFtIHs/fSBjb250ZXh0ID0gbnVsbFxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lciA9IDEwMDBcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKGZDYWxsYmFjaywga29UcmlnZ2VyLCBjb250ZXh0ID0gbnVsbCwgdGltZXIgPSAxMDAwKSB7XG5cdHRpbWVyID0gcEludCh0aW1lcik7XG5cdHJldHVybiAodHlwZSwgZGF0YSwgY2FjaGVkLCByZXF1ZXN0QWN0aW9uLCByZXF1ZXN0UGFyYW1ldGVycykgPT4ge1xuXHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIGRhdGEgJiYgZGF0YS5SZXN1bHQgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2suY2FsbChjb250ZXh0LCB0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRrb1RyaWdnZXIuY2FsbChjb250ZXh0LCBTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdH0sIHRpbWVyKTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0ga29UcmlnZ2VyXG4gKiBAcGFyYW0ge21peGVkfSBjb250ZXh0XG4gKiBAcmV0dXJucyB7bWl4ZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbihrb1RyaWdnZXIsIGNvbnRleHQpIHtcblx0cmV0dXJuIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKG51bGwsIGtvVHJpZ2dlciwgY29udGV4dCwgMTAwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlbW90ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gZlRyaWdnZXJGdW5jdGlvblxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24ocmVtb3RlLCBzZXR0aW5nTmFtZSwgdHlwZSwgZlRyaWdnZXJGdW5jdGlvbikge1xuXHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHJlbW90ZSkge1xuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID8gJzEnIDogJzAnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHBJbnQodmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0cmltJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHRyaW0odmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHZhbHVlID0gcFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFbc2V0dGluZ05hbWVdID0gdmFsdWU7XG5cblx0XHRcdGlmIChyZW1vdGUuc2F2ZUFkbWluQ29uZmlnKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlQWRtaW5Db25maWcoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH0gZWxzZSBpZiAocmVtb3RlLnNhdmVTZXR0aW5ncykge1xuXHRcdFx0XHRyZW1vdGUuc2F2ZVNldHRpbmdzKGZUcmlnZ2VyRnVuY3Rpb24gfHwgbnVsbCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVtYWlsQW5kTGlua3MoaHRtbCkge1xuXHRyZXR1cm4gQXV0b2xpbmtlclxuXHRcdD8gQXV0b2xpbmtlci5saW5rKGh0bWwsIHtcblx0XHRcdFx0bmV3V2luZG93OiB0cnVlLFxuXHRcdFx0XHRzdHJpcFByZWZpeDogZmFsc2UsXG5cdFx0XHRcdHVybHM6IHRydWUsXG5cdFx0XHRcdGVtYWlsOiB0cnVlLFxuXHRcdFx0XHRtZW50aW9uOiBmYWxzZSxcblx0XHRcdFx0cGhvbmU6IGZhbHNlLFxuXHRcdFx0XHRoYXNodGFnOiBmYWxzZSxcblx0XHRcdFx0cmVwbGFjZUZuOiBmdW5jdGlvbihtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiAhKG1hdGNoICYmICd1cmwnID09PSBtYXRjaC5nZXRUeXBlKCkgJiYgbWF0Y2gubWF0Y2hlZFRleHQgJiYgMCAhPT0gbWF0Y2gubWF0Y2hlZFRleHQuaW5kZXhPZignaHR0cCcpKTtcblx0XHRcdFx0fVxuXHRcdCAgfSlcblx0XHQ6IGh0bWw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sVG9QbGFpbihodG1sKSB7XG5cdGxldCBwb3MgPSAwLFxuXHRcdGxpbWl0ID0gMCxcblx0XHRpUDEgPSAwLFxuXHRcdGlQMiA9IDAsXG5cdFx0aVAzID0gMCxcblx0XHR0ZXh0ID0gJyc7XG5cblx0Y29uc3QgY29udmVydEJsb2NrcXVvdGUgPSAoYmxvY2txdW90ZVRleHQpID0+IHtcblx0XHRibG9ja3F1b3RlVGV4dCA9ICc+ICcgKyB0cmltKGJsb2NrcXVvdGVUZXh0KS5yZXBsYWNlKC9cXG4vZ20sICdcXG4+ICcpO1xuXHRcdHJldHVybiBibG9ja3F1b3RlVGV4dC5yZXBsYWNlKC8oXnxcXG4pKFs+IF0rKS9nbSwgKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDIgPCBhcmdzLmxlbmd0aCA/IGFyZ3NbMV0gKyB0cmltKGFyZ3NbMl0ucmVwbGFjZSgvW1xcc10vZywgJycpKSArICcgJyA6ICcnXG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0RGl2cyA9ICguLi5hcmdzKSA9PiB7XG5cdFx0aWYgKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRsZXQgZGl2VGV4dCA9IHRyaW0oYXJnc1sxXSk7XG5cdFx0XHRpZiAoMCA8IGRpdlRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdGRpdlRleHQgPSBkaXZUZXh0LnJlcGxhY2UoLzxkaXZbXj5dKj4oW1xcc1xcU1xcclxcbl0qKTxcXC9kaXY+L2dpbSwgY29udmVydERpdnMpO1xuXHRcdFx0XHRkaXZUZXh0ID0gJ1xcbicgKyB0cmltKGRpdlRleHQpICsgJ1xcbic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXZUZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0UHJlID0gKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDEgPCBhcmdzLmxlbmd0aFxuXHRcdFx0XHQ/IGFyZ3NbMV1cblx0XHRcdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xcbl0vZ20sICc8YnIgLz4nKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1tcXHJdL2dtLCAnJylcblx0XHRcdFx0OiAnJyxcblx0XHRmaXhBdHRpYnV0ZVZhbHVlID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/ICcnICsgYXJnc1sxXSArIF8uZXNjYXBlKGFyZ3NbMl0pIDogJycpLFxuXHRcdGNvbnZlcnRMaW5rcyA9ICguLi5hcmdzKSA9PiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGggPyB0cmltKGFyZ3NbMV0pIDogJycpO1xuXG5cdHRleHQgPSBodG1sXG5cdFx0LnJlcGxhY2UoLzxwW14+XSo+PFxcL3A+L2dpLCAnJylcblx0XHQucmVwbGFjZSgvPHByZVtePl0qPihbXFxzXFxTXFxyXFxuXFx0XSopPFxcL3ByZT4vZ2ltLCBjb252ZXJ0UHJlKVxuXHRcdC5yZXBsYWNlKC9bXFxzXSsvZ20sICcgJylcblx0XHQucmVwbGFjZSgvKCg/OmhyZWZ8ZGF0YSlcXHM/PVxccz8pKFwiW15cIl0rP1wifCdbXiddKz8nKS9naW0sIGZpeEF0dGlidXRlVmFsdWUpXG5cdFx0LnJlcGxhY2UoLzxicltePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvaFtcXGRdPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9wPi9naSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLzx1bFtePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdWw+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGxpW14+XSo+L2dpbSwgJyAqICcpXG5cdFx0LnJlcGxhY2UoLzxcXC9saT4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdGQ+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3RyPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxocltePl0qPi9naW0sICdcXG5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cylcblx0XHQucmVwbGFjZSgvPGJsb2NrcXVvdGVbXj5dKj4vZ2ltLCAnXFxuX19icV9fc3RhcnRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9ibG9ja3F1b3RlPi9naW0sICdcXG5fX2JxX19lbmRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxhIFtePl0qPihbXFxzXFxTXFxyXFxuXSo/KTxcXC9hPi9naW0sIGNvbnZlcnRMaW5rcylcblx0XHQucmVwbGFjZSgvPFxcL2Rpdj4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJylcblx0XHQucmVwbGFjZSgvJnF1b3Q7L2dpLCAnXCInKVxuXHRcdC5yZXBsYWNlKC88W14+XSo+L2dtLCAnJyk7XG5cblx0dGV4dCA9ICRkaXYuaHRtbCh0ZXh0KS50ZXh0KCk7XG5cblx0dGV4dCA9IHRleHRcblx0XHQucmVwbGFjZSgvXFxuWyBcXHRdKy9nbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoL1tcXG5dezMsfS9nbSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLyZndDsvZ2ksICc+Jylcblx0XHQucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuXHRcdC5yZXBsYWNlKC8mYW1wOy9naSwgJyYnKTtcblxuXHR0ZXh0ID0gc3BsaXRQbGFpblRleHQodGV4dCk7XG5cblx0cG9zID0gMDtcblx0bGltaXQgPSA4MDA7XG5cblx0d2hpbGUgKDAgPCBsaW1pdCkge1xuXHRcdGxpbWl0IC09IDE7XG5cdFx0aVAxID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgcG9zKTtcblx0XHRpZiAoLTEgPCBpUDEpIHtcblx0XHRcdGlQMiA9IHRleHQuaW5kZXhPZignX19icV9fc3RhcnRfXycsIGlQMSArIDUpO1xuXHRcdFx0aVAzID0gdGV4dC5pbmRleE9mKCdfX2JxX19lbmRfXycsIGlQMSArIDUpO1xuXG5cdFx0XHRpZiAoKC0xID09PSBpUDIgfHwgaVAzIDwgaVAyKSAmJiBpUDEgPCBpUDMpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlQMSkgKyBjb252ZXJ0QmxvY2txdW90ZSh0ZXh0LnN1YnN0cmluZyhpUDEgKyAxMywgaVAzKSkgKyB0ZXh0LnN1YnN0cmluZyhpUDMgKyAxMSk7XG5cblx0XHRcdFx0cG9zID0gMDtcblx0XHRcdH0gZWxzZSBpZiAoLTEgPCBpUDIgJiYgaVAyIDwgaVAzKSB7XG5cdFx0XHRcdHBvcyA9IGlQMiAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX2JxX19zdGFydF9fL2dtLCAnJykucmVwbGFjZSgvX19icV9fZW5kX18vZ20sICcnKTtcblxuXHRyZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluZEVtYWlsQW5kTGlua3NJblRleHQgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYWluVG9IdG1sKHBsYWluLCBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlKSB7XG5cdHBsYWluID0gcGxhaW4udG9TdHJpbmcoKS5yZXBsYWNlKC9cXHIvZywgJycpO1xuXHRwbGFpbiA9IHBsYWluLnJlcGxhY2UoL14+Wz4gXT4rL2dtLCAoW21hdGNoXSkgPT4gKG1hdGNoID8gbWF0Y2gucmVwbGFjZSgvWyBdKy9nLCAnJykgOiBtYXRjaCkpO1xuXG5cdGxldCBiSW4gPSBmYWxzZSxcblx0XHRiRG8gPSB0cnVlLFxuXHRcdGJTdGFydCA9IHRydWUsXG5cdFx0YU5leHRUZXh0ID0gW10sXG5cdFx0c0xpbmUgPSAnJyxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGFUZXh0ID0gcGxhaW4uc3BsaXQoJ1xcbicpO1xuXG5cdGRvIHtcblx0XHRiRG8gPSBmYWxzZTtcblx0XHRhTmV4dFRleHQgPSBbXTtcblx0XHRmb3IgKGlJbmRleCA9IDA7IGlJbmRleCA8IGFUZXh0Lmxlbmd0aDsgaUluZGV4KyspIHtcblx0XHRcdHNMaW5lID0gYVRleHRbaUluZGV4XTtcblx0XHRcdGJTdGFydCA9ICc+JyA9PT0gc0xpbmUuc3Vic3RyKDAsIDEpO1xuXHRcdFx0aWYgKGJTdGFydCAmJiAhYkluKSB7XG5cdFx0XHRcdGJEbyA9IHRydWU7XG5cdFx0XHRcdGJJbiA9IHRydWU7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn5ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lLnN1YnN0cigxKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiU3RhcnQgJiYgYkluKSB7XG5cdFx0XHRcdGlmICgnJyAhPT0gc0xpbmUpIHtcblx0XHRcdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+L2Jsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYkluKSB7XG5cdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdH1cblxuXHRcdGFUZXh0ID0gYU5leHRUZXh0O1xuXHR9IHdoaWxlIChiRG8pO1xuXG5cdHBsYWluID0gYVRleHQuam9pbignXFxuJyk7XG5cblx0cGxhaW4gPSBwbGFpblxuXHRcdC8vIC5yZXBsYWNlKC9+fn5cXC9ibG9ja3F1b3Rlfn5+XFxufn5+YmxvY2txdW90ZX5+fi9nLCAnXFxuJylcblx0XHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuXHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0LnJlcGxhY2UoL35+fmJsb2NrcXVvdGV+fn5bXFxzXSovZywgJzxibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKn5+flxcL2Jsb2NrcXVvdGV+fn4vZywgJzwvYmxvY2txdW90ZT4nKVxuXHRcdC5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpO1xuXG5cdHJldHVybiBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA/IGZpbmRFbWFpbEFuZExpbmtzKHBsYWluKSA6IHBsYWluO1xufVxuXG53aW5kb3dbJ3JhaW5sb29wX1V0aWxzX2h0bWxUb1BsYWluJ10gPSBodG1sVG9QbGFpbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfcGxhaW5Ub0h0bWwnXSA9IHBsYWluVG9IdG1sOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFTeXN0ZW1cbiAqIEBwYXJhbSB7QXJyYXl9IGFMaXN0XG4gKiBAcGFyYW0ge0FycmF5PX0gYURpc2FibGVkXG4gKiBAcGFyYW0ge0FycmF5PX0gYUhlYWRlckxpbmVzXG4gKiBAcGFyYW0gez9udW1iZXI9fSBpVW5EZWVwXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkRpc2FibGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZWaXNpYmxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmUmVuYW1lQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJTeXN0ZW1cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJCdWlsZFVudmlzaWJsZVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRhU3lzdGVtLFxuXHRhTGlzdCxcblx0YURpc2FibGVkLFxuXHRhSGVhZGVyTGluZXMsXG5cdGlVbkRlZXAsXG5cdGZEaXNhYmxlQ2FsbGJhY2ssXG5cdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdGZSZW5hbWVDYWxsYmFjayxcblx0YlN5c3RlbSxcblx0YkJ1aWxkVW52aXNpYmxlXG4pIHtcblx0bGV0IC8qKlxuXHRcdCAqIEB0eXBlIHs/Rm9sZGVyTW9kZWx9XG5cdFx0ICovXG5cdFx0b0l0ZW0gPSBudWxsLFxuXHRcdGJTZXAgPSBmYWxzZSxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGlMZW4gPSAwLFxuXHRcdGFSZXN1bHQgPSBbXTtcblxuXHRjb25zdCBzRGVlcFByZWZpeCA9ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTAnO1xuXG5cdGJCdWlsZFVudmlzaWJsZSA9IGlzVW5kKGJCdWlsZFVudmlzaWJsZSkgPyBmYWxzZSA6ICEhYkJ1aWxkVW52aXNpYmxlO1xuXHRiU3lzdGVtID0gIWlzTm9ybWFsKGJTeXN0ZW0pID8gMCA8IGFTeXN0ZW0ubGVuZ3RoIDogYlN5c3RlbTtcblx0aVVuRGVlcCA9ICFpc05vcm1hbChpVW5EZWVwKSA/IDAgOiBpVW5EZWVwO1xuXHRmRGlzYWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZkRpc2FibGVDYWxsYmFjaykgPyBmRGlzYWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlZpc2libGVDYWxsYmFjayA9IGlzTm9ybWFsKGZWaXNpYmxlQ2FsbGJhY2spID8gZlZpc2libGVDYWxsYmFjayA6IG51bGw7XG5cdGZSZW5hbWVDYWxsYmFjayA9IGlzTm9ybWFsKGZSZW5hbWVDYWxsYmFjaykgPyBmUmVuYW1lQ2FsbGJhY2sgOiBudWxsO1xuXG5cdGlmICghaXNBcnJheShhRGlzYWJsZWQpKSB7XG5cdFx0YURpc2FibGVkID0gW107XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYUhlYWRlckxpbmVzKSkge1xuXHRcdGFIZWFkZXJMaW5lcyA9IFtdO1xuXHR9XG5cblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYUhlYWRlckxpbmVzLmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0aWQ6IGFIZWFkZXJMaW5lc1tpSW5kZXhdWzBdLFxuXHRcdFx0bmFtZTogYUhlYWRlckxpbmVzW2lJbmRleF1bMV0sXG5cdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFTeXN0ZW0ubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdG9JdGVtID0gYVN5c3RlbVtpSW5kZXhdO1xuXHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0bmFtZTogZlJlbmFtZUNhbGxiYWNrID8gZlJlbmFtZUNhbGxiYWNrKG9JdGVtKSA6IG9JdGVtLm5hbWUoKSxcblx0XHRcdFx0c3lzdGVtOiB0cnVlLFxuXHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHQhb0l0ZW0uc2VsZWN0YWJsZSB8fFxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJTZXAgPSB0cnVlO1xuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhTGlzdC5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhTGlzdFtpSW5kZXhdO1xuXHRcdC8vIGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKVxuXHRcdGlmIChcblx0XHRcdChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKSAmJlxuXHRcdFx0KG9JdGVtLnNlbGVjdGFibGUgfHwgb0l0ZW0uaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSlcblx0XHQpIHtcblx0XHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRcdGlmIChGb2xkZXJUeXBlLlVzZXIgPT09IG9JdGVtLnR5cGUoKSB8fCAhYlN5c3RlbSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKSB7XG5cdFx0XHRcdFx0aWYgKGJTZXAgJiYgMCA8IGFSZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICctLS0nLFxuXHRcdFx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRiU2VwID0gZmFsc2U7XG5cdFx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG5hbWU6XG5cdFx0XHRcdFx0XHRcdG5ldyB3aW5kb3cuQXJyYXkob0l0ZW0uZGVlcCArIDEgLSBpVW5EZWVwKS5qb2luKHNEZWVwUHJlZml4KSArXG5cdFx0XHRcdFx0XHRcdChmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpKSxcblx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdFx0XHQoZkRpc2FibGVDYWxsYmFjayA/IGZEaXNhYmxlQ2FsbGJhY2sob0l0ZW0pIDogZmFsc2UpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob0l0ZW0uc3ViU2NyaWJlZCgpICYmIDAgPCBvSXRlbS5zdWJGb2xkZXJzKCkubGVuZ3RoKSB7XG5cdFx0XHRhUmVzdWx0ID0gYVJlc3VsdC5jb25jYXQoXG5cdFx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRvSXRlbS5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0YURpc2FibGVkLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdGlVbkRlZXAsXG5cdFx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayxcblx0XHRcdFx0XHRmVmlzaWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZSZW5hbWVDYWxsYmFjayxcblx0XHRcdFx0XHRiU3lzdGVtLFxuXHRcdFx0XHRcdGJCdWlsZFVudmlzaWJsZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZWxlbWVudCkge1xuXHRsZXQgc2VsID0gbnVsbCxcblx0XHRyYW5nZSA9IG51bGw7XG5cblx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuXHRcdHNlbC5hZGRSYW5nZShyYW5nZSk7XG5cdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0cmFuZ2UubW92ZVRvRWxlbWVudFRleHQoZWxlbWVudCk7XG5cdFx0cmFuZ2Uuc2VsZWN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRkcm9wZG93blZpc2liaWxpdHkoISFfLmZpbmQoR2xvYmFsc0RhdGEuYUJvb3RzdHJhcERyb3Bkb3ducywgKGl0ZW0pID0+IGl0ZW0uaGFzQ2xhc3MoJ29wZW4nKSkpO1xufSwgNTApO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlbGF5ID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZShkZWxheSA9IGZhbHNlKSB7XG5cdGNvbnN0IGZGdW5jID0gKCkgPT4ge1xuXHRcdCQoJy5jaGVja0F1dG9jb21wbGV0ZScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHR9O1xuXG5cdGlmIChkZWxheSkge1xuXHRcdF8uZGVsYXkoZkZ1bmMsIDEwMCk7XG5cdH0gZWxzZSB7XG5cdFx0ZkZ1bmMoKTtcblx0fVxufVxuXG5jb25zdCBjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnKGNvbmZpZ3VyYXRpb24pIHtcblx0aWYgKCFjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0pIHtcblx0XHRjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0gPSAkKFxuXHRcdFx0J3NjcmlwdFt0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXVtkYXRhLWNvbmZpZ3VyYXRpb249XCInICsgY29uZmlndXJhdGlvbiArICdcIl0nXG5cdFx0KTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dLnRleHQoKSk7XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHttaXhlZH0gbVByb3BPclZhbHVlXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZU9uZShwcm9wT3JWYWx1ZSwgdmFsdWUpIHtcblx0Y29uc3QgZGlzcG9zYWJsZSA9IHZhbHVlIHx8IHByb3BPclZhbHVlO1xuXHRpZiAoZGlzcG9zYWJsZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZGlzcG9zYWJsZS5kaXNwb3NlKSB7XG5cdFx0ZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT2JqZWN0KG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0LmRpc3Bvc2FibGVzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdC5kaXNwb3NhYmxlcywgZGlzcG9zZU9uZSk7XG5cdFx0fVxuXG5cdFx0a28udXRpbHMub2JqZWN0Rm9yRWFjaChvYmplY3QsIGRpc3Bvc2VPbmUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iamVjdE9yT2JqZWN0c1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvYmplY3RPck9iamVjdHMpIHtcblx0aWYgKG9iamVjdE9yT2JqZWN0cykge1xuXHRcdGlmIChpc0FycmF5KG9iamVjdE9yT2JqZWN0cykpIHtcblx0XHRcdF8uZWFjaChvYmplY3RPck9iamVjdHMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGl0ZW0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RPck9iamVjdHMgJiYgb2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSkge1xuXHRcdFx0b2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSAkc3R5bGVUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU3R5bGVzKCRzdHlsZVRhZywgY3NzKSB7XG5cdGlmICgkc3R5bGVUYWcgJiYgJHN0eWxlVGFnWzBdKSB7XG5cdFx0aWYgKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0ICYmICFpc1VuZCgkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0KSkge1xuXHRcdFx0JHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN0eWxlVGFnLnRleHQoY3NzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxubGV0IF9fdGhlbWVUaW1lciA9IDAsXG5cdF9fdGhlbWVBamF4ID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb249fSB0aGVtZVRyaWdnZXIgPSBub29wXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRoZW1lKHZhbHVlLCB0aGVtZVRyaWdnZXIgPSBub29wKSB7XG5cdGNvbnN0IHRoZW1lTGluayA9ICQoJyNhcHAtdGhlbWUtbGluaycpLFxuXHRcdGNsZWFyVGltZXIgPSAoKSA9PiB7XG5cdFx0XHRfX3RoZW1lVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgMTAwMCk7XG5cdFx0XHRfX3RoZW1lQWpheCA9IG51bGw7XG5cdFx0fTtcblxuXHRsZXQgdGhlbWVTdHlsZSA9ICQoJyNhcHAtdGhlbWUtc3R5bGUnKSxcblx0XHR1cmwgPSB0aGVtZUxpbmsuYXR0cignaHJlZicpO1xuXG5cdGlmICghdXJsKSB7XG5cdFx0dXJsID0gdGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnKTtcblx0fVxuXG5cdGlmICh1cmwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8tXFwvW14vXStcXC8tXFwvLywgJy8tLycgKyB2YWx1ZSArICcvLS8nKTtcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvXFwvQ3NzXFwvW14vXStcXC9Vc2VyXFwvLywgJy9Dc3MvMC9Vc2VyLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9IYXNoXFwvW14vXStcXC8vLCAnL0hhc2gvLS8nKTtcblxuXHRcdGlmICgnSnNvbi8nICE9PSB1cmwuc3Vic3RyaW5nKHVybC5sZW5ndGggLSA1LCB1cmwubGVuZ3RoKSkge1xuXHRcdFx0dXJsICs9ICdKc29uLyc7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dChfX3RoZW1lVGltZXIpO1xuXG5cdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cblx0XHRpZiAoX190aGVtZUFqYXggJiYgX190aGVtZUFqYXguYWJvcnQpIHtcblx0XHRcdF9fdGhlbWVBamF4LmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0X190aGVtZUFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nXG5cdFx0fSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGlzQXJyYXkoZGF0YSkgJiYgMiA9PT0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAodGhlbWVMaW5rICYmIHRoZW1lTGlua1swXSAmJiAoIXRoZW1lU3R5bGUgfHwgIXRoZW1lU3R5bGVbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGVtZVN0eWxlID0gJCgnPHN0eWxlIGlkPVwiYXBwLXRoZW1lLXN0eWxlXCI+PC9zdHlsZT4nKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5hZnRlcih0aGVtZVN0eWxlKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGhlbWVTdHlsZSAmJiB0aGVtZVN0eWxlWzBdKSB7XG5cdFx0XHRcdFx0XHRpZiAoYXBwZW5kU3R5bGVzKHRoZW1lU3R5bGUsIGRhdGFbMV0pKSB7XG5cdFx0XHRcdFx0XHRcdHRoZW1lU3R5bGUuYXR0cignZGF0YS1ocmVmJywgdXJsKS5hdHRyKCdkYXRhLXRoZW1lJywgZGF0YVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQudGhlbihjbGVhclRpbWVyLCBjbGVhclRpbWVyKTtcblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyKGtvQ3VycmVudFBhZ2UsIGtvUGFnZUNvdW50KSB7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSBrb0N1cnJlbnRQYWdlKCksXG5cdFx0XHRwYWdlQ291bnQgPSBrb1BhZ2VDb3VudCgpLFxuXHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRmQWRkID0gKGluZGV4LCBwdXNoID0gdHJ1ZSwgY3VzdG9tTmFtZSA9ICcnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdFx0Y3VycmVudDogaW5kZXggPT09IGN1cnJlbnRQYWdlLFxuXHRcdFx0XHRcdG5hbWU6ICcnID09PSBjdXN0b21OYW1lID8gaW5kZXgudG9TdHJpbmcoKSA6IGN1c3RvbU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRjdXN0b206ICcnICE9PSBjdXN0b21OYW1lLFxuXHRcdFx0XHRcdHRpdGxlOiAnJyA9PT0gY3VzdG9tTmFtZSA/ICcnIDogaW5kZXgudG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2YWx1ZTogaW5kZXgudG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChwdXNoKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LnVuc2hpZnQoZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRsZXQgcHJldiA9IDAsXG5cdFx0XHRuZXh0ID0gMCxcblx0XHRcdGxpbWl0ID0gMjtcblxuXHRcdGlmICgxIDwgcGFnZUNvdW50IHx8ICgwIDwgcGFnZUNvdW50ICYmIHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSkge1xuXHRcdFx0aWYgKHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50KTtcblx0XHRcdFx0cHJldiA9IHBhZ2VDb3VudDtcblx0XHRcdFx0bmV4dCA9IHBhZ2VDb3VudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgzID49IGN1cnJlbnRQYWdlIHx8IHBhZ2VDb3VudCAtIDIgPD0gY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0XHRsaW1pdCArPSAyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZkFkZChjdXJyZW50UGFnZSk7XG5cdFx0XHRcdHByZXYgPSBjdXJyZW50UGFnZTtcblx0XHRcdFx0bmV4dCA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0XHRcdHByZXYgLT0gMTtcblx0XHRcdFx0bmV4dCArPSAxO1xuXG5cdFx0XHRcdGlmICgwIDwgcHJldikge1xuXHRcdFx0XHRcdGZBZGQocHJldiwgZmFsc2UpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFnZUNvdW50ID49IG5leHQpIHtcblx0XHRcdFx0XHRmQWRkKG5leHQsIHRydWUpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoMCA+PSBwcmV2KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKDMgPT09IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKDMgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocHJldiAtIDEpIC8gMiksIGZhbHNlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgLSAyID09PSBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50IC0gMSwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VDb3VudCAtIDIgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocGFnZUNvdW50ICsgbmV4dCkgLyAyKSwgdHJ1ZSwgJy4uLicpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmaXJzdCBhbmQgbGFzdFxuXHRcdFx0aWYgKDEgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoMSwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFnZUNvdW50ID4gbmV4dCkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB7XG5cdGZpbGVOYW1lID0gdHJpbShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuXHRjb25zdCByZXN1bHQgPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuXHRyZXR1cm4gcmVzdWx0ID09PSBmaWxlTmFtZSA/ICcnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbWVDb250ZW50VHlwZShmaWxlTmFtZSkge1xuXHRsZXQgZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmICgnd2lubWFpbC5kYXQnID09PSBmaWxlTmFtZSkge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vbXMtdG5lZic7XG5cdH1cblxuXHRleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcblx0aWYgKGV4dCAmJiAwIDwgZXh0Lmxlbmd0aCAmJiAhaXNVbmQoTWltZVtleHRdKSkge1xuXHRcdHJlc3VsdCA9IE1pbWVbZXh0XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNwYXJlbnQoY29sb3IpIHtcblx0cmV0dXJuICdyZ2JhKDAsIDAsIDAsIDApJyA9PT0gY29sb3IgfHwgJ3RyYW5zcGFyZW50JyA9PT0gY29sb3I7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9ICRlbFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxIZWlnaHQoJGVsKSB7XG5cdCRlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LnNob3coKVxuXHRcdC5hcHBlbmRUbygkaGNvbnQpO1xuXHRjb25zdCByZXN1bHQgPSAkaGNvbnQuaGVpZ2h0KCk7XG5cdCRoY29udC5lbXB0eSgpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVBbmRDcm9wKHVybCwgdmFsdWUsIGZDYWxsYmFjaykge1xuXHRjb25zdCBpbWcgPSBuZXcgd2luZG93LkltYWdlKCk7XG5cdGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRsZXQgZGlmZiA9IFswLCAwXTtcblxuXHRcdGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcblx0XHRcdGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0Y2FudmFzLndpZHRoID0gdmFsdWU7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMud2lkdGggPiB0aGlzLmhlaWdodCkge1xuXHRcdFx0ZGlmZiA9IFt0aGlzLndpZHRoIC0gdGhpcy5oZWlnaHQsIDBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWZmID0gWzAsIHRoaXMuaGVpZ2h0IC0gdGhpcy53aWR0aF07XG5cdFx0fVxuXG5cdFx0Y3R4LmZpbGxTdHlsZSA9ICcjZmZmJztcblx0XHRjdHguZmlsbFJlY3QoMCwgMCwgdmFsdWUsIHZhbHVlKTtcblx0XHRjdHguZHJhd0ltYWdlKHRoaXMsIGRpZmZbMF0gLyAyLCBkaWZmWzFdIC8gMiwgdGhpcy53aWR0aCAtIGRpZmZbMF0sIHRoaXMuaGVpZ2h0IC0gZGlmZlsxXSwgMCwgMCwgdmFsdWUsIHZhbHVlKTtcblxuXHRcdGZDYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykpO1xuXHR9O1xuXG5cdGltZy5zcmMgPSB1cmw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1haWxUb1VybFxuICogQHBhcmFtIHtGdW5jdGlvbn0gUG9wdXBDb21wb3NlVmlld01vZGVsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxUb0hlbHBlcihtYWlsVG9VcmwsIFBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRpZiAoXG5cdFx0bWFpbFRvVXJsICYmXG5cdFx0J21haWx0bzonID09PVxuXHRcdFx0bWFpbFRvVXJsXG5cdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdC5zdWJzdHIoMCwgNylcblx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0KSB7XG5cdFx0aWYgKCFQb3B1cENvbXBvc2VWaWV3TW9kZWwpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdG1haWxUb1VybCA9IG1haWxUb1VybC50b1N0cmluZygpLnN1YnN0cig3KTtcblxuXHRcdGxldCB0byA9IFtdLFxuXHRcdFx0Y2MgPSBudWxsLFxuXHRcdFx0YmNjID0gbnVsbCxcblx0XHRcdHBhcmFtcyA9IHt9O1xuXG5cdFx0Y29uc3QgZW1haWwgPSBtYWlsVG9VcmwucmVwbGFjZSgvXFw/LiskLywgJycpLFxuXHRcdFx0cXVlcnkgPSBtYWlsVG9VcmwucmVwbGFjZSgvXlteP10qXFw/LywgJycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdDtcblxuXHRcdHBhcmFtcyA9IHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLnRvKSkge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChlbWFpbCArICcsJyArIHBhcmFtcy50bykpO1xuXHRcdFx0dG8gPSBfLnZhbHVlcyhcblx0XHRcdFx0dG8ucmVkdWNlKChyZXN1bHQsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlLmVtYWlsXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXJlc3VsdFt2YWx1ZS5lbWFpbF0ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdFt2YWx1ZS5lbWFpbF0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LCB7fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShlbWFpbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuY2MpKSB7XG5cdFx0XHRjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5jYykpO1xuXHRcdH1cblxuXHRcdGlmICghaXNVbmQocGFyYW1zLmJjYykpIHtcblx0XHRcdGJjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5iY2MpKTtcblx0XHR9XG5cblx0XHRyZXF1aXJlKCdLbm9pbi9Lbm9pbicpLnNob3dTY3JlZW5Qb3B1cChQb3B1cENvbXBvc2VWaWV3TW9kZWwsIFtcblx0XHRcdENvbXBvc2VUeXBlLkVtcHR5LFxuXHRcdFx0bnVsbCxcblx0XHRcdHRvLFxuXHRcdFx0Y2MsXG5cdFx0XHRiY2MsXG5cdFx0XHRpc1VuZChwYXJhbXMuc3ViamVjdCkgPyBudWxsIDogcFN0cmluZyhkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnN1YmplY3QpKSxcblx0XHRcdGlzVW5kKHBhcmFtcy5ib2R5KSA/IG51bGwgOiBwbGFpblRvSHRtbChwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuYm9keSkpKVxuXHRcdF0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tUmVhZHkoZm4pIHtcblx0JCgoKSA9PiBmbigpKTtcblx0Ly9cblx0Ly9cdGlmICgnbG9hZGluZycgIT09IHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlKVxuXHQvL1x0e1xuXHQvL1x0XHRmbigpO1xuXHQvL1x0fVxuXHQvL1x0ZWxzZVxuXHQvL1x0e1xuXHQvL1x0XHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0Ly9cdH1cbn1cblxuZXhwb3J0IGNvbnN0IHdpbmRvd1Jlc2l6ZSA9IF8uZGVib3VuY2UoKHRpbWVvdXQpID0+IHtcblx0aWYgKGlzVW5kKHRpbWVvdXQpIHx8IGlzTnVsbCh0aW1lb3V0KSkge1xuXHRcdCR3aW4ucmVzaXplKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fVxufSwgNTApO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2luZG93UmVzaXplQ2FsbGJhY2soKSB7XG5cdHdpbmRvd1Jlc2l6ZSgpO1xufVxuXG5sZXQgc3Vic3RyID0gd2luZG93LlN0cmluZy5zdWJzdHI7XG5pZiAoJ2InICE9PSAnYWInLnN1YnN0cigtMSkpIHtcblx0c3Vic3RyID0gKHN0ciwgc3RhcnQsIGxlbmd0aCkgPT4ge1xuXHRcdHN0YXJ0ID0gMCA+IHN0YXJ0ID8gc3RyLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbmd0aCk7XG5cdH07XG5cblx0d2luZG93LlN0cmluZy5zdWJzdHIgPSBzdWJzdHI7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5fOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGlzVW5kLCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBTRVRUSU5HUyA9IHdpbmRvdy5fX3JsYWhfZGF0YSgpIHx8IG51bGw7XG5TRVRUSU5HUyA9IGlzTm9ybWFsKFNFVFRJTkdTKSA/IFNFVFRJTkdTIDoge307XG5cbmxldCBBUFBfU0VUVElOR1MgPSBTRVRUSU5HUy5TeXN0ZW0gfHwgbnVsbDtcbkFQUF9TRVRUSU5HUyA9IGlzTm9ybWFsKEFQUF9TRVRUSU5HUykgPyBBUFBfU0VUVElOR1MgOiB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChTRVRUSU5HU1tuYW1lXSkgPyBudWxsIDogU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2V0KG5hbWUsIHZhbHVlKSB7XG5cdFNFVFRJTkdTW25hbWVdID0gdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwU2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gaXNVbmQoQVBQX1NFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBBUFBfU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYShuYW1lKSB7XG5cdGNvbnN0IHZhbHVlcyA9IHNldHRpbmdzR2V0KCdDYXBhJyk7XG5cdHJldHVybiBpc0FycmF5KHZhbHVlcykgJiYgaXNOb3JtYWwobmFtZSkgJiYgLTEgPCBpbkFycmF5KG5hbWUsIHZhbHVlcyk7XG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY29uc3QgJHdpbiA9ICQod2luZG93KTtcbiR3aW4uX19zaXplcyA9IFswLCAwXTtcblxuZXhwb3J0IHsgJHdpbiB9O1xuXG5leHBvcnQgY29uc3QgJGRvYyA9ICQod2luZG93LmRvY3VtZW50KTtcblxuZXhwb3J0IGNvbnN0ICRodG1sID0gJCgnaHRtbCcpO1xuXG5leHBvcnQgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cbmV4cG9ydCBjb25zdCAkZGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcblxuZXhwb3J0IGNvbnN0ICRoY29udCA9ICQoJzxkaXY+PC9kaXY+Jyk7XG4kaGNvbnRcblx0LmF0dHIoJ2FyZWEnLCAnaGlkZGVuJylcblx0LmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtNTAwMCB9KVxuXHQuYXBwZW5kVG8oJGJvZHkpO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRNaWNyb3RpbWUgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBjb21tdW5pdHkgPSBSTF9DT01NVU5JVFk7XG5cbi8qKlxuICogQHR5cGUgez99XG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wZG93blZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VLZXlib2FyZFNob3J0Y3V0cyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHNVc2VyQWdlbnQgPVxuXHQoJ25hdmlnYXRvcicgaW4gd2luZG93ICYmICd1c2VyQWdlbnQnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgfHwgJyc7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSUUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignbXNpZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkNocm9tZSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJTYWZhcmkgPSAhYkNocm9tZSAmJiAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiTW9iaWxlRGV2aWNlID1cblx0KC9hbmRyb2lkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGhvbmUvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwb2QvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwYWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2JsYWNrYmVycnkvaSkudGVzdChzVXNlckFnZW50KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJEaXNhYmxlTmFub1Njcm9sbCA9IGJNb2JpbGVEZXZpY2U7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQW5pbWF0aW9uU3VwcG9ydGVkID1cblx0IWJNb2JpbGVEZXZpY2UgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc3RyYW5zaXRpb25zJykgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc2FuaW1hdGlvbnMnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCA9ICEhd2luZG93LlhNTEh0dHBSZXF1ZXN0O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklzSHR0cHMgPVxuXHR3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmxvY2F0aW9uID8gJ2h0dHBzOicgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA6IGZhbHNlO1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcblx0J3RpdGxlJzogZmFsc2UsXG5cdCdzdHlsZXNTZXQnOiBmYWxzZSxcblx0J2N1c3RvbUNvbmZpZyc6ICcnLFxuXHQnY29udGVudHNDc3MnOiAnJyxcblx0J3Rvb2xiYXJHcm91cHMnOiBbXG5cdFx0eyBuYW1lOiAnc3BlYycgfSxcblx0XHR7IG5hbWU6ICdzdHlsZXMnIH0sXG5cdFx0eyBuYW1lOiAnYmFzaWNzdHlsZXMnLCBncm91cHM6IFsnYmFzaWNzdHlsZXMnLCAnY2xlYW51cCcsICdiaWRpJ10gfSxcblx0XHR7IG5hbWU6ICdjb2xvcnMnIH0sXG5cdFx0Yk1vYmlsZURldmljZSA/IHt9IDogeyBuYW1lOiAncGFyYWdyYXBoJywgZ3JvdXBzOiBbJ2xpc3QnLCAnaW5kZW50JywgJ2Jsb2NrcycsICdhbGlnbiddIH0sXG5cdFx0eyBuYW1lOiAnbGlua3MnIH0sXG5cdFx0eyBuYW1lOiAnaW5zZXJ0JyB9LFxuXHRcdHsgbmFtZTogJ2RvY3VtZW50JywgZ3JvdXBzOiBbJ21vZGUnLCAnZG9jdW1lbnQnLCAnZG9jdG9vbHMnXSB9LFxuXHRcdHsgbmFtZTogJ290aGVycycgfVxuXHRdLFxuXG5cdCdyZW1vdmVQbHVnaW5zJzogJ2xpc3RzdHlsZScsXG5cdCdyZW1vdmVCdXR0b25zJzogJ0Zvcm1hdCxVbmRvLFJlZG8sQ3V0LENvcHksUGFzdGUsQW5jaG9yLFN0cmlrZSxTdWJzY3JpcHQsU3VwZXJzY3JpcHQsSW1hZ2UsU2VsZWN0QWxsLFNvdXJjZScsXG5cdCdyZW1vdmVEaWFsb2dUYWJzJzogJ2xpbms6YWR2YW5jZWQ7bGluazp0YXJnZXQ7aW1hZ2U6YWR2YW5jZWQ7aW1hZ2VzOmFkdmFuY2VkJyxcblxuXHQnZXh0cmFQbHVnaW5zJzogJ3BsYWluLHNpZ25hdHVyZScsXG5cblx0J2FsbG93ZWRDb250ZW50JzogdHJ1ZSxcblx0J2V4dHJhQWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXG5cdCdmaWxsRW1wdHlCbG9ja3MnOiBmYWxzZSxcblx0J2lnbm9yZUVtcHR5UGFyYWdyYXBoJzogdHJ1ZSxcblx0J2Rpc2FibGVOYXRpdmVTcGVsbENoZWNrZXInOiBmYWxzZSxcblxuXHQnY29sb3JCdXR0b25fZW5hYmxlQXV0b21hdGljJzogZmFsc2UsXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVNb3JlJzogdHJ1ZSxcblxuXHQnZm9udF9kZWZhdWx0TGFiZWwnOiAnQXJpYWwnLFxuXHQnZm9udFNpemVfZGVmYXVsdExhYmVsJzogJzEzJyxcblx0J2ZvbnRTaXplX3NpemVzJzogJzEwLzEwcHg7MTIvMTJweDsxMy8xM3B4OzE0LzE0cHg7MTYvMTZweDsxOC8xOHB4OzIwLzIwcHg7MjQvMjRweDsyOC8yOHB4OzM2LzM2cHg7NDgvNDhweCdcbn07XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JMYW5nc01hcCA9IHtcblx0J2FyX3NhJzogJ2FyLXNhJyxcblx0J2JnX2JnJzogJ2JnJyxcblx0J2NzX0NaJzogJ2NzJyxcblx0J2RlX2RlJzogJ2RlJyxcblx0J2VsX2dyJzogJ2VsJyxcblx0J2VzX2VzJzogJ2VzJyxcblx0J2V0X2VlJzogJ2V0Jyxcblx0J2ZyX2ZyJzogJ2ZyJyxcblx0J2h1X2h1JzogJ2h1Jyxcblx0J2lzX2lzJzogJ2lzJyxcblx0J2l0X2l0JzogJ2l0Jyxcblx0J2phX2pwJzogJ2phJyxcblx0J2tvX2tyJzogJ2tvJyxcblx0J2x0X2x0JzogJ2x0Jyxcblx0J2x2X2x2JzogJ2x2Jyxcblx0J2ZhX2lyJzogJ2ZhJyxcblx0J25iX25vJzogJ25iJyxcblx0J25sX25sJzogJ25sJyxcblx0J3BsX3BsJzogJ3BsJyxcblx0J3B0X2JyJzogJ3B0LWJyJyxcblx0J3B0X3B0JzogJ3B0Jyxcblx0J3JvX3JvJzogJ3JvJyxcblx0J3J1X3J1JzogJ3J1Jyxcblx0J3NrX3NrJzogJ3NrJyxcblx0J3NsX3NpJzogJ3NsJyxcblx0J3N2X3NlJzogJ3N2Jyxcblx0J3RyX3RyJzogJ3RyJyxcblx0J3VrX3VhJzogJ3VrJyxcblx0J3poX2NuJzogJ3poLWNuJyxcblx0J3poX3R3JzogJ3poJ1xufTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xubGV0IGJBbGxvd1BkZlByZXZpZXcgPSAhYk1vYmlsZURldmljZTtcblxuaWYgKGJBbGxvd1BkZlByZXZpZXcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuXHRiQWxsb3dQZGZQcmV2aWV3ID0gISFfLmZpbmQod2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMsICh0eXBlKSA9PiB0eXBlICYmICdhcHBsaWNhdGlvbi9wZGYnID09PSB0eXBlLnR5cGUpO1xuXG5cdGlmICghYkFsbG93UGRmUHJldmlldykge1xuXHRcdGJBbGxvd1BkZlByZXZpZXcgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi9wZGYnXTtcblx0fVxufVxuXG5leHBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3IH07XG5cbmV4cG9ydCBjb25zdCBWSUVXX01PREVMUyA9IHtcblx0c2V0dGluZ3M6IFtdLFxuXHQnc2V0dGluZ3MtcmVtb3ZlZCc6IFtdLFxuXHQnc2V0dGluZ3MtZGlzYWJsZWQnOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVBY3Rpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxEaXNhYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFR5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxXaWR0aCA9IGtvLm9ic2VydmFibGUoMCk7XG5cbmxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIG1vdmVBY3Rpb24oKSkge1xuXHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHR9XG59KTtcblxubW92ZUFjdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBsZWZ0UGFuZWxEaXNhYmxlZCgpKSB7XG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHR9XG59KTtcblxuLy8gcG9wdXBzXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5TmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoKTtcblxucG9wdXBWaXNpYmlsaXR5LnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tb2RhbCcsIGJWYWx1ZSk7XG59KTtcblxuLy8ga2V5c1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlUmVhbCA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcbmV4cG9ydCBjb25zdCBrZXlTY29wZUZha2UgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5cbmV4cG9ydCBjb25zdCBrZXlTY29wZSA9IGtvLmNvbXB1dGVkKHtcblx0cmVhZDogKCkgPT4ga2V5U2NvcGVGYWtlKCksXG5cdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRpZiAoS2V5U3RhdGUuTWVudSAhPT0gdmFsdWUpIHtcblx0XHRcdGlmIChLZXlTdGF0ZS5Db21wb3NlID09PSB2YWx1ZSkge1xuXHRcdFx0XHQvLyBkaXNhYmxlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoKSA9PiB1c2VLZXlib2FyZFNob3J0Y3V0cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzdG9yZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHVzZUtleWJvYXJkU2hvcnRjdXRzKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRhZ05hbWUgPSBlbCA/IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIShcblx0XHRcdFx0XHRcdFx0J0lOUFVUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnU0VMRUNUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnVEVYVEFSRUEnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdChlbCAmJiAnRElWJyA9PT0gdGFnTmFtZSAmJiAoJ2VkaXRvckh0bWxBcmVhJyA9PT0gZWwuY2xhc3NOYW1lIHx8ICd0cnVlJyA9PT0gJycgKyBlbC5jb250ZW50RWRpdGFibGUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGtleVNjb3BlRmFrZSh2YWx1ZSk7XG5cdFx0XHRpZiAoZHJvcGRvd25WaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0dmFsdWUgPSBLZXlTdGF0ZS5NZW51O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGtleVNjb3BlUmVhbCh2YWx1ZSk7XG5cdH1cbn0pO1xuXG5rZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKCdrZXlTY29wZT0nICsgc1ZhbHVlKTsgLy8gREVCVUdcblx0a2V5LnNldFNjb3BlKHZhbHVlKTtcbn0pO1xuXG5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUpIHtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZW51KTtcblx0fSBlbHNlIGlmIChLZXlTdGF0ZS5NZW51ID09PSBrZXkuZ2V0U2NvcGUoKSkge1xuXHRcdGtleVNjb3BlKGtleVNjb3BlRmFrZSgpKTtcblx0fVxufSk7XG5cbi8qKlxuICogQHR5cGUgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhID0ge1xuXHRfX0FQUF9fOiBudWxsLFxuXHRpQWpheEVycm9yQ291bnQ6IDAsXG5cdGlUb2tlbkVycm9yQ291bnQ6IDAsXG5cdGFCb290c3RyYXBEcm9wZG93bnM6IFtdLFxuXHRpTWVzc2FnZUJvZHlDYWNoZUNvdW50OiAwLFxuXHRiVW5sb2FkOiBmYWxzZVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGhhc2hlciBmcm9tICdoYXNoZXInO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgJGh0bWwsIFZJRVdfTU9ERUxTLCBwb3B1cFZpc2liaWxpdHlOYW1lcyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmQsIHBTdHJpbmcsIGxvZywgaXNGdW5jLCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkZWxlZ2F0ZVJ1biwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IGN1cnJlbnRTY3JlZW4gPSBudWxsLFxuXHRkZWZhdWx0U2NyZWVuTmFtZSA9ICcnO1xuXG5jb25zdCBTQ1JFRU5TID0ge307XG5cbmV4cG9ydCBjb25zdCBWaWV3VHlwZSA9IHtcblx0UG9wdXA6ICdQb3B1cHMnLFxuXHRMZWZ0OiAnTGVmdCcsXG5cdFJpZ2h0OiAnUmlnaHQnLFxuXHRDZW50ZXI6ICdDZW50ZXInXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG5cdCQoJyNybC1jb250ZW50JykuYWRkQ2xhc3MoJ3JsLWNvbnRlbnQtc2hvdycpO1xuXHQkKCcjcmwtbG9hZGluZycpXG5cdFx0LmhpZGUoKVxuXHRcdC5yZW1vdmUoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZChmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiBjcmVhdGVDb21tYW5kTGVnYWN5KG51bGwsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRGVmYXVsdCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlLCBpc0RlZmF1bHQgPSBmYWxzZSkge1xuXHRTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLl9fcmxTZXR0aW5nc0RhdGEgPSB7XG5cdFx0TGFiZWw6IGxhYmVsTmFtZSxcblx0XHRUZW1wbGF0ZTogdGVtcGxhdGUsXG5cdFx0Um91dGU6IHJvdXRlLFxuXHRcdElzRGVmYXVsdDogISFpc0RlZmF1bHRcblx0fTtcblxuXHRWSUVXX01PREVMUy5zZXR0aW5ncy5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPZmYoKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPbigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMgez9PYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW4oc2NyZWVuTmFtZSkge1xuXHRyZXR1cm4gJycgIT09IHNjcmVlbk5hbWUgJiYgIWlzVW5kKFNDUkVFTlNbc2NyZWVuTmFtZV0pID8gU0NSRUVOU1tzY3JlZW5OYW1lXSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyZWVuUG9wdXAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzO1xuXHRcdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdCkge1xuXHRcdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvSGlkZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpO1xuXHRpZiAoTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eShmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge21peGVkPX0gcGFyYW1zID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdm1SdW5Ib29rKGhvb2tOYW1lLCBWaWV3TW9kZWxDbGFzcywgcGFyYW1zID0gbnVsbCkge1xuXHRfLmVhY2goVmlld01vZGVsQ2xhc3MuX19uYW1lcywgKG5hbWUpID0+IHtcblx0XHRydW5Ib29rKGhvb2tOYW1lLCBbbmFtZSwgVmlld01vZGVsQ2xhc3MuX192bSwgcGFyYW1zXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdD19IHZtU2NyZWVuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbikge1xuXHRpZiAoVmlld01vZGVsQ2xhc3MgJiYgIVZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCkge1xuXHRcdGxldCB2bURvbSA9IG51bGw7XG5cdFx0Y29uc3Qgdm0gPSBuZXcgVmlld01vZGVsQ2xhc3Modm1TY3JlZW4pLFxuXHRcdFx0cG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGUgfHwgJycsXG5cdFx0XHR2bVBsYWNlID0gcG9zaXRpb24gPyAkKCcjcmwtY29udGVudCAjcmwtJyArIHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIDogbnVsbDtcblxuXHRcdFZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0Vmlld01vZGVsQ2xhc3MuX192bSA9IHZtO1xuXG5cdFx0dm0ub25TaG93VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHZtLm9uSGlkZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHZtLnZpZXdNb2RlbE5hbWUgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWU7XG5cdFx0dm0udmlld01vZGVsTmFtZXMgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWVzO1xuXHRcdHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgPSBWaWV3TW9kZWxDbGFzcy5fX3RlbXBsYXRlSUQ7XG5cdFx0dm0udmlld01vZGVsUG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGU7XG5cblx0XHRpZiAodm1QbGFjZSAmJiAxID09PSB2bVBsYWNlLmxlbmd0aCkge1xuXHRcdFx0dm1Eb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygncmwtdmlldy1tb2RlbCcpXG5cdFx0XHRcdC5hZGRDbGFzcygnUkwtJyArIHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQpXG5cdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHR2bURvbS5hcHBlbmRUbyh2bVBsYWNlKTtcblxuXHRcdFx0dm0udmlld01vZGVsRG9tID0gdm1Eb207XG5cdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSA9IHZtRG9tO1xuXG5cdFx0XHRpZiAoVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLmNhbmNlbENvbW1hbmQgPSB2bS5jbG9zZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2bS5tb2RhbFZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdHZtLnN0b3JlQW5kU2V0S2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucHVzaCh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAzMDAwICsgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGggKyAxMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uU2hvd1RyaWdnZXIoIXZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDUwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vbkhpZGVUcmlnZ2VyKCF2bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2bS5yZXN0b3JlS2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLWhpZGUnLCBWaWV3TW9kZWxDbGFzcyk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnJlbW92ZSh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAyMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB2bS52aWV3TW9kZWxEb20uaGlkZSgpLCAzMDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wcmUtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXG5cdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdHZtRG9tWzBdLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+ICh7IG5hbWU6IHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgfSlcblx0XHRcdFx0fSxcblx0XHRcdFx0dm1cblx0XHRcdCk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25CdWlsZCcsIFt2bURvbV0pO1xuXHRcdFx0aWYgKHZtICYmIFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5yZWdpc3RlclBvcHVwS2V5RG93bigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcG9zdC1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZygnQ2Fubm90IGZpbmQgdmlldyBtb2RlbCBwb3NpdGlvbjogJyArIHBvc2l0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVmlld01vZGVsQ2xhc3MgPyBWaWV3TW9kZWxDbGFzcy5fX3ZtIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3csIHBhcmFtcyA9IFtdKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uQmVmb3JlU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvblNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIE1vZGFsVmlldywgcGFyYW1zIHx8IFtdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJtVXBTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbldhcm1VcCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9wdXBWaXNpYmxlKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0cmV0dXJuIE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSA/IE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSgpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXJ0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbk9uUm91dGUoc2NyZWVuTmFtZSwgc3ViUGFydCkge1xuXHRsZXQgdm1TY3JlZW4gPSBudWxsLFxuXHRcdGlzU2FtZVNjcmVlbiA9IGZhbHNlLFxuXHRcdGNyb3NzID0gbnVsbDtcblxuXHRpZiAoJycgPT09IHBTdHJpbmcoc2NyZWVuTmFtZSkpIHtcblx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdH1cblxuXHRpZiAoJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHR2bVNjcmVlbiA9IHNjcmVlbihzY3JlZW5OYW1lKTtcblx0XHRpZiAoIXZtU2NyZWVuKSB7XG5cdFx0XHR2bVNjcmVlbiA9IHNjcmVlbihkZWZhdWx0U2NyZWVuTmFtZSk7XG5cdFx0XHRpZiAodm1TY3JlZW4pIHtcblx0XHRcdFx0c3ViUGFydCA9IHNjcmVlbk5hbWUgKyAnLycgKyBzdWJQYXJ0O1xuXHRcdFx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fc3RhcnRlZCkge1xuXHRcdFx0aXNTYW1lU2NyZWVuID0gY3VycmVudFNjcmVlbiAmJiB2bVNjcmVlbiA9PT0gY3VycmVudFNjcmVlbjtcblxuXHRcdFx0aWYgKCF2bVNjcmVlbi5fX2J1aWxkZWQpIHtcblx0XHRcdFx0dm1TY3JlZW4uX19idWlsZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHZtU2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRfLmVhY2godm1TY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uQnVpbGQnKTtcblx0XHRcdH1cblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdC8vIGhpZGUgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGN1cnJlbnRTY3JlZW4gPSB2bVNjcmVlbjtcblxuXHRcdFx0XHQvLyBzaG93IHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcighY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1vbi1zaG93JywgW2N1cnJlbnRTY3JlZW4uc2NyZWVuTmFtZSgpLCBjdXJyZW50U2NyZWVuXSk7XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkJlZm9yZVNob3cnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXHRcdFx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjcm9zcyA9IHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fY3Jvc3MgPyB2bVNjcmVlbi5fX2Nyb3NzKCkgOiBudWxsO1xuXHRcdFx0XHRpZiAoY3Jvc3MpIHtcblx0XHRcdFx0XHRjcm9zcy5wYXJzZShzdWJQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc2NyZWVuc0NsYXNzZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTY3JlZW5zKHNjcmVlbnNDbGFzc2VzKSB7XG5cdF8uZWFjaChzY3JlZW5zQ2xhc3NlcywgKENTY3JlZW4pID0+IHtcblx0XHRpZiAoQ1NjcmVlbikge1xuXHRcdFx0Y29uc3Qgdm1TY3JlZW4gPSBuZXcgQ1NjcmVlbigpLFxuXHRcdFx0XHRzY3JlZW5OYW1lID0gdm1TY3JlZW4gPyB2bVNjcmVlbi5zY3JlZW5OYW1lKCkgOiAnJztcblxuXHRcdFx0aWYgKHZtU2NyZWVuICYmICcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0XHRcdGlmICgnJyA9PT0gZGVmYXVsdFNjcmVlbk5hbWUpIHtcblx0XHRcdFx0XHRkZWZhdWx0U2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRTQ1JFRU5TW3NjcmVlbk5hbWVdID0gdm1TY3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRfLmVhY2goU0NSRUVOUywgKHZtU2NyZWVuKSA9PiB7XG5cdFx0aWYgKHZtU2NyZWVuICYmICF2bVNjcmVlbi5fX3N0YXJ0ZWQgJiYgdm1TY3JlZW4uX19zdGFydCkge1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnQoKTtcblxuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXByZS1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uU3RhcnQnKTtcblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wb3N0LXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGNyb3NzID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblx0Y3Jvc3MuYWRkUm91dGUoL14oW2EtekEtWjAtOS1dKilcXC8/KC4qKSQvLCBzY3JlZW5PblJvdXRlKTtcblxuXHRoYXNoZXIuaW5pdGlhbGl6ZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5jaGFuZ2VkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuaW5pdCgpO1xuXG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXN0YXJ0ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1zdGFydGVkJyksIDEwMCk7XG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQtZGVsYXknKSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHNpbGVuY2UgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goaGFzaCwgc2lsZW5jZSA9IGZhbHNlLCByZXBsYWNlID0gZmFsc2UpIHtcblx0aGFzaCA9ICcjJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cdGhhc2ggPSAnLycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXG5cdGNvbnN0IGNtZCA9IHJlcGxhY2UgPyAncmVwbGFjZUhhc2gnIDogJ3NldEhhc2gnO1xuXG5cdGlmIChzaWxlbmNlKSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5zZXRIYXNoKGhhc2gpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiAodGFyZ2V0KSA9PiB7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IG5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBbbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQuX19uYW1lID0gdGFyZ2V0Ll9fbmFtZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHRhcmdldC5fX3R5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVtcGxhdGVJRCkge1xuXHRcdFx0XHR0YXJnZXQuX190ZW1wbGF0ZUlEID0gdGVtcGxhdGVJRDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwb3B1cERlY29yYXRvcih7IG5hbWUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGU6IFZpZXdUeXBlLlBvcHVwLCB0ZW1wbGF0ZUlEIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbkV4ZWN1dGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tbWFuZERlY29yYXRvcihjYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSA9PiB7XG5cdFx0aWYgKCFrZXkgfHwgIWtleS5tYXRjaCgvQ29tbWFuZCQvKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBuYW1lIFwiJHtrZXl9XCIgc2hvdWxkIGVuZCB3aXRoIENvbW1hbmQgc3VmZml4YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlIHx8IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKSxcblx0XHRcdG5vcm1DYW5FeGVjdXRlID0gaXNGdW5jKGNhbkV4ZWN1dGUpID8gY2FuRXhlY3V0ZSA6ICgpID0+ICEhY2FuRXhlY3V0ZTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobm9ybUNhbkV4ZWN1dGUuY2FsbCh0aGlzLCB0aGlzKSkge1xuXHRcdFx0XHR2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlLl9fcmVhbENhbkV4ZWN1dGUgPSBub3JtQ2FuRXhlY3V0ZTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlLmlzQ29tbWFuZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGVzY3JpcHRvcjtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21pY2VkfSAkaXRlbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJGl0ZW1zKSB7XG5cdHJldHVybiBfLnRocm90dGxlKChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdGNvbnN0IHVwID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0O1xuXG5cdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSk7XG5cdFx0XHRpZiAodXAgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHR9IGVsc2UgaWYgKCF1cCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdEhhc2ggPSAkaXRlbXMuZXEoaW5kZXgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGlmIChyZXN1bHRIYXNoKSB7XG5cdFx0XHRcdHNldEhhc2gocmVzdWx0SGFzaCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG59XG5cbmV4cG9ydCB7XG5cdGNvbW1hbmREZWNvcmF0b3IsXG5cdGNvbW1hbmREZWNvcmF0b3IgYXMgY29tbWFuZCxcblx0dmlld0RlY29yYXRvcixcblx0dmlld0RlY29yYXRvciBhcyB2aWV3LFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXdNb2RlbCxcblx0cG9wdXBEZWNvcmF0b3IsXG5cdHBvcHVwRGVjb3JhdG9yIGFzIHBvcHVwLFxuXHRzZXR0aW5nc01lbnVLZXlzSGFuZGxlclxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmpRdWVyeTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiwgVXBsb2FkRXJyb3JDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzVW5kLCBpc051bGwsIGhhcywgbWljcm90aW1lLCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICRodG1sLCBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIG1vbWVudG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGxhbmdMaW5rIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxubGV0IEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEEgPSB7fTtcbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX01BUCA9IFtcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5BdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FVVEhfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDRVNTX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05ORUNUSU9OX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FwdGNoYUVycm9yLCAnTk9USUZJQ0FUSU9OUy9DQVBUQ0hBX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9GQUNFQk9PS19MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9UV0lUVEVSX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfR09PR0xFX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvRE9NQUlOX05PVF9BTExPV0VEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfTk9UX0FMTE9XRUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX1JFUVVJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkLCAnTk9USUZJQ0FUSU9OUy9DT1VMRF9OT1RfU0FWRV9ORVdfUEFTU1dPUkQnXSxcblx0W05vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QsICdOT1RJRklDQVRJT05TL0NVUlJFTlRfUEFTU1dPUkRfSU5DT1JSRUNUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRTaG9ydCwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1NIT1JUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRXZWFrLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfV0VBSyddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkRm9yYmlkZGVuLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfRk9SQklEREVOVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ29udGFjdHNTeW5jRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTlRBQ1RTX1NZTkNfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRNb3ZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NFTkRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRSZWNpcGllbnRzLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1JFQ0lQSUVOVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkZpbHRlcnNBcmVOb3RDb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9GSUxURVJTX0FSRV9OT1RfQ09SUkVDVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9DUkVBVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9SRU5BTUVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9OT05fRU1QVFlfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9TVUJTQ1JJQkVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFVuc3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1VOU1VCU0NSSUJFX0ZPTERFUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVTZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1NFVFRJTkdTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1BMVUdJTl9TRVRUSU5HUyddLFxuXG5cdFtOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfSU5TVEFMTF9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9QTFVHSU5fUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvVU5TVVBQT1JURURfUExVR0lOX1BBQ0tBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19TRVJWRVJfSVNfVU5BVkFJTEFCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfRVhQSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0Jhbm5lZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0JBTk5FRCddLFxuXG5cdFtOb3RpZmljYXRpb24uRGVtb1NlbmRNZXNzYWdlRXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fU0VORF9NRVNTQUdFX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uRGVtb0FjY291bnRFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19BQ0NPVU5UX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50QWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9BTFJFQURZX0VYSVNUUyddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnREb2VzTm90RXhpc3QsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfRE9FU19OT1RfRVhJU1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvciwgJ05PVElGSUNBVElPTlMvTUFJTF9TRVJWRVJfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudCwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9JTlBVVF9BUkdVTUVOVCddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IsICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXVxuXTtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlTGlzdFxuICogQHBhcmFtIHtzdHJpbmc9fSBkZWZhdWxWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG4oa2V5LCB2YWx1ZUxpc3QsIGRlZmF1bFZhbHVlKSB7XG5cdGxldCB2YWx1ZU5hbWUgPSAnJyxcblx0XHRyZXN1bHQgPSBJMThOX0RBVEFba2V5XTtcblxuXHRpZiAoaXNVbmQocmVzdWx0KSkge1xuXHRcdHJlc3VsdCA9IGlzVW5kKGRlZmF1bFZhbHVlKSA/IGtleSA6IGRlZmF1bFZhbHVlO1xuXHR9XG5cblx0aWYgKCFpc1VuZCh2YWx1ZUxpc3QpICYmICFpc051bGwodmFsdWVMaXN0KSkge1xuXHRcdGZvciAodmFsdWVOYW1lIGluIHZhbHVlTGlzdCkge1xuXHRcdFx0aWYgKGhhcyh2YWx1ZUxpc3QsIHZhbHVlTmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJyUnICsgdmFsdWVOYW1lICsgJyUnLCB2YWx1ZUxpc3RbdmFsdWVOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaTE4blRvTm9kZSA9IChlbGVtZW50KSA9PiB7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ2kxOG4nKTtcblxuXHRpZiAoa2V5KSB7XG5cdFx0aWYgKCdbJyA9PT0ga2V5LnN1YnN0cigwLCAxKSkge1xuXHRcdFx0c3dpdGNoIChrZXkuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdGNhc2UgJ1todG1sXSc6XG5cdFx0XHRcdFx0JGVsLmh0bWwoaTE4bihrZXkuc3Vic3RyKDYpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1twbGFjZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bihrZXkuc3Vic3RyKDEzKSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbdGl0bGUnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGkxOG4oa2V5LnN1YnN0cig3KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC50ZXh0KGkxOG4oa2V5KSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFuPX0gYW5pbWF0ZSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVG9Ob2RlcyhlbGVtZW50cywgYW5pbWF0ZSA9IGZhbHNlKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJ1tkYXRhLWkxOG5dJywgZWxlbWVudHMpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRpMThuVG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFuaW1hdGUgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0JCgnLmkxOG4tYW5pbWF0aW9uW2RhdGEtaTE4bl0nLCBlbGVtZW50cykubGV0dGVyZngoe1xuXHRcdFx0XHQnZngnOiAnZmFsbCBmYWRlJyxcblx0XHRcdFx0J2JhY2t3YXJkcyc6IGZhbHNlLFxuXHRcdFx0XHQndGltaW5nJzogNTAsXG5cdFx0XHRcdCdmeF9kdXJhdGlvbic6ICc1MG1zJyxcblx0XHRcdFx0J2xldHRlcl9lbmQnOiAncmVzdG9yZScsXG5cdFx0XHRcdCdlbGVtZW50X2VuZCc6ICdyZXN0b3JlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgcmVsb2FkRGF0YSA9ICgpID0+IHtcblx0aWYgKHdpbmRvdy5yYWlubG9vcEkxOE4pIHtcblx0XHRJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5cdFx0aTE4blRvTm9kZXMod2luZG93LmRvY3VtZW50LCB0cnVlKTtcblxuXHRcdG1vbWVudG9yUmVsb2FkKCk7XG5cdFx0dHJpZ2dlcighdHJpZ2dlcigpKTtcblx0fVxuXG5cdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSgpIHtcblx0STE4Tl9OT1RJRklDQVRJT05fTUFQLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRJMThOX05PVElGSUNBVElPTl9EQVRBW2l0ZW1bMF1dID0gaTE4bihpdGVtWzFdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RhcnRDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGxhbmdDYWxsYmFjayA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKHN0YXJ0Q2FsbGJhY2ssIGxhbmdDYWxsYmFjayA9IG51bGwpIHtcblx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRzdGFydENhbGxiYWNrKCk7XG5cdH1cblxuXHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRcdFx0c3RhcnRDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdFx0XHRsYW5nQ2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoc3RhcnRDYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHsqPX0gbWVzc2FnZSA9ICcnXG4gKiBAcGFyYW0geyo9fSBkZWZDb2RlID0gbnVsbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbihjb2RlLCBtZXNzYWdlID0gJycsIGRlZkNvZGUgPSBudWxsKSB7XG5cdGNvZGUgPSB3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDA7XG5cdGlmIChOb3RpZmljYXRpb24uQ2xpZW50Vmlld0Vycm9yID09PSBjb2RlICYmIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGRlZkNvZGUgPSBkZWZDb2RlID8gd2luZG93LnBhcnNlSW50KGRlZkNvZGUsIDEwKSB8fCAwIDogMDtcblx0cmV0dXJuIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV0pXG5cdFx0PyBkZWZDb2RlICYmIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV0pXG5cdFx0XHQ/IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV1cblx0XHRcdDogJydcblx0XHQ6IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24pIHtcblx0cmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLkVycm9yQ29kZVxuXHRcdD8gZ2V0Tm90aWZpY2F0aW9uKHBJbnQocmVzcG9uc2UuRXJyb3JDb2RlKSwgcmVzcG9uc2UuRXJyb3JNZXNzYWdlIHx8ICcnKVxuXHRcdDogZ2V0Tm90aWZpY2F0aW9uKGRlZkNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gY29kZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShjb2RlKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblx0c3dpdGNoICh3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDApIHtcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlSXNUb29CaWc6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlUGFydGlhbGx5VXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9QQVJUSUFMTFlfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX05PX0ZJTEVfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLk1pc3NpbmdUZW1wRm9sZGVyOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX01JU1NJTkdfVEVNUF9GT0xERVInKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVPblNhdmVpbmdFcnJvcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9PTl9TQVZJTkdfRklMRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9UWVBFJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZChhZG1pbiwgbGFuZ3VhZ2UpIHtcblx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHQkaHRtbC5hZGRDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiBsYW5nTGluayhsYW5ndWFnZSwgYWRtaW4pLFxuXHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxuXHRcdFx0Y2FjaGU6IHRydWVcblx0XHR9KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlbG9hZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNSdGwgPSAtMSA8IGluQXJyYXkoKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBbJ2FyJywgJ2FyX3NhJywgJ2hlJywgJ2hlX2hlJywgJ3VyJywgJ3VyX2lyJ10pO1xuXG5cdFx0XHRcdFx0XHQkaHRtbFxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJylcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1ydGwgcmwtbHRyJylcblx0XHRcdFx0XHRcdFx0Ly8gLmF0dHIoJ2RpcicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKGlzUnRsID8gJ3JsLXJ0bCcgOiAncmwtbHRyJyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdDUwMCA8IG1pY3JvdGltZSgpIC0gc3RhcnQgPyAxIDogNTAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblx0XHRcdFx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0pO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbiRodG1sLmFkZENsYXNzKCdybC0nICsgKCRodG1sLmF0dHIoJ2RpcicpIHx8ICdsdHInKSk7XG4iLCJpbXBvcnQgX09iamVjdCRjcmVhdGUgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbmRcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNVbmQsIGlzTm9ybWFsLCB0cmltLCBlbmNvZGVVUklDb21wb25lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFJPT1QgPSAnLi8nLFxuXHRIQVNIX1BSRUZJWCA9ICcjLycsXG5cdFNFUlZFUl9QUkVGSVggPSAnLi8/Jyxcblx0U1VCX1FVRVJZX1BSRUZJWCA9ICcmcVtdPScsXG5cdFZFUlNJT04gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpLFxuXHRXRUJfUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlBhdGgnKSB8fCAnJyxcblx0VkVSU0lPTl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViVmVyc2lvblBhdGgnKSB8fCAncmFpbmxvb3Avdi8nICsgVkVSU0lPTiArICcvJyxcblx0U1RBVElDX1BSRUZJWCA9IFZFUlNJT05fUFJFRklYICsgJ3N0YXRpYy8nLFxuXHRBRE1JTl9IT1NUX1VTRSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluSG9zdFVzZScpLFxuXHRBRE1JTl9QQVRIID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluUGF0aCcpIHx8ICdhZG1pbic7XG5cbmxldCBBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUF1dGhTdWZmaXgoKSB7XG5cdEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViUXVlcnlQcmVmaXgoKSB7XG5cdHJldHVybiBTVUJfUVVFUllfUFJFRklYO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3RhcnR1cFVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3Qoc3RhcnR1cFVybCA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArIHBTdHJpbmcoc3RhcnR1cFVybCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RBZG1pbigpIHtcblx0cmV0dXJuIEFETUlOX0hPU1RfVVNFID8gUk9PVCA6IFNFUlZFUl9QUkVGSVggKyBBRE1JTl9QQVRIO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VXNlcigpIHtcblx0cmV0dXJuIFJPT1Q7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFJhdyh0eXBlLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRjdXN0b21TcGVjU3VmZml4ID0gaXNVbmQoY3VzdG9tU3BlY1N1ZmZpeCkgPyBBVVRIX1BSRUZJWCA6IGN1c3RvbVNwZWNTdWZmaXg7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRjdXN0b21TcGVjU3VmZml4ICtcblx0XHQnLycgK1xuXHRcdHR5cGUgK1xuXHRcdCcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRkb3dubG9hZFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudERvd25sb2FkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdEb3dubG9hZCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdUaHVtYm5haWwnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4oZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdBc1BsYWluJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudEZyYW1lZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRnJhbWVkVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlcXVlc3QodHlwZSkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvJyArIHR5cGUgKyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRDb250YWN0cygpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZENvbnRhY3RzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEJhY2tncm91bmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRCYWNrZ3JvdW5kJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FwcGVuZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZShlbWFpbCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQ2hhbmdlJykgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhamF4KGFkZCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQWpheCcpICsgYWRkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VWaWV3TGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0QVVUSF9QUkVGSVggK1xuXHRcdCcvVmlld0FzUGxhaW4vJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRyZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VEb3dubG9hZExpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvRG93bmxvYWQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyByZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckxpbmsoZW1haWwpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL0F2YXRhci8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0xpbmsoaGFzaCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvUHVibGljLycgKyBoYXNoICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlckJhY2tncm91bmQoaGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Vc2VyQmFja2dyb3VuZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIGhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhwSW5mbygpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0luZm8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWRtaW5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW5nTGluayhsYW5nLCBpc0FkbWluKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9MYW5nLzAvJyArIChpc0FkbWluID8gJ0FkbWluJyA6ICdBcHAnKSArICcvJyArIHdpbmRvdy5lbmNvZGVVUkkobGFuZykgKyAnLycgKyBWRVJTSU9OICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c1ZjZigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c1ZjZi8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c0NzdigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c0Nzdi8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0geGF1dGggPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEdvb2dsZSh4YXV0aCA9IGZhbHNlKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0J1NvY2lhbEdvb2dsZScgK1xuXHRcdCgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJykgK1xuXHRcdCh4YXV0aCA/ICcmeGF1dGg9MScgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsVHdpdHRlcigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnU29jaWFsVHdpdHRlcicgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxGYWNlYm9vaygpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJ1NvY2lhbEZhY2Vib29rJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY1ByZWZpeChwYXRoKSB7XG5cdHJldHVybiBTVEFUSUNfUFJFRklYICsgcGF0aDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlDb250YWN0UGljKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2VtcHR5LWNvbnRhY3QucG5nJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc291bmQoZmlsZU5hbWUpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnc291bmRzLycgKyBmaWxlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbk1haWxJY29uKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2ljb20tbWVzc2FnZS1ub3RpZmljYXRpb24ucG5nJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3AubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3Aud29ya2VyLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VyUGF0aCgpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lUHJldmlld0xpbmsodGhlbWUpIHtcblx0bGV0IHByZWZpeCA9IFZFUlNJT05fUFJFRklYO1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdFx0cHJlZml4ID0gV0VCX1BSRUZJWDtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAndGhlbWVzLycgKyB3aW5kb3cuZW5jb2RlVVJJKHRoZW1lKSArICcvaW1hZ2VzL3ByZXZpZXcucG5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluYm94KGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCcpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ21haWxib3gvJyArIGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHNjcmVlbk5hbWUgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzKHNjcmVlbk5hbWUgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnc2V0dGluZ3MnICsgKHNjcmVlbk5hbWUgPyAnLycgKyBzY3JlZW5OYW1lIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhYm91dCgpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ2Fib3V0Jztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWluKHNjcmVlbk5hbWUpIHtcblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYO1xuXHRzd2l0Y2ggKHNjcmVlbk5hbWUpIHtcblx0XHRjYXNlICdBZG1pbkRvbWFpbnMnOlxuXHRcdFx0cmVzdWx0ICs9ICdkb21haW5zJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluU2VjdXJpdHknOlxuXHRcdFx0cmVzdWx0ICs9ICdzZWN1cml0eSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pbkxpY2Vuc2luZyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2xpY2Vuc2luZyc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcGFnZSA9IDFcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2VhcmNoID0gJydcbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGhyZWFkVWlkID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsQm94KGZvbGRlciwgcGFnZSA9IDEsIHNlYXJjaCA9ICcnLCB0aHJlYWRVaWQgPSAnJykge1xuXHRwYWdlID0gaXNOb3JtYWwocGFnZSkgPyBwSW50KHBhZ2UpIDogMTtcblx0c2VhcmNoID0gcFN0cmluZyhzZWFyY2gpO1xuXG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWCArICdtYWlsYm94Lyc7XG5cblx0aWYgKCcnICE9PSBmb2xkZXIpIHtcblx0XHRjb25zdCByZXN1bHRUaHJlYWRVaWQgPSBwSW50KHRocmVhZFVpZCk7XG5cdFx0cmVzdWx0ICs9IHdpbmRvdy5lbmNvZGVVUkkoZm9sZGVyKSArICgwIDwgcmVzdWx0VGhyZWFkVWlkID8gJ34nICsgcmVzdWx0VGhyZWFkVWlkIDogJycpO1xuXHR9XG5cblx0aWYgKDEgPCBwYWdlKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnL3AnICsgcGFnZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2VhcmNoKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKHNlYXJjaCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9zbGljZVwiO1xuaW1wb3J0IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCI7XG5pbXBvcnQgX09iamVjdCRrZXlzIGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHksIGRlY29yYXRvcnMsIGRlc2NyaXB0b3IsIGNvbnRleHQpIHtcbiAgdmFyIF9jb250ZXh0LCBfY29udGV4dDIsIF9jb250ZXh0MztcblxuICB2YXIgZGVzYyA9IHt9O1xuXG4gIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qka2V5cyhkZXNjcmlwdG9yKSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG5cbiAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7XG4gIGRlc2MuY29uZmlndXJhYmxlID0gISFkZXNjLmNvbmZpZ3VyYWJsZTtcblxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHtcbiAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlc2MgPSBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShkZWNvcmF0b3JzKS5jYWxsKGRlY29yYXRvcnMpKS5jYWxsKF9jb250ZXh0MykpLmNhbGwoX2NvbnRleHQyLCBmdW5jdGlvbiAoZGVzYywgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjO1xuICB9LCBkZXNjKTtcblxuICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDApIHtcbiAgICBkZXNjLnZhbHVlID0gZGVzYy5pbml0aWFsaXplciA/IGRlc2MuaW5pdGlhbGl6ZXIuY2FsbChjb250ZXh0KSA6IHZvaWQgMDtcbiAgICBkZXNjLmluaXRpYWxpemVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG5cbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkZXNjO1xufSIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCJpbXBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUgfSBmcm9tICdSZW1vdGUvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgUmVtb3RlQWRtaW5BamF4IGV4dGVuZHMgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0xvZ2luXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICovXG5cdGFkbWluTG9naW4oZkNhbGxiYWNrLCBzTG9naW4sIHNQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dpbicsIHtcblx0XHRcdCdMb2dpbic6IHNMb2dpbixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluTG9nb3V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dvdXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVBZG1pbkNvbmZpZyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblNldHRpbmdzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IHZhbHVlRm5cblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZuXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWdIZWxwZXIoa2V5LCB2YWx1ZUZuLCBmbikge1xuXHRcdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFba2V5XSA9IHZhbHVlRm4gPyB2YWx1ZUZuKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0dGhpcy5zYXZlQWRtaW5Db25maWcoZm4gfHwgbnVsbCwgZGF0YSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJJbmNsdWRlQWxpYXNlcyA9IHRydWVcblx0ICovXG5cdGRvbWFpbkxpc3QoZkNhbGxiYWNrLCBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxpc3QnLCB7XG5cdFx0XHQnSW5jbHVkZUFsaWFzZXMnOiBiSW5jbHVkZUFsaWFzZXMgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRwbHVnaW5MaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5MaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGFja2FnZXNMaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QYWNrYWdlc0xpc3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluQ29yZURhdGEnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR1cGRhdGVDb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluVXBkYXRlQ29yZURhdGEnLCB7fSwgOTAwMDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlSW5zdGFsbChmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdBZG1pblBhY2thZ2VJbnN0YWxsJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkJzogb1BhY2thZ2UuaWQsXG5cdFx0XHRcdCdUeXBlJzogb1BhY2thZ2UudHlwZSxcblx0XHRcdFx0J0ZpbGUnOiBvUGFja2FnZS5maWxlXG5cdFx0XHR9LFxuXHRcdFx0NjAwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlRGVsZXRlKGZDYWxsYmFjaywgb1BhY2thZ2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZURlbGV0ZScsIHtcblx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdHBsdWdpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbkRlbGV0ZShmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRlbGV0ZScsIHtcblx0XHRcdCdOYW1lJzogc05hbWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0ZG9tYWluRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQ29uZmlnXG5cdCAqL1xuXHRwbHVnaW5TZXR0aW5nc1VwZGF0ZShmQ2FsbGJhY2ssIG9Db25maWcpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpblNldHRpbmdzVXBkYXRlJywgb0NvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJGb3JjZVxuXHQgKi9cblx0bGljZW5zaW5nKGZDYWxsYmFjaywgYkZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmcnLCB7XG5cdFx0XHRGb3JjZTogYkZvcmNlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0RvbWFpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0tleVxuXHQgKi9cblx0bGljZW5zaW5nQWN0aXZhdGUoZkNhbGxiYWNrLCBzRG9tYWluLCBzS2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmdBY3RpdmF0ZScsIHtcblx0XHRcdERvbWFpbjogc0RvbWFpbixcblx0XHRcdEtleTogc0tleVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpc2FibGVkXG5cdCAqL1xuXHRwbHVnaW5EaXNhYmxlKGZDYWxsYmFjaywgc05hbWUsIGJEaXNhYmxlZCkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luRGlzYWJsZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0RGlzYWJsZWQ6IGJEaXNhYmxlZCA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluQWxpYXMoZkNhbGxiYWNrLCBzTmFtZSwgc0FsaWFzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkFsaWFzU2F2ZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0QWxpYXM6IHNBbGlhc1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdGJDcmVhdGUsXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiSW5jU2hvcnRMb2dpbixcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlQWxsb3dSYXcsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRTaG9ydExvZ2luLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsLFxuXHRcdHNXaGl0ZUxpc3Rcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblNhdmUnLCB7XG5cdFx0XHQnQ3JlYXRlJzogYkNyZWF0ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnSW5jU2hvcnRMb2dpbic6IGJJbmNTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVBbGxvd1Jhdyc6IHNTaWV2ZUFsbG93UmF3ID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlSG9zdCc6IHNTaWV2ZUhvc3QsXG5cdFx0XHQnU2lldmVQb3J0JzogaVNpZXZlUG9ydCxcblx0XHRcdCdTaWV2ZVNlY3VyZSc6IHNTaWV2ZVNlY3VyZSxcblxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRTaG9ydExvZ2luJzogYk91dFNob3J0TG9naW4gPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0QXV0aCc6IGJPdXRBdXRoID8gJzEnIDogJzAnLFxuXHRcdFx0J091dFVzZVBocE1haWwnOiBiT3V0UGhwTWFpbCA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1doaXRlTGlzdCc6IHNXaGl0ZUxpc3Rcblx0XHR9KTtcblx0fVxuXG5cdHRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzTmFtZSxcblx0XHRzSW5jSG9zdCxcblx0XHRpSW5jUG9ydCxcblx0XHRzSW5jU2VjdXJlLFxuXHRcdGJVc2VTaWV2ZSxcblx0XHRzU2lldmVIb3N0LFxuXHRcdGlTaWV2ZVBvcnQsXG5cdFx0c1NpZXZlU2VjdXJlLFxuXHRcdHNPdXRIb3N0LFxuXHRcdGlPdXRQb3J0LFxuXHRcdHNPdXRTZWN1cmUsXG5cdFx0Yk91dEF1dGgsXG5cdFx0Yk91dFBocE1haWxcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblRlc3QnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J0luY0hvc3QnOiBzSW5jSG9zdCxcblx0XHRcdCdJbmNQb3J0JzogaUluY1BvcnQsXG5cdFx0XHQnSW5jU2VjdXJlJzogc0luY1NlY3VyZSxcblx0XHRcdCdVc2VTaWV2ZSc6IGJVc2VTaWV2ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cdFx0XHQnT3V0SG9zdCc6IHNPdXRIb3N0LFxuXHRcdFx0J091dFBvcnQnOiBpT3V0UG9ydCxcblx0XHRcdCdPdXRTZWN1cmUnOiBzT3V0U2VjdXJlLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHRlc3RDb250YWN0cyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvbnRhY3RzVGVzdCcsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVOZXdBZG1pblBhc3N3b3JkKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFzc3dvcmRVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWRtaW5QaW5nKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QaW5nJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFJlbW90ZUFkbWluQWpheCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIGluRm9jdXMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkd2luLCBrZXlTY29wZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0Vmlld05leHQge1xuXHRiRGlzYWJlQ2xvc2VPbkVzYyA9IGZhbHNlO1xuXHRzRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblx0c0N1cnJlbnRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cblx0dmlld01vZGVsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRtb2RhbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0dmlld01vZGVsTmFtZSA9ICcnO1xuXHR2aWV3TW9kZWxOYW1lcyA9IFtdO1xuXHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHN0b3JlQW5kU2V0S2V5U2NvcGUoKSB7XG5cdFx0dGhpcy5zQ3VycmVudEtleVNjb3BlID0ga2V5U2NvcGUoKTtcblx0XHRrZXlTY29wZSh0aGlzLnNEZWZhdWx0S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVzdG9yZUtleVNjb3BlKCkge1xuXHRcdGtleVNjb3BlKHRoaXMuc0N1cnJlbnRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZWdpc3RlclBvcHVwS2V5RG93bigpIHtcblx0XHQkd2luLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgJiYgRXZlbnRLZXlDb2RlLkVzYyA9PT0gZXZlbnQua2V5Q29kZSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5CYWNrc3BhY2UgPT09IGV2ZW50LmtleUNvZGUgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdGNhbmNlbENvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cdGNsb3NlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlID0ge307XG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5nb29nbGUuZW5hYmxlZCgpICYmICh0aGlzLmdvb2dsZS5jYXBhLmF1dGgoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aEdtYWlsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxEcml2ZScpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3JykpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBJRCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBTZWNyZXQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3VwcG9ydGVkRmFjZWJvb2tTb2NpYWwnKSk7XG5cblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lcktleScpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnKSk7XG5cblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0Ryb3Bib3hTb2NpYWwnKSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJvcGJveEFwaUtleScpKTtcblx0fVxuXG5cdGFwcGVuZERyb3Bib3goKSB7XG5cdFx0aWYgKCF3aW5kb3cuRHJvcGJveCAmJiB0aGlzLmRyb3Bib3guZW5hYmxlZCgpICYmIHRoaXMuZHJvcGJveC5hcGlLZXkoKSkge1xuXHRcdFx0aWYgKCF3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bib3hqcycpKSB7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3d3dy5kcm9wYm94LmNvbS9zdGF0aWMvYXBpLzIvZHJvcGlucy5qcyc7XG5cdFx0XHRcdCQoc2NyaXB0KVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsICdkcm9wYm94anMnKVxuXHRcdFx0XHRcdC5hdHRyKCdkYXRhLWFwcC1rZXknLCB0aGlzLmRyb3Bib3guYXBpS2V5KCkpO1xuXG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTb2NpYWxTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZlwiKTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG5Ub05vZGVzIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5jbGFzcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdGRpc3Bvc2FibGUgPSBbXTtcblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcG9zYWJsZS5mb3JFYWNoKChmdW5jVG9EaXNwb3NlKSA9PiB7XG5cdFx0XHRpZiAoZnVuY1RvRGlzcG9zZSAmJiBmdW5jVG9EaXNwb3NlLmRpc3Bvc2UpIHtcblx0XHRcdFx0ZnVuY1RvRGlzcG9zZS5kaXNwb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IENsYXNzT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVJRCA9ICcnXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCBjb21wb25lbnRFeHBvcnRIZWxwZXIgPSAoQ2xhc3NPYmplY3QsIHRlbXBsYXRlSUQgPSAnJykgPT4gKHtcblx0dGVtcGxhdGU6IHRlbXBsYXRlSUQgPyB7IGVsZW1lbnQ6IHRlbXBsYXRlSUQgfSA6ICc8Yj48L2I+Jyxcblx0dmlld01vZGVsOiB7XG5cdFx0Y3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG5cdFx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0XHRwYXJhbXMuZWxlbWVudCA9IG51bGw7XG5cblx0XHRcdGlmIChjb21wb25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uZWxlbWVudCkge1xuXHRcdFx0XHRwYXJhbXMuY29tcG9uZW50ID0gY29tcG9uZW50SW5mbztcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQgPSAkKGNvbXBvbmVudEluZm8uZWxlbWVudCk7XG5cblx0XHRcdFx0aTE4blRvTm9kZXMocGFyYW1zLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGlmICghaXNVbmQocGFyYW1zLmlubGluZSkgJiYga28udW53cmFwKHBhcmFtcy5pbmxpbmUpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgQ2xhc3NPYmplY3QocGFyYW1zKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgQ29yZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvcmVSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVDaGFubmVsID0ga28ub2JzZXJ2YWJsZSgnc3RhYmxlJyk7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQWNjZXNzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVXYXJuaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb3JlQ2hlY2tpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXHRcdHRoaXMuY29yZVVwZGF0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlUmVtb3RlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IGtvLm9ic2VydmFibGUoLTIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlQWRtaW5TdG9yZSgpO1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIE5hdGl2ZUNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IChwYXRoW1RBUkdFVF0gPSB7fSk7XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXMobmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ3MgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiB0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gJ2Z1bmN0aW9uJykgcmVzdWx0UHJvcGVydHkgPSBiaW5kKEZ1bmN0aW9uLmNhbGwsIHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXVtrZXldID0gc291cmNlUHJvcGVydHk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgIXRhcmdldFByb3RvdHlwZVtrZXldKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9IDc7XG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZyA9IEZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyBGdW5jdGlvbiBpbnN0YW5jZXMgYC5uYW1lYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhKE5BTUUgaW4gRnVuY3Rpb25Qcm90b3R5cGUpKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBOQU1FLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcuY2FsbCh0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZURlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnICYmICFoYXModmFsdWUsICduYW1lJykpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBrZXkpO1xuICAgIGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAnJyk7XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKFJFUExBQ0UsIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSwgcmVhc29uKSB7XG4gIHZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IHJlYXNvbi5SRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTtcbiAgdmFyIFJFUExBQ0VfS0VFUFNfJDAgPSByZWFzb24uUkVQTEFDRV9LRUVQU18kMDtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSAmJiBSRVBMQUNFX0tFRVBTXyQwKSB8fFxuICAgICAgICAodHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZVJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5sZXQgX21vbWVudCA9IG51bGw7XG5sZXQgX21vbWVudE5vdyA9IDA7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vdyA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50ID0gbW9tZW50KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93VW5peCA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50Tm93ID0gbW9tZW50KCkudW5peCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbi8qKlxuICogQHJldHVybnMge21vbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vdygpIHtcblx0dXBkYXRlTW9tZW50Tm93KCk7XG5cdHJldHVybiBfbW9tZW50IHx8IG1vbWVudCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3dVbml4KCkge1xuXHR1cGRhdGVNb21lbnROb3dVbml4KCk7XG5cdHJldHVybiBfbW9tZW50Tm93IHx8IDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIoZGF0ZSkge1xuXHRyZXR1cm4gbW9tZW50Tm93KClcblx0XHQuY2xvbmUoKVxuXHRcdC5zdWJ0cmFjdChkYXRlLCAnZGF5cycpXG5cdFx0LmZvcm1hdCgnWVlZWS5NTS5ERCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBtXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21TaG9ydERhdGUobSkge1xuXHRjb25zdCBub3cgPSBtb21lbnROb3coKTtcblx0aWYgKG0gJiYgbm93KSB7XG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIDQgPj0gbm93LmRpZmYobSwgJ2hvdXJzJyk6XG5cdFx0XHRcdHJldHVybiBtLmZyb21Ob3coKTtcblx0XHRcdGNhc2Ugbm93LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1RPREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3dcblx0XHRcdFx0LmNsb25lKClcblx0XHRcdFx0LnN1YnRyYWN0KDEsICdkYXlzJylcblx0XHRcdFx0LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1lFU1RFUkRBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93LnllYXIoKSA9PT0gbS55ZWFyKCk6XG5cdFx0XHRcdHJldHVybiBtLmZvcm1hdCgnRCBNTU0uJyk7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG0gPyBtLmZvcm1hdCgnTEwnKSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU3RhbXBJblVUQ1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdCh0aW1lU3RhbXBJblVUQywgZm9ybWF0U3RyKSB7XG5cdGxldCBtID0gbnVsbCxcblx0XHRyZXN1bHQgPSAnJztcblxuXHRjb25zdCBub3cgPSBtb21lbnROb3dVbml4KCk7XG5cblx0dGltZVN0YW1wSW5VVEMgPSAwIDwgdGltZVN0YW1wSW5VVEMgPyB0aW1lU3RhbXBJblVUQyA6IDAgPT09IHRpbWVTdGFtcEluVVRDID8gbm93IDogMDtcblx0dGltZVN0YW1wSW5VVEMgPSBub3cgPCB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IHRpbWVTdGFtcEluVVRDO1xuXG5cdG0gPSAwIDwgdGltZVN0YW1wSW5VVEMgPyBtb21lbnQudW5peCh0aW1lU3RhbXBJblVUQykgOiBudWxsO1xuXG5cdGlmIChtICYmIDE5NzAgPT09IG0ueWVhcigpKSB7XG5cdFx0bSA9IG51bGw7XG5cdH1cblxuXHRpZiAobSkge1xuXHRcdHN3aXRjaCAoZm9ybWF0U3RyKSB7XG5cdFx0XHRjYXNlICdGUk9NTk9XJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mcm9tTm93KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnU0hPUlQnOlxuXHRcdFx0XHRyZXN1bHQgPSBmb3JtYXRDdXN0b21TaG9ydERhdGUobSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnRlVMTCc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KCdMTEwnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdChmb3JtYXRTdHIpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudFRvTm9kZShlbGVtZW50KSB7XG5cdGxldCBrZXkgPSAnJyxcblx0XHR0aW1lID0gMDtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHR0aW1lID0gJGVsLmRhdGEoJ21vbWVudC10aW1lJyk7XG5cdGlmICh0aW1lKSB7XG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwudGV4dChmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQtdGl0bGUnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwuYXR0cigndGl0bGUnLCBmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWQoKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJy5tb21lbnQnLCB3aW5kb3cuZG9jdW1lbnQpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRtb21lbnRUb05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuaGFzaGVyOyIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIHJlZGVmaW5lKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIi8qKlxuICogQHJldHVybnMge0FwcEFkbWlufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwKCkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQXBwL0FkbWluJykuZGVmYXVsdDtcbn1cbiIsInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXMoV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhcyhTeW1ib2wsIG5hbWUpKSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgZWxzZSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBMYW5ndWFnZVN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZSA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXMgfSlcblx0XHRcdC5leHRlbmQoeyByZXZlcnNpYmxlOiB0cnVlIH0pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKCcnKVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLmxhbmd1YWdlc0FkbWluIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMudXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2VBZG1pbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgYUxhbmd1YWdlcyA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsYW5ndWFnZXMnKSxcblx0XHRcdGFMYW5ndWFnZXNBZG1pbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsYW5ndWFnZXNBZG1pbicpO1xuXG5cdFx0dGhpcy5sYW5ndWFnZXMoaXNBcnJheShhTGFuZ3VhZ2VzKSA/IGFMYW5ndWFnZXMgOiBbXSk7XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbihpc0FycmF5KGFMYW5ndWFnZXNBZG1pbikgPyBhTGFuZ3VhZ2VzQWRtaW4gOiBbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xhbmd1YWdlQWRtaW4nKSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxhbmd1YWdlJykpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZUFkbWluJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMYW5ndWFnZVN0b3JlKCk7XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVKb2luID0gW10uam9pbjtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPSBPYmplY3Q7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEVTM19TVFJJTkdTIHx8ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbi5jYWxsKHRvSW5kZXhlZE9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlIH0gZnJvbSAnU3RvcmVzL0Fic3RyYWN0QXBwJztcblxuY2xhc3MgQXBwQWRtaW5TdG9yZSBleHRlbmRzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMud2Vha1Bhc3N3b3JkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZGF0YUZvbGRlckFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0c3VwZXIucG9wdWxhdGUoKTtcblxuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlKCEhc2V0dGluZ3NHZXQoJ0RldGVybWluZVVzZXJMYW5ndWFnZScpKTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4oISFzZXR0aW5nc0dldCgnRGV0ZXJtaW5lVXNlckRvbWFpbicpKTtcblxuXHRcdHRoaXMud2Vha1Bhc3N3b3JkKCEhc2V0dGluZ3NHZXQoJ1dlYWtQYXNzd29yZCcpKTtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyghIXNldHRpbmdzR2V0KCdVc2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMnKSk7XG5cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0JC5nZXQoJy4vZGF0YS9WRVJTSU9OPycgKyB3aW5kb3cuTWF0aC5yYW5kb20oKSkudGhlbigoKSA9PiB0aGlzLmRhdGFGb2xkZXJBY2Nlc3ModHJ1ZSkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXBwQWRtaW5TdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGFkZHJlc3NwYXJzZXIgZnJvbSAnZW1haWxqcy1hZGRyZXNzcGFyc2VyJztcbmltcG9ydCB7IHRyaW0sIGVuY29kZUh0bWwsIGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmNsYXNzIEVtYWlsTW9kZWwge1xuXHRlbWFpbCA9ICcnO1xuXHRuYW1lID0gJyc7XG5cdGRraW1TdGF0dXMgPSAnJztcblx0ZGtpbVZhbHVlID0gJyc7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZW1haWwgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGRraW1TdGF0dXMgPSAnbm9uZSdcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltVmFsdWUgPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZW1haWwgPSAnJywgbmFtZSA9ICcnLCBka2ltU3RhdHVzID0gJ25vbmUnLCBka2ltVmFsdWUgPSAnJykge1xuXHRcdHRoaXMuZW1haWwgPSBlbWFpbDtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMuZGtpbVN0YXR1cyA9IGRraW1TdGF0dXM7XG5cdFx0dGhpcy5ka2ltVmFsdWUgPSBka2ltVmFsdWU7XG5cblx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtBamF4SnNvbkVtYWlsfSBqc29uXG5cdCAqIEByZXR1cm5zIHs/RW1haWxNb2RlbH1cblx0ICovXG5cdHN0YXRpYyBuZXdJbnN0YW5jZUZyb21Kc29uKGpzb24pIHtcblx0XHRjb25zdCBlbWFpbCA9IG5ldyBFbWFpbE1vZGVsKCk7XG5cdFx0cmV0dXJuIGVtYWlsLmluaXRCeUpzb24oanNvbikgPyBlbWFpbCA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmVtYWlsID0gJyc7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmRraW1TdGF0dXMgPSAnbm9uZSc7XG5cdFx0dGhpcy5ka2ltVmFsdWUgPSAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHZhbGlkYXRlKCkge1xuXHRcdHJldHVybiAnJyAhPT0gdGhpcy5uYW1lIHx8ICcnICE9PSB0aGlzLmVtYWlsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gd2l0aG91dE5hbWUgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aGFzaCh3aXRob3V0TmFtZSA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuICcjJyArICh3aXRob3V0TmFtZSA/ICcnIDogdGhpcy5uYW1lKSArICcjJyArIHRoaXMuZW1haWwgKyAnIyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckR1cGxpY2F0ZU5hbWUoKSB7XG5cdFx0aWYgKHRoaXMubmFtZSA9PT0gdGhpcy5lbWFpbCkge1xuXHRcdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHNlYXJjaChxdWVyeSkge1xuXHRcdHJldHVybiAtMSA8ICh0aGlzLm5hbWUgKyAnICcgKyB0aGlzLmVtYWlsKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbkVtYWlsfSBvSnNvbkVtYWlsXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvRW1haWwnID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHRoaXMubmFtZSA9IHRyaW0oanNvbi5OYW1lKTtcblx0XHRcdHRoaXMuZW1haWwgPSB0cmltKGpzb24uRW1haWwpO1xuXHRcdFx0dGhpcy5ka2ltU3RhdHVzID0gdHJpbShqc29uLkRraW1TdGF0dXMgfHwgJycpO1xuXHRcdFx0dGhpcy5ka2ltVmFsdWUgPSB0cmltKGpzb24uRGtpbVZhbHVlIHx8ICcnKTtcblxuXHRcdFx0cmVzdWx0ID0gJycgIT09IHRoaXMuZW1haWw7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gdXNlRW5jb2RlSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSwgdXNlRW5jb2RlSHRtbCA9IGZhbHNlKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGlmICgnJyAhPT0gdGhpcy5lbWFpbCkge1xuXHRcdFx0aWYgKGZyaWVuZGx5VmlldyAmJiAnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHdyYXBXaXRoTGlua1xuXHRcdFx0XHRcdD8gJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHQgICc/dG89JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0ICAnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLm5hbWUpICtcblx0XHRcdFx0XHQgICc8L2E+J1xuXHRcdFx0XHRcdDogdXNlRW5jb2RlSHRtbFxuXHRcdFx0XHRcdD8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpXG5cdFx0XHRcdFx0OiB0aGlzLm5hbWU7XG5cdFx0XHRcdC8vIHJlc3VsdCA9IHdyYXBXaXRoTGluayA/ICc8YSBocmVmPVwibWFpbHRvOicgKyBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICsgZW5jb2RlSHRtbCh0aGlzLm5hbWUpICsgJzwvYT4nIDogKHVzZUVuY29kZUh0bWwgPyBlbmNvZGVIdG1sKHRoaXMubmFtZSkgOiB0aGlzLm5hbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5lbWFpbDtcblx0XHRcdFx0aWYgKCcnICE9PSB0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHRpZiAod3JhcFdpdGhMaW5rKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICtcblx0XHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0XHQnP3RvPScgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwocmVzdWx0KSArXG5cdFx0XHRcdFx0XHRcdCc8L2E+JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJz4nKTtcblx0XHRcdFx0XHRcdC8vIHJlc3VsdCA9IGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JykgKyAnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0Ly8gXHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0Ly8gXHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9ICdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyByZXN1bHQgKyAnPic7XG5cdFx0XHRcdFx0XHRpZiAodXNlRW5jb2RlSHRtbCkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBlbmNvZGVIdG1sKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0XHQnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0JzwvYT4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzcGxpdEVtYWlsTGluZShsaW5lKSB7XG5cdFx0Y29uc3QgcGFyc2VkUmVzdWx0ID0gYWRkcmVzc3BhcnNlcihsaW5lKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHBhcnNlZFJlc3VsdCkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdFx0bGV0IGV4aXN0cyA9IGZhbHNlO1xuXHRcdFx0cGFyc2VkUmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc1xuXHRcdFx0XHRcdD8gbmV3IEVtYWlsTW9kZWwoaXRlbS5hZGRyZXNzLnJlcGxhY2UoL15bPF0rKC4qKVs+XSskL2csICckMScpLCBpdGVtLm5hbWUgfHwgJycpXG5cdFx0XHRcdFx0OiBudWxsO1xuXG5cdFx0XHRcdGlmIChhZGRyZXNzICYmIGFkZHJlc3MuZW1haWwpIHtcblx0XHRcdFx0XHRleGlzdHMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goYWRkcmVzcyA/IGFkZHJlc3MudG9MaW5lKGZhbHNlKSA6IGl0ZW0ubmFtZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGV4aXN0cyA/IHJlc3VsdCA6IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzdGF0aWMgcGFyc2VFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gXy5jb21wYWN0KFxuXHRcdFx0XHRfLm1hcChwYXJzZWRSZXN1bHQsIChpdGVtKSA9PlxuXHRcdFx0XHRcdGl0ZW0uYWRkcmVzcyA/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKSA6IG51bGxcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsQWRkcmVzc1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHBhcnNlKGVtYWlsQWRkcmVzcykge1xuXHRcdGVtYWlsQWRkcmVzcyA9IHRyaW0oZW1haWxBZGRyZXNzKTtcblx0XHRpZiAoJycgPT09IGVtYWlsQWRkcmVzcykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGFkZHJlc3NwYXJzZXIoZW1haWxBZGRyZXNzKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJlc3VsdCkgJiYgcmVzdWx0WzBdKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSByZXN1bHRbMF0ubmFtZSB8fCAnJztcblx0XHRcdHRoaXMuZW1haWwgPSByZXN1bHRbMF0uYWRkcmVzcyB8fCAnJztcblx0XHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgeyBFbWFpbE1vZGVsLCBFbWFpbE1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNhY2hlID0ge307XG5cbnZhciB0aHJvd2VyID0gZnVuY3Rpb24gKGl0KSB7IHRocm93IGl0OyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgb3B0aW9ucykge1xuICBpZiAoaGFzKGNhY2hlLCBNRVRIT0RfTkFNRSkpIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV07XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICB2YXIgQUNDRVNTT1JTID0gaGFzKG9wdGlvbnMsICdBQ0NFU1NPUlMnKSA/IG9wdGlvbnMuQUNDRVNTT1JTIDogZmFsc2U7XG4gIHZhciBhcmd1bWVudDAgPSBoYXMob3B0aW9ucywgMCkgPyBvcHRpb25zWzBdIDogdGhyb3dlcjtcbiAgdmFyIGFyZ3VtZW50MSA9IGhhcyhvcHRpb25zLCAxKSA/IG9wdGlvbnNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXSA9ICEhbWV0aG9kICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKEFDQ0VTU09SUyAmJiAhREVTQ1JJUFRPUlMpIHJldHVybiB0cnVlO1xuICAgIHZhciBPID0geyBsZW5ndGg6IC0xIH07XG5cbiAgICBpZiAoQUNDRVNTT1JTKSBkZWZpbmVQcm9wZXJ0eShPLCAxLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogdGhyb3dlciB9KTtcbiAgICBlbHNlIE9bMV0gPSAxO1xuXG4gICAgbWV0aG9kLmNhbGwoTywgYXJndW1lbnQwLCBhcmd1bWVudDEpO1xuICB9KTtcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQsIHRyaW0sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0SW5wdXQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSB8fCAnJztcblx0XHR0aGlzLnNpemUgPSBwYXJhbXMuc2l6ZSB8fCAwO1xuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5wcmVMYWJlbCA9IHBhcmFtcy5wcmVMYWJlbCB8fCAnJztcblx0XHR0aGlzLmVuYWJsZSA9IGlzVW5kKHBhcmFtcy5lbmFibGUpID8gdHJ1ZSA6IHBhcmFtcy5lbmFibGU7XG5cdFx0dGhpcy50cmlnZ2VyID0gcGFyYW1zLnRyaWdnZXIgJiYgcGFyYW1zLnRyaWdnZXIuc3Vic2NyaWJlID8gcGFyYW1zLnRyaWdnZXIgOiBudWxsO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgfHwgJyc7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLnByZUxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLnByZUxhYmVsKTtcblx0XHR0aGlzLnRyaWdnZXJlZCA9ICFpc1VuZChwYXJhbXMudHJpZ2dlcikgJiYgISF0aGlzLnRyaWdnZXI7XG5cblx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jbGFzc05hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzaXplID0ga28udW53cmFwKHRoaXMuc2l6ZSksXG5cdFx0XHRcdHN1ZmZpeFZhbHVlID0gdGhpcy50cmlnZ2VyID8gJyAnICsgdHJpbSgnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCAnICsgdGhpcy5jbGFzc0ZvclRyaWdnZXIoKSkgOiAnJztcblx0XHRcdHJldHVybiAoMCA8IHNpemUgPyAnc3BhbicgKyBzaXplIDogJycpICsgc3VmZml4VmFsdWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy53aWR0aCkgJiYgcGFyYW1zLmVsZW1lbnQpIHtcblx0XHRcdHBhcmFtcy5lbGVtZW50LmZpbmQoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScpLmNzcygnd2lkdGgnLCBwYXJhbXMud2lkdGgpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMuY2xhc3NOYW1lKTtcblxuXHRcdGlmICh0aGlzLnRyaWdnZXIpIHtcblx0XHRcdHRoaXMuc2V0VHJpZ2dlclN0YXRlKHRoaXMudHJpZ2dlcigpKTtcblxuXHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy50cmlnZ2VyLnN1YnNjcmliZSh0aGlzLnNldFRyaWdnZXJTdGF0ZSwgdGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHNldFRyaWdnZXJTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignc3VjY2VzcycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJ2Vycm9yJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJycpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RJbnB1dCwgQWJzdHJhY3RJbnB1dCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgQ2FwYSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQ2FwYUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFkZGl0aW9uYWxBY2NvdW50cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ3JhdmF0YXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRUaHVtYm5haWxzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVycyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5vcGVuUEdQID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlbXBsYXRlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQWNjb3VudHMoU2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cykpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyhTZXR0aW5ncy5jYXBhKENhcGEuSWRlbnRpdGllcykpO1xuXHRcdHRoaXMuZ3JhdmF0YXIoU2V0dGluZ3MuY2FwYShDYXBhLkdyYXZhdGFyKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50VGh1bWJuYWlscyhTZXR0aW5ncy5jYXBhKENhcGEuQXR0YWNobWVudFRodW1ibmFpbHMpKTtcblx0XHR0aGlzLnNpZXZlKFNldHRpbmdzLmNhcGEoQ2FwYS5TaWV2ZSkpO1xuXHRcdHRoaXMuZmlsdGVycyhTZXR0aW5ncy5jYXBhKENhcGEuRmlsdGVycykpO1xuXHRcdHRoaXMudGhlbWVzKFNldHRpbmdzLmNhcGEoQ2FwYS5UaGVtZXMpKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kKFNldHRpbmdzLmNhcGEoQ2FwYS5Vc2VyQmFja2dyb3VuZCkpO1xuXHRcdHRoaXMub3BlblBHUChTZXR0aW5ncy5jYXBhKENhcGEuT3BlblBHUCkpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aChTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yKSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UoU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvckZvcmNlKSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXMoU2V0dGluZ3MuY2FwYShDYXBhLlRlbXBsYXRlcykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDYXBhQWRtaW5TdG9yZSgpO1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVApIHtcbiAgdmFyIHN0b3JlID0gbmV3IFdlYWtNYXAoKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQYWNrYWdlQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMucGFja2FnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMucGFja2FnZXMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cblx0XHR0aGlzLnBhY2thZ2VzUmVhbCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5wYWNrYWdlc01haW5VcGRhdGFibGUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQYWNrYWdlQWRtaW5TdG9yZSgpO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lm1vbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5wcm9ncmVzc0pzOyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWSB8fCBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWTtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IHJlZ2V4cEZsYWdzLmNhbGwocmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCd5JywgJycpO1xuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gU3RyaW5nKHN0cikuc2xpY2UocmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIHN0cltyZS5sYXN0SW5kZXggLSAxXSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuLy8gbGV0IHJhaW5sb29wQ2FjaGVzID0gd2luZG93LmNhY2hlcyAmJiB3aW5kb3cuY2FjaGVzLm9wZW4gPyB3aW5kb3cuY2FjaGVzIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3NyY30gc3JjXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFzeW5jID0gZmFsc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gamFzc2woc3JjLCBhc3luYyA9IGZhbHNlKSB7XG5cdGlmICghd2luZG93LlByb21pc2UgfHwgIXdpbmRvdy5Qcm9taXNlLmFsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgYXJlIG5vdCBhdmFpbGFibGUgeW91ciBlbnZpcm9ubWVudC4nKTtcblx0fVxuXG5cdGlmICghc3JjKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdzcmMgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0fVxuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cblx0XHRlbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHJlc29sdmUoc3JjKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihzcmMpKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5hc3luYyA9IHRydWUgPT09IGFzeW5jO1xuXHRcdGVsZW1lbnQuc3JjID0gc3JjO1xuXG5cdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH0pIC8qIC50aGVuKChzKSA9PiB7XG5cblx0XHRjb25zdCBmb3VuZCA9IHMgJiYgcmFpbmxvb3BDYWNoZXMgPyBzLm1hdGNoKC9yYWlubG9vcFxcL3ZcXC8oW15cXC9dKylcXC9zdGF0aWNcXC8vKSA6IG51bGw7XG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kWzFdKVxuXHRcdHtcblx0XHRcdHJhaW5sb29wQ2FjaGVzLm9wZW4oJ3JhaW5sb29wLW9mZmxpbmUtJyArIGZvdW5kWzFdKS50aGVuKFxuXHRcdFx0XHQoY2FjaGUpID0+IGNhY2hlLmFkZChzKVxuXHRcdFx0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJhaW5sb29wQ2FjaGVzID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzO1xuXHR9KSovO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFRoZW1lU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRoZW1lID0ga28ub2JzZXJ2YWJsZSgnJykuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMudGhlbWVzIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgdGhlbWVzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3RoZW1lcycpO1xuXG5cdFx0dGhpcy50aGVtZXMoaXNBcnJheSh0aGVtZXMpID8gdGhlbWVzIDogW10pO1xuXHRcdHRoaXMudGhlbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RoZW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmROYW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZVN0b3JlKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQbHVnaW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wbHVnaW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBsdWdpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5wbHVnaW5zLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbkFkbWluU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIExpY2Vuc2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saWNlbnNpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2luZ1Byb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2VWYWxpZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zZUV4cGlyZWQgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMubGljZW5zZUVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxpY2Vuc2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExpY2Vuc2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyICRmZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSkge1xuICAgIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgIGlmIChWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gICAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIGlmICghSVNfTk9ERSAmJiB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ICE9ICdmdW5jdGlvbicpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFByb21pc2VDb25zdHJ1Y3RvcikpIHJldHVybiBmYWxzZTtcbiAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICByZXR1cm4gIShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlKTtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQocHJvbWlzZSwgc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgcHJvbWlzZSwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4ocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHByb21pc2UsIHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgd3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdChwcm9taXNlLCB7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB0aGlzLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHRoaXMsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHRoaXMsIHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHRoaXMsIHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2UucHJvdG90eXBlLnRoZW47XG5cbiAgICAvLyB3cmFwIG5hdGl2ZSBQcm9taXNlI3RoZW4gZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgLy8gd3JhcCBmZXRjaCByZXN1bHRcbiAgICBpZiAodHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShQcm9taXNlQ29uc3RydWN0b3IsICRmZXRjaC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgY2FwYWJpbGl0eS5yZWplY3QuY2FsbCh1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoSVNfUFVSRSAmJiB0aGlzID09PSBQcm9taXNlV3JhcHBlciA/IFByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgLy8gYFByb21pc2UuYWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgUFJFRkVSUkVEX1NUUklORykge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaW5wdXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCJ2YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy42LjQnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjAgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICByZXR1cm4gIVN0cmluZyhTeW1ib2woKSk7XG59KTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIHBvc3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiYgIWZhaWxzKHBvc3QpKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gLyhpcGhvbmV8aXBvZHxpcGFkKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbi8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuLy8gV2VleCBKUyBoYXMgZnJvemVuIGJ1aWx0LWluIHByb3RvdHlwZXMsIHNvIHVzZSB0cnkgLyBjYXRjaCB3cmFwcGVyXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoICE9PSAyIHx8IHJlc3VsdFswXSAhPT0gJ2EnIHx8IHJlc3VsdFsxXSAhPT0gJ2InO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjLCBzaGFtKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIShcbiAgICAgIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTICYmXG4gICAgICBSRVBMQUNFX0tFRVBTXyQwICYmXG4gICAgICAhUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICApKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0sIHtcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDA6IFJFUExBQ0VfS0VFUFNfJDAsXG4gICAgICBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTogUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICB9KTtcbiAgICB2YXIgc3RyaW5nTWV0aG9kID0gbWV0aG9kc1swXTtcbiAgICB2YXIgcmVnZXhNZXRob2QgPSBtZXRob2RzWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJpbmdNZXRob2QpO1xuICAgIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG5cbiAgaWYgKHNoYW0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHAucHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL2NsYXNzb2YtcmF3Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuXG4gIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG59O1xuXG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc05vbkVtcHR5QXJyYXksIG5vb3AgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTY3JlZW4ge1xuXHRvQ3Jvc3MgPSBudWxsO1xuXHRzU2NyZWVuTmFtZTtcblx0YVZpZXdNb2RlbHM7XG5cblx0Y29uc3RydWN0b3Ioc2NyZWVuTmFtZSwgdmlld01vZGVscyA9IFtdKSB7XG5cdFx0dGhpcy5zU2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0dGhpcy5hVmlld01vZGVscyA9IGlzQXJyYXkodmlld01vZGVscykgPyB2aWV3TW9kZWxzIDogW107XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0dmlld01vZGVscygpIHtcblx0XHRyZXR1cm4gdGhpcy5hVmlld01vZGVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0c2NyZWVuTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zU2NyZWVuTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P0FycmF5KX1cblx0ICovXG5cdHJvdXRlcygpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P09iamVjdH1cblx0ICovXG5cdF9fY3Jvc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0Nyb3NzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0X19zdGFydCgpIHtcblx0XHRsZXQgcm91dGUgPSBudWxsLFxuXHRcdFx0Zk1hdGNoZXIgPSBudWxsO1xuXHRcdGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzKCk7XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJvdXRlcykpIHtcblx0XHRcdGZNYXRjaGVyID0gXy5iaW5kKHRoaXMub25Sb3V0ZSB8fCBub29wLCB0aGlzKTtcblx0XHRcdHJvdXRlID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblxuXHRcdFx0cm91dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgcm91dGUpIHtcblx0XHRcdFx0XHRyb3V0ZS5hZGRSb3V0ZShpdGVtWzBdLCBmTWF0Y2hlcikucnVsZXMgPSBpdGVtWzFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5vQ3Jvc3MgPSByb3V0ZTtcblx0XHR9XG5cdH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5zc207IiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXMoaGlkZGVuS2V5cywga2V5KSAmJiBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBpdGVyYXRlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGZuLCB0aGF0LCBBU19FTlRSSUVTLCBJU19JVEVSQVRPUikge1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoZm4sIHRoYXQsIEFTX0VOVFJJRVMgPyAyIDogMSk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBBU19FTlRSSUVTXG4gICAgICAgICAgPyBib3VuZEZ1bmN0aW9uKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKVxuICAgICAgICAgIDogYm91bmRGdW5jdGlvbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIGJvdW5kRnVuY3Rpb24sIHN0ZXAudmFsdWUsIEFTX0VOVFJJRVMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcblxuaXRlcmF0ZS5zdG9wID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCByZXN1bHQpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgRG9tYWluQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5kb21haW5zLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxMDAgfSk7XG5cdFx0dGhpcy5kb21haW5zV2l0aG91dEFsaWFzZXMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgIWl0ZW0uYWxpYXMpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRG9tYWluQWRtaW5TdG9yZSgpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgKi9cbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBkb2N1bWVudC5kb21haW4gJiYgbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IGFjdGl2ZVhEb2N1bWVudCA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpO1xuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdICsgbWF0Y2hbMV07XG59IGVsc2UgaWYgKHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJPdXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgSVNfRklMVEVSX09VVCA9IFRZUEUgPT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9PVVQgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlck91dFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyT3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlck91dDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuY3Jvc3Nyb2FkczsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdENoZWNrYm94IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyA9IHt9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlO1xuXHRcdGlmIChpc1VuZCh0aGlzLnZhbHVlKSB8fCAhdGhpcy52YWx1ZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMudmFsdWUpID8gZmFsc2UgOiAhIXRoaXMudmFsdWUpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW5hYmxlID0gcGFyYW1zLmVuYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5lbmFibGUpIHx8ICF0aGlzLmVuYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZW5hYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmVuYWJsZSkgPyB0cnVlIDogISF0aGlzLmVuYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNhYmxlID0gcGFyYW1zLmRpc2FibGU7XG5cdFx0aWYgKGlzVW5kKHRoaXMuZGlzYWJsZSkgfHwgIXRoaXMuZGlzYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZGlzYWJsZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy5kaXNhYmxlKSA/IGZhbHNlIDogISF0aGlzLmRpc2FibGUpO1xuXHRcdH1cblxuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblxuXHRcdHRoaXMucmVhZE9ubHkgPSBpc1VuZChwYXJhbXMucmVhZE9ubHkpID8gZmFsc2UgOiAhIXBhcmFtcy5yZWFkT25seTtcblx0XHR0aGlzLmludmVydGVkID0gaXNVbmQocGFyYW1zLmludmVydGVkKSA/IGZhbHNlIDogISFwYXJhbXMuaW52ZXJ0ZWQ7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLmxhYmVsQW5pbWF0ZWQgPSAhIXBhcmFtcy5sYWJlbEFuaW1hdGVkO1xuXHR9XG5cblx0Y2xpY2soKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWRPbmx5ICYmIHRoaXMuZW5hYmxlKCkgJiYgIXRoaXMuZGlzYWJsZSgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlKCF0aGlzLnZhbHVlKCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdENoZWNrYm94LCBBYnN0cmFjdENoZWNrYm94IGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2U7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgdmFyIHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKTtcbiAgdmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZSgpO1xuXG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGFkZHJlc3MgPSBbXTtcbiAgdmFyIHBhcnNlZEFkZHJlc3NlcyA9IFtdO1xuXG4gIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnb3BlcmF0b3InICYmICh0b2tlbi52YWx1ZSA9PT0gJywnIHx8IHRva2VuLnZhbHVlID09PSAnOycpKSB7XG4gICAgICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gICAgICB9XG4gICAgICBhZGRyZXNzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgcGFyc2VkQWRkcmVzc2VzID0gcGFyc2VkQWRkcmVzc2VzLmNvbmNhdChhZGRyZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRva2VucyBmb3IgYSBzaW5nbGUgYWRkcmVzcyBpbnRvIGFuIGFkZHJlc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtBcnJheX0gdG9rZW5zIFRva2VucyBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gQWRkcmVzcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2hhbmRsZUFkZHJlc3ModG9rZW5zKSB7XG4gIHZhciBpc0dyb3VwID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9ICd0ZXh0JztcbiAgdmFyIGFkZHJlc3MgPSB2b2lkIDA7XG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG5cbiAgICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgfTtmb3IgKHZhciBpID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgc3RhdGUgPSAnYWRkcmVzcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc6JzpcbiAgICAgICAgICBzdGF0ZSA9ICdncm91cCc7XG4gICAgICAgICAgaXNHcm91cCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3RhdGUgPSAndGV4dCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQsIHJlcGxhY2UgdGhlIHR3b1xuICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgIGRhdGEudGV4dCA9IGRhdGEuY29tbWVudDtcbiAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJyk7XG4gICAgYWRkcmVzc2VzLnB1c2goe1xuICAgICAgbmFtZTogZGF0YS50ZXh0IHx8IGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lLFxuICAgICAgZ3JvdXA6IGRhdGEuZ3JvdXAubGVuZ3RoID8gcGFyc2UoZGF0YS5ncm91cC5qb2luKCcsJykpIDogW11cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgX2kgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kgPj0gMDsgX2ktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W19pXS5tYXRjaCgvXlteQFxcc10rQFteQFxcc10rJC8pKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gZGF0YS50ZXh0LnNwbGljZShfaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIF9yZWdleEhhbmRsZXIgPSBmdW5jdGlvbiBfcmVnZXhIYW5kbGVyKGFkZHJlc3MpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gW2FkZHJlc3MudHJpbSgpXTtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgX2kyID0gZGF0YS50ZXh0Lmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTItLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtfaTJdID0gZGF0YS50ZXh0W19pMl0ucmVwbGFjZSgvXFxzKlxcYlteQFxcc10rQFteQFxcc10rXFxiXFxzKi8sIF9yZWdleEhhbmRsZXIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgICAgZGF0YS5jb21tZW50ID0gW107XG4gICAgfVxuXG4gICAgLy8gS2VlcCBvbmx5IHRoZSBmaXJzdCBhZGRyZXNzIG9jY3VyZW5jZSwgcHVzaCBvdGhlcnMgdG8gcmVndWxhciB0ZXh0XG4gICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuY29uY2F0KGRhdGEuYWRkcmVzcy5zcGxpY2UoMSkpO1xuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3Muam9pbignICcpO1xuXG4gICAgaWYgKCFkYXRhLmFkZHJlc3MgJiYgaXNHcm91cCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWRkcmVzcy5hZGRyZXNzID09PSBhZGRyZXNzLm5hbWUpIHtcbiAgICAgICAgaWYgKChhZGRyZXNzLmFkZHJlc3MgfHwgJycpLm1hdGNoKC9ALykpIHtcbiAgICAgICAgICBhZGRyZXNzLm5hbWUgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWRkcmVzc2VzO1xufTtcblxuLypcbiAqIE9wZXJhdG9yIHRva2VucyBhbmQgd2hpY2ggdG9rZW5zIGFyZSBleHBlY3RlZCB0byBlbmQgdGhlIHNlcXVlbmNlXG4gKi9cbnZhciBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVG9rZW5pemVyIG9iamVjdCBmb3IgdG9rZW5pemluZyBhZGRyZXNzIGZpZWxkIHN0cmluZ3NcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZCBzdHJpbmdcbiAgICovXG59O1xudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW5pemVyKHN0cikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2tlbml6ZXIpO1xuXG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpO1xuICAgIHRoaXMub3BlcmF0b3JDdXJyZW50ID0gJyc7XG4gICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgdGhpcy5saXN0ID0gW107XG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKFRva2VuaXplciwgW3tcbiAgICBrZXk6ICd0b2tlbml6ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRva2VuaXplKCkge1xuICAgICAgdmFyIGNociA9IHZvaWQgMDtcbiAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY2hyID0gdGhpcy5zdHIuY2hhckF0KGkpO1xuICAgICAgICB0aGlzLmNoZWNrQ2hhcihjaHIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxpc3QuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgIGxpc3QucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGNoYXJhY3RlciBpcyBhbiBvcGVyYXRvciBvciB0ZXh0IGFuZCBhY3RzIGFjY29yZGluZ2x5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NoZWNrQ2hhcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoZWNrQ2hhcihjaHIpIHtcbiAgICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wZXJhdG9yRXhwZWN0aW5nICYmIGNociA9PT0gdGhpcy5vcGVyYXRvckV4cGVjdGluZykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJztcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyIGluIE9QRVJBVE9SUykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXTtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmVzY2FwZWQgJiYgY2hyID09PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3QucHVzaCh0aGlzLm5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5lc2NhcGVkICYmIGNociAhPT0gJ1xcXFwnKSB7XG4gICAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSBjaHI7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9rZW5pemVyO1xufSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTloWkdSeVpYTnpjR0Z5YzJWeUxtcHpJbDBzSW01aGJXVnpJanBiSW5CaGNuTmxJaXdpYzNSeUlpd2lkRzlyWlc1cGVtVnlJaXdpVkc5clpXNXBlbVZ5SWl3aWRHOXJaVzV6SWl3aWRHOXJaVzVwZW1VaUxDSmhaR1J5WlhOelpYTWlMQ0poWkdSeVpYTnpJaXdpY0dGeWMyVmtRV1JrY21WemMyVnpJaXdpWm05eVJXRmphQ0lzSW5SdmEyVnVJaXdpZEhsd1pTSXNJblpoYkhWbElpd2liR1Z1WjNSb0lpd2ljSFZ6YUNJc0lsOW9ZVzVrYkdWQlpHUnlaWE56SWl3aVkyOXVZMkYwSWl3aWFYTkhjbTkxY0NJc0luTjBZWFJsSWl3aVpHRjBZU0lzSW1OdmJXMWxiblFpTENKbmNtOTFjQ0lzSW5SbGVIUWlMQ0pwSWl3aWJHVnVJaXdpYW05cGJpSXNJbTVoYldVaUxDSnRZWFJqYUNJc0luTndiR2xqWlNJc0lsOXlaV2RsZUVoaGJtUnNaWElpTENKMGNtbHRJaXdpY21Wd2JHRmpaU0lzSWs5UVJWSkJWRTlTVXlJc0luUnZVM1J5YVc1bklpd2liM0JsY21GMGIzSkRkWEp5Wlc1MElpd2liM0JsY21GMGIzSkZlSEJsWTNScGJtY2lMQ0p1YjJSbElpd2laWE5qWVhCbFpDSXNJbXhwYzNRaUxDSmphSElpTENKamFHRnlRWFFpTENKamFHVmphME5vWVhJaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPMnRDUVdOM1FrRXNTenM3T3p0QlFXUjRRanM3T3pzN096czdPenM3T3pzN1FVRmpaU3hUUVVGVFFTeExRVUZVTEVOQlFXZENReXhIUVVGb1FpeEZRVUZ4UWp0QlFVTnNReXhOUVVGTlF5eFpRVUZaTEVsQlFVbERMRk5CUVVvc1EwRkJZMFlzUjBGQlpDeERRVUZzUWp0QlFVTkJMRTFCUVUxSExGTkJRVk5HTEZWQlFWVkhMRkZCUVZZc1JVRkJaanM3UVVGRlFTeE5RVUZOUXl4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlNVTXNWVUZCVlN4RlFVRmtPMEZCUTBFc1RVRkJTVU1zYTBKQlFXdENMRVZCUVhSQ096dEJRVVZCU2l4VFFVRlBTeXhQUVVGUUxFTkJRV1VzVlVGQlZVTXNTMEZCVml4RlFVRnBRanRCUVVNNVFpeFJRVUZKUVN4TlFVRk5ReXhKUVVGT0xFdEJRV1VzVlVGQlppeExRVUU0UWtRc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRm9RaXhKUVVGMVFrWXNUVUZCVFVVc1MwRkJUaXhMUVVGblFpeEhRVUZ5UlN4RFFVRktMRVZCUVN0Rk8wRkJRemRGTEZWQlFVbE1MRkZCUVZGTkxFMUJRVm9zUlVGQmIwSTdRVUZEYkVKUUxHdENRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEdEJRVU5FUVN4blFrRkJWU3hGUVVGV08wRkJRMFFzUzBGTVJDeE5RVXRQTzBGQlEweEJMR05CUVZGUExFbEJRVklzUTBGQllVb3NTMEZCWWp0QlFVTkVPMEZCUTBZc1IwRlVSRHM3UVVGWFFTeE5RVUZKU0N4UlFVRlJUU3hOUVVGYUxFVkJRVzlDTzBGQlEyeENVQ3hqUVVGVlVTeEpRVUZXTEVOQlFXVlFMRTlCUVdZN1FVRkRSRHM3UVVGRlJFUXNXVUZCVlVjc1QwRkJWaXhEUVVGclFpeFZRVUZWUml4UFFVRldMRVZCUVcxQ08wRkJRMjVEUVN4alFVRlZVU3hsUVVGbFVpeFBRVUZtTEVOQlFWWTdRVUZEUVN4UlFVRkpRU3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1RDeDNRa0ZCYTBKQkxHZENRVUZuUWxFc1RVRkJhRUlzUTBGQmRVSlVMRTlCUVhaQ0xFTkJRV3hDTzBGQlEwUTdRVUZEUml4SFFVeEVPenRCUVU5QkxGTkJRVTlETEdWQlFWQTdRVUZEUkRzN1FVRkZSRHM3T3pzN08wRkJUVUVzVTBGQlUwOHNZMEZCVkN4RFFVRjVRbGdzVFVGQmVrSXNSVUZCYVVNN1FVRkRMMElzVFVGQlNXRXNWVUZCVlN4TFFVRmtPMEZCUTBFc1RVRkJTVU1zVVVGQlVTeE5RVUZhTzBGQlEwRXNUVUZCU1Znc1owSkJRVW83UVVGRFFTeE5RVUZOUkN4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlRXRXNUMEZCVHp0QlFVTllXaXhoUVVGVExFVkJSRVU3UVVGRldHRXNZVUZCVXl4RlFVWkZPMEZCUjFoRExGZEJRVThzUlVGSVNUdEJRVWxZUXl4VlFVRk5PenRCUVVkU08wRkJVR0VzUjBGQllpeERRVkZCTEV0QlFVc3NTVUZCU1VNc1NVRkJTU3hEUVVGU0xFVkJRVmRETEUxQlFVMXdRaXhQUVVGUFV5eE5RVUUzUWl4RlFVRnhRMVVzU1VGQlNVTXNSMEZCZWtNc1JVRkJPRU5FTEVkQlFUbERMRVZCUVcxRU8wRkJRMnBFTEZGQlFVMWlMRkZCUVZGT0xFOUJRVTl0UWl4RFFVRlFMRU5CUVdRN08wRkJSVUVzVVVGQlNXSXNUVUZCVFVNc1NVRkJUaXhMUVVGbExGVkJRVzVDTEVWQlFTdENPMEZCUXpkQ0xHTkJRVkZFTEUxQlFVMUZMRXRCUVdRN1FVRkRSU3hoUVVGTExFZEJRVXc3UVVGRFJVMHNhMEpCUVZFc1UwRkJVanRCUVVOQk8wRkJRMFlzWVVGQlN5eEhRVUZNTzBGQlEwVkJMR3RDUVVGUkxGTkJRVkk3UVVGRFFUdEJRVU5HTEdGQlFVc3NSMEZCVER0QlFVTkZRU3hyUWtGQlVTeFBRVUZTTzBGQlEwRkVMRzlDUVVGVkxFbEJRVlk3UVVGRFFUdEJRVU5HTzBGQlEwVkRMR3RDUVVGUkxFMUJRVkk3UVVGYVNqdEJRV05FTEV0QlprUXNUVUZsVHp0QlFVTk1MRlZCUVVsU0xFMUJRVTFGTEV0QlFWWXNSVUZCYVVJN1FVRkRaazhzWVVGQlMwUXNTMEZCVEN4RlFVRlpTaXhKUVVGYUxFTkJRV2xDU2l4TlFVRk5SU3hMUVVGMlFqdEJRVU5FTzBGQlEwWTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxFMUJRVWtzUTBGQlEwOHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUZZTEVsQlFYRkNUU3hMUVVGTFF5eFBRVUZNTEVOQlFXRlFMRTFCUVhSRExFVkJRVGhETzBGQlF6VkRUU3hUUVVGTFJ5eEpRVUZNTEVkQlFWbElMRXRCUVV0RExFOUJRV3BDTzBGQlEwRkVMRk5CUVV0RExFOUJRVXdzUjBGQlpTeEZRVUZtTzBGQlEwUTdPMEZCUlVRc1RVRkJTVWdzVDBGQlNpeEZRVUZoTzBGQlExZzdRVUZEUVVVc1UwRkJTMGNzU1VGQlRDeEhRVUZaU0N4TFFVRkxSeXhKUVVGTUxFTkJRVlZITEVsQlFWWXNRMEZCWlN4SFFVRm1MRU5CUVZvN1FVRkRRVzVDTEdOQlFWVlJMRWxCUVZZc1EwRkJaVHRCUVVOaVdTeFpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV05tTEZkQlFWZEJMRkZCUVZGdFFpeEpRVVF4UWp0QlFVVmlUQ3hoUVVGUFJpeExRVUZMUlN4TFFVRk1MRU5CUVZkU0xFMUJRVmdzUjBGQmIwSmlMRTFCUVUxdFFpeExRVUZMUlN4TFFVRk1MRU5CUVZkSkxFbEJRVmdzUTBGQlowSXNSMEZCYUVJc1EwRkJUaXhEUVVGd1FpeEhRVUZyUkR0QlFVWTFReXhMUVVGbU8wRkJTVVFzUjBGUVJDeE5RVTlQTzBGQlEwdzdRVUZEUVN4UlFVRkpMRU5CUVVOT0xFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJaQ3hKUVVGM1FrMHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUYwUXl4RlFVRTRRenRCUVVNMVF5eFhRVUZMTEVsQlFVbFZMRXRCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVFVGQlN5eERRVUY0UXl4RlFVRXlRMEVzU1VGQk0wTXNSVUZCWjBRN1FVRkRPVU1zV1VGQlNVb3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlF5eEZRVUZXTEVWQlFXRkpMRXRCUVdJc1EwRkJiVUlzYlVKQlFXNUNMRU5CUVVvc1JVRkJOa003UVVGRE0wTlNMR1ZCUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlRTeE5RVUZXTEVOQlFXbENUQ3hGUVVGcVFpeEZRVUZ2UWl4RFFVRndRaXhEUVVGbU8wRkJRMEU3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRlZCUVVsTkxHZENRVUZuUWl4VFFVRm9Ra0VzWVVGQlowSXNRMEZCVlhSQ0xFOUJRVllzUlVGQmJVSTdRVUZEY2tNc1dVRkJTU3hEUVVGRFdTeExRVUZMV2l4UFFVRk1MRU5CUVdGTkxFMUJRV3hDTEVWQlFUQkNPMEZCUTNoQ1RTeGxRVUZMV2l4UFFVRk1MRWRCUVdVc1EwRkJRMEVzVVVGQlVYVkNMRWxCUVZJc1JVRkJSQ3hEUVVGbU8wRkJRMEVzYVVKQlFVOHNSMEZCVUR0QlFVTkVMRk5CU0VRc1RVRkhUenRCUVVOTUxHbENRVUZQZGtJc1QwRkJVRHRCUVVORU8wRkJRMFlzVDBGUVJEczdRVUZUUVR0QlFVTkJMRlZCUVVrc1EwRkJRMWtzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGc1FpeEZRVUV3UWp0QlFVTjRRaXhoUVVGTExFbEJRVWxWTEUxQlFVbEtMRXRCUVV0SExFbEJRVXdzUTBGQlZWUXNUVUZCVml4SFFVRnRRaXhEUVVGb1F5eEZRVUZ0UTFVc1QwRkJTeXhEUVVGNFF5eEZRVUV5UTBFc1MwRkJNME1zUlVGQlowUTdRVUZET1VOS0xHVkJRVXRITEVsQlFVd3NRMEZCVlVNc1IwRkJWaXhKUVVGbFNpeExRVUZMUnl4SlFVRk1MRU5CUVZWRExFZEJRVllzUlVGQllWRXNUMEZCWWl4RFFVRnhRaXd5UWtGQmNrSXNSVUZCYTBSR0xHRkJRV3hFTEVWQlFXbEZReXhKUVVGcVJTeEZRVUZtTzBGQlEwRXNZMEZCU1Znc1MwRkJTMW9zVDBGQlRDeERRVUZoVFN4TlFVRnFRaXhGUVVGNVFqdEJRVU4yUWp0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVOR096dEJRVVZFTzBGQlEwRXNVVUZCU1N4RFFVRkRUU3hMUVVGTFJ5eEpRVUZNTEVOQlFWVlVMRTFCUVZnc1NVRkJjVUpOTEV0QlFVdERMRTlCUVV3c1EwRkJZVkFzVFVGQmRFTXNSVUZCT0VNN1FVRkROVU5OTEZkQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwTXNUMEZCYWtJN1FVRkRRVVFzVjBGQlMwTXNUMEZCVEN4SFFVRmxMRVZCUVdZN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEZGQlFVbEVMRXRCUVV0YUxFOUJRVXdzUTBGQllVMHNUVUZCWWl4SFFVRnpRaXhEUVVFeFFpeEZRVUUyUWp0QlFVTXpRazBzVjBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVk9MRTFCUVZZc1EwRkJhVUpITEV0QlFVdGFMRTlCUVV3c1EwRkJZWEZDTEUxQlFXSXNRMEZCYjBJc1EwRkJjRUlzUTBGQmFrSXNRMEZCV2p0QlFVTkVPenRCUVVWRU8wRkJRMEZVTEZOQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwY3NTVUZCVEN4RFFVRlZSeXhKUVVGV0xFTkJRV1VzUjBGQlppeERRVUZhTzBGQlEwRk9MRk5CUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaGEwSXNTVUZCWWl4RFFVRnJRaXhIUVVGc1FpeERRVUZtT3p0QlFVVkJMRkZCUVVrc1EwRkJRMDRzUzBGQlMxb3NUMEZCVGl4SlFVRnBRbFVzVDBGQmNrSXNSVUZCT0VJN1FVRkROVUlzWVVGQlR5eEZRVUZRTzBGQlEwUXNTMEZHUkN4TlFVVlBPMEZCUTB4V0xHZENRVUZWTzBGQlExSkJMR2xDUVVGVFdTeExRVUZMV2l4UFFVRk1MRWxCUVdkQ1dTeExRVUZMUnl4SlFVRnlRaXhKUVVFMlFpeEZRVVE1UWp0QlFVVlNTU3hqUVVGTlVDeExRVUZMUnl4SlFVRk1MRWxCUVdGSUxFdEJRVXRhTEU5QlFXeENMRWxCUVRaQ08wRkJSak5DTEU5QlFWWTdPMEZCUzBFc1ZVRkJTVUVzVVVGQlVVRXNUMEZCVWl4TFFVRnZRa0VzVVVGQlVXMUNMRWxCUVdoRExFVkJRWE5ETzBGQlEzQkRMRmxCUVVrc1EwRkJRMjVDTEZGQlFWRkJMRTlCUVZJc1NVRkJiVUlzUlVGQmNFSXNSVUZCZDBKdlFpeExRVUY0UWl4RFFVRTRRaXhIUVVFNVFpeERRVUZLTEVWQlFYZERPMEZCUTNSRGNFSXNhMEpCUVZGdFFpeEpRVUZTTEVkQlFXVXNSVUZCWmp0QlFVTkVMRk5CUmtRc1RVRkZUenRCUVVOTWJrSXNhMEpCUVZGQkxFOUJRVklzUjBGQmEwSXNSVUZCYkVJN1FVRkRSRHRCUVVOR096dEJRVVZFUkN4blFrRkJWVkVzU1VGQlZpeERRVUZsVUN4UFFVRm1PMEZCUTBRN1FVRkRSanM3UVVGRlJDeFRRVUZQUkN4VFFVRlFPMEZCUTBRN08wRkJSVVE3T3p0QlFVZEJMRWxCUVUwd1FpeFpRVUZaTzBGQlEyaENMRTlCUVVzc1IwRkVWenRCUVVWb1FpeFBRVUZMTEVkQlJsYzdRVUZIYUVJc1QwRkJTeXhIUVVoWE8wRkJTV2hDTEU5QlFVc3NSVUZLVnp0QlFVdG9RanRCUVVOQkxFOUJRVXNzUjBGT1Z6dEJRVTlvUWp0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeFBRVUZMT3p0QlFVZFFPenM3T3pzN1FVRm9RbXRDTEVOQlFXeENPMGxCYzBKTk4wSXNVenRCUVVOS0xIRkNRVUZoUml4SFFVRmlMRVZCUVd0Q08wRkJRVUU3TzBGQlEyaENMRk5CUVV0QkxFZEJRVXdzUjBGQlZ5eERRVUZEUVN4UFFVRlBMRVZCUVZJc1JVRkJXV2RETEZGQlFWb3NSVUZCV0R0QlFVTkJMRk5CUVV0RExHVkJRVXdzUjBGQmRVSXNSVUZCZGtJN1FVRkRRU3hUUVVGTFF5eHBRa0ZCVEN4SFFVRjVRaXhGUVVGNlFqdEJRVU5CTEZOQlFVdERMRWxCUVV3c1IwRkJXU3hKUVVGYU8wRkJRMEVzVTBGQlMwTXNUMEZCVEN4SFFVRmxMRXRCUVdZN1FVRkRRU3hUUVVGTFF5eEpRVUZNTEVkQlFWa3NSVUZCV2p0QlFVTkVPenRCUVVWRU96czdPenM3T3pzN0swSkJTMWs3UVVGRFZpeFZRVUZKUXl4WlFVRktPMEZCUTBFc1ZVRkJTVVFzVDBGQlR5eEZRVUZZTzBGQlEwRXNWMEZCU3l4SlFVRkpaaXhKUVVGSkxFTkJRVklzUlVGQlYwTXNUVUZCVFN4TFFVRkxka0lzUjBGQlRDeERRVUZUV1N4TlFVRXZRaXhGUVVGMVExVXNTVUZCU1VNc1IwRkJNME1zUlVGQlowUkVMRWRCUVdoRUxFVkJRWEZFTzBGQlEyNUVaMElzWTBGQlRTeExRVUZMZEVNc1IwRkJUQ3hEUVVGVGRVTXNUVUZCVkN4RFFVRm5RbXBDTEVOQlFXaENMRU5CUVU0N1FVRkRRU3hoUVVGTGEwSXNVMEZCVEN4RFFVRmxSaXhIUVVGbU8wRkJRMFE3TzBGQlJVUXNWMEZCUzBRc1NVRkJUQ3hEUVVGVk4wSXNUMEZCVml4RFFVRnJRaXhWUVVGVk1rSXNTVUZCVml4RlFVRm5RanRCUVVOb1EwRXNZVUZCUzNoQ0xFdEJRVXdzUjBGQllTeERRVUZEZDBJc1MwRkJTM2hDTEV0QlFVd3NTVUZCWXl4RlFVRm1MRVZCUVcxQ2NVSXNVVUZCYmtJc1IwRkJPRUpJTEVsQlFUbENMRVZCUVdJN1FVRkRRU3haUVVGSlRTeExRVUZMZUVJc1MwRkJWQ3hGUVVGblFqdEJRVU5rTUVJc1pVRkJTM2hDTEVsQlFVd3NRMEZCVlhOQ0xFbEJRVlk3UVVGRFJEdEJRVU5HTEU5QlRFUTdPMEZCVDBFc1lVRkJUMFVzU1VGQlVEdEJRVU5FT3p0QlFVVkVPenM3T3pzN096czRRa0ZMVjBNc1J5eEZRVUZMTzBGQlEyUXNWVUZCU1N4RFFVRkRRU3hQUVVGUFVDeFRRVUZRTEVsQlFXOUNUeXhSUVVGUkxFbEJRVGRDTEV0QlFYTkRMRXRCUVV0R0xFOUJRUzlETEVWQlFYZEVPMEZCUTNSRUxHRkJRVXRCTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRc1QwRkdSQ3hOUVVWUExFbEJRVWtzUzBGQlMwWXNhVUpCUVV3c1NVRkJNRUpKTEZGQlFWRXNTMEZCUzBvc2FVSkJRVE5ETEVWQlFUaEVPMEZCUTI1RkxHRkJRVXRETEVsQlFVd3NSMEZCV1R0QlFVTldla0lzWjBKQlFVMHNWVUZFU1R0QlFVVldReXhwUWtGQlR6SkNPMEZCUmtjc1UwRkJXanRCUVVsQkxHRkJRVXRFTEVsQlFVd3NRMEZCVlhoQ0xFbEJRVllzUTBGQlpTeExRVUZMYzBJc1NVRkJjRUk3UVVGRFFTeGhRVUZMUVN4SlFVRk1MRWRCUVZrc1NVRkJXanRCUVVOQkxHRkJRVXRFTEdsQ1FVRk1MRWRCUVhsQ0xFVkJRWHBDTzBGQlEwRXNZVUZCUzBVc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FTEU5QlZrMHNUVUZWUVN4SlFVRkpMRU5CUVVNc1MwRkJTMFlzYVVKQlFVNHNTVUZCTWtKSkxFOUJRVTlRTEZOQlFYUkRMRVZCUVdsRU8wRkJRM1JFTEdGQlFVdEpMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDU0N4VlFVRlZUeXhIUVVGV0xFTkJRWHBDTzBGQlEwRXNZVUZCUzBZc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1EwRkJReXhMUVVGTFFTeFBRVUZPTEVsQlFXbENSU3hSUVVGUkxFbEJRVGRDTEVWQlFXMURPMEZCUTJwRExHRkJRVXRHTEU5QlFVd3NSMEZCWlN4SlFVRm1PMEZCUTBFN1FVRkRSRHM3UVVGRlJDeFZRVUZKTEVOQlFVTXNTMEZCUzBRc1NVRkJWaXhGUVVGblFqdEJRVU5rTEdGQlFVdEJMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1RVRkVTVHRCUVVWV1F5eHBRa0ZCVHp0QlFVWkhMRk5CUVZvN1FVRkpRU3hoUVVGTE1FSXNTVUZCVEN4RFFVRlZlRUlzU1VGQlZpeERRVUZsTEV0QlFVdHpRaXhKUVVGd1FqdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1MwRkJTME1zVDBGQlRDeEpRVUZuUWtVc1VVRkJVU3hKUVVFMVFpeEZRVUZyUXp0QlFVTm9ReXhoUVVGTFNDeEpRVUZNTEVOQlFWVjRRaXhMUVVGV0xFbEJRVzFDTEVsQlFXNUNPMEZCUTBRN08wRkJSVVFzVjBGQlMzZENMRWxCUVV3c1EwRkJWWGhDTEV0QlFWWXNTVUZCYlVJeVFpeEhRVUZ1UWp0QlFVTkJMRmRCUVV0R0xFOUJRVXdzUjBGQlpTeExRVUZtTzBGQlEwUWlMQ0ptYVd4bElqb2lZV1JrY21WemMzQmhjbk5sY2k1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dVR0Z5YzJWeklITjBjblZqZEhWeVpXUWdaUzF0WVdsc0lHRmtaSEpsYzNObGN5Qm1jbTl0SUdGdUlHRmtaSEpsYzNNZ1ptbGxiR1JjYmlBcVhHNGdLaUJGZUdGdGNHeGxPbHh1SUNwY2JpQXFJQ0FnSUZ3aVRtRnRaU0E4WVdSa2NtVnpjMEJrYjIxaGFXNCtYQ0pjYmlBcVhHNGdLaUIzYVd4c0lHSmxJR052Ym5abGNuUmxaQ0IwYjF4dUlDcGNiaUFxSUNBZ0lDQmJlMjVoYldVNklGd2lUbUZ0WlZ3aUxDQmhaR1J5WlhOek9pQmNJbUZrWkhKbGMzTkFaRzl0WVdsdVhDSjlYVnh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQnpkSElnUVdSa2NtVnpjeUJtYVdWc1pGeHVJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUdGa1pISmxjM01nYjJKcVpXTjBjMXh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCd1lYSnpaU0FvYzNSeUtTQjdYRzRnSUdOdmJuTjBJSFJ2YTJWdWFYcGxjaUE5SUc1bGR5QlViMnRsYm1sNlpYSW9jM1J5S1Z4dUlDQmpiMjV6ZENCMGIydGxibk1nUFNCMGIydGxibWw2WlhJdWRHOXJaVzVwZW1Vb0tWeHVYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR3hsZENCaFpHUnlaWE56SUQwZ1cxMWNiaUFnYkdWMElIQmhjbk5sWkVGa1pISmxjM05sY3lBOUlGdGRYRzVjYmlBZ2RHOXJaVzV6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0hSdmEyVnVLU0I3WEc0Z0lDQWdhV1lnS0hSdmEyVnVMblI1Y0dVZ1BUMDlJQ2R2Y0dWeVlYUnZjaWNnSmlZZ0tIUnZhMlZ1TG5aaGJIVmxJRDA5UFNBbkxDY2dmSHdnZEc5clpXNHVkbUZzZFdVZ1BUMDlJQ2M3SnlrcElIdGNiaUFnSUNBZ0lHbG1JQ2hoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1lXUmtjbVZ6Y3lBOUlGdGRYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdGa1pISmxjM011Y0hWemFDaDBiMnRsYmlsY2JpQWdJQ0I5WEc0Z0lIMHBYRzVjYmlBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1lXUmtjbVZ6YzJWekxuQjFjMmdvWVdSa2NtVnpjeWxjYmlBZ2ZWeHVYRzRnSUdGa1pISmxjM05sY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnWVdSa2NtVnpjeUE5SUY5b1lXNWtiR1ZCWkdSeVpYTnpLR0ZrWkhKbGMzTXBYRzRnSUNBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQndZWEp6WldSQlpHUnlaWE56WlhNZ1BTQndZWEp6WldSQlpHUnlaWE56WlhNdVkyOXVZMkYwS0dGa1pISmxjM01wWEc0Z0lDQWdmVnh1SUNCOUtWeHVYRzRnSUhKbGRIVnliaUJ3WVhKelpXUkJaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFLbHh1SUNvZ1EyOXVkbVZ5ZEhNZ2RHOXJaVzV6SUdadmNpQmhJSE5wYm1kc1pTQmhaR1J5WlhOeklHbHVkRzhnWVc0Z1lXUmtjbVZ6Y3lCdlltcGxZM1JjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNWZTQjBiMnRsYm5NZ1ZHOXJaVzV6SUc5aWFtVmpkRnh1SUNvZ1FISmxkSFZ5YmlCN1QySnFaV04wZlNCQlpHUnlaWE56SUc5aWFtVmpkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmZhR0Z1Wkd4bFFXUmtjbVZ6Y3lBb2RHOXJaVzV6S1NCN1hHNGdJR3hsZENCcGMwZHliM1Z3SUQwZ1ptRnNjMlZjYmlBZ2JHVjBJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJR3hsZENCaFpHUnlaWE56WEc0Z0lHTnZibk4wSUdGa1pISmxjM05sY3lBOUlGdGRYRzRnSUdOdmJuTjBJR1JoZEdFZ1BTQjdYRzRnSUNBZ1lXUmtjbVZ6Y3pvZ1cxMHNYRzRnSUNBZ1kyOXRiV1Z1ZERvZ1cxMHNYRzRnSUNBZ1ozSnZkWEE2SUZ0ZExGeHVJQ0FnSUhSbGVIUTZJRnRkWEc0Z0lIMWNibHh1SUNBdkx5QkdhV3gwWlhJZ2IzVjBJRHhoWkdSeVpYTnpaWE0rTENBb1kyOXRiV1Z1ZEhNcElHRnVaQ0J5WldkMWJHRnlJSFJsZUhSY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHeGxiaUE5SUhSdmEyVnVjeTVzWlc1bmRHZzdJR2tnUENCc1pXNDdJR2tyS3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJ2YTJWdUlEMGdkRzlyWlc1elcybGRYRzVjYmlBZ0lDQnBaaUFvZEc5clpXNHVkSGx3WlNBOVBUMGdKMjl3WlhKaGRHOXlKeWtnZTF4dUlDQWdJQ0FnYzNkcGRHTm9JQ2gwYjJ0bGJpNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjOEp6cGNiaUFnSUNBZ0lDQWdJQ0J6ZEdGMFpTQTlJQ2RoWkdSeVpYTnpKMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJR05oYzJVZ0p5Z25PbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjJOdmJXMWxiblFuWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnWTJGelpTQW5PaWM2WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNBblozSnZkWEFuWEc0Z0lDQWdJQ0FnSUNBZ2FYTkhjbTkxY0NBOUlIUnlkV1ZjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjNSbGVIUW5YRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdsbUlDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCa1lYUmhXM04wWVhSbFhTNXdkWE5vS0hSdmEyVnVMblpoYkhWbEtWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRWxtSUhSb1pYSmxJR2x6SUc1dklIUmxlSFFnWW5WMElHRWdZMjl0YldWdWRDd2djbVZ3YkdGalpTQjBhR1VnZEhkdlhHNGdJR2xtSUNnaFpHRjBZUzUwWlhoMExteGxibWQwYUNBbUppQmtZWFJoTG1OdmJXMWxiblF1YkdWdVozUm9LU0I3WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNWpiMjF0Wlc1MFhHNGdJQ0FnWkdGMFlTNWpiMjF0Wlc1MElEMGdXMTFjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBjMGR5YjNWd0tTQjdYRzRnSUNBZ0x5OGdhSFIwY0RvdkwzUnZiMnh6TG1sbGRHWXViM0puTDJoMGJXd3ZjbVpqTWpneU1pTmhjSEJsYm1ScGVDMUJMakV1TTF4dUlDQWdJR1JoZEdFdWRHVjRkQ0E5SUdSaGRHRXVkR1Y0ZEM1cWIybHVLQ2NnSnlsY2JpQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaDdYRzRnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2dLR0ZrWkhKbGMzTWdKaVlnWVdSa2NtVnpjeTV1WVcxbEtTeGNiaUFnSUNBZ0lHZHliM1Z3T2lCa1lYUmhMbWR5YjNWd0xteGxibWQwYUNBL0lIQmhjbk5sS0dSaGRHRXVaM0p2ZFhBdWFtOXBiaWduTENjcEtTQTZJRnRkWEc0Z0lDQWdmU2xjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCSlppQnVieUJoWkdSeVpYTnpJSGRoY3lCbWIzVnVaQ3dnZEhKNUlIUnZJR1JsZEdWamRDQnZibVVnWm5KdmJTQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ0lDQnBaaUFvSVdSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdnZ0ppWWdaR0YwWVM1MFpYaDBMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SUdSaGRHRXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aR0YwWVM1MFpYaDBXMmxkTG0xaGRHTm9LQzllVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3NrTHlrcElIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaExtRmtaSEpsYzNNZ1BTQmtZWFJoTG5SbGVIUXVjM0JzYVdObEtHa3NJREVwWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMllYSWdYM0psWjJWNFNHRnVaR3hsY2lBOUlHWjFibU4wYVc5dUlDaGhaR1J5WlhOektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJRnRoWkdSeVpYTnpMblJ5YVcwb0tWMWNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKeUFuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGa1pISmxjM05jYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QnpkR2xzYkNCdWJ5QmhaR1J5WlhOelhHNGdJQ0FnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVkR1Y0ZEZ0cFhTQTlJR1JoZEdFdWRHVjRkRnRwWFM1eVpYQnNZV05sS0M5Y1hITXFYRnhpVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3RjWEdKY1hITXFMeXdnWDNKbFoyVjRTR0Z1Wkd4bGNpa3VkSEpwYlNncFhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1NXWWdkR2hsY21VbmN5QnpkR2xzYkNCcGN5QnVieUIwWlhoMElHSjFkQ0JoSUdOdmJXMWxiblFnWlhocGVIUnpMQ0J5WlhCc1lXTmxJSFJvWlNCMGQyOWNiaUFnSUNCcFppQW9JV1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dKaVlnWkdGMFlTNWpiMjF0Wlc1MExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdJQ0JrWVhSaExtTnZiVzFsYm5RZ1BTQmJYVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXRsWlhBZ2IyNXNlU0IwYUdVZ1ptbHljM1FnWVdSa2NtVnpjeUJ2WTJOMWNtVnVZMlVzSUhCMWMyZ2diM1JvWlhKeklIUnZJSEpsWjNWc1lYSWdkR1Y0ZEZ4dUlDQWdJR2xtSUNoa1lYUmhMbUZrWkhKbGMzTXViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtTnZibU5oZENoa1lYUmhMbUZrWkhKbGMzTXVjM0JzYVdObEtERXBLVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXB2YVc0Z2RtRnNkV1Z6SUhkcGRHZ2djM0JoWTJWelhHNGdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtcHZhVzRvSnlBbktWeHVJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJR1JoZEdFdVlXUmtjbVZ6Y3k1cWIybHVLQ2NnSnlsY2JseHVJQ0FnSUdsbUlDZ2haR0YwWVM1aFpHUnlaWE56SUNZbUlHbHpSM0p2ZFhBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JoWkdSeVpYTnpJRDBnZTF4dUlDQWdJQ0FnSUNCaFpHUnlaWE56T2lCa1lYUmhMbUZrWkhKbGMzTWdmSHdnWkdGMFlTNTBaWGgwSUh4OElDY25MRnh1SUNBZ0lDQWdJQ0J1WVcxbE9pQmtZWFJoTG5SbGVIUWdmSHdnWkdGMFlTNWhaR1J5WlhOeklIeDhJQ2NuWEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxtRmtaSEpsYzNNZ1BUMDlJR0ZrWkhKbGMzTXVibUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dGa1pISmxjM011WVdSa2NtVnpjeUI4ZkNBbkp5a3ViV0YwWTJnb0wwQXZLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRmtaSEpsYzNNdWJtRnRaU0E5SUNjblhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZV1JrY21WemN5NWhaR1J5WlhOeklEMGdKeWRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCaFpHUnlaWE56WlhNdWNIVnphQ2hoWkdSeVpYTnpLVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmhaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFYRzRnS2lCUGNHVnlZWFJ2Y2lCMGIydGxibk1nWVc1a0lIZG9hV05vSUhSdmEyVnVjeUJoY21VZ1pYaHdaV04wWldRZ2RHOGdaVzVrSUhSb1pTQnpaWEYxWlc1alpWeHVJQ292WEc1amIyNXpkQ0JQVUVWU1FWUlBVbE1nUFNCN1hHNGdJQ2RjSWljNklDZGNJaWNzWEc0Z0lDY29Kem9nSnlrbkxGeHVJQ0FuUENjNklDYytKeXhjYmlBZ0p5d25PaUFuSnl4Y2JpQWdMeThnUjNKdmRYQnpJR0Z5WlNCbGJtUmxaQ0JpZVNCelpXMXBZMjlzYjI1elhHNGdJQ2M2SnpvZ0p6c25MRnh1SUNBdkx5QlRaVzFwWTI5c2IyNXpJR0Z5WlNCdWIzUWdZU0JzWldkaGJDQmtaV3hwYldsMFpYSWdjR1Z5SUhSb1pTQlNSa015T0RJeUlHZHlZVzF0WVhJZ2IzUm9aWEpjYmlBZ0x5OGdkR2hoYmlCbWIzSWdkR1Z5YldsdVlYUnBibWNnWVNCbmNtOTFjQ3dnWW5WMElIUm9aWGtnWVhKbElHRnNjMjhnYm05MElIWmhiR2xrSUdadmNpQmhibmxjYmlBZ0x5OGdiM1JvWlhJZ2RYTmxJR2x1SUhSb2FYTWdZMjl1ZEdWNGRDNGdJRWRwZG1WdUlIUm9ZWFFnYzI5dFpTQnRZV2xzSUdOc2FXVnVkSE1nYUdGMlpWeHVJQ0F2THlCb2FYTjBiM0pwWTJGc2JIa2dZV3hzYjNkbFpDQjBhR1VnYzJWdGFXTnZiRzl1SUdGeklHRWdaR1ZzYVcxcGRHVnlJR1Z4ZFdsMllXeGxiblFnZEc4Z2RHaGxYRzRnSUM4dklHTnZiVzFoSUdsdUlIUm9aV2x5SUZWSkxDQnBkQ0J0WVd0bGN5QnpaVzV6WlNCMGJ5QjBjbVZoZENCMGFHVnRJSFJvWlNCellXMWxJR0Z6SUdFZ1kyOXRiV0ZjYmlBZ0x5OGdkMmhsYmlCMWMyVmtJRzkxZEhOcFpHVWdiMllnWVNCbmNtOTFjQzVjYmlBZ0p6c25PaUFuSjF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JVYjJ0bGJtbDZaWElnYjJKcVpXTjBJR1p2Y2lCMGIydGxibWw2YVc1bklHRmtaSEpsYzNNZ1ptbGxiR1FnYzNSeWFXNW5jMXh1SUNwY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb2dRSEJoY21GdElIdFRkSEpwYm1kOUlITjBjaUJCWkdSeVpYTnpJR1pwWld4a0lITjBjbWx1WjF4dUlDb3ZYRzVqYkdGemN5QlViMnRsYm1sNlpYSWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpQW9jM1J5S1NCN1hHNGdJQ0FnZEdocGN5NXpkSElnUFNBb2MzUnlJSHg4SUNjbktTNTBiMU4wY21sdVp5Z3BYRzRnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja04xY25KbGJuUWdQU0FuSjF4dUlDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQW5KMXh1SUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSFJvYVhNdWJHbHpkQ0E5SUZ0ZFhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWRzlyWlc1cGVtVnpJSFJvWlNCdmNtbG5hVzVoYkNCcGJuQjFkQ0J6ZEhKcGJtZGNiaUFnSUNwY2JpQWdJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUc5d1pYSmhkRzl5ZkhSbGVIUWdkRzlyWlc1elhHNGdJQ0FxTDF4dUlDQjBiMnRsYm1sNlpTQW9LU0I3WEc0Z0lDQWdiR1YwSUdOb2NseHVJQ0FnSUd4bGRDQnNhWE4wSUQwZ1cxMWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1emRISXViR1Z1WjNSb095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdOb2NpQTlJSFJvYVhNdWMzUnlMbU5vWVhKQmRDaHBLVnh1SUNBZ0lDQWdkR2hwY3k1amFHVmphME5vWVhJb1kyaHlLVnh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YkdsemRDNW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaHViMlJsS1NCN1hHNGdJQ0FnSUNCdWIyUmxMblpoYkhWbElEMGdLRzV2WkdVdWRtRnNkV1VnZkh3Z0p5Y3BMblJ2VTNSeWFXNW5LQ2t1ZEhKcGJTZ3BYRzRnSUNBZ0lDQnBaaUFvYm05a1pTNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhWE4wTG5CMWMyZ29ibTlrWlNsY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dVhHNGdJQ0FnY21WMGRYSnVJR3hwYzNSY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2FXWWdZU0JqYUdGeVlXTjBaWElnYVhNZ1lXNGdiM0JsY21GMGIzSWdiM0lnZEdWNGRDQmhibVFnWVdOMGN5QmhZMk52Y21ScGJtZHNlVnh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMzBnWTJoeUlFTm9ZWEpoWTNSbGNpQm1jbTl0SUhSb1pTQmhaR1J5WlhOeklHWnBaV3hrWEc0Z0lDQXFMMXh1SUNCamFHVmphME5vWVhJZ0tHTm9jaWtnZTF4dUlDQWdJR2xtSUNnb1kyaHlJR2x1SUU5UVJWSkJWRTlTVXlCOGZDQmphSElnUFQwOUlDZGNYRnhjSnlrZ0ppWWdkR2hwY3k1bGMyTmhjR1ZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdQVDA5SUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaU0E5SUh0Y2JpQWdJQ0FnSUNBZ2RIbHdaVG9nSjI5d1pYSmhkRzl5Snl4Y2JpQWdJQ0FnSUNBZ2RtRnNkV1U2SUdOb2NseHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVzYVhOMExuQjFjMmdvZEdocGN5NXViMlJsS1Z4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2JuVnNiRnh1SUNBZ0lDQWdkR2hwY3k1dmNHVnlZWFJ2Y2tWNGNHVmpkR2x1WnlBOUlDY25YRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lDQWdjbVYwZFhKdVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNnaGRHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdhVzRnVDFCRlVrRlVUMUpUS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbTV2WkdVZ1BTQjdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklDZHZjR1Z5WVhSdmNpY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQmphSEpjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWJHbHpkQzV3ZFhOb0tIUm9hWE11Ym05a1pTbGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0FnSUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY2dQU0JQVUVWU1FWUlBVbE5iWTJoeVhWeHVJQ0FnSUNBZ2RHaHBjeTVsYzJOaGNHVmtJRDBnWm1Gc2MyVmNiaUFnSUNBZ0lISmxkSFZ5Ymx4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTVsYzJOaGNHVmtJQ1ltSUdOb2NpQTlQVDBnSjF4Y1hGd25LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQjBjblZsWEc0Z0lDQWdJQ0J5WlhSMWNtNWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWFJvYVhNdWJtOWtaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2UxeHVJQ0FnSUNBZ0lDQjBlWEJsT2lBbmRHVjRkQ2NzWEc0Z0lDQWdJQ0FnSUhaaGJIVmxPaUFuSjF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtVnpZMkZ3WldRZ0ppWWdZMmh5SUNFOVBTQW5YRnhjWENjcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTNTJZV3gxWlNBclBTQW5YRnhjWENkY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtNXZaR1V1ZG1Gc2RXVWdLejBnWTJoeVhHNGdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdmVnh1ZlZ4dUlsMTkiLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5pZiAoIUlTX1BVUkUgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIGFycmF5UHVzaCA9IFtdLnB1c2g7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc3BsaXQnLCAyLCBmdW5jdGlvbiAoU1BMSVQsIG5hdGl2ZVNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCcuc3BsaXQoLyg/OikvLCAtMSkubGVuZ3RoICE9IDQgfHxcbiAgICAnYWInLnNwbGl0KC8oPzphYikqLykubGVuZ3RoICE9IDIgfHxcbiAgICAnLicuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoICE9IDQgfHxcbiAgICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxIHx8XG4gICAgJycuc3BsaXQoLy4/LykubGVuZ3RoXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW3N0cmluZ107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW0pO1xuICAgICAgfVxuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleDtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZy5sZW5ndGgpIGFycmF5UHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPj0gbGltKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weS5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbSA/IG91dHB1dC5zbGljZSgwLCBsaW0pIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCcuc3BsaXQodW5kZWZpbmVkLCAwKS5sZW5ndGgpIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogbmF0aXZlU3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2UgaW50ZXJuYWxTcGxpdCA9IG5hdGl2ZVNwbGl0O1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSBuYXRpdmVTcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9IG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59LCAhU1VQUE9SVFNfWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUubGlua2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmxpbmtcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdsaW5rJykgfSwge1xuICBsaW5rOiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIUlTX0lPUykge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBtYXRjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gbWF0Y2hlciAhPT0gdW5kZWZpbmVkID8gbWF0Y2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuY29uc3QgT3BlbnRpcCA9IHdpbmRvdy5PcGVudGlwIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcyA9IE9wZW50aXAuc3R5bGVzIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcCA9IHtcblx0J2V4dGVuZHMnOiAnc3RhbmRhcmQnLFxuXG5cdCdmaXhlZCc6IHRydWUsXG5cdCd0YXJnZXQnOiB0cnVlLFxuXG5cdCdkZWxheSc6IDAuMixcblx0J2hpZGVEZWxheSc6IDAsXG5cblx0J2hpZGVFZmZlY3QnOiAnZmFkZScsXG5cdCdoaWRlRWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dFZmZlY3QnOiAnZmFkZScsXG5cdCdzaG93RWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dPbic6ICdtb3VzZW92ZXIgY2xpY2snLFxuXHQncmVtb3ZlRWxlbWVudHNPbkhpZGUnOiB0cnVlLFxuXG5cdCdiYWNrZ3JvdW5kJzogJyNmZmYnLFxuXHQnc2hhZG93JzogZmFsc2UsXG5cblx0J2JvcmRlckNvbG9yJzogJyM5OTknLFxuXHQnYm9yZGVyUmFkaXVzJzogMixcblx0J2JvcmRlcldpZHRoJzogMVxufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2RlbGF5JzogMC40LFxuXHQnZ3JvdXAnOiAncmFpbmxvb3BUaXBzJ1xufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BFcnJvclRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnY2xhc3NOYW1lJzogJ3JhaW5sb29wRXJyb3JUaXAnXG59O1xuXG5leHBvcnQgeyBPcGVudGlwLCBPcGVudGlwIGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICogUGlrYWRheVxuICpcbiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXlcbiAqL1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIG1vbWVudDtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAocmVxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgICAgICB2YXIgaWQgPSAnbW9tZW50JztcbiAgICAgICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcShpZCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShtb21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlBpa2FkYXkgPSBmYWN0b3J5KHJvb3QubW9tZW50KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogZmVhdHVyZSBkZXRlY3Rpb24gYW5kIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICB2YXIgaGFzTW9tZW50ID0gdHlwZW9mIG1vbWVudCA9PT0gJ2Z1bmN0aW9uJyxcblxuICAgIGhhc0V2ZW50TGlzdGVuZXJzID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixcblxuICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LFxuXG4gICAgc3RvID0gd2luZG93LnNldFRpbWVvdXQsXG5cbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmF0dGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5kZXRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHRyaW0gPSBmdW5jdGlvbihzdHIpXG4gICAge1xuICAgICAgICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csJycpO1xuICAgIH0sXG5cbiAgICBoYXNDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIHJldHVybiAoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNuICsgJyAnKSAhPT0gLTE7XG4gICAgfSxcblxuICAgIGFkZENsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY24pKSB7XG4gICAgICAgICAgICBlbC5jbGFzc05hbWUgPSAoZWwuY2xhc3NOYW1lID09PSAnJykgPyBjbiA6IGVsLmNsYXNzTmFtZSArICcgJyArIGNuO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gdHJpbSgoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5yZXBsYWNlKCcgJyArIGNuICsgJyAnLCAnICcpKTtcbiAgICB9LFxuXG4gICAgaXNBcnJheSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0FycmF5LykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSk7XG4gICAgfSxcblxuICAgIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0RhdGUvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSAmJiAhaXNOYU4ob2JqLmdldFRpbWUoKSk7XG4gICAgfSxcblxuICAgIGlzV2Vla2VuZCA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7XG4gICAgfSxcblxuICAgIGlzTGVhcFllYXIgPSBmdW5jdGlvbih5ZWFyKVxuICAgIHtcbiAgICAgICAgLy8gc29sdXRpb24gYnkgTWF0dGkgVmlya2t1bmVuOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80ODgxOTUxXG4gICAgICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpXG4gICAge1xuICAgICAgICByZXR1cm4gWzMxLCBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcbiAgICB9LFxuXG4gICAgc2V0VG9TdGFydE9mRGF5ID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChpc0RhdGUoZGF0ZSkpIGRhdGUuc2V0SG91cnMoMCwwLDAsMCk7XG4gICAgfSxcblxuICAgIGNvbXBhcmVEYXRlcyA9IGZ1bmN0aW9uKGEsYilcbiAgICB7XG4gICAgICAgIC8vIHdlYWsgZGF0ZSBjb21wYXJpc29uICh1c2Ugc2V0VG9TdGFydE9mRGF5KGRhdGUpIHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdClcbiAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICB9LFxuXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24odG8sIGZyb20sIG92ZXJ3cml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBwcm9wLCBoYXNQcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gZnJvbSkge1xuICAgICAgICAgICAgaGFzUHJvcCA9IHRvW3Byb3BdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaGFzUHJvcCAmJiB0eXBlb2YgZnJvbVtwcm9wXSA9PT0gJ29iamVjdCcgJiYgZnJvbVtwcm9wXSAhPT0gbnVsbCAmJiBmcm9tW3Byb3BdLm5vZGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlKGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gbmV3IERhdGUoZnJvbVtwcm9wXS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBleHRlbmQoe30sIGZyb21bcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvdmVyd3JpdGUgfHwgIWhhc1Byb3ApIHtcbiAgICAgICAgICAgICAgICB0b1twcm9wXSA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH0sXG5cbiAgICBmaXJlRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZlbnROYW1lLCBkYXRhKVxuICAgIHtcbiAgICAgICAgdmFyIGV2O1xuXG4gICAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgICAgICAgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgICAgICAgICAgZXYuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgZXYgPSBleHRlbmQoZXYsIGRhdGEpO1xuICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmZpcmVFdmVudCgnb24nICsgZXZlbnROYW1lLCBldik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRqdXN0Q2FsZW5kYXIgPSBmdW5jdGlvbihjYWxlbmRhcikge1xuICAgICAgICBpZiAoY2FsZW5kYXIubW9udGggPCAwKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyIC09IE1hdGguY2VpbChNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoID4gMTEpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLnllYXIgKz0gTWF0aC5mbG9vcihNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggLT0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0cyBhbmQgbG9jYWxpc2F0aW9uXG4gICAgICovXG4gICAgZGVmYXVsdHMgPSB7XG5cbiAgICAgICAgLy8gYmluZCB0aGUgcGlja2VyIHRvIGEgZm9ybSBmaWVsZFxuICAgICAgICBmaWVsZDogbnVsbCxcblxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNob3cvaGlkZSB0aGUgcGlja2VyIG9uIGBmaWVsZGAgZm9jdXMgKGRlZmF1bHQgYHRydWVgIGlmIGBmaWVsZGAgaXMgc2V0KVxuICAgICAgICBib3VuZDogdW5kZWZpbmVkLFxuXG4gICAgICAgIC8vIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGFuIGFyaWEgYXNzaXN0YW5jZSB0ZWtzdCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIHJlbmRlcldlZWsgPSBmdW5jdGlvbiAoZCwgbSwgeSkge1xuICAgICAgICAvLyBMaWZ0ZWQgZnJvbSBodHRwOi8vamF2YXNjcmlwdC5hYm91dC5jb20vbGlicmFyeS9ibHdlZWt5ZWFyLmh0bSwgbGlnaHRseSBtb2RpZmllZC5cbiAgICAgICAgdmFyIG9uZWphbiA9IG5ldyBEYXRlKHksIDAsIDEpLFxuICAgICAgICAgICAgd2Vla051bSA9IE1hdGguY2VpbCgoKChuZXcgRGF0ZSh5LCBtLCBkKSAtIG9uZWphbikgLyA4NjQwMDAwMCkgKyBvbmVqYW4uZ2V0RGF5KCkrMSkvNyk7XG4gICAgICAgIHJldHVybiAnPHRkIGNsYXNzPVwicGlrYS13ZWVrXCI+JyArIHdlZWtOdW0gKyAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJSb3cgPSBmdW5jdGlvbihkYXlzLCBpc1JUTCwgcGlja1dob2xlV2VlaywgaXNSb3dTZWxlY3RlZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRyIGNsYXNzPVwicGlrYS1yb3cnICsgKHBpY2tXaG9sZVdlZWsgPyAnIHBpY2std2hvbGUtd2VlaycgOiAnJykgKyAoaXNSb3dTZWxlY3RlZCA/ICcgaXMtc2VsZWN0ZWQnIDogJycpICsgJ1wiPicgKyAoaXNSVEwgPyBkYXlzLnJldmVyc2UoKSA6IGRheXMpLmpvaW4oJycpICsgJzwvdHI+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKHJvd3MpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0Ym9keT4nICsgcm93cy5qb2luKCcnKSArICc8L3Rib2R5Pic7XG4gICAgfSxcblxuICAgIHJlbmRlckhlYWQgPSBmdW5jdGlvbihvcHRzKVxuICAgIHtcbiAgICAgICAgdmFyIGksIGFyciA9IFtdO1xuICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgYXJyLnB1c2goJzx0aD48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGggc2NvcGU9XCJjb2xcIj48YWJiciB0aXRsZT1cIicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGkpICsgJ1wiPicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGksIHRydWUpICsgJzwvYWJicj48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHRoZWFkPjx0cj4nICsgKG9wdHMuaXNSVEwgPyBhcnIucmV2ZXJzZSgpIDogYXJyKS5qb2luKCcnKSArICc8L3RyPjwvdGhlYWQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGl0bGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgYywgeWVhciwgbW9udGgsIHJlZlllYXIsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHZhciBpLCBqLCBhcnIsXG4gICAgICAgICAgICBvcHRzID0gaW5zdGFuY2UuX28sXG4gICAgICAgICAgICBpc01pblllYXIgPSB5ZWFyID09PSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICBpc01heFllYXIgPSB5ZWFyID09PSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICBodG1sID0gJzxkaXYgaWQ9XCInICsgcmFuZElkICsgJ1wiIGNsYXNzPVwicGlrYS10aXRsZVwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+JyxcbiAgICAgICAgICAgIG1vbnRoSHRtbCxcbiAgICAgICAgICAgIHllYXJIdG1sLFxuICAgICAgICAgICAgcHJldiA9IHRydWUsXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGFyciA9IFtdLCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArICh5ZWFyID09PSByZWZZZWFyID8gaSAtIGMgOiAxMiArIGkgLSBjKSArICdcIicgK1xuICAgICAgICAgICAgICAgIChpID09PSBtb250aCA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICtcbiAgICAgICAgICAgICAgICAoKGlzTWluWWVhciAmJiBpIDwgb3B0cy5taW5Nb250aCkgfHwgKGlzTWF4WWVhciAmJiBpID4gb3B0cy5tYXhNb250aCkgPyAnZGlzYWJsZWQ9XCJkaXNhYmxlZFwiJyA6ICcnKSArICc+JyArXG4gICAgICAgICAgICAgICAgb3B0cy5pMThuLm1vbnRoc1tpXSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoSHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyBvcHRzLmkxOG4ubW9udGhzW21vbnRoXSArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGhcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgaSA9IG9wdHMueWVhclJhbmdlWzBdO1xuICAgICAgICAgICAgaiA9IG9wdHMueWVhclJhbmdlWzFdICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSB5ZWFyIC0gb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICBqID0gMSArIHllYXIgKyBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoYXJyID0gW107IGkgPCBqICYmIGkgPD0gb3B0cy5tYXhZZWFyOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG9wdHMubWluWWVhcikge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCInICsgKGkgPT09IHllYXIgPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArICc+JyArIChpKSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5ZWFySHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyB5ZWFyICsgb3B0cy55ZWFyU3VmZml4ICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAob3B0cy5zaG93TW9udGhBZnRlclllYXIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0geWVhckh0bWwgKyBtb250aEh0bWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sICs9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWluWWVhciAmJiAobW9udGggPT09IDAgfHwgb3B0cy5taW5Nb250aCA+PSBtb250aCkpIHtcbiAgICAgICAgICAgIHByZXYgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heFllYXIgJiYgKG1vbnRoID09PSAxMSB8fCBvcHRzLm1heE1vbnRoIDw9IG1vbnRoKSkge1xuICAgICAgICAgICAgbmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLXByZXYnICsgKHByZXYgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5wcmV2aW91c01vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IChpbnN0YW5jZS5fby5udW1iZXJPZk1vbnRocyAtIDEpICkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtbmV4dCcgKyAobmV4dCA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLm5leHRNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgfSxcblxuICAgIHJlbmRlclRhYmxlID0gZnVuY3Rpb24ob3B0cywgZGF0YSwgcmFuZElkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGFibGUgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJwaWthLXRhYmxlXCIgcm9sZT1cImdyaWRcIiBhcmlhLWxhYmVsbGVkYnk9XCInICsgcmFuZElkICsgJ1wiPicgKyByZW5kZXJIZWFkKG9wdHMpICsgcmVuZGVyQm9keShkYXRhKSArICc8L3RhYmxlPic7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUGlrYWRheSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFBpa2FkYXkgPSBmdW5jdGlvbihvcHRpb25zKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgb3B0cyA9IHNlbGYuY29uZmlnKG9wdGlvbnMpO1xuXG4gICAgICAgIHNlbGYuX29uTW91c2VEb3duID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl92KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1idXR0b24nKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZW1wdHknKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LnBhcmVudE5vZGUsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShuZXcgRGF0ZSh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EteWVhcicpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtbW9udGgnKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLWRheScpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG8oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYmx1ckZpZWxkT25TZWxlY3QgJiYgb3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtcHJldicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucHJldk1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0b3VjaCBldmVudCBwcmV2ZW50IG1vdXNlIGV2ZW50cyBlbXVsYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9jID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC1tb250aCcpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvTW9udGgodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LXllYXInKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b1llYXIodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbktleUNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuICAgICAgICAgICAgaWYgKHNlbGYuaXNWaXNpYmxlKCkpIHtcblxuICAgICAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRlO1xuXG4gICAgICAgICAgICBpZiAoZS5maXJlZEJ5ID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMucGFyc2UpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gb3B0cy5wYXJzZShvcHRzLmZpZWxkLnZhbHVlLCBvcHRzLmZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICBkYXRlID0gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBvcHRzLmZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0cy5zZXREZWZhdWx0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVmRGF0ZSA9IG9wdHMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKGlzRGF0ZShkZWZEYXRlKSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuc2V0RGVmYXVsdERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGVmRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b0RhdGUoZGVmRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgKz0gJyBpcy1ib3VuZCc7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHNlbGYuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdmb2N1cycsIHNlbGYuX29uSW5wdXRGb2N1cyk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgc2VsZi5fb25JbnB1dEJsdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgUGlrYWRheSBBUElcbiAgICAgKi9cbiAgICBQaWthZGF5LnByb3RvdHlwZSA9IHtcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb25maWd1cmUgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgY29uZmlnOiBmdW5jdGlvbihvcHRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX28pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRzID0gZXh0ZW5kKHRoaXMuX28sIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgICAgICAgICBvcHRzLmlzUlRMID0gISFvcHRzLmlzUlRMO1xuXG4gICAgICAgICAgICBvcHRzLmZpZWxkID0gKG9wdHMuZmllbGQgJiYgb3B0cy5maWVsZC5ub2RlTmFtZSkgPyBvcHRzLmZpZWxkIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy50aGVtZSA9ICh0eXBlb2Ygb3B0cy50aGVtZSkgPT09ICdzdHJpbmcnICYmIG9wdHMudGhlbWUgPyBvcHRzLnRoZW1lIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy5ib3VuZCA9ICEhKG9wdHMuYm91bmQgIT09IHVuZGVmaW5lZCA/IG9wdHMuZmllbGQgJiYgb3B0cy5ib3VuZCA6IG9wdHMuZmllbGQpO1xuXG4gICAgICAgICAgICBvcHRzLnRyaWdnZXIgPSAob3B0cy50cmlnZ2VyICYmIG9wdHMudHJpZ2dlci5ub2RlTmFtZSkgPyBvcHRzLnRyaWdnZXIgOiBvcHRzLmZpZWxkO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVXZWVrZW5kcyA9ICEhb3B0cy5kaXNhYmxlV2Vla2VuZHM7XG5cbiAgICAgICAgICAgIG9wdHMuZGlzYWJsZURheUZuID0gKHR5cGVvZiBvcHRzLmRpc2FibGVEYXlGbikgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRpc2FibGVEYXlGbiA6IG51bGw7XG5cbiAgICAgICAgICAgIHZhciBub20gPSBwYXJzZUludChvcHRzLm51bWJlck9mTW9udGhzLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIG9wdHMubnVtYmVyT2ZNb250aHMgPSBub20gPiA0ID8gNCA6IG5vbTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5taW5EYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWluRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5tYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWF4RGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChvcHRzLm1pbkRhdGUgJiYgb3B0cy5tYXhEYXRlKSAmJiBvcHRzLm1heERhdGUgPCBvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1pbkRhdGUob3B0cy5taW5EYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heERhdGUob3B0cy5tYXhEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMTA7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2VbMF0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVswXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzFdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMV0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2UgPSBNYXRoLmFicyhwYXJzZUludChvcHRzLnllYXJSYW5nZSwgMTApKSB8fCBkZWZhdWx0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMueWVhclJhbmdlID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICh1c2luZyBNb21lbnQuanMgaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMuX28uZm9ybWF0O1xuICAgICAgICAgICAgaWYgKCFpc0RhdGUodGhpcy5fZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fby50b1N0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fby50b1N0cmluZyh0aGlzLl9kLCBmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMuX2QpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2QudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIE1vbWVudC5qcyBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBnZXRNb21lbnQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGhhc01vbWVudCA/IG1vbWVudCh0aGlzLl9kKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbSBhIE1vbWVudC5qcyBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHNldE1vbWVudDogZnVuY3Rpb24oZGF0ZSwgcHJldmVudE9uU2VsZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaGFzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShkYXRlLnRvRGF0ZSgpLCBwcmV2ZW50T25TZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBEYXRlIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGdldERhdGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZSh0aGlzLl9kKSA/IG5ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldERhdGU6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuX28ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLl9vLm1heERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUobWluKSAmJiBkYXRlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG1pbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG1heCkgJiYgZGF0ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtYXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodGhpcy5fZCk7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKHRoaXMuX2QpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZmllbGQudmFsdWUgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KHRoaXMuX28uZmllbGQsICdjaGFuZ2UnLCB7IGZpcmVkQnk6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXZlbnRPblNlbGVjdCAmJiB0eXBlb2YgdGhpcy5fby5vblNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLCB0aGlzLmdldERhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b0RhdGU6IGZ1bmN0aW9uKGRhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdDYWxlbmRhciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhcnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsIHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVEYXRlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBlbmQgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldE1vbnRoKGxhc3RWaXNpYmxlRGF0ZS5nZXRNb250aCgpKzEpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXREYXRlKGxhc3RWaXNpYmxlRGF0ZS5nZXREYXRlKCktMSk7XG4gICAgICAgICAgICAgICAgbmV3Q2FsZW5kYXIgPSAodmlzaWJsZURhdGUgPCBmaXJzdFZpc2libGVEYXRlLmdldFRpbWUoKSB8fCBsYXN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIDwgdmlzaWJsZURhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3Q2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFycyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLm1haW5DYWxlbmRhciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArPSAxIC0gdGhpcy5fby5udW1iZXJPZk1vbnRocztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0RGF0ZTogZnVuY3Rpb24oc2lnbiwgZGF5cykge1xuXG4gICAgICAgICAgICB2YXIgZGF5ID0gdGhpcy5nZXREYXRlKCkgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaWZmZXJlbmNlID0gcGFyc2VJbnQoZGF5cykqMjQqNjAqNjAqMTAwMDtcblxuICAgICAgICAgICAgdmFyIG5ld0RheTtcblxuICAgICAgICAgICAgaWYgKHNpZ24gPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSArIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSAtIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGUobmV3RGF5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0gPSBhZGp1c3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgYyA8IHRoaXMuX28ubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzW2NdID0gYWRqdXN0Q2FsZW5kYXIoe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKyBjLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLmNhbGVuZGFyc1swXS55ZWFyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnb3RvVG9kYXk6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBtb250aCAoemVyby1pbmRleCwgZS5nLiAwOiBKYW51YXJ5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b01vbnRoOiBmdW5jdGlvbihtb250aClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBuZXh0TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKztcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcHJldk1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS07XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGZ1bGwgeWVhciAoZS5nLiBcIjIwMTJcIilcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9ZZWFyOiBmdW5jdGlvbih5ZWFyKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1pbkRhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1pbkRhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSBkZWZhdWx0cy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSBkZWZhdWx0cy5taW5ZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSBkZWZhdWx0cy5taW5Nb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSBkZWZhdWx0cy5zdGFydFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtYXhEYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNYXhEYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSBkZWZhdWx0cy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IGRlZmF1bHRzLm1heFllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IGRlZmF1bHRzLm1heE1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSBkZWZhdWx0cy5lbmRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0U3RhcnRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEVuZFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZWZyZXNoIHRoZSBIVE1MXG4gICAgICAgICAqL1xuICAgICAgICBkcmF3OiBmdW5jdGlvbihmb3JjZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl92ICYmICFmb3JjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBtaW5ZZWFyID0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgICAgIG1heFllYXIgPSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICAgICAgbWluTW9udGggPSBvcHRzLm1pbk1vbnRoLFxuICAgICAgICAgICAgICAgIG1heE1vbnRoID0gb3B0cy5tYXhNb250aCxcbiAgICAgICAgICAgICAgICBodG1sID0gJycsXG4gICAgICAgICAgICAgICAgcmFuZElkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5feSA8PSBtaW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1pblllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtaW5Nb250aCkgJiYgdGhpcy5fbSA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtaW5Nb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5feSA+PSBtYXhZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1heFllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtYXhNb250aCkgJiYgdGhpcy5fbSA+IG1heE1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtYXhNb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmRJZCA9ICdwaWthLXRpdGxlLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKS5zdWJzdHIoMCwgMik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgb3B0cy5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInBpa2EtbGVuZGFyXCI+JyArIHJlbmRlclRpdGxlKHRoaXMsIGMsIHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCB0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCByYW5kSWQpICsgdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbY10ueWVhciwgdGhpcy5jYWxlbmRhcnNbY10ubW9udGgsIHJhbmRJZCkgKyAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGlmKG9wdHMuZmllbGQudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy50cmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9vLm9uRHJhdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25EcmF3KHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgc2NyZWVuIHJlYWRlciB1c2VyIGtub3cgdG8gdXNlIGFycm93IGtleXNcbiAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG9wdHMuYXJpYUxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RQb3NpdGlvbjogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmllbGQsIHBFbCwgd2lkdGgsIGhlaWdodCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCwgbGVmdCwgdG9wLCBjbGllbnRSZWN0LCBsZWZ0QWxpZ25lZCwgYm90dG9tQWxpZ25lZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuX28udHJpZ2dlcjtcbiAgICAgICAgICAgIHBFbCA9IGZpZWxkO1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgbGVmdEFsaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2xpZW50UmVjdCA9IGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdG9wID0gY2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBwRWwub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICB0b3AgID0gcEVsLm9mZnNldFRvcCArIHBFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgd2hpbGUoKHBFbCA9IHBFbC5vZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcEVsLm9mZnNldFRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlZmF1bHQgcG9zaXRpb24gaXMgYm90dG9tICYgbGVmdFxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgbGVmdCArIHdpZHRoID4gdmlld3BvcnRXaWR0aCkgfHxcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigncmlnaHQnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIGxlZnQgLSB3aWR0aCArIGZpZWxkLm9mZnNldFdpZHRoID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBsZWZ0QWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgdG9wICsgaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQgKyBzY3JvbGxUb3ApIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3RvcCcpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0ID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRvcCA9IHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICBib3R0b21BbGlnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuXG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBsZWZ0QWxpZ25lZCA/ICdsZWZ0LWFsaWduZWQnIDogJ3JpZ2h0LWFsaWduZWQnKTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsIGJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhYm90dG9tQWxpZ25lZCA/ICdib3R0b20tYWxpZ25lZCcgOiAndG9wLWFsaWduZWQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVuZGVyIEhUTUwgZm9yIGEgcGFydGljdWxhciBtb250aFxuICAgICAgICAgKi9cbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgcmFuZElkKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgb3B0cyAgID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBub3cgICAgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRheXMgICA9IGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCksXG4gICAgICAgICAgICAgICAgZGF0YSAgID0gW10sXG4gICAgICAgICAgICAgICAgcm93ICAgID0gW107XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkobm93KTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZpcnN0RGF5ID4gMCkge1xuICAgICAgICAgICAgICAgIGJlZm9yZSAtPSBvcHRzLmZpcnN0RGF5O1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZSArPSA3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyAxMSA6IG1vbnRoIC0gMSxcbiAgICAgICAgICAgICAgICBuZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyAwIDogbW9udGggKyAxLFxuICAgICAgICAgICAgICAgIHllYXJPZlByZXZpb3VzTW9udGggPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcixcbiAgICAgICAgICAgICAgICB5ZWFyT2ZOZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgZGF5c0luUHJldmlvdXNNb250aCA9IGdldERheXNJbk1vbnRoKHllYXJPZlByZXZpb3VzTW9udGgsIHByZXZpb3VzTW9udGgpO1xuICAgICAgICAgICAgdmFyIGNlbGxzID0gZGF5cyArIGJlZm9yZSxcbiAgICAgICAgICAgICAgICBhZnRlciA9IGNlbGxzO1xuICAgICAgICAgICAgd2hpbGUoYWZ0ZXIgPiA3KSB7XG4gICAgICAgICAgICAgICAgYWZ0ZXIgLT0gNztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxzICs9IDcgLSBhZnRlcjtcbiAgICAgICAgICAgIHZhciBpc1dlZWtTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwgY2VsbHM7IGkrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEgKyAoaSAtIGJlZm9yZSkpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gaXNEYXRlKHRoaXMuX2QpID8gY29tcGFyZURhdGVzKGRheSwgdGhpcy5fZCkgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNUb2RheSA9IGNvbXBhcmVEYXRlcyhkYXksIG5vdyksXG4gICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50ID0gb3B0cy5ldmVudHMuaW5kZXhPZihkYXkudG9EYXRlU3RyaW5nKCkpICE9PSAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSA9IGkgPCBiZWZvcmUgfHwgaSA+PSAoZGF5cyArIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIGRheU51bWJlciA9IDEgKyAoaSAtIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbW9udGgsXG4gICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuc3RhcnRSYW5nZSwgZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbmRSYW5nZSA9IG9wdHMuZW5kUmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuZW5kUmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzSW5SYW5nZSA9IG9wdHMuc3RhcnRSYW5nZSAmJiBvcHRzLmVuZFJhbmdlICYmIG9wdHMuc3RhcnRSYW5nZSA8IGRheSAmJiBkYXkgPCBvcHRzLmVuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkID0gKG9wdHMubWluRGF0ZSAmJiBkYXkgPCBvcHRzLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5tYXhEYXRlICYmIGRheSA+IG9wdHMubWF4RGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVXZWVrZW5kcyAmJiBpc1dlZWtlbmQoZGF5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVEYXlGbiAmJiBvcHRzLmRpc2FibGVEYXlGbihkYXkpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlzSW5QcmV2aW91c01vbnRoICsgZGF5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBwcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZlByZXZpb3VzTW9udGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlOdW1iZXIgLSBkYXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBuZXh0TW9udGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck9mTmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRheUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheTogZGF5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6IG1vbnRoTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogeWVhck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50OiBoYXNFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiBpc1RvZGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2U6IGlzU3RhcnRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2U6IGlzRW5kUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2U6IGlzSW5SYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczogb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHNcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzLnBpY2tXaG9sZVdlZWsgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93LnB1c2gocmVuZGVyRGF5KGRheUNvbmZpZykpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCsrciA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LnVuc2hpZnQocmVuZGVyV2VlayhpIC0gYmVmb3JlLCBtb250aCwgeWVhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsgLy8gcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3YgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHQU1FIE9WRVJcbiAgICAgICAgICovXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vO1xuXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy5maWVsZCwgJ2NoYW5nZScsIHRoaXMuX29uSW5wdXRDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCB0aGlzLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgdGhpcy5fb25JbnB1dEJsdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICByZXR1cm4gUGlrYWRheTtcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LkF1dG9saW5rZXI7IiwiLyogZXNsaW50IGtleS1zcGFjaW5nOiAwICovXG4vKiBlc2xpbnQgcXVvdGUtcHJvcHM6IDAgKi9cblxuY29uc3QgTWltZSA9IHtcblx0J2VtbCc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCdtaW1lJzogJ21lc3NhZ2UvcmZjODIyJyxcblx0J3R4dCc6ICd0ZXh0L3BsYWluJyxcblx0J3RleHQnOiAndGV4dC9wbGFpbicsXG5cdCdkZWYnOiAndGV4dC9wbGFpbicsXG5cdCdsaXN0JzogJ3RleHQvcGxhaW4nLFxuXHQnaW4nOiAndGV4dC9wbGFpbicsXG5cdCdpbmknOiAndGV4dC9wbGFpbicsXG5cdCdsb2cnOiAndGV4dC9wbGFpbicsXG5cdCdzcWwnOiAndGV4dC9wbGFpbicsXG5cdCdjZmcnOiAndGV4dC9wbGFpbicsXG5cdCdjb25mJzogJ3RleHQvcGxhaW4nLFxuXHQnYXNjJzogJ3RleHQvcGxhaW4nLFxuXHQncnR4JzogJ3RleHQvcmljaHRleHQnLFxuXHQndmNhcmQnOiAndGV4dC92Y2FyZCcsXG5cdCd2Y2YnOiAndGV4dC92Y2FyZCcsXG5cdCdodG0nOiAndGV4dC9odG1sJyxcblx0J2h0bWwnOiAndGV4dC9odG1sJyxcblx0J2Nzdic6ICd0ZXh0L2NzdicsXG5cdCdpY3MnOiAndGV4dC9jYWxlbmRhcicsXG5cdCdpZmInOiAndGV4dC9jYWxlbmRhcicsXG5cdCd4bWwnOiAndGV4dC94bWwnLFxuXHQnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0J3N3Zic6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsXG5cdCdobHAnOiAnYXBwbGljYXRpb24vd2luaGxwJyxcblx0J3dndCc6ICdhcHBsaWNhdGlvbi93aWRnZXQnLFxuXHQnY2htJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCcsXG5cdCdwMTAnOiAnYXBwbGljYXRpb24vcGtjczEwJyxcblx0J3A3Yyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3bSc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3cyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUnLFxuXHQndG9ycmVudCc6ICdhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQnLFxuXG5cdC8vIHNjcmlwdHNcblx0J2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxuXHQncGwnOiAndGV4dC9wZXJsJyxcblx0J2Nzcyc6ICd0ZXh0L2NzcycsXG5cdCdhc3AnOiAndGV4dC9hc3AnLFxuXHQncGhwJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDMnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHA1JzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BodG1sJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblxuXHQvLyBpbWFnZXNcblx0J3BuZyc6ICdpbWFnZS9wbmcnLFxuXHQnanBnJzogJ2ltYWdlL2pwZWcnLFxuXHQnanBlZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZSc6ICdpbWFnZS9qcGVnJyxcblx0J2pmaWYnOiAnaW1hZ2UvanBlZycsXG5cdCdnaWYnOiAnaW1hZ2UvZ2lmJyxcblx0J2JtcCc6ICdpbWFnZS9ibXAnLFxuXHQnY2dtJzogJ2ltYWdlL2NnbScsXG5cdCdpZWYnOiAnaW1hZ2UvaWVmJyxcblx0J2ljbyc6ICdpbWFnZS94LWljb24nLFxuXHQndGlmJzogJ2ltYWdlL3RpZmYnLFxuXHQndGlmZic6ICdpbWFnZS90aWZmJyxcblx0J3N2Zyc6ICdpbWFnZS9zdmcreG1sJyxcblx0J3N2Z3onOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdkanYnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnZGp2dSc6ICdpbWFnZS92bmQuZGp2dScsXG5cdCd3ZWJwJzogJ2ltYWdlL3dlYnAnLFxuXG5cdC8vIGFyY2hpdmVzXG5cdCd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcblx0Jzd6JzogJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsXG5cdCdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXG5cdCdleGUnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2RsbCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnc2NyJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjb20nOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2JhdCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnbXNpJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjYWInOiAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJyxcblx0J2d6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCd0Z3onOiAnYXBwbGljYXRpb24veC1nemlwJyxcblx0J2J6JzogJ2FwcGxpY2F0aW9uL3gtYnppcCcsXG5cdCdiejInOiAnYXBwbGljYXRpb24veC1iemlwMicsXG5cdCdkZWInOiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsXG5cblx0Ly8gZm9udHNcblx0J3BzZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmJyxcblx0J290Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtb3RmJyxcblx0J3BjZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtcGNmJyxcblx0J3NuZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJyxcblx0J3R0Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblx0J3R0Yyc6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblxuXHQvLyBhdWRpb1xuXHQnbXAzJzogJ2F1ZGlvL21wZWcnLFxuXHQnYW1yJzogJ2F1ZGlvL2FtcicsXG5cdCdhYWMnOiAnYXVkaW8veC1hYWMnLFxuXHQnYWlmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZjJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCd3YXYnOiAnYXVkaW8veC13YXYnLFxuXHQnd21hJzogJ2F1ZGlvL3gtbXMtd21hJyxcblx0J3dheCc6ICdhdWRpby94LW1zLXdheCcsXG5cdCdtaWRpJzogJ2F1ZGlvL21pZGknLFxuXHQnbXA0YSc6ICdhdWRpby9tcDQnLFxuXHQnb2dnJzogJ2F1ZGlvL29nZycsXG5cdCd3ZWJhJzogJ2F1ZGlvL3dlYm0nLFxuXHQncmEnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8nLFxuXHQncmFtJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JtcCc6ICdhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4nLFxuXHQnbTN1JzogJ2F1ZGlvL3gtbXBlZ3VybCcsXG5cblx0Ly8gdmlkZW9cblx0J2Zsdic6ICd2aWRlby94LWZsdicsXG5cdCdxdCc6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnbW92JzogJ3ZpZGVvL3F1aWNrdGltZScsXG5cdCd3bXYnOiAndmlkZW8vd2luZG93cy1tZWRpYScsXG5cdCdhdmknOiAndmlkZW8veC1tc3ZpZGVvJyxcblx0J21wZyc6ICd2aWRlby9tcGVnJyxcblx0J21wZWcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGUnOiAndmlkZW8vbXBlZycsXG5cdCdtMXYnOiAndmlkZW8vbXBlZycsXG5cdCdtMnYnOiAndmlkZW8vbXBlZycsXG5cdCczZ3AnOiAndmlkZW8vM2dwcCcsXG5cdCczZzInOiAndmlkZW8vM2dwcDInLFxuXHQnaDI2MSc6ICd2aWRlby9oMjYxJyxcblx0J2gyNjMnOiAndmlkZW8vaDI2MycsXG5cdCdoMjY0JzogJ3ZpZGVvL2gyNjQnLFxuXHQnanBndic6ICd2aWRlby9qcGd2Jyxcblx0J21wNCc6ICd2aWRlby9tcDQnLFxuXHQnbXA0dic6ICd2aWRlby9tcDQnLFxuXHQnbXBnNCc6ICd2aWRlby9tcDQnLFxuXHQnb2d2JzogJ3ZpZGVvL29nZycsXG5cdCd3ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuXHQnbTR2JzogJ3ZpZGVvL3gtbTR2Jyxcblx0J2FzZic6ICd2aWRlby94LW1zLWFzZicsXG5cdCdhc3gnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnd20nOiAndmlkZW8veC1tcy13bScsXG5cdCd3bXgnOiAndmlkZW8veC1tcy13bXgnLFxuXHQnd3Z4JzogJ3ZpZGVvL3gtbXMtd3Z4Jyxcblx0J21vdmllJzogJ3ZpZGVvL3gtc2dpLW1vdmllJyxcblxuXHQvLyBhZG9iZVxuXHQncGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXG5cdCdwc2QnOiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsXG5cdCdhaSc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J2Vwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J3BzJzogJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLFxuXG5cdC8vIG1zIG9mZmljZVxuXHQnZG9jJzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdkb3QnOiAnYXBwbGljYXRpb24vbXN3b3JkJyxcblx0J3J0Zic6ICdhcHBsaWNhdGlvbi9ydGYnLFxuXHQneGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG5cdCdwcHQnOiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLFxuXHQnZG9jeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG5cdCd4bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyxcblx0J2RvdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLFxuXHQncHB0eCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcblxuXHQvLyBvcGVuIG9mZmljZVxuXHQnb2R0JzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCcsXG5cdCdvZHMnOiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbn07XG5cbmV4cG9ydCB7IE1pbWUsIE1pbWUgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInJlcXVpcmUoJy4vZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0Z1bmMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FzaycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBc2snXG59KVxuY2xhc3MgQXNrUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmFza0Rlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubm9CdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMueWVzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSB0cnVlO1xuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQXNrO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmFza0Rlc2MoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX1lFUycpKTtcblx0XHR0aGlzLm5vQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX05PJykpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXHR9XG5cblx0eWVzQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZlllc0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZlllc0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdG5vQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZk5vQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mTm9BY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBc2tEZXNjXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmWWVzRnVuY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZk5vRnVuY1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNZZXNCdXR0b25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTm9CdXR0b25cblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvY3VzWWVzT25TaG93ID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdyhhc2tEZXNjLCBmWWVzRnVuYyA9IG51bGwsIGZOb0Z1bmMgPSBudWxsLCB5ZXNCdXR0b24gPSAnJywgbm9CdXR0b24gPSAnJywgaXNGb2N1c1llc09uU2hvdyA9IHRydWUpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IGZZZXNGdW5jIHx8IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBmTm9GdW5jIHx8IG51bGw7XG5cblx0XHR0aGlzLmFza0Rlc2MoYXNrRGVzYyB8fCAnJyk7XG5cblx0XHRpZiAoeWVzQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnllc0J1dHRvbih5ZXNCdXR0b24pO1xuXHRcdH1cblxuXHRcdGlmIChub0J1dHRvbikge1xuXHRcdFx0dGhpcy5ub0J1dHRvbihub0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSAhIWlzRm9jdXNZZXNPblNob3c7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuYkZvY3VzWWVzT25TaG93KSB7XG5cdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgcmlnaHQsIGxlZnQnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMueWVzRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLm5vRm9jdXModHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0dGhpcy5ub0NsaWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQXNrUG9wdXBWaWV3LCBBc2tQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjYWNoZSA9IHt9O1xuXG52YXIgdGhyb3dlciA9IGZ1bmN0aW9uIChpdCkgeyB0aHJvdyBpdDsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIG9wdGlvbnMpIHtcbiAgaWYgKGhhcyhjYWNoZSwgTUVUSE9EX05BTUUpKSByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgdmFyIEFDQ0VTU09SUyA9IGhhcyhvcHRpb25zLCAnQUNDRVNTT1JTJykgPyBvcHRpb25zLkFDQ0VTU09SUyA6IGZhbHNlO1xuICB2YXIgYXJndW1lbnQwID0gaGFzKG9wdGlvbnMsIDApID8gb3B0aW9uc1swXSA6IHRocm93ZXI7XG4gIHZhciBhcmd1bWVudDEgPSBoYXMob3B0aW9ucywgMSkgPyBvcHRpb25zWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV0gPSAhIW1ldGhvZCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIGlmIChBQ0NFU1NPUlMgJiYgIURFU0NSSVBUT1JTKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgTyA9IHsgbGVuZ3RoOiAtMSB9O1xuXG4gICAgaWYgKEFDQ0VTU09SUykgZGVmaW5lUHJvcGVydHkoTywgMSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IHRocm93ZXIgfSk7XG4gICAgZWxzZSBPWzFdID0gMTtcblxuICAgIG1ldGhvZC5jYWxsKE8sIGFyZ3VtZW50MCwgYXJndW1lbnQxKTtcbiAgfSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgQXJyYXlJdGVyYXRvck1ldGhvZHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JNZXRob2RzLnZhbHVlcztcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICAgIH1cbiAgICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIGZvciAodmFyIE1FVEhPRF9OQU1FIGluIEFycmF5SXRlcmF0b3JNZXRob2RzKSB7XG4gICAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSAhPT0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKSB0cnkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgTUVUSE9EX05BTUUsIEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSA9IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yLFxuLy8gc28gd2UgdXNlIGFuIGludGVybWVkaWF0ZSBmdW5jdGlvbi5cbmZ1bmN0aW9uIFJFKHMsIGYpIHtcbiAgcmV0dXJuIFJlZ0V4cChzLCBmKTtcbn1cblxuZXhwb3J0cy5VTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxuICB2YXIgcmUgPSBSRSgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG5leHBvcnRzLkJST0tFTl9DQVJFVCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9IFJFKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT0gbnVsbDtcbn0pO1xuIiwidmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJlZHVjZSkgPyByZWR1Y2UgOiBvd247XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy44LjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0ICovXG4gICAgYWN0aXZlWERvY3VtZW50ID0gZG9jdW1lbnQuZG9tYWluICYmIG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSBhY3RpdmVYRG9jdW1lbnQgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKTtcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXModGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsIi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgY29udmVydExhbmdOYW1lIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuLy8gaW1wb3J0IHt2aWV3LCBWaWV3VHlwZX0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0xhbmd1YWdlcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNMYW5ndWFnZXMnXG59KVxuY2xhc3MgTGFuZ3VhZ2VzUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZXJMYW5ndWFnZSA9IHRoaXMudXNlckxhbmd1YWdlKCk7XG5cdFx0XHRyZXR1cm4gXy5tYXAodGhpcy5sYW5ncygpLCAobGFuZ3VhZ2UpID0+ICh7XG5cdFx0XHRcdGtleTogbGFuZ3VhZ2UsXG5cdFx0XHRcdHVzZXI6IGxhbmd1YWdlID09PSB1c2VyTGFuZ3VhZ2UsXG5cdFx0XHRcdHNlbGVjdGVkOiBrby5vYnNlcnZhYmxlKGZhbHNlKSxcblx0XHRcdFx0ZnVsbE5hbWU6IGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSlcblx0XHRcdH0pKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubGFuZ3Muc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0fVxuXG5cdGxhbmd1YWdlVG9vbHRpcE5hbWUobGFuZ3VhZ2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIHRydWUpO1xuXHRcdHJldHVybiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIGZhbHNlKSA9PT0gcmVzdWx0ID8gJycgOiByZXN1bHQ7XG5cdH1cblxuXHRzZXRMYW5ndWFnZVNlbGVjdGlvbigpIHtcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuZkxhbmcgPyBrby51bndyYXAodGhpcy5mTGFuZykgOiAnJztcblx0XHRfLmVhY2godGhpcy5sYW5ndWFnZXMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdGl0ZW0uc2VsZWN0ZWQoaXRlbS5rZXkgPT09IGN1cnJlbnRMYW5nKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmVmb3JlU2hvdygpIHtcblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSgnJyk7XG5cblx0XHR0aGlzLmxhbmdzKFtdKTtcblx0fVxuXG5cdG9uU2hvdyhmTGFuZ3VhZ2UsIGxhbmdzLCB1c2VyTGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmZMYW5nID0gZkxhbmd1YWdlO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlKHVzZXJMYW5ndWFnZSB8fCAnJyk7XG5cblx0XHR0aGlzLmxhbmdzKGxhbmdzKTtcblx0fVxuXG5cdGNoYW5nZUxhbmd1YWdlKGxhbmcpIHtcblx0XHRpZiAodGhpcy5mTGFuZykge1xuXHRcdFx0dGhpcy5mTGFuZyhsYW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBMYW5ndWFnZXNQb3B1cFZpZXcsIExhbmd1YWdlc1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBraWxsQ3RybEFDdHJsUywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkb21SZWFkeSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyAkd2luLCAkaHRtbCwgZGF0YSBhcyBHbG9iYWxzRGF0YSwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIEVudW1zIGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBQbHVnaW5zIGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuXG5leHBvcnQgZGVmYXVsdCAoQXBwKSA9PiB7XG5cdEdsb2JhbHNEYXRhLl9fQVBQX18gPSBBcHA7XG5cblx0JHdpbi5vbigna2V5ZG93bicsIGtpbGxDdHJsQUN0cmxTKS5vbigndW5sb2FkJywgKCkgPT4ge1xuXHRcdEdsb2JhbHNEYXRhLmJVbmxvYWQgPSB0cnVlO1xuXHR9KTtcblxuXHQkaHRtbC5hZGRDbGFzcyhiTW9iaWxlRGV2aWNlID8gJ21vYmlsZScgOiAnbm8tbW9iaWxlJykub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KTtcblxuXHRjb25zdCBybCA9IHdpbmRvdy5ybCB8fCB7fTtcblxuXHRybC5pMThuID0gaTE4bjtcblx0cmwuY3JlYXRlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRMZWdhY3k7XG5cblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWwgPSBQbHVnaW5zLmFkZFNldHRpbmdzVmlld01vZGVsO1xuXHRybC5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluO1xuXG5cdHJsLmFkZEhvb2sgPSBQbHVnaW5zLmFkZEhvb2s7XG5cdHJsLnNldHRpbmdzR2V0ID0gUGx1Z2lucy5tYWluU2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblNldHRpbmdzR2V0ID0gUGx1Z2lucy5zZXR0aW5nc0dldDtcblx0cmwucGx1Z2luUmVtb3RlUmVxdWVzdCA9IFBsdWdpbnMucmVtb3RlUmVxdWVzdDtcblxuXHRybC5FbWFpbE1vZGVsID0gRW1haWxNb2RlbDtcblx0cmwuRW51bXMgPSBFbnVtcztcblxuXHR3aW5kb3cucmwgPSBybDtcblxuXHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnbm8tanMgcmwtYm9vdGVkLXRyaWdnZXInKS5hZGRDbGFzcygncmwtYm9vdGVkJyk7XG5cblx0XHRcdEFwcC5ib290c3RhcnQoKTtcblx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHR9O1xuXG5cdHdpbmRvdy5fX0FQUF9CT09UID0gKGZFcnJvckNhbGxiYWNrKSA9PiB7XG5cdFx0ZG9tUmVhZHkoKCkgPT4ge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAod2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWlubG9vcC10ZW1wbGF0ZXMtaWQnKSkge1xuXHRcdFx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAod2luZG93LnJhaW5sb29wVEVNUExBVEVTICYmIHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFU1swXSkge1xuXHRcdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmwtdGVtcGxhdGVzJykuaW5uZXJIVE1MID0gd2luZG93LnJhaW5sb29wVEVNUExBVEVTWzBdO1xuXHRcdFx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZkVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdpbmRvdy5fX0FQUF9CT09UID0gbnVsbDtcblx0XHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdFx0fSk7XG5cdH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGVcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7ICRodG1sLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGFuaW0gPSBiTW9iaWxlRGV2aWNlIHx8ICF2YWx1ZTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1hbmltJywgIWFuaW0pLnRvZ2dsZUNsYXNzKCduby1ybC1hbmltJywgYW5pbSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdHRoaXMucHJlbSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25Mb2dpbicpKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnKSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnTmV3TW92ZVRvRm9sZGVyJykpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnSW50ZXJmYWNlQW5pbWF0aW9uJykpO1xuXG5cdFx0dGhpcy5wcmVtKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1ByZW1UeXBlJykpO1xuXHRcdHRoaXMuY29tbXVuaXR5KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbW11bml0eScpKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlLCBBYnN0cmFjdEFwcFN0b3JlIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQsIERFRkFVTFRfQUpBWF9USU1FT1VUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGluQXJyYXksIHBJbnQsIHBTdHJpbmcsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVHlwZVxuXHQgKiBAcGFyYW0gez9BamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqIEBwYXJhbSB7Kj19IG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHQgKi9cblx0ZGVmYXVsdFJlc3BvbnNlKGZDYWxsYmFjaywgc1JlcXVlc3RBY3Rpb24sIHNUeXBlLCBvRGF0YSwgYkNhY2hlZCwgb1JlcXVlc3RQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgZkNhbGwgPSAoKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gc1R5cGUgJiYgR2xvYmFsc0RhdGEuYlVubG9hZCkge1xuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0LTEgPFxuXHRcdFx0XHRcdFx0aW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YS5DbGVhckF1dGggfHwgb0RhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cblx0XHRcdFx0XHRcdGlmICghb0RhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgPSAwO1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdF0pO1xuXG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjayhcblx0XHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKHNUeXBlKSB7XG5cdFx0XHRjYXNlICdzdWNjZXNzJzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Fib3J0Jzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3IgPT09IHNUeXBlKSB7XG5cdFx0XHRfLmRlbGF5KGZDYWxsLCAzMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmQ2FsbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZlJlc3VsdENhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZU91dCA9IDIwMDAwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICogQHJldHVybnMge2pRdWVyeS5qcVhIUn1cblx0ICovXG5cdGFqYXhSZXF1ZXN0KGZSZXN1bHRDYWxsYmFjaywgcGFyYW1zLCBpVGltZU91dCA9IDIwMDAwLCBzR2V0QWRkID0gJycsIGFib3J0QWN0aW9ucyA9IFtdKSB7XG5cdFx0Y29uc3QgaXNQb3N0ID0gJycgPT09IHNHZXRBZGQsXG5cdFx0XHRoZWFkZXJzID0ge30sXG5cdFx0XHRzdGFydCA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCBhY3Rpb24gPSAnJztcblxuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRhY3Rpb24gPSBwYXJhbXMuQWN0aW9uIHx8ICcnO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGFib3J0QWN0aW9ucywgKGFjdGlvblRvQWJvcnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0cGFyYW1zLlhUb2tlbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0b2tlbicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EZWZBamF4ID0gJC5hamF4KHtcblx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0dXJsOiBhamF4KHNHZXRBZGQpLFxuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIDoge30sXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0dGltZW91dDogaVRpbWVPdXQsXG5cdFx0XHRnbG9iYWw6IHRydWVcblx0XHR9KTtcblxuXHRcdG9EZWZBamF4LmFsd2F5cygob0RhdGEsIHNUeXBlKSA9PiB7XG5cdFx0XHRsZXQgY2FjaGVkID0gZmFsc2U7XG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVGltZSkge1xuXHRcdFx0XHRjYWNoZWQgPSBwSW50KG9EYXRhLlRpbWUpID4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKG9EYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uICYmIHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSAnYWJvcnQnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVmYXVsdFJlc3BvbnNlKGZSZXN1bHRDYWxsYmFjaywgYWN0aW9uLCBzVHlwZSwgb0RhdGEsIGNhY2hlZCwgcGFyYW1zKTtcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGFjdGlvbiwgYWJvcnRBY3Rpb25zKSkge1xuXHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9EZWZBamF4O1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdFx0b0RlZkFqYXguY2F0Y2goY29uc29sZS5sb2cpO1xuXHRcdHJldHVybiBvRGVmQWpheDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVvdXRcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKi9cblx0ZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCBzQWN0aW9uLCBvUGFyYW1ldGVycywgaVRpbWVvdXQsIHNHZXRBZGQsIGFBYm9ydEFjdGlvbnMpIHtcblx0XHRvUGFyYW1ldGVycyA9IG9QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdG9QYXJhbWV0ZXJzLkFjdGlvbiA9IHNBY3Rpb247XG5cblx0XHRzR2V0QWRkID0gcFN0cmluZyhzR2V0QWRkKTtcblxuXHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXF1ZXN0JywgW3NBY3Rpb24sIG9QYXJhbWV0ZXJzLCBzR2V0QWRkXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdG9QYXJhbWV0ZXJzLFxuXHRcdFx0aXNVbmQoaVRpbWVvdXQpID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBwSW50KGlUaW1lb3V0KSxcblx0XHRcdHNHZXRBZGQsXG5cdFx0XHRhQWJvcnRBY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRub29wKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTm9vcCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbJ3tzdWJuYW1lfS8nLCBydWxlc10sXG5cdFx0XHRbJ3tzdWJuYW1lfScsIHJ1bGVzXSxcblx0XHRcdFsnJywgcnVsZXNdXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuLCBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IHNzbSBmcm9tICdzc20nO1xuXG5pbXBvcnQge1xuXHQkd2luLFxuXHQkaHRtbCxcblx0JGRvYyxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc05vcm1hbCwgcFN0cmluZywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcm9vdCwgcm9vdEFkbWluLCByb290VXNlciwgcG9wdWxhdGVBdXRoU3VmZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IHJvdXRlT2ZmLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RCb290IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RCb290JztcblxuY2xhc3MgQWJzdHJhY3RBcHAgZXh0ZW5kcyBBYnN0cmFjdEJvb3Qge1xuXHQvKipcblx0ICogQHBhcmFtIHtSZW1vdGVTdG9yYWdlfEFkbWluUmVtb3RlU3RvcmFnZX0gUmVtb3RlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPSBudWxsO1xuXHRcdHRoaXMuaXNMb2NhbEF1dG9jb21wbGV0ZSA9IHRydWU7XG5cdFx0dGhpcy5pZnJhbWUgPSBudWxsO1xuXHRcdHRoaXMubGFzdEVycm9yVGltZSA9IDA7XG5cblx0XHR0aGlzLmlmcmFtZSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJpbnRlcm5hbC1oaWRkZGVuXCIgLz4nKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZScpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpSCA9ICR3aW4uaGVpZ2h0KCksXG5cdFx0XHRcdFx0aVcgPSAkd2luLmhlaWdodCgpO1xuXG5cdFx0XHRcdGlmICgkd2luLl9fc2l6ZXNbMF0gIT09IGlIIHx8ICR3aW4uX19zaXplc1sxXSAhPT0gaVcpIHtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMF0gPSBpSDtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMV0gPSBpVztcblxuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdC8vIERFQlVHXG5cdFx0Ly9cdFx0RXZlbnRzLnN1Yih7XG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZSc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUnKTtcblx0XHQvL1x0XHRcdH0sXG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZS5yZWFsJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0Ly9cdFx0XHR9XG5cdFx0Ly9cdFx0fSk7XG5cblx0XHQkZG9jXG5cdFx0XHQub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdCRkb2Mub24oXG5cdFx0XHQnbW91c2Vtb3ZlIGtleXByZXNzIGNsaWNrJyxcblx0XHRcdF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTVzKVxuXHRcdCk7XG5cblx0XHRrZXkoJ2VzYywgZW50ZXInLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbihuYW1lLCBkZWZhdWx0Xykge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbltuYW1lXSB8fCBkZWZhdWx0Xztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGRvd25sb2FkKGxpbmspIHtcblx0XHRpZiAoc1VzZXJBZ2VudCAmJiAoLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpIHx8IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSkpIHtcblx0XHRcdGNvbnN0IG9MaW5rID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdG9MaW5rLmhyZWYgPSBsaW5rO1xuXG5cdFx0XHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudCkge1xuXHRcdFx0XHRjb25zdCBvRSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudC5Nb3VzZUV2ZW50cztcblx0XHRcdFx0aWYgKG9FICYmIG9FLmluaXRFdmVudCAmJiBvTGluay5kaXNwYXRjaEV2ZW50KSB7XG5cdFx0XHRcdFx0b0UuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdG9MaW5rLmRpc3BhdGNoRXZlbnQob0UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHdpbmRvdy5vcGVuKGxpbmssICdfc2VsZicpO1xuXHRcdFx0d2luZG93LmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWZyYW1lLmF0dHIoJ3NyYycsIGxpbmspO1xuXHRcdFx0Ly8gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Z29vZ2xlUHJldmlld1N1cHBvcnRlZCgpIHtcblx0XHRpZiAobnVsbCA9PT0gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUpIHtcblx0XHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID1cblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdCAqL1xuXHRzZXRXaW5kb3dUaXRsZSh0aXRsZSkge1xuXHRcdHRpdGxlID0gaXNOb3JtYWwodGl0bGUpICYmIDAgPCB0aXRsZS5sZW5ndGggPyAnJyArIHRpdGxlIDogJyc7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpKSB7XG5cdFx0XHR0aXRsZSArPSAodGl0bGUgPyAnIC0gJyA6ICcnKSArIFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlICsgJyAuLi4nO1xuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHR9XG5cblx0cmVkaXJlY3RUb0FkbWluUGFuZWwoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvb3RBZG1pbigpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHR9XG5cblx0Y2xlYXJDbGllbnRTaWRlVG9rZW4oKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfY2xlYXIpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfY2xlYXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqL1xuXHRzZXRDbGllbnRTaWRlVG9rZW4odG9rZW4pIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9zZXQpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfc2V0KHRva2VuKTtcblxuXHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0F1dGhBY2NvdW50SGFzaCcsIHRva2VuKTtcblx0XHRcdHBvcHVsYXRlQXV0aFN1ZmZpeCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBhZG1pbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxvZ291dCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNsb3NlID0gZmFsc2Vcblx0ICovXG5cdGxvZ2luQW5kTG9nb3V0UmVsb2FkKGFkbWluID0gZmFsc2UsIGxvZ291dCA9IGZhbHNlLCBjbG9zZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5JZnJhbWUgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpO1xuXHRcdGxldCBjdXN0b21Mb2dvdXRMaW5rID0gcFN0cmluZyhTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnY3VzdG9tTG9nb3V0TGluaycpKTtcblxuXHRcdGlmIChsb2dvdXQpIHtcblx0XHRcdHRoaXMuY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblx0XHR9XG5cblx0XHRpZiAobG9nb3V0ICYmIGNsb3NlICYmIHdpbmRvdy5jbG9zZSkge1xuXHRcdFx0d2luZG93LmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0Y3VzdG9tTG9nb3V0TGluayA9IGN1c3RvbUxvZ291dExpbmsgfHwgKGFkbWluID8gcm9vdEFkbWluKCkgOiByb290VXNlcigpKTtcblxuXHRcdGlmIChsb2dvdXQgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGN1c3RvbUxvZ291dExpbmspIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRoaXN0b3J5QmFjaygpIHtcblx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0Ly8gbG9nKCdQcycgKyAnc3MsIGhhYycgKyAna2VycyEgVGhlJyArICdyZVxcJ3Mgbm90JyArICdoaW5nIGludGUnICsgJ3Jlc3RpbmcgOicgKyAnKScpO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0Jyk7XG5cblx0XHRjb25zdCBtb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTYXZlVHJpZ2dlcicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TYXZlVHJpZ2dlcicpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0lucHV0JywgcmVxdWlyZSgnQ29tcG9uZW50L0lucHV0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2VsZWN0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NlbGVjdCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1JhZGlvJywgcmVxdWlyZSgnQ29tcG9uZW50L1JhZGlvJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignVGV4dEFyZWEnLCByZXF1aXJlKCdDb21wb25lbnQvVGV4dEFyZWEnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdEYXRlJywgcmVxdWlyZSgnQ29tcG9uZW50L0RhdGUnKS5kZWZhdWx0KTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3gtc2NyaXB0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NjcmlwdCcpLmRlZmF1bHQpO1xuXHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N2Zy1pY29uJywgcmVxdWlyZSgnQ29tcG9uZW50L1N2Z0ljb24nKS5kZWZhdWx0KTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbWF0ZXJpYWxEZXNpZ24nKSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fVxuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKTtcblxuXHRcdF8uZGVsYXkod2luZG93UmVzaXplQ2FsbGJhY2ssIE1hZ2ljcy5UaW1lMXMpO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1lbnRlcicsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1sZWF2ZScsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdGlmICghbW9iaWxlKSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtZGVza3RvcCcpO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ21vYmlsZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1heC13aWR0aDogNzY3cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWxlYXZlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ3RhYmxldCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDE0MDBweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcC1sYXJnZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTQwMXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKS5hZGRDbGFzcygncmwtbW9iaWxlJyk7XG5cdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWRpc2FibGVkJywgYlZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWVuYWJsZWQnLCAhYlZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbFR5cGUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLW5vbmUnLCAnbm9uZScgPT09IHNWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1zaG9ydCcsICdzaG9ydCcgPT09IHNWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdExhbmd1YWdlU3RvcmUucG9wdWxhdGUoKTtcblx0XHRUaGVtZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0U29jaWFsU3RvcmUucG9wdWxhdGUoKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcCwgQWJzdHJhY3RBcHAgYXMgZGVmYXVsdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0Qm9vdCB7XG5cdGJvb3RzdGFydCgpIHtcblx0XHQvKiBuby1lbXB0eSAqL1xuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0UmFkaW8gZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cblx0XHRpZiAocGFyYW1zLnZhbHVlcykge1xuXHRcdFx0dGhpcy52YWx1ZXMoXy5tYXAocGFyYW1zLnZhbHVlcywgKGxhYmVsLCB2YWx1ZSkgPT4gKHsgbGFiZWw6IGxhYmVsLCB2YWx1ZTogdmFsdWUgfSkpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrID0gXy5iaW5kKHRoaXMuY2xpY2ssIHRoaXMpO1xuXHR9XG5cblx0Y2xpY2sodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdmFsdWUpIHtcblx0XHRcdHRoaXMudmFsdWUodmFsdWUudmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJhZGlvLCBBYnN0cmFjdFJhZGlvIGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIHNlYXJjaGVyICE9PSB1bmRlZmluZWQgPyBzZWFyY2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZWh0bWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgncmVkdWNlJywgeyAxOiAwIH0pO1xuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIIHx8IENIUk9NRV9CVUcgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6IG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09ICdwcm9jZXNzJztcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyB2YWx1ZXMgOiBvd247XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKHR5cGVvZiBzdG9yZS5pbnNwZWN0U291cmNlICE9ICdmdW5jdGlvbicpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiAhU3ltYm9sLnNoYW1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzKGhpZGRlbktleXMsIGtleSkgJiYgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgY29uY2F0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IGNvbmNhdCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gdG9MZW5ndGgoRS5sZW5ndGgpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmRleC1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmRleE9mO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5kZXhPZikgPyBpbmRleE9mIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgbmF0aXZlSW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnaW5kZXhPZicsIHsgQUNDRVNTT1JTOiB0cnVlLCAxOiAwIH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCAhU1RSSUNUX01FVEhPRCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gbmF0aXZlSW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGZpbmQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbmQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmluZDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbmQpID8gZmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKEZJTkQpO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBsYXN0SW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5sYXN0SW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmxhc3RJbmRleE9mKSA/IGxhc3RJbmRleE9mIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmxhc3RJbmRleE9mO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbGFzdC1pbmRleC1vZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBsYXN0SW5kZXhPZiAhPT0gW10ubGFzdEluZGV4T2YgfSwge1xuICBsYXN0SW5kZXhPZjogbGFzdEluZGV4T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBuYXRpdmVMYXN0SW5kZXhPZiA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnbGFzdEluZGV4T2YnKTtcbi8vIEZvciBwcmV2ZW50aW5nIHBvc3NpYmxlIGFsbW9zdCBpbmZpbml0ZSBsb29wIGluIG5vbi1zdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMsIHRlc3QgdGhlIGZvcndhcmQgdmVyc2lvbiBvZiB0aGUgbWV0aG9kXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnaW5kZXhPZicsIHsgQUNDRVNTT1JTOiB0cnVlLCAxOiAwIH0pO1xudmFyIEZPUkNFRCA9IE5FR0FUSVZFX1pFUk8gfHwgIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgLy8gY29udmVydCAtMCB0byArMFxuICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuIG5hdGl2ZUxhc3RJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBtaW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8gJiYgT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICByZXR1cm4gLTE7XG59IDogbmF0aXZlTGFzdEluZGV4T2Y7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IGJpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0Z1bmN0aW9uJykuYmluZDtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghKGFyZ3NMZW5ndGggaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIGxpc3QgPSBbXSwgaSA9IDA7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSBGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgbGlzdC5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZEZ1bmN0aW9uID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvdHJpbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciB0cmltID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvdHJpbScpO1xuXG52YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnRyaW07XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGVcbiAgICB8fCAoaXQgaW5zdGFuY2VvZiBTdHJpbmcgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUudHJpbSkgPyB0cmltIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0nKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnU3RyaW5nJykudHJpbTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKSB8fCBub25bTUVUSE9EX05BTUVdKCkgIT0gbm9uIHx8IHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRTtcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBtYXAgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWFwIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykubWFwO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuLy8gRkY0OS0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG9iamVjdERlZmluZVByb3BlcnR5TW9kaWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIURFU0NSSVBUT1JTLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUuZlxufSk7XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNilcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gKCFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSCkgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgXCI8aHRtbD5cXG48aGVhZD5cXG5cXHQ8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwidXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlXFxcIiBjb250ZW50PVxcXCJ5ZXNcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwicm9ib3RzXFxcIiBjb250ZW50PVxcXCJub2luZGV4LCBub2ZvbGxvdywgbm9vZHBcXFwiIC8+XFxuXFx0PHRpdGxlPnt7dGl0bGV9fTwvdGl0bGU+XFxuXFx0PHN0eWxlPlxcbmh0bWwsIGJvZHkge1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFx0Zm9udC1zaXplOiAxM3B4O1xcblxcdGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuYSB7Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfVxcbmE6dmlzaXRlZCB7Y29sb3I6ICM2MDl9XFxuYTphY3RpdmUge2NvbG9yOiByZWR9XFxuYmxvY2txdW90ZSB7Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwcHggMTBweH1cXG5cXG5wcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmJvZHktd3JwIHtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4uYm9keS13cnAuaHRtbCBwcmUge1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4ge1xcblxcdHBhZGRpbmc6IDE1cHg7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gcHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsdWU7XFxuXFx0Y29sb3I6IGJsdWU7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JlZW47XFxuXFx0Y29sb3I6IGdyZWVuO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgcmVkO1xcblxcdGNvbG9yOiByZWQ7XFxufVxcbi5ybC1wcmV2aWV3LXN1YmplY3Qge1xcblxcdGZvbnQtc2l6ZTogMTZweDtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1jcmVkcy1mcm9tLCAucmwtcHJldmlldy1jcmVkcy10bywgLnJsLXByZXZpZXctY3JlZHMtY2Mge1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiA1cHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctZGF0ZSB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiAxMHB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LXNlY3Rpb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucmwtcHJldmlldy1oaWRlIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXHQ8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc3ViamVjdFxcXCI+e3tzdWJqZWN0fX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWZyb21cXFwiPnt7ZnJvbUNyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLXRvXFxcIj57e3RvTGFiZWx9fToge3t0b0NyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWNjIHt7Y2NDbGFzc319XFxcIj57e2NjTGFiZWx9fToge3tjY0NyZWRzfX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJib2R5LXdycCB7e2JvZHlDbGFzc319XFxcIj57e2h0bWx9fTwvZGl2PlxcbjwvYm9keT5cXG48L2h0bWw+XCI7IiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbHRlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBmaWx0ZXIgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gZmlsdGVyIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuLy8gRWRnZSAxNC0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBGQUlMU19PTl9QUklNSVRJVkVTO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgc2xpY2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gc2xpY2UgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNsaWNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ3NsaWNlJywgeyBBQ0NFU1NPUlM6IHRydWUsIDA6IDAsIDE6IDIgfSk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgbmF0aXZlU2xpY2UgPSBbXS5zbGljZTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAodHlwZW9mIENvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UuY2FsbChPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyBBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgcmV2ZXJzZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyByZXZlcnNlIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnJldmVyc2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gW10ucmV2ZXJzZTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UuY2FsbCh0aGlzKTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Qua2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmtleXM7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJpbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNhdmVUcmlnZ2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IHBhcmFtcy5lbGVtZW50IHx8IG51bGw7XG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSAmJiBwYXJhbXMudmFsdWUuc3Vic2NyaWJlID8gcGFyYW1zLnZhbHVlIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cblx0XHRcdFx0aWYgKHBhcmFtcy52ZXJ0aWNhbEFsaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygndmVydGljYWwtYWxpZ24nLCBwYXJhbXMudmVydGljYWxBbGlnbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHRoaXMudmFsdWUoKSk7XG5cblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy52YWx1ZS5zdWJzY3JpYmUodGhpcy5zZXRTdGF0ZSwgdGhpcykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGU6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTYXZlVHJpZ2dlckNvbXBvbmVudCwgJ1NhdmVUcmlnZ2VyQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihJbnB1dENvbXBvbmVudCwgJ0lucHV0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyB8fCAnJztcblxuXHRcdHRoaXMub3B0aW9uc1RleHQgPSBwYXJhbXMub3B0aW9uc1RleHQgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNWYWx1ZSA9IHBhcmFtcy5vcHRpb25zVmFsdWUgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gcGFyYW1zLm9wdGlvbnNDYXB0aW9uIHx8IG51bGw7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zQ2FwdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IGkxOG4odGhpcy5vcHRpb25zQ2FwdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNlbGVjdENvbXBvbmVudCwgJ1NlbGVjdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0UmFkaW8gfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RSYWRpbyc7XG5cbmNsYXNzIFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RSYWRpbyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoUmFkaW9Db21wb25lbnQsICdSYWRpb0NvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfUk9XUyA9IDU7XG5cbmNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5yb3dzID0gcGFyYW1zLnJvd3MgfHwgREVGQVVMVF9ST1dTO1xuXHRcdHRoaXMuc3BlbGxjaGVjayA9IGlzVW5kKHBhcmFtcy5zcGVsbGNoZWNrKSA/IGZhbHNlIDogISFwYXJhbXMuc3BlbGxjaGVjaztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoVGV4dEFyZWFDb21wb25lbnQsICdUZXh0QXJlYUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihEYXRlQ29tcG9uZW50LCAnRGF0ZUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2NyaXB0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHBhcmFtcy5jb21wb25lbnQgJiZcblx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2RlcyAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnQgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUxcblx0XHQpIHtcblx0XHRcdGxldCBzY3JpcHQgPSBwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUw7XG5cdFx0XHRzY3JpcHQgPSAhc2NyaXB0ID8gJycgOiBzY3JpcHQucmVwbGFjZSgvPHgtc2NyaXB0L2ksICc8c2NyaXB0JykucmVwbGFjZSgvPGI+PFxcL2I+PFxcL3gtc2NyaXB0Pi9pLCAnPC9zY3JpcHQ+Jyk7XG5cblx0XHRcdGlmIChzY3JpcHQpIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQudGV4dCgnJyk7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlcGxhY2VXaXRoKFxuXHRcdFx0XHRcdCQoc2NyaXB0KS50ZXh0KFxuXHRcdFx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdICYmIHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0PyBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdDogJydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNjcmlwdENvbXBvbmVudCwgJ1NjcmlwdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCB0aGlzKTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKFxuXHRcdFx0dGhpcy52YWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0XHR9LCB0aGlzKVxuXHRcdCk7XG5cdH1cblxuXHRhbmltYXRpb25Cb3hTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQm94KHRydWUpO1xuXHR9XG5cblx0YW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayh0cnVlKTtcblx0fVxuXG5cdHRyaWdnZXJBbmltYXRpb24oYm94KSB7XG5cdFx0aWYgKGJveCkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgMjAwKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQsICdDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHsgcm9vdCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBMaWNlbnNlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0xpY2Vuc2UnO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgQ29yZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Db3JlJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBTZXR0aW5nc0FkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL1NldHRpbmdzJztcbmltcG9ydCB7IExvZ2luQWRtaW5TY3JlZW4gfSBmcm9tICdTY3JlZW4vQWRtaW4vTG9naW4nO1xuXG5pbXBvcnQgeyBoaWRlTG9hZGluZywgcm91dGVPZmYsIHNldEhhc2gsIHN0YXJ0U2NyZWVucyB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0QXBwIH0gZnJvbSAnQXBwL0Fic3RyYWN0JztcblxuY2xhc3MgQWRtaW5BcHAgZXh0ZW5kcyBBYnN0cmFjdEFwcCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFJlbW90ZSk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIFJlbW90ZTtcblx0fVxuXG5cdHJlbG9hZERvbWFpbkxpc3QoKSB7XG5cdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5kb21haW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKFtlbmFibGVkLCBhbGlhc10sIG5hbWUpID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IGtvLm9ic2VydmFibGUoIWVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0XHRcdFx0ZGVsZXRlQWNjZXNzOiBrby5vYnNlcnZhYmxlKGZhbHNlKVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmVsb2FkUGx1Z2luTGlzdCgpIHtcblx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLnBsdWdpbkxpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zKFxuXHRcdFx0XHRcdF8ubWFwKGRhdGEuUmVzdWx0LCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uTmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFpdGVtLkVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJlZDoga28ub2JzZXJ2YWJsZSghIWl0ZW0uQ29uZmlndXJlZClcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBhY2thZ2VzTGlzdCgpIHtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXMubG9hZGluZyh0cnVlKTtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5wYWNrYWdlc0xpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZSghIWRhdGEuUmVzdWx0Lk1haW5VcGRhdGFibGUpO1xuXG5cdFx0XHRcdGxldCBsaXN0ID0gW107XG5cdFx0XHRcdGNvbnN0IGxvYWRpbmcgPSB7fTtcblxuXHRcdFx0XHRfLmVhY2goUGFja2FnZVN0b3JlLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5sb2FkaW5nKCkpIHtcblx0XHRcdFx0XHRcdGxvYWRpbmdbaXRlbS5maWxlXSA9IGl0ZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoaXNBcnJheShkYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdGxpc3QgPSBfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5MaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0ubG9hZGluZyA9IGtvLm9ic2VydmFibGUoIWlzVW5kKGxvYWRpbmdbaXRlbS5maWxlXSkpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAnY29yZScgPT09IGl0ZW0udHlwZSAmJiAhaXRlbS5jYW5CZUluc3RhbGxlZCA/IG51bGwgOiBpdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzKGxpc3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR1cGRhdGVDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKHRydWUpO1xuXHRcdFJlbW90ZS51cGRhdGVDb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKGZhbHNlKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbignJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUoLTIpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZENvcmVEYXRhKCkge1xuXHRcdENvcmVTdG9yZS5jb3JlQ2hlY2tpbmcodHJ1ZSk7XG5cdFx0Q29yZVN0b3JlLmNvcmVSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5jb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKGRhdGEuUmVzdWx0LkNoYW5uZWwgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoZGF0YS5SZXN1bHQuVHlwZSB8fCAnc3RhYmxlJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlKCEhZGF0YS5SZXN1bHQuVXBkYXRhYmxlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVBY2Nlc3MoISFkYXRhLlJlc3VsdC5BY2Nlc3MpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoISFkYXRhLlJlc3VsdC5XYXJuaW5nKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKGRhdGEuUmVzdWx0LlZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oZGF0YS5SZXN1bHQuUmVtb3RlVmVyc2lvbiB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZShkYXRhLlJlc3VsdC5SZW1vdGVSZWxlYXNlIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZShwSW50KGRhdGEuUmVzdWx0LlZlcnNpb25Db21wYXJlKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZUNoYW5uZWwoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZSA9IGZhbHNlXG5cdCAqL1xuXHRyZWxvYWRMaWNlbnNpbmcoZm9yY2UgPSBmYWxzZSkge1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmdQcm9jZXNzKHRydWUpO1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoJycpO1xuXHRcdFJlbW90ZS5saWNlbnNpbmcoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGlzTm9ybWFsKGRhdGEuUmVzdWx0LkV4cGlyZWQpKSB7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlVmFsaWQodHJ1ZSk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXhwaXJlZChwSW50KGRhdGEuUmVzdWx0LkV4cGlyZWQpKTtcblx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcignJyk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcodHJ1ZSk7XG5cdFx0XHRcdEFwcFN0b3JlLnByZW0odHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZGF0YSAmJlxuXHRcdFx0XHRcdGRhdGEuRXJyb3JDb2RlICYmXG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KHBJbnQoZGF0YS5FcnJvckNvZGUpLCBbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsIE5vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkXSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcihnZXROb3RpZmljYXRpb24ocEludChkYXRhLkVycm9yQ29kZSkpKTtcblx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCA9PT0gcmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSkpO1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyhmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgZm9yY2UpO1xuXHR9XG5cblx0Ym9vdGVuZChib290ZW5kQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKHByb2dyZXNzSnMpIHtcblx0XHRcdHByb2dyZXNzSnMuZW5kKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJvb3RlbmRDYWxsYmFjaykge1xuXHRcdFx0Ym9vdGVuZENhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdHN1cGVyLmJvb3RzdGFydCgpO1xuXG5cdFx0QXBwU3RvcmUucG9wdWxhdGUoKTtcblx0XHRDYXBhU3RvcmUucG9wdWxhdGUoKTtcblxuXHRcdGhpZGVMb2FkaW5nKCk7XG5cblx0XHRpZiAoIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0FkbWluUGFuZWwnKSkge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvJztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0XHRzdGFydFNjcmVlbnMoW1NldHRpbmdzQWRtaW5TY3JlZW5dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXJ0U2NyZWVucyhbTG9naW5BZG1pblNjcmVlbl0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuYm9vdGVuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBZG1pbkFwcCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgU2VydmVyU2VjdXJlLCBQb3J0cywgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IElNQVBfREVGQVVMVF9QT1JULCBTSUVWRV9ERUZBVUxUX1BPUlQsIFNNVFBfREVGQVVMVF9QT1JUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdHJpbSwgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRG9tYWluJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0RvbWFpbidcbn0pXG5jbGFzcyBEb21haW5Qb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFnZSA9IGtvLm9ic2VydmFibGUoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudGVzdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cFNlcnZlckZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5pbWFwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5pbWFwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlU2lldmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlQWxsb3dSYXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgU0lFVkVfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNpZXZlU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zbXRwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBTTVRQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zbXRwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cEF1dGggPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuc210cFBocE1haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLndoaXRlTGlzdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWxpYXNOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxsb3dTaWV2ZSA9IGtvLmNvbXB1dGVkKCgpID0+IENhcGFBZG1pblN0b3JlLmZpbHRlcnMoKSAmJiBDYXBhQWRtaW5TdG9yZS5zaWV2ZSgpKTtcblxuXHRcdHRoaXMuaGVhZGVyVGV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB0aGlzLm5hbWUoKSxcblx0XHRcdFx0YWxpYXNOYW1lID0gdGhpcy5hbGlhc05hbWUoKTtcblxuXHRcdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0XHRpZiAodGhpcy5lZGl0KCkpIHtcblx0XHRcdFx0cmVzdWx0ID0gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9FRElUX0RPTUFJTicsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0XHRpZiAoYWxpYXNOYW1lKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9ICcg4oaQICcgKyBhbGlhc05hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0JycgPT09IG5hbWVcblx0XHRcdFx0XHRcdD8gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOJylcblx0XHRcdFx0XHRcdDogaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOX1dJVEhfTkFNRScsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kb21haW5EZXNjID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHRoaXMubmFtZSgpO1xuXHRcdFx0cmV0dXJuICF0aGlzLmVkaXQoKSAmJiBuYW1lID8gaTE4bignUE9QVVBTX0RPTUFJTi9ORVdfRE9NQUlOX0RFU0MnLCB7ICdOQU1FJzogJypAJyArIG5hbWUgfSkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZG9tYWluSXNDb21wdXRlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZVBocE1haWwgPSB0aGlzLnNtdHBQaHBNYWlsKCksXG5cdFx0XHRcdGFsbG93U2lldmUgPSB0aGlzLmFsbG93U2lldmUoKSxcblx0XHRcdFx0dXNlU2lldmUgPSB0aGlzLnVzZVNpZXZlKCk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCcnICE9PSB0aGlzLm5hbWUoKSAmJlxuXHRcdFx0XHQnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiZcblx0XHRcdFx0JycgIT09IHRoaXMuaW1hcFBvcnQoKSAmJlxuXHRcdFx0XHQoYWxsb3dTaWV2ZSAmJiB1c2VTaWV2ZSA/ICcnICE9PSB0aGlzLnNpZXZlU2VydmVyKCkgJiYgJycgIT09IHRoaXMuc2lldmVQb3J0KCkgOiB0cnVlKSAmJlxuXHRcdFx0XHQoKCcnICE9PSB0aGlzLnNtdHBTZXJ2ZXIoKSAmJiAnJyAhPT0gdGhpcy5zbXRwUG9ydCgpKSB8fCB1c2VQaHBNYWlsKVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVUZXN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy50ZXN0aW5nKCkgJiYgdGhpcy5kb21haW5Jc0NvbXB1dGVkKCkpO1xuXHRcdHRoaXMuY2FuQmVTYXZlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNhdmluZygpICYmIHRoaXMuZG9tYWluSXNDb21wdXRlZCgpKTtcblxuXHRcdHRoaXMucGFnZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdC8vIHNtYXJ0IGZvcm0gaW1wcm92ZW1lbnRzXG5cdFx0dGhpcy5pbWFwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLm5hbWUoKSAmJiAnJyA9PT0gdGhpcy5pbWFwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5pbWFwU2VydmVyKHRoaXMubmFtZSgpLnJlcGxhY2UoL1suXT9bKl1bLl0/L2csICcnKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNpZXZlU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zaWV2ZVNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodGhpcy5pbWFwU2VydmVyKCkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zbXRwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5zbXRwU2VydmVyKHRoaXMuaW1hcFNlcnZlcigpLnJlcGxhY2UoL2ltYXAvZ2ksICdzbXRwJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbWFwU2VjdXJlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoKSkge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gcEludCh0aGlzLmltYXBQb3J0KCkpO1xuXHRcdFx0XHRzd2l0Y2ggKHBTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0Y2FzZSAnMic6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcFNzbCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNtdHBTZWN1cmUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW5hYmxlU21hcnRQb3J0cygpKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBwSW50KHRoaXMuc210cFBvcnQoKSk7XG5cdFx0XHRcdHN3aXRjaCAocFN0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwU3NsID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTdGFydFRscyA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3RhcnRUbHMgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHBTc2wpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHAgPT09IHBvcnQgfHwgUG9ydHMuU210cFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cFN0YXJ0VGxzKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2F2ZWQoKSlcblx0Y3JlYXRlT3JBZGRDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVPclVwZGF0ZURvbWFpbihcblx0XHRcdF8uYmluZCh0aGlzLm9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpLFxuXHRcdFx0IXRoaXMuZWRpdCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cblx0XHRcdHRoaXMuaW1hcFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLmltYXBQb3J0KCkpLFxuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKCksXG5cdFx0XHR0aGlzLmltYXBTaG9ydExvZ2luKCksXG5cblx0XHRcdHRoaXMudXNlU2lldmUoKSxcblx0XHRcdHRoaXMuc2lldmVBbGxvd1JhdygpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNpZXZlUG9ydCgpKSxcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy5zbXRwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc210cFBvcnQoKSksXG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUoKSxcblx0XHRcdHRoaXMuc210cFNob3J0TG9naW4oKSxcblx0XHRcdHRoaXMuc210cEF1dGgoKSxcblx0XHRcdHRoaXMuc210cFBocE1haWwoKSxcblxuXHRcdFx0dGhpcy53aGl0ZUxpc3QoKVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVRlc3RlZCgpKVxuXHR0ZXN0Q29ubmVjdGlvbkNvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cblx0XHR0aGlzLnRlc3RpbmdEb25lKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdFx0Xy5iaW5kKHRoaXMub25UZXN0Q29ubmVjdGlvblJlc3BvbnNlLCB0aGlzKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5pbWFwUG9ydCgpKSxcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnVzZVNpZXZlKCksXG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc2lldmVQb3J0KCkpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnNtdHBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zbXRwUG9ydCgpKSxcblx0XHRcdHRoaXMuc210cFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5zbXRwQXV0aCgpLFxuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCgpXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0d2hpdGVMaXN0Q29tbWFuZCgpIHtcblx0XHR0aGlzLnBhZ2UoJ3doaXRlLWxpc3QnKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0YmFja0NvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHNpZXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoIXRoaXMuc2lldmVTZXR0aW5ncygpKTtcblx0XHR0aGlzLmNsZWFyVGVzdGluZygpO1xuXHR9XG5cblx0b25UZXN0Q29ubmVjdGlvblJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdGxldCBiSW1hcCA9IGZhbHNlLFxuXHRcdFx0XHRiU2lldmUgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy50ZXN0aW5nRG9uZSh0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5TaWV2ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LlNtdHApO1xuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nSW1hcEVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LkltYXApIHtcblx0XHRcdFx0YkltYXAgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyhvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LlNpZXZlKSB7XG5cdFx0XHRcdGJTaWV2ZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2Mob0RhdGEuUmVzdWx0LlNpZXZlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ1NtdHBFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5TbXRwKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MoJycpO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5TbXRwKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2lldmVTZXR0aW5ncygpKSB7XG5cdFx0XHRcdGlmICghYlNpZXZlICYmIGJJbWFwKSB7XG5cdFx0XHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiU2lldmUgJiYgIWJJbWFwKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0b25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSkge1xuXHRcdFx0aWYgKG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2VDb21tYW5kKCk7XG5cdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9VTktOT1dOX0VSUk9SJykpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyVGVzdGluZygpIHtcblx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKGZhbHNlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KG9Eb21haW4pIHtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5jbGVhclRlc3RpbmcoKTtcblxuXHRcdHRoaXMuY2xlYXJGb3JtKCk7XG5cdFx0aWYgKG9Eb21haW4pIHtcblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyhmYWxzZSk7XG5cblx0XHRcdHRoaXMuZWRpdCh0cnVlKTtcblxuXHRcdFx0dGhpcy5uYW1lKHRyaW0ob0RvbWFpbi5OYW1lKSk7XG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIodHJpbShvRG9tYWluLkluY0hvc3QpKTtcblx0XHRcdHRoaXMuaW1hcFBvcnQoJycgKyBwSW50KG9Eb21haW4uSW5jUG9ydCkpO1xuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKHRyaW0ob0RvbWFpbi5JbmNTZWN1cmUpKTtcblx0XHRcdHRoaXMuaW1hcFNob3J0TG9naW4oISFvRG9tYWluLkluY1Nob3J0TG9naW4pO1xuXHRcdFx0dGhpcy51c2VTaWV2ZSghIW9Eb21haW4uVXNlU2lldmUpO1xuXHRcdFx0dGhpcy5zaWV2ZUFsbG93UmF3KCEhb0RvbWFpbi5TaWV2ZUFsbG93UmF3KTtcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodHJpbShvRG9tYWluLlNpZXZlSG9zdCkpO1xuXHRcdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBwSW50KG9Eb21haW4uU2lldmVQb3J0KSk7XG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKHRyaW0ob0RvbWFpbi5TaWV2ZVNlY3VyZSkpO1xuXHRcdFx0dGhpcy5zbXRwU2VydmVyKHRyaW0ob0RvbWFpbi5PdXRIb3N0KSk7XG5cdFx0XHR0aGlzLnNtdHBQb3J0KCcnICsgcEludChvRG9tYWluLk91dFBvcnQpKTtcblx0XHRcdHRoaXMuc210cFNlY3VyZSh0cmltKG9Eb21haW4uT3V0U2VjdXJlKSk7XG5cdFx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKCEhb0RvbWFpbi5PdXRTaG9ydExvZ2luKTtcblx0XHRcdHRoaXMuc210cEF1dGgoISFvRG9tYWluLk91dEF1dGgpO1xuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCghIW9Eb21haW4uT3V0VXNlUGhwTWFpbCk7XG5cdFx0XHR0aGlzLndoaXRlTGlzdCh0cmltKG9Eb21haW4uV2hpdGVMaXN0KSk7XG5cdFx0XHR0aGlzLmFsaWFzTmFtZSh0cmltKG9Eb21haW4uQWxpYXNOYW1lKSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJGb3JtKCkge1xuXHRcdHRoaXMuZWRpdChmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKGZhbHNlKTtcblxuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuaW1hcFBvcnQoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLmltYXBTaG9ydExvZ2luKGZhbHNlKTtcblxuXHRcdHRoaXMudXNlU2lldmUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVBbGxvd1JhdyhmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlcignJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBTSUVWRV9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc2lldmVTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyKCcnKTtcblx0XHR0aGlzLnNtdHBQb3J0KCcnICsgU01UUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc210cFNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbihmYWxzZSk7XG5cdFx0dGhpcy5zbXRwQXV0aCh0cnVlKTtcblx0XHR0aGlzLnNtdHBQaHBNYWlsKGZhbHNlKTtcblxuXHRcdHRoaXMud2hpdGVMaXN0KCcnKTtcblx0XHR0aGlzLmFsaWFzTmFtZSgnJyk7XG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IERvbWFpblBvcHVwVmlldywgRG9tYWluUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IGFkZFNldHRpbmdzVmlld01vZGVsIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0IHsgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB9IGZyb20gJ1NjcmVlbi9BYnN0cmFjdFNldHRpbmdzJztcblxuaW1wb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9HZW5lcmFsJztcbmltcG9ydCB7IERvbWFpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vRG9tYWlucyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Mb2dpbic7XG5pbXBvcnQgeyBDb250YWN0c0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Db250YWN0cyc7XG5pbXBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9TZWN1cml0eSc7XG5pbXBvcnQgeyBTb2NpYWxBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vU29jaWFsJztcbmltcG9ydCB7IFBsdWdpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vUGx1Z2lucyc7XG5pbXBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9QYWNrYWdlcyc7XG5pbXBvcnQgeyBBYm91dEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9BYm91dCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTWVudVNldHRpbmdzQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9TZXR0aW5ncy9NZW51JztcbmltcG9ydCB7IFBhbmVTZXR0aW5nc0FkbWluVmlldyB9IGZyb20gJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZSc7XG5cbmNsYXNzIFNldHRpbmdzQWRtaW5TY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoW01lbnVTZXR0aW5nc0FkbWluVmlldywgUGFuZVNldHRpbmdzQWRtaW5WaWV3XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFjayA9IG51bGxcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGxldCBicmFuZGluZyA9IG51bGwsXG5cdFx0XHRsaWNlbnNpbmcgPSBudWxsO1xuXG5cdFx0aWYgKFJMX0NPTU1VTklUWSkge1xuXHRcdFx0YnJhbmRpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyYW5kaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vUHJlbS9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0XHRsaWNlbnNpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9QcmVtL0xpY2Vuc2luZycpLmRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRHZW5lcmFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzR2VuZXJhbCcsXG5cdFx0XHQnVEFCU19MQUJFTFMvTEFCRUxfR0VORVJBTF9OQU1FJyxcblx0XHRcdCdnZW5lcmFsJyxcblx0XHRcdHRydWVcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRG9tYWluc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzRG9tYWlucycsICdUQUJTX0xBQkVMUy9MQUJFTF9ET01BSU5TX05BTUUnLCAnZG9tYWlucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoTG9naW5BZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0xvZ2luJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xPR0lOX05BTUUnLCAnbG9naW4nKTtcblxuXHRcdGlmIChicmFuZGluZykge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoYnJhbmRpbmcsICdBZG1pblNldHRpbmdzQnJhbmRpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfQlJBTkRJTkdfTkFNRScsICdicmFuZGluZycpO1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKENvbnRhY3RzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NDb250YWN0cycsICdUQUJTX0xBQkVMUy9MQUJFTF9DT05UQUNUU19OQU1FJywgJ2NvbnRhY3RzJyk7XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZWN1cml0eUFkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzU2VjdXJpdHknLCAnVEFCU19MQUJFTFMvTEFCRUxfU0VDVVJJVFlfTkFNRScsICdzZWN1cml0eScpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRTb2NpYWxBZG1pblNldHRpbmdzLFxuXHRcdFx0J0FkbWluU2V0dGluZ3NTb2NpYWwnLFxuXHRcdFx0J1RBQlNfTEFCRUxTL0xBQkVMX0lOVEVHUkFUSU9OX05BTUUnLFxuXHRcdFx0J2ludGVncmF0aW9ucydcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGx1Z2luc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzUGx1Z2lucycsICdUQUJTX0xBQkVMUy9MQUJFTF9QTFVHSU5TX05BTUUnLCAncGx1Z2lucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGFja2FnZXNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BhY2thZ2VzJywgJ1RBQlNfTEFCRUxTL0xBQkVMX1BBQ0tBR0VTX05BTUUnLCAncGFja2FnZXMnKTtcblxuXHRcdGlmIChsaWNlbnNpbmcpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKGxpY2Vuc2luZywgJ0FkbWluU2V0dGluZ3NMaWNlbnNpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfTElDRU5TSU5HX05BTUUnLCAnbGljZW5zaW5nJyk7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoQWJvdXRBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0Fib3V0JywgJ1RBQlNfTEFCRUxTL0xBQkVMX0FCT1VUX05BTUUnLCAnYWJvdXQnKTtcblxuXHRcdHJ1blNldHRpbmdzVmlld01vZGVsSG9va3ModHJ1ZSk7XG5cblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2soKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNldHRpbmdzQWRtaW5TY3JlZW4sIFNldHRpbmdzQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQge1xuXHR0cmltLFxuXHRwSW50LFxuXHRib29sVG9BamF4LFxuXHRzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbixcblx0Y2hhbmdlVGhlbWUsXG5cdGNvbnZlcnRUaGVtZU5hbWUsXG5cdGNvbnZlcnRMYW5nTmFtZVxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IEFwcEFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5jbGFzcyBHZW5lcmFsQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2UgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlO1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXM7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZUFkbWluO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlc0FkbWluO1xuXG5cdFx0dGhpcy50aGVtZSA9IFRoZW1lU3RvcmUudGhlbWU7XG5cdFx0dGhpcy50aGVtZXMgPSBUaGVtZVN0b3JlLnRoZW1lcztcblxuXHRcdHRoaXMuY2FwYVRoZW1lcyA9IENhcGFBZG1pblN0b3JlLnRoZW1lcztcblx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZCA9IENhcGFBZG1pblN0b3JlLnVzZXJCYWNrZ3JvdW5kO1xuXHRcdHRoaXMuY2FwYUdyYXZhdGFyID0gQ2FwYUFkbWluU3RvcmUuZ3JhdmF0YXI7XG5cdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzID0gQ2FwYUFkbWluU3RvcmUuYWRkaXRpb25hbEFjY291bnRzO1xuXHRcdHRoaXMuY2FwYUlkZW50aXRpZXMgPSBDYXBhQWRtaW5TdG9yZS5pZGVudGl0aWVzO1xuXHRcdHRoaXMuY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzID0gQ2FwYUFkbWluU3RvcmUuYXR0YWNobWVudFRodW1ibmFpbHM7XG5cdFx0dGhpcy5jYXBhVGVtcGxhdGVzID0gQ2FwYUFkbWluU3RvcmUudGVtcGxhdGVzO1xuXG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBBcHBBZG1pblN0b3JlLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncztcblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IEFwcEFkbWluU3RvcmUud2Vha1Bhc3N3b3JkO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0gQXBwQWRtaW5TdG9yZS5uZXdNb3ZlVG9Gb2xkZXI7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBBcHBBZG1pblN0b3JlLmRhdGFGb2xkZXJBY2Nlc3M7XG5cblx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUocEludChzZXR0aW5nc0dldCgnQXR0YWNobWVudExpbWl0JykpIC8gKE1hZ2ljcy5CaXRMZW5ndGgxMDI0ICogTWFnaWNzLkJpdExlbmd0aDEwMjQpKVxuXHRcdFx0LmV4dGVuZCh7IHBvc0ludGVyZXI6IDI1IH0pO1xuXG5cdFx0dGhpcy51cGxvYWREYXRhID0gc2V0dGluZ3NHZXQoJ1BocFVwbG9hZFNpemVzJyk7XG5cdFx0dGhpcy51cGxvYWREYXRhRGVzYyA9XG5cdFx0XHR0aGlzLnVwbG9hZERhdGEgJiYgKHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplIHx8IHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplKVxuXHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplXG5cdFx0XHRcdFx0XHRcdD8gJ3VwbG9hZF9tYXhfZmlsZXNpemUgPSAnICsgdGhpcy51cGxvYWREYXRhLnVwbG9hZF9tYXhfZmlsZXNpemUgKyAnOyAnXG5cdFx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSA/ICdwb3N0X21heF9zaXplID0gJyArIHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplIDogJydcblx0XHRcdFx0ICBdLmpvaW4oJycpXG5cdFx0XHRcdDogJyc7XG5cblx0XHR0aGlzLnRoZW1lc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy50aGVtZXMoKSwgKHRoZW1lKSA9PiAoeyBvcHRWYWx1ZTogdGhlbWUsIG9wdFRleHQ6IGNvbnZlcnRUaGVtZU5hbWUodGhlbWUpIH0pKVxuXHRcdCk7XG5cblx0XHR0aGlzLmxhbmd1YWdlRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZSgpKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZUFkbWluKCkpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudExpbWl0VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXHRcdHRoaXMudGhlbWVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5hdHRhY2htZW50TGltaXRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxhbmd1YWdlVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50aGVtZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIgPSAoc2F2ZVNldHRpbmdzU3RlcCkgPT4gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoc2F2ZVNldHRpbmdzU3RlcCk7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSksIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0F0dGFjaG1lbnRMaW1pdCc6IHBJbnQodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xhbmd1YWdlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXHRcdFx0XHR0cmFuc2xhdG9yUmVsb2FkKHRydWUsIHZhbHVlKVxuXHRcdFx0XHRcdC50aGVuKGZSZWxvYWRMYW5ndWFnZUhlbHBlcihTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQpLCBmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdCkpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0XHRcdCdMYW5ndWFnZUFkbWluJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjaGFuZ2VUaGVtZSh2YWx1ZSwgdGhpcy50aGVtZVRyaWdnZXIpO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J1RoZW1lJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFBZGRpdGlvbmFsQWNjb3VudHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFJZGVudGl0aWVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFJZGVudGl0aWVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVGVtcGxhdGVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFUZW1wbGF0ZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFHcmF2YXRhci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhR3JhdmF0YXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFBdHRhY2htZW50VGh1bWJuYWlscy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhQXR0YWNobWVudFRodW1ibmFpbHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFUaGVtZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYVRoZW1lcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFVc2VyQmFja2dyb3VuZCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0FsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J05ld01vdmVUb0ZvbGRlcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0xhbmd1YWdlcycpLCBbdGhpcy5sYW5ndWFnZSwgdGhpcy5sYW5ndWFnZXMoKSwgTGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2UoKV0pO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2VBZG1pbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW1xuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLFxuXHRcdFx0dGhpcy5sYW5ndWFnZXNBZG1pbigpLFxuXHRcdFx0TGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2VBZG1pbigpXG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHBocEluZm9MaW5rKCkge1xuXHRcdHJldHVybiBwaHBJbmZvKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MsIEdlbmVyYWxBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBEb21haW5zQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IERvbWFpblN0b3JlLmRvbWFpbnM7XG5cblx0XHR0aGlzLnZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5kb21haW5zLmxvYWRpbmcoKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSk7XG5cblx0XHR0aGlzLmRvbWFpbkZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25Eb21haW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbicpKTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbkFsaWFzKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbkFsaWFzJykpO1xuXHR9XG5cblx0ZGVsZXRlRG9tYWluKGRvbWFpbikge1xuXHRcdHRoaXMuZG9tYWlucy5yZW1vdmUoZG9tYWluKTtcblx0XHRSZW1vdGUuZG9tYWluRGVsZXRlKHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCwgZG9tYWluLm5hbWUpO1xuXHR9XG5cblx0ZGlzYWJsZURvbWFpbihkb21haW4pIHtcblx0XHRkb21haW4uZGlzYWJsZWQoIWRvbWFpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUuZG9tYWluRGlzYWJsZSh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIGRvbWFpbi5uYW1lLCBkb21haW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRvRG9tLm9uKCdjbGljaycsICcuYi1hZG1pbi1kb21haW5zLWxpc3QtdGFibGUgLmUtaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRjb25zdCBkb21haW5JdGVtID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChkb21haW5JdGVtKSB7XG5cdFx0XHRcdFJlbW90ZS5kb21haW4oc2VsZi5vbkRvbWFpbkxvYWRSZXF1ZXN0LCBkb21haW5JdGVtLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHR9XG5cblx0b25Eb21haW5Mb2FkUmVxdWVzdChzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRG9tYWluJyksIFtvRGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0KCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5zQWRtaW5TZXR0aW5ncywgRG9tYWluc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgYm9vbFRvQWpheCwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5jbGFzcyBMb2dpbkFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSA9IEFwcFN0b3JlLmRldGVybWluZVVzZXJMYW5ndWFnZTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4gPSBBcHBTdG9yZS5kZXRlcm1pbmVVc2VyRG9tYWluO1xuXG5cdFx0dGhpcy5kZWZhdWx0RG9tYWluID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5EZWZhdWx0RG9tYWluJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uTG9naW47XG5cblx0XHR0aGlzLmR1bW15ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmRlZmF1bHREb21haW4udHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0RldGVybWluZVVzZXJMYW5ndWFnZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdEZXRlcm1pbmVVc2VyRG9tYWluJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQWxsb3dMYW5ndWFnZXNPbkxvZ2luJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kZWZhdWx0RG9tYWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdMb2dpbkRlZmF1bHREb21haW4nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIDUwKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MsIExvZ2luQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLCBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIsIGluQXJyYXksIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBTdG9yYWdlUmVzdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBDb250YWN0c0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb250YWN0c0VuYWJsZScpKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luYyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jJykpO1xuXG5cdFx0Y29uc3Qgc3VwcG9ydGVkVHlwZXMgPSBbXSxcblx0XHRcdHR5cGVzID0gWydzcWxpdGUnLCAnbXlzcWwnLCAncGdzcWwnXSxcblx0XHRcdGdldFR5cGVOYW1lID0gKG5hbWUpID0+IHtcblx0XHRcdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSAnc3FsaXRlJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnU1FMaXRlJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ215c3FsJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnTXlTUUwnO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncGdzcWwnOlxuXHRcdFx0XHRcdFx0bmFtZSA9ICdQb3N0Z3JlU1FMJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuYW1lO1xuXHRcdFx0fTtcblxuXHRcdGlmIChzZXR0aW5nc0dldCgnU1FMaXRlSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgnc3FsaXRlJyk7XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5nc0dldCgnTXlTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdteXNxbCcpO1xuXHRcdH1cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ1Bvc3RncmVTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdwZ3NxbCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGFjdHNTdXBwb3J0ZWQgPSAwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKHRoaXMuY29udGFjdHNUeXBlcygpLCAodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZWQgPSAtMSA9PT0gaW5BcnJheSh2YWx1ZSwgc3VwcG9ydGVkVHlwZXMpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdCdpZCc6IHZhbHVlLFxuXHRcdFx0XHRcdCduYW1lJzogZ2V0VHlwZU5hbWUodmFsdWUpICsgKGRpc2FibGVkID8gJyAoJyArIGkxOG4oJ0hJTlRTL05PVF9TVVBQT1JURUQnKSArICcpJyA6ICcnKSxcblx0XHRcdFx0XHQnZGlzYWJsZWQnOiBkaXNhYmxlZFxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzKHR5cGVzKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5tYWluQ29udGFjdHNUeXBlID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRoaXMuY29udGFjdHNUeXBlLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlICE9PSB0aGlzLmNvbnRhY3RzVHlwZSgpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBpbkFycmF5KHZhbHVlLCBzdXBwb3J0ZWRUeXBlcykpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUodmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlKCcnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wZG9Ec24gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb0RzbicpKTtcblx0XHR0aGlzLnBkb1VzZXIgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1VzZXInKSk7XG5cdFx0dGhpcy5wZG9QYXNzd29yZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvUGFzc3dvcmQnKSk7XG5cblx0XHR0aGlzLnBkb0RzblRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5wZG9Vc2VyVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnBkb1Bhc3N3b3JkVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnRlc3RpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1R5cGUnKSk7XG5cblx0XHR0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gc2VsZi5wZG9Ec24oKSAmJiAnJyAhPT0gc2VsZi5wZG9Vc2VyKCkpXG5cdHRlc3RDb250YWN0c0NvbW1hbmQoKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb250YWN0cyh0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UsIHtcblx0XHRcdCdDb250YWN0c1Bkb1R5cGUnOiB0aGlzLmNvbnRhY3RzVHlwZSgpLFxuXHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdGhpcy5wZG9Ec24oKSxcblx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0aGlzLnBkb1VzZXIoKSxcblx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdGhpcy5wZG9QYXNzd29yZCgpXG5cdFx0fSk7XG5cdH1cblxuXHRvblRlc3RDb250YWN0c1Jlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlc3VsdCkge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKHRydWUpO1xuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoZGF0YS5SZXN1bHQuTWVzc2FnZSB8fCAnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvRHNuVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9Vc2VyVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGY0ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9QYXNzd29yZFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuY29udGFjdHNUeXBlVHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZW5hYmxlQ29udGFjdHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNFbmFibGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzU3luYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1N5bmMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjUsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9UeXBlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Ec24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Vc2VyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnBkb1Bhc3N3b3JkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1R5cGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvVHlwZScpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzQWRtaW5TZXR0aW5ncywgQ29udGFjdHNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDYXBhQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBTZWN1cml0eUFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyA9IEFwcEFkbWluU3RvcmUudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBBcHBBZG1pblN0b3JlLndlYWtQYXNzd29yZDtcblxuXHRcdHRoaXMuY2FwYU9wZW5QR1AgPSBDYXBhQWRtaW5TdG9yZS5vcGVuUEdQO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aCA9IENhcGFBZG1pblN0b3JlLnR3b0ZhY3RvckF1dGg7XG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlID0gQ2FwYUFkbWluU3RvcmUudHdvRmFjdG9yQXV0aEZvcmNlO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZlcmlmeVNzbENlcnRpZmljYXRlID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdWZXJpZnlTc2xDZXJ0aWZpY2F0ZScpKTtcblx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZCA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQWxsb3dTZWxmU2lnbmVkJykpO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93biA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0FkbWluTG9naW4nKSk7XG5cdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbi5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gdHJpbShzZWxmLmFkbWluTG9naW4oKSkgJiYgJycgIT09IHNlbGYuYWRtaW5QYXNzd29yZCgpKVxuXHRzYXZlTmV3QWRtaW5QYXNzd29yZENvbW1hbmQoKSB7XG5cdFx0aWYgKCcnID09PSB0cmltKHRoaXMuYWRtaW5Mb2dpbigpKSkge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYWRtaW5QYXNzd29yZE5ldygpICE9PSB0aGlzLmFkbWluUGFzc3dvcmROZXcyKCkpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblxuXHRcdFJlbW90ZS5zYXZlTmV3QWRtaW5QYXNzd29yZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB7XG5cdFx0XHQnTG9naW4nOiB0aGlzLmFkbWluTG9naW4oKSxcblx0XHRcdCdQYXNzd29yZCc6IHRoaXMuYWRtaW5QYXNzd29yZCgpLFxuXHRcdFx0J05ld1Bhc3N3b3JkJzogdGhpcy5hZG1pblBhc3N3b3JkTmV3KClcblx0XHR9KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2hvd1R3b0ZhY3RvckRyb3BwZXIoKSB7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bih0cnVlKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKHRydWUpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MignJyk7XG5cblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3ModHJ1ZSk7XG5cblx0XHRcdHRoaXMud2Vha1Bhc3N3b3JkKCEhZGF0YS5SZXN1bHQuV2Vhayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5jYXBhT3BlblBHUC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFPcGVuUEdQJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFUd29GYWN0b3JBdXRoJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQ2FwYVR3b0ZhY3RvckF1dGhGb3JjZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J1ZlcmlmeVNzbENlcnRpZmljYXRlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdBbGxvd1NlbGZTaWduZWQnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoJycpO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bihmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cGhwSW5mb0xpbmsoKSB7XG5cdFx0cmV0dXJuIHBocEluZm8oKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MsIFNlY3VyaXR5QWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmNsYXNzIFNvY2lhbEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5lbmFibGVkO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGg7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoR21haWw7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVEcml2ZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmRyaXZlO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLnByZXZpZXc7XG5cblx0XHR0aGlzLmdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUmVxdWlyZUFwaUtleSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmFwaUtleVNldHRpbmdzO1xuXG5cdFx0dGhpcy5nb29nbGVDbGllbnRJRCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRJRDtcblx0XHR0aGlzLmdvb2dsZUNsaWVudFNlY3JldCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRTZWNyZXQ7XG5cdFx0dGhpcy5nb29nbGVBcGlLZXkgPSBTb2NpYWxTdG9yZS5nb29nbGUuYXBpS2V5O1xuXG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjMgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLmZhY2Vib29rU3VwcG9ydGVkID0gU29jaWFsU3RvcmUuZmFjZWJvb2suc3VwcG9ydGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tFbmFibGUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5lbmFibGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBJRCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmFwcElEO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBTZWNyZXQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5hcHBTZWNyZXQ7XG5cblx0XHR0aGlzLmZhY2Vib29rVHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5mYWNlYm9va1RyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy50d2l0dGVyRW5hYmxlID0gU29jaWFsU3RvcmUudHdpdHRlci5lbmFibGVkO1xuXHRcdHRoaXMudHdpdHRlckNvbnN1bWVyS2V5ID0gU29jaWFsU3RvcmUudHdpdHRlci5jb25zdW1lcktleTtcblx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lclNlY3JldCA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQ7XG5cblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMiA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuZHJvcGJveEVuYWJsZSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdHRoaXMuZHJvcGJveFRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYWNlYm9va1RyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmZhY2Vib29rVHJpZ2dlcjIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudHdpdHRlclRyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjQgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnR3aXR0ZXJUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY1ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMSwgdGhpcyksXG5cdFx0XHRcdGY2ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY3ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMywgdGhpcyksXG5cdFx0XHRcdGY4ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5kcm9wYm94VHJpZ2dlcjEsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rRW5hYmxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rRW5hYmxlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tBcHBJRC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZhY2Vib29rU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tBcHBJRCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rQXBwU2VjcmV0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjIsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0FwcFNlY3JldCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnR3aXR0ZXJFbmFibGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lcktleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckNvbnN1bWVyS2V5JywgdHJpbSwgZjMpKTtcblx0XHRcdHRoaXMudHdpdHRlckNvbnN1bWVyU2VjcmV0LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnLCB0cmltLCBmNCkpO1xuXG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVBdXRoJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZUF1dGhHbWFpbCcsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlRHJpdmUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZURyaXZlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVQcmV2aWV3JywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRJRC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQ2xpZW50SUQnLCB0cmltLCBmNSkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRTZWNyZXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUNsaWVudFNlY3JldCcsIHRyaW0sIGY2KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUFwaUtleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQXBpS2V5JywgdHJpbSwgZjcpKTtcblxuXHRcdFx0dGhpcy5kcm9wYm94RW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94RW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5kcm9wYm94QXBpS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94QXBpS2V5JywgdHJpbSwgZjgpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNvY2lhbEFkbWluU2V0dGluZ3MsIFNvY2lhbEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgUGx1Z2luU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BsdWdpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIFBsdWdpbnNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5lbmFibGVkUGx1Z2lucyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnRW5hYmxlZFBsdWdpbnMnKSk7XG5cblx0XHR0aGlzLnBsdWdpbnMgPSBQbHVnaW5TdG9yZS5wbHVnaW5zO1xuXHRcdHRoaXMucGx1Z2luc0Vycm9yID0gUGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcjtcblxuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZIHx8IEFwcFN0b3JlLmNvbW11bml0eSgpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblxuXHRcdHRoaXMub25QbHVnaW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25QbHVnaW5EaXNhYmxlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0ZGlzYWJsZVBsdWdpbihwbHVnaW4pIHtcblx0XHRwbHVnaW4uZGlzYWJsZWQoIXBsdWdpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUucGx1Z2luRGlzYWJsZSh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHBsdWdpbi5uYW1lLCBwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRjb25maWd1cmVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0UmVtb3RlLnBsdWdpbih0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHBsdWdpbi5uYW1lKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1pdGVtIC5jb25maWd1cmUtcGx1Z2luLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5jb25maWd1cmVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuZGlzYWJsZWQtcGx1Z2luJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IHBsdWdpbiA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChwbHVnaW4pIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmVuYWJsZWRQbHVnaW5zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnRW5hYmxlZFBsdWdpbnMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcignJyk7XG5cdFx0Z2V0QXBwKCkucmVsb2FkUGx1Z2luTGlzdCgpO1xuXHR9XG5cblx0b25QbHVnaW5Mb2FkUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1BsdWdpbicpLCBbZGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvblBsdWdpbkRpc2FibGVSZXF1ZXN0KHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKCFkYXRhLlJlc3VsdCAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRpZiAoTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSA9PT0gZGF0YS5FcnJvckNvZGUgJiYgZGF0YS5FcnJvck1lc3NhZ2UgJiYgJycgIT09IGRhdGEuRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihkYXRhLkVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncywgUGx1Z2luc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQYWNrYWdlc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucGFja2FnZXMgPSBQYWNrYWdlU3RvcmUucGFja2FnZXM7XG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZTtcblxuXHRcdHRoaXMucGFja2FnZXNDdXJyZW50ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICFpdGVtLmNvbXBhcmUpXG5cdFx0KTtcblx0XHR0aGlzLnBhY2thZ2VzQXZhaWxhYmxlRm9yVXBkYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICEhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmluc3RhbGxlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMucGFja2FnZXNFcnJvcignJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZFBhY2thZ2VzTGlzdCgpO1xuXHR9XG5cblx0cmVxdWVzdEhlbHBlcihwYWNrYWdlVG9SZXF1ZXN0LCBpbnN0YWxsKSB7XG5cdFx0cmV0dXJuIChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWNrYWdlc0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihcblx0XHRcdFx0XHRcdGdldE5vdGlmaWNhdGlvbihpbnN0YWxsID8gTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSA6IE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCh0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIHBhY2thZ2VUb1JlcXVlc3QgJiYgaXRlbS5sb2FkaW5nICYmIGl0ZW0ubG9hZGluZygpICYmIHBhY2thZ2VUb1JlcXVlc3QuZmlsZSA9PT0gaXRlbS5maWxlKSB7XG5cdFx0XHRcdFx0cGFja2FnZVRvUmVxdWVzdC5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRpdGVtLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlbG9hZCkge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZGVsZXRlUGFja2FnZShwYWNrYWdlVG9EZWxldGUpIHtcblx0XHRpZiAocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0XHRwYWNrYWdlVG9EZWxldGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlRGVsZXRlKHRoaXMucmVxdWVzdEhlbHBlcihwYWNrYWdlVG9EZWxldGUsIGZhbHNlKSwgcGFja2FnZVRvRGVsZXRlKTtcblx0XHR9XG5cdH1cblxuXHRpbnN0YWxsUGFja2FnZShwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0luc3RhbGwpIHtcblx0XHRcdHBhY2thZ2VUb0luc3RhbGwubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlSW5zdGFsbCh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvSW5zdGFsbCwgdHJ1ZSksIHBhY2thZ2VUb0luc3RhbGwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MsIFBhY2thZ2VzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgYXBwU2V0dGluZ3NHZXQsIHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDb3JlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NvcmUnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIEFib3V0QWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cdFx0dGhpcy5hY2Nlc3MgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvcmVBY2Nlc3MnKSk7XG5cdFx0dGhpcy5lcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29yZVJlYWwgPSBDb3JlU3RvcmUuY29yZVJlYWw7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IENvcmVTdG9yZS5jb3JlQ2hhbm5lbDtcblx0XHR0aGlzLmNvcmVUeXBlID0gQ29yZVN0b3JlLmNvcmVUeXBlO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IENvcmVTdG9yZS5jb3JlQWNjZXNzO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0gQ29yZVN0b3JlLmNvcmVDaGVja2luZztcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IENvcmVTdG9yZS5jb3JlVXBkYXRpbmc7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IENvcmVTdG9yZS5jb3JlV2FybmluZztcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb247XG5cdFx0dGhpcy5jb3JlUmVtb3RlUmVsZWFzZSA9IENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmU7XG5cblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWSB8fCBBcHBTdG9yZS5jb21tdW5pdHkoKTtcblxuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb25IdG1sRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gaTE4bignVEFCX0FCT1VUL0hUTUxfTkVXX1ZFUlNJT04nLCB7ICdWRVJTSU9OJzogdGhpcy5jb3JlUmVtb3RlVmVyc2lvbigpIH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdGF0dXNUeXBlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdGNvbnN0IHZlcnNpb25Ub0NvbXBhcmUgPSB0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSgpLFxuXHRcdFx0XHRpc0NoZWNraW5nID0gdGhpcy5jb3JlQ2hlY2tpbmcoKSxcblx0XHRcdFx0aXNVcGRhdGluZyA9IHRoaXMuY29yZVVwZGF0aW5nKCksXG5cdFx0XHRcdGlzUmVhbCA9IHRoaXMuY29yZVJlYWwoKTtcblxuXHRcdFx0aWYgKGlzQ2hlY2tpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICdjaGVja2luZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzVXBkYXRpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICd1cGRhdGluZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAwID09PSB2ZXJzaW9uVG9Db21wYXJlKSB7XG5cdFx0XHRcdHR5cGUgPSAndXAtdG8tZGF0ZSc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAtMSA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ2F2YWlsYWJsZSc7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1JlYWwpIHtcblx0XHRcdFx0dHlwZSA9ICdlcnJvcic7XG5cdFx0XHRcdHRoaXMuZXJyb3JEZXNjKCdDYW5ub3QgYWNjZXNzIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBtb21lbnQuJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0eXBlO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5hY2Nlc3MoKSAmJiAhdGhpcy5jb21tdW5pdHkpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZENvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0aWYgKCF0aGlzLmNvcmVVcGRhdGluZygpICYmICF0aGlzLmNvbW11bml0eSkge1xuXHRcdFx0Z2V0QXBwKCkudXBkYXRlQ29yZURhdGEoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJvdXRBZG1pblNldHRpbmdzLCBBYm91dEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudScsXG5cdHR5cGU6IFZpZXdUeXBlLkxlZnQsXG5cdHRlbXBsYXRlSUQ6ICdBZG1pbk1lbnUnXG59KVxuY2xhc3MgTWVudVNldHRpbmdzQWRtaW5WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gez99IHNjcmVlblxuXHQgKi9cblx0Y29uc3RydWN0b3Ioc2NyZWVuKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubGVmdFBhbmVsRGlzYWJsZWQgPSBsZWZ0UGFuZWxEaXNhYmxlZDtcblxuXHRcdHRoaXMubWVudSA9IHNjcmVlbi5tZW51O1xuXHR9XG5cblx0bGluayhyb3V0ZSkge1xuXHRcdHJldHVybiAnIy8nICsgcm91dGU7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5TZXR0aW5ncywgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJCgnLmItYWRtaW4tbWVudSAuZS1pdGVtJywgZG9tKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lbnVTZXR0aW5nc0FkbWluVmlldywgTWVudVNldHRpbmdzQWRtaW5WaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuaW1wb3J0IFBsdWdpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9QbHVnaW4nO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZScsXG5cdHR5cGU6IFZpZXdUeXBlLlJpZ2h0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5QYW5lJ1xufSlcbmNsYXNzIFBhbmVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5hZG1pbkRvbWFpbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FkbWluRG9tYWluJykpO1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cblx0XHR0aGlzLmNhcGEgPSAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdQcmVtVHlwZScpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZO1xuXG5cdFx0dGhpcy5hZG1pbk1hbkxvYWRpbmcgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdCcwMDAnICE9PVxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoKSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRdLmpvaW4oJycpXG5cdFx0KTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4gKHRoaXMuYWRtaW5NYW5Mb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpXG5cdFx0XHQuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAzMDAgfSk7XG5cdH1cblxuXHRsb2dvdXRDbGljaygpIHtcblx0XHRSZW1vdGUuYWRtaW5Mb2dvdXQoKCkgPT4ge1xuXHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQodHJ1ZSwgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzQWRtaW5WaWV3LCBQYW5lU2V0dGluZ3NBZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTG9naW5BZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL0xvZ2luJztcblxuY2xhc3MgTG9naW5BZG1pblNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ2xvZ2luJywgW0xvZ2luQWRtaW5WaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5TY3JlZW4sIExvZ2luQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyB0cmltLCB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9BZG1pbi9Mb2dpbicsXG5cdHR5cGU6IFZpZXdUeXBlLkNlbnRlcixcblx0dGVtcGxhdGVJRDogJ0FkbWluTG9naW4nXG59KVxuY2xhc3MgTG9naW5BZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuaGlkZVN1Ym1pdEJ1dHRvbiA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2hpZGVTdWJtaXRCdXR0b24nKTtcblxuXHRcdHRoaXMubG9naW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubG9naW5FcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgJ2ZhbHNlVGltZW91dCc6IDUwMCB9KTtcblxuXHRcdHRoaXMubG9naW5Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMubG9naW5FcnJvckFuaW1hdGlvbigpIHx8IHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbigpKTtcblxuXHRcdHRoaXMubG9naW4uc3Vic2NyaWJlKCgpID0+IHRoaXMubG9naW5FcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oISF2KSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oISF2KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdHN1Ym1pdENvbW1hbmQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKCk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoJycgPT09IHRyaW0odGhpcy5sb2dpbigpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMubG9naW5FcnJvcigpIHx8IHRoaXMucGFzc3dvcmRFcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXG5cdFx0UmVtb3RlLmFkbWluTG9naW4oXG5cdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAnQWRtaW5Mb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5sb2dpbigpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMubG9naW5Gb2N1cyh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmxvZ2luRm9jdXMoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UodHJ1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCkge1xuXHRcdHRoaXMuc3VibWl0Q29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5WaWV3LCBMb2dpbkFkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XG5pbXBvcnQgQXBwIGZyb20gJ0FwcC9BZG1pbic7XG5cbmJvb3RzdHJhcChBcHApO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW5BbGlhcydcbn0pXG5jbGFzcyBEb21haW5BbGlhc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5kb21haW5zID0gRG9tYWluU3RvcmUuZG9tYWluc1dpdGhvdXRBbGlhc2VzO1xuXG5cdFx0dGhpcy5kb21haW5zT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+ICh7IG9wdFZhbHVlOiBpdGVtLm5hbWUsIG9wdFRleHQ6IGl0ZW0ubmFtZSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5CZVNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2F2aW5nKCkgJiYgJycgIT09IHRoaXMubmFtZSgpICYmICcnICE9PSB0aGlzLmFsaWFzKCkpO1xuXG5cdFx0dGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTYXZlZCgpKVxuXHRjcmVhdGVDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVEb21haW5BbGlhcyh0aGlzLm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSwgdGhpcy5uYW1lKCksIHRoaXMuYWxpYXMoKSk7XG5cdH1cblxuXHRvbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0XHRcdFx0dGhpcy5jbG9zZUNvbW1hbmQoKTtcblx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhckZvcm0oKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhckZvcm0oKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmFsaWFzKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5BbGlhc1BvcHVwVmlldywgRG9tYWluQWxpYXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzLCBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgZGVsZWdhdGVSdW4gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQsIGlzUG9wdXBWaXNpYmxlLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1BsdWdpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNQbHVnaW4nXG59KVxuY2xhc3MgUGx1Z2luUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSwgdGhpcyk7XG5cblx0XHR0aGlzLnNhdmVFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZWFkbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29uZmlndXJlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmhhc1JlYWRtZSA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnJlYWRtZSgpKTtcblx0XHR0aGlzLmhhc0NvbmZpZ3VyYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5jb25maWd1cmVzKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMucmVhZG1lUG9wb3ZlckNvbmYgPSB7XG5cdFx0XHQncGxhY2VtZW50JzogJ3JpZ2h0Jyxcblx0XHRcdCd0cmlnZ2VyJzogJ2hvdmVyJyxcblx0XHRcdCd0aXRsZSc6IGkxOG4oJ1BPUFVQU19QTFVHSU4vVE9PTFRJUF9BQk9VVF9USVRMRScpLFxuXHRcdFx0J2NvbnRhaW5lcic6ICdib2R5Jyxcblx0XHRcdCdodG1sJzogdHJ1ZSxcblx0XHRcdCdjb250ZW50JzogKCkgPT4gYDxwcmU+JHt0aGlzLnJlYWRtZSgpfTwvcHJlPmBcblx0XHR9O1xuXG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQWxsO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGFzQ29uZmlndXJhdGlvbigpKVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHRjb25zdCBsaXN0ID0ge307XG5cdFx0bGlzdC5OYW1lID0gdGhpcy5uYW1lKCk7XG5cblx0XHRfLmVhY2godGhpcy5jb25maWd1cmVzKCksIChvSXRlbSkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gb0l0ZW0udmFsdWUoKTtcblx0XHRcdGlmIChmYWxzZSA9PT0gdmFsdWUgfHwgdHJ1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/ICcxJyA6ICcwJztcblx0XHRcdH1cblx0XHRcdGxpc3RbJ18nICsgb0l0ZW0uTmFtZV0gPSB2YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRSZW1vdGUucGx1Z2luU2V0dGluZ3NVcGRhdGUodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIGxpc3QpO1xuXHR9XG5cblx0b25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zYXZlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9QbHVnaW4pIHtcblx0XHR0aGlzLm5hbWUoKTtcblx0XHR0aGlzLnJlYWRtZSgpO1xuXHRcdHRoaXMuY29uZmlndXJlcyhbXSk7XG5cblx0XHRpZiAob1BsdWdpbikge1xuXHRcdFx0dGhpcy5uYW1lKG9QbHVnaW4uTmFtZSk7XG5cdFx0XHR0aGlzLnJlYWRtZShvUGx1Z2luLlJlYWRtZSk7XG5cblx0XHRcdGNvbnN0IGNvbmZpZyA9IG9QbHVnaW4uQ29uZmlnO1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb25maWcpKSB7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJlcyhcblx0XHRcdFx0XHRfLm1hcChjb25maWcsIChpdGVtKSA9PiAoe1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoga28ub2JzZXJ2YWJsZShpdGVtWzBdKSxcblx0XHRcdFx0XHRcdCdwbGFjZWhvbGRlcic6IGtvLm9ic2VydmFibGUoaXRlbVs2XSksXG5cdFx0XHRcdFx0XHQnTmFtZSc6IGl0ZW1bMV0sXG5cdFx0XHRcdFx0XHQnVHlwZSc6IGl0ZW1bMl0sXG5cdFx0XHRcdFx0XHQnTGFiZWwnOiBpdGVtWzNdLFxuXHRcdFx0XHRcdFx0J0RlZmF1bHQnOiBpdGVtWzRdLFxuXHRcdFx0XHRcdFx0J0Rlc2MnOiBpdGVtWzVdXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dHJ5VG9DbG9zZVBvcHVwKCkge1xuXHRcdGNvbnN0IFBvcHVwc0Fza1ZpZXdNb2RlbCA9IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyk7XG5cdFx0aWYgKCFpc1BvcHVwVmlzaWJsZShQb3B1cHNBc2tWaWV3TW9kZWwpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAoUG9wdXBzQXNrVmlld01vZGVsLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5Qb3B1cFZpZXcsIFBsdWdpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQnJhbmRpbmdBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jYXBhID0gQXBwU3RvcmUucHJlbTtcblxuXHRcdHRoaXMudGl0bGUgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdUaXRsZScpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9hZGluZ0Rlc2MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2FkaW5nRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmZhdmljb25VcmwgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdGYXZpY29uVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkxvZ28nKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luQmFja2dyb3VuZCcpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyTG9nbycpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ29NZXNzYWdlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29NZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VySWZyYW1lTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJJZnJhbWVNZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyTG9nb1RpdGxlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29UaXRsZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5EZXNjcmlwdGlvbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQ3NzID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5Dc3MnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJDc3MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyQ3NzJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZVVybCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZURpc3BsYXkgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdXZWxjb21lUGFnZURpc3BsYXknKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLndlbGNvbWVQYWdlRGlzcGxheS5vcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdub25lJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9OT05FJykgfSxcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ29uY2UnLCBvcHRUZXh0OiBpMThuKCdUQUJfQlJBTkRJTkcvT1BUSU9OX1dFTENPTUVfUEFHRV9ESVNQTEFZX09OQ0UnKSB9LFxuXHRcdFx0XHR7IG9wdFZhbHVlOiAnYWx3YXlzJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9BTFdBWVMnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb21tdW5pdHkgPSBSTF9DT01NVU5JVFkgfHwgQXBwU3RvcmUuY29tbXVuaXR5KCk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnRpdGxlLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubG9hZGluZ0Rlc2MudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYXZpY29uVXJsLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLnRpdGxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdUaXRsZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubG9hZGluZ0Rlc2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xvYWRpbmdEZXNjcmlwdGlvbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmF2aWNvblVybC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnRmF2aWNvblVybCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBCcmFuZGluZ0FkbWluU2V0dGluZ3MsIEJyYW5kaW5nQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iXSwic291cmNlUm9vdCI6IiJ9 diff --git a/app/rainloop/v/1.14.0/static/js/app.js b/app/rainloop/v/1.15.0/static/js/app.js similarity index 56% rename from app/rainloop/v/1.14.0/static/js/app.js rename to app/rainloop/v/1.15.0/static/js/app.js index c6ed5f81..dbbc0d3e 100644 --- a/app/rainloop/v/1.14.0/static/js/app.js +++ b/app/rainloop/v/1.15.0/static/js/app.js @@ -82,7 +82,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 517); +/******/ return __webpack_require__(__webpack_require__.s = 523); /******/ }) /************************************************************************/ /******/ ([ @@ -661,35 +661,32 @@ var Notification = { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.reverse */ 339); -/* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 138); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Opentip */ 210); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! pikaday */ 211); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0); - +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 139); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $ */ 8); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Opentip */ 213); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 214); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Enums */ 0); @@ -705,8 +702,8 @@ var Notification = { -var ko = window__WEBPACK_IMPORTED_MODULE_9___default.a.ko, - $win = $__WEBPACK_IMPORTED_MODULE_11___default()(window__WEBPACK_IMPORTED_MODULE_9___default.a), +var ko = window__WEBPACK_IMPORTED_MODULE_8___default.a.ko, + $win = $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___default.a), fDisposalTooltipHelper = function fDisposalTooltipHelper(element) { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { if (element && element.__opentip) { @@ -717,13 +714,13 @@ var ko = window__WEBPACK_IMPORTED_MODULE_9___default.a.ko, ko.bindingHandlers.updateWidth = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), fInit = function fInit() { fValue($el.width()); - window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { fValue($el.width()); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time500ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms); }; $win.on('resize', fInit); @@ -738,7 +735,7 @@ ko.bindingHandlers.editor = { var editor = null; var fValue = fValueAccessor(), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 207).default, + HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 210).default, fUpdateEditorValue = function fUpdateEditorValue() { if (fValue && fValue.__editor) { fValue.__editor.setHtmlOrPlain(fValue()); @@ -764,26 +761,26 @@ ko.bindingHandlers.editor = { }; ko.bindingHandlers.json = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(window__WEBPACK_IMPORTED_MODULE_9___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); }, update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(window__WEBPACK_IMPORTED_MODULE_9___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.scrollerShadows = { init: function init(element) { var limit = 8, - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), - cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, - fFunc = ___WEBPACK_IMPORTED_MODULE_10___default.a.throttle(function () { + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), + cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, + fFunc = ___WEBPACK_IMPORTED_MODULE_9___default.a.throttle(function () { $el.toggleClass('scroller-shadow-top', limit < cont.scrollTop).toggleClass('scroller-shadow-bottom', cont.scrollTop + limit < cont.scrollHeight - cont.clientHeight); }, 100); if (cont) { - $__WEBPACK_IMPORTED_MODULE_11___default()(cont).on('scroll resize', fFunc); + $__WEBPACK_IMPORTED_MODULE_10___default()(cont).on('scroll resize', fFunc); $win.on('resize', fFunc); ko.utils.domNodeDisposal.addDisposeCallback(cont, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(cont).off(); + $__WEBPACK_IMPORTED_MODULE_10___default()(cont).off(); $win.off('resize', fFunc); }); } @@ -793,8 +790,8 @@ ko.bindingHandlers.pikaday = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { ko.bindingHandlers.textInput.init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); - if (pikaday__WEBPACK_IMPORTED_MODULE_13___default.a) { - element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_13___default.a({ + if (pikaday__WEBPACK_IMPORTED_MODULE_12___default.a) { + element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_12___default.a({ field: element }); } @@ -802,7 +799,7 @@ ko.bindingHandlers.pikaday = { }; ko.bindingHandlers.visibleAnimated = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); $el.addClass('rl-animated-inited'); if (ko.unwrap(fValueAccessor())) { @@ -812,12 +809,12 @@ ko.bindingHandlers.visibleAnimated = { } }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if (ko.unwrap(fValueAccessor())) { $el.addClass('rl-animated-hidden').show(); - ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () { $el.removeClass('rl-animated-hidden'); }, 10); } else { @@ -827,15 +824,15 @@ ko.bindingHandlers.visibleAnimated = { }; ko.bindingHandlers.tooltip = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), Globals = __webpack_require__(/*! Common/Globals */ 6); if (!Globals.bMobileDevice || isMobile) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"](element, { + var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); + element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, { 'style': 'rainloopTip', 'element': element, 'tipJoint': $el.data('tooltip-join') || 'bottom' @@ -884,14 +881,14 @@ ko.bindingHandlers.tooltip = { } }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), Globals = __webpack_require__(/*! Common/Globals */ 6); if ((!Globals.bMobileDevice || isMobile) && element.__opentip) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); + var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); if (sValue) { element.__opentip.setContent(isI18N ? __webpack_require__(/*! Common/Translator */ 9).i18n(sValue) : sValue); @@ -909,8 +906,8 @@ ko.bindingHandlers.tooltip = { }; ko.bindingHandlers.tooltipErrorTip = { init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"](element, { + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); + element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, { style: 'rainloopErrorTip', hideOn: 'mouseout click', element: element, @@ -919,7 +916,7 @@ ko.bindingHandlers.tooltipErrorTip = { element.__opentip.deactivate(); - $__WEBPACK_IMPORTED_MODULE_11___default()(window__WEBPACK_IMPORTED_MODULE_9___default.a.document).on('click', function () { + $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___default.a.document).on('click', function () { if (element && element.__opentip) { element.__opentip.hide(); } @@ -927,9 +924,9 @@ ko.bindingHandlers.tooltipErrorTip = { fDisposalTooltipHelper(element); }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), - value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), + value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), openTips = element.__opentip; if (openTips) { @@ -938,7 +935,7 @@ ko.bindingHandlers.tooltipErrorTip = { openTips.deactivate(); openTips.setContent(''); } else { - ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () { if ($el.is(':visible')) { openTips.setContent(value); openTips.activate(); @@ -948,7 +945,7 @@ ko.bindingHandlers.tooltipErrorTip = { openTips.deactivate(); openTips.setContent(''); } - }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time100ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time100ms); } } } @@ -958,8 +955,8 @@ ko.bindingHandlers.registrateBootstrapDropdown = { var Globals = __webpack_require__(/*! Common/Globals */ 6); if (Globals && Globals.data.aBootstrapDropdowns) { - Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_11___default()(element)); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).click(function () { + Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_10___default()(element)); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).click(function () { __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); }); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => { // }); @@ -969,13 +966,13 @@ ko.bindingHandlers.registrateBootstrapDropdown = { ko.bindingHandlers.openDropdownTrigger = { update: function update(element, fValueAccessor) { if (ko.unwrap(fValueAccessor())) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if (!$el.hasClass('open')) { - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); } - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.dropdown-toggle').focus(); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.dropdown-toggle').focus(); __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); @@ -985,16 +982,16 @@ ko.bindingHandlers.openDropdownTrigger = { }; ko.bindingHandlers.dropdownCloser = { init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).closest('.dropdown').on('click', '.e-item', function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).dropdown('toggle'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).closest('.dropdown').on('click', '.e-item', function () { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).dropdown('toggle'); }); } }; ko.bindingHandlers.popover = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).popover(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover(ko.unwrap(fValueAccessor())); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).popover('destroy'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover('destroy'); }); } }; @@ -1004,13 +1001,13 @@ ko.bindingHandlers.csstext.init = ko.bindingHandlers.csstext.update = function ( if (element && element.styleSheet && 'undefined' !== typeof element.styleSheet.cssText) { element.styleSheet.cssText = ko.unwrap(fValueAccessor()); } else { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.resizecrop = { init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('resizecrop').resizecrop({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('resizecrop').resizecrop({ 'width': '100', 'height': '100', 'wrapperCSS': { @@ -1020,7 +1017,7 @@ ko.bindingHandlers.resizecrop = { }, update: function update(element, fValueAccessor) { fValueAccessor()(); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).resizecrop({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).resizecrop({ 'width': '100', 'height': '100' }); @@ -1028,7 +1025,7 @@ ko.bindingHandlers.resizecrop = { }; ko.bindingHandlers.onKeyDown = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keydown.koOnKeyDown', function (event) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnKeyDown', function (event) { if (event) { return fValueAccessor().call(viewModel, event); } @@ -1036,66 +1033,66 @@ ko.bindingHandlers.onKeyDown = { return true; }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keydown.koOnKeyDown'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnKeyDown'); }); } }; ko.bindingHandlers.onEnter = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keypress.koOnEnter', function (event) { - if (event && 13 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).trigger('change'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keypress.koOnEnter', function (event) { + if (event && 13 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change'); fValueAccessor().call(viewModel); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keypress.koOnEnter'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keypress.koOnEnter'); }); } }; ko.bindingHandlers.onSpace = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keyup.koOnSpace', function (event) { - if (event && 32 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnSpace', function (event) { + if (event && 32 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { fValueAccessor().call(viewModel, event); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keyup.koOnSpace'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnSpace'); }); } }; ko.bindingHandlers.onTab = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keydown.koOnTab', function (event) { - if (event && 9 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnTab', function (event) { + if (event && 9 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { return fValueAccessor().call(viewModel, !!event.shiftKey); } return true; }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keydown.koOnTab'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnTab'); }); } }; ko.bindingHandlers.onEsc = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keyup.koOnEsc', function (event) { - if (event && 27 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).trigger('change'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnEsc', function (event) { + if (event && 27 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change'); fValueAccessor().call(viewModel); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keyup.koOnEsc'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnEsc'); }); } }; ko.bindingHandlers.clickOnTrue = { update: function update(element, fValueAccessor) { if (ko.unwrap(fValueAccessor())) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).click(); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).click(); } } }; @@ -1106,7 +1103,7 @@ ko.bindingHandlers.modal = { var Globals = __webpack_require__(/*! Common/Globals */ 6), Utils = __webpack_require__(/*! Common/Utils */ 2); - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context = $__WEBPACK_IMPORTED_MODULE_11___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context = $__WEBPACK_IMPORTED_MODULE_10___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ 'keyboard': false, 'show': ko.unwrap(fValueAccessor()) }).on('shown.koModal', Utils.windowResizeCallback)).call(_context, '.close').on('click.koModal', function () { @@ -1116,29 +1113,29 @@ ko.bindingHandlers.modal = { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { var _context2; - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); }); }, update: function update(element, fValueAccessor) { var Globals = __webpack_require__(/*! Common/Globals */ 6); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); if (Globals.$html.hasClass('rl-anim')) { Globals.$html.addClass('rl-modal-animation'); - ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () { Globals.$html.removeClass('rl-modal-animation'); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time500ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms); } } }; ko.bindingHandlers.moment = { init: function init(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); }, update: function update(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_11___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.i18nInit = { @@ -1160,17 +1157,17 @@ ko.bindingHandlers.i18nUpdate = { }; ko.bindingHandlers.link = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).attr('href', ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('href', ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.title = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).attr('title', ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('title', ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.textF = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.initDom = { @@ -1181,9 +1178,9 @@ ko.bindingHandlers.initDom = { ko.bindingHandlers.initFixedTrigger = { init: function init(element, fValueAccessor) { var values = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), top = values[1] || 0; - var $container = $__WEBPACK_IMPORTED_MODULE_11___default()(values[0] || null); + var $container = $__WEBPACK_IMPORTED_MODULE_10___default()(values[0] || null); $container = $container[0] ? $container : null; if ($container) { @@ -1200,7 +1197,7 @@ ko.bindingHandlers.initFixedTrigger = { ko.bindingHandlers.initResizeTrigger = { init: function init(element, fValueAccessor) { var values = ko.unwrap(fValueAccessor()); - $__WEBPACK_IMPORTED_MODULE_11___default()(element).css({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).css({ 'height': values[1], 'min-height': values[1] }); @@ -1212,7 +1209,7 @@ ko.bindingHandlers.initResizeTrigger = { var value = Utils.pInt(values[1]), size = 0, - offset = $__WEBPACK_IMPORTED_MODULE_11___default()(oElement).offset().top; + offset = $__WEBPACK_IMPORTED_MODULE_10___default()(oElement).offset().top; if (0 < offset) { offset += Utils.pInt(values[2]); @@ -1222,7 +1219,7 @@ ko.bindingHandlers.initResizeTrigger = { value = size; } - $__WEBPACK_IMPORTED_MODULE_11___default()(oElement).css({ + $__WEBPACK_IMPORTED_MODULE_10___default()(oElement).css({ 'height': value, 'min-height': value }); @@ -1231,7 +1228,7 @@ ko.bindingHandlers.initResizeTrigger = { }; ko.bindingHandlers.appendDom = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); } }; ko.bindingHandlers.draggable = { @@ -1260,12 +1257,12 @@ ko.bindingHandlers.draggable = { if (droppableSelector) { conf.drag = function (event) { - $__WEBPACK_IMPORTED_MODULE_11___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this), + $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () { + var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this), // eslint-disable-line no-invalid-this offset = $this.offset(), bottomPos = offset.top + $this.height(); - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearInterval($this.data('timerScroll')); + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearInterval($this.data('timerScroll')); $this.data('timerScroll', false); if (event.pageX >= offset.left && event.pageX <= offset.left + $this.width()) { @@ -1275,7 +1272,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_9___default.a.setInterval(moveUp, 10)); + $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveUp, 10)); moveUp(); } @@ -1285,7 +1282,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_9___default.a.setInterval(moveDown, 10)); + $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveDown, 10)); moveDown(); } } @@ -1293,10 +1290,10 @@ ko.bindingHandlers.draggable = { }; conf.stop = function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this); // eslint-disable-line no-invalid-this + $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () { + var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this); // eslint-disable-line no-invalid-this - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearInterval($this.data('timerScroll')); + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearInterval($this.data('timerScroll')); $this.data('timerScroll', false); }); }; @@ -1306,11 +1303,11 @@ ko.bindingHandlers.draggable = { return fValueAccessor()(event && event.target ? ko.dataFor(event.target) : null); }; - $__WEBPACK_IMPORTED_MODULE_11___default()(element).draggable(conf).on('mousedown.koDraggable', function () { + $__WEBPACK_IMPORTED_MODULE_10___default()(element).draggable(conf).on('mousedown.koDraggable', function () { Utils.removeInFocus(); }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('mousedown.koDraggable').draggable('destroy'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('mousedown.koDraggable').draggable('destroy'); }); } } @@ -1349,9 +1346,9 @@ ko.bindingHandlers.droppable = { }; } - $__WEBPACK_IMPORTED_MODULE_11___default()(element).droppable(conf); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).droppable(conf); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).droppable('destroy'); + $__WEBPACK_IMPORTED_MODULE_10___default()(element).droppable('destroy'); }); } } @@ -1363,7 +1360,7 @@ ko.bindingHandlers.nano = { Settings = __webpack_require__(/*! Storage/Settings */ 5); if (!Globals.bDisableNanoScroll && !Settings.appSettingsGet('useNativeScrollbars')) { - $__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('nano').nanoScroller({ + $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('nano').nanoScroller({ iOSNativeScrolling: false, preventPageScrolling: true }); @@ -1372,7 +1369,7 @@ ko.bindingHandlers.nano = { }; ko.bindingHandlers.saveTrigger = { init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); $el.data('save-trigger-type', $el.is('input[type=text],input[type=email],input[type=password],select,textarea') ? 'input' : 'custom'); if ('custom' === $el.data('save-trigger-type')) { @@ -1385,27 +1382,27 @@ ko.bindingHandlers.saveTrigger = { var _context3, _context4, _context5, _context6; var value = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if ('custom' === $el.data('save-trigger-type')) { switch (value.toString()) { case '1': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); break; case '0': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); break; case '-2': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); break; default: - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); break; } @@ -1432,8 +1429,8 @@ ko.bindingHandlers.saveTrigger = { ko.bindingHandlers.emailsTags = { init: function init(element, fValueAccessor, fAllBindingsAccessor) { var Utils = __webpack_require__(/*! Common/Utils */ 2), - EmailModel = __webpack_require__(/*! Model/Email */ 80).default, - $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + EmailModel = __webpack_require__(/*! Model/Email */ 82).default, + $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), fAllBindings = fAllBindingsAccessor(), fAutoCompleteSource = fAllBindings.autoCompleteSource || null, @@ -1451,20 +1448,20 @@ ko.bindingHandlers.emailsTags = { inputDelimiters: inputDelimiters, autoCompleteSource: fAutoCompleteSource, splitHook: function splitHook(value) { - var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default()(Utils).call(Utils, value); + var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default()(Utils).call(Utils, value); - if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { + if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { return EmailModel.splitEmailLine(value); } return null; }, parseHook: function parseHook(input) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, ___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, input, function (inputValue) { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, ___WEBPACK_IMPORTED_MODULE_9___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, input, function (inputValue) { var values = EmailModel.parseEmailLine(inputValue); return values.length ? values : inputValue; })), function (item) { - return ___WEBPACK_IMPORTED_MODULE_10___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; + return ___WEBPACK_IMPORTED_MODULE_9___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; }); }, change: function change(event) { @@ -1480,7 +1477,7 @@ ko.bindingHandlers.emailsTags = { } }, update: function update(element, fValueAccessor) { - var $oEl = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var $oEl = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), value = ko.unwrap(fValue); @@ -1493,7 +1490,7 @@ ko.bindingHandlers.emailsTags = { }; ko.bindingHandlers.command = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var jqElement = $__WEBPACK_IMPORTED_MODULE_10___default()(element), command = fValueAccessor(); if (!command || !command.isCommand) { @@ -1507,7 +1504,7 @@ ko.bindingHandlers.command = { if (!command.canExecute) { var __realCanExecute = command.__realCanExecute; - if (___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(__realCanExecute)) { + if (___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(__realCanExecute)) { command.canExecute = ko.computed(function () { return command.enabled() && __realCanExecute.call(viewModel, viewModel); }); @@ -1522,7 +1519,7 @@ ko.bindingHandlers.command = { ko.bindingHandlers[jqElement.is('form') ? 'submit' : 'click'].init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); }, update: function update(element, fValueAccessor) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + var jqElement = $__WEBPACK_IMPORTED_MODULE_10___default()(element), command = fValueAccessor(); var result = command.enabled(); jqElement.toggleClass('command-not-enabled', !result); @@ -1545,7 +1542,7 @@ ko.extenders.trimmer = function (target) { result = ko.computed({ read: target, write: function write(newValue) { - target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default()(Utils).call(Utils, newValue.toString())); + target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default()(Utils).call(Utils, newValue.toString())); } }); @@ -1660,8 +1657,8 @@ ko.extenders.falseTimeout = function (target, option) { target.iFalseTimeoutTimeout = 0; target.subscribe(function (value) { if (value) { - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearTimeout(target.iFalseTimeoutTimeout); - target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iFalseTimeoutTimeout); + target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { target(false); target.iFalseTimeoutTimeout = 0; }, __webpack_require__(/*! Common/Utils */ 2).pInt(option)); @@ -1685,8 +1682,8 @@ ko.extenders.specialThrottle = function (target, option) { target.valueForRead(bValue); } else { if (target.valueForRead()) { - window__WEBPACK_IMPORTED_MODULE_9___default.a.clearTimeout(target.iSpecialThrottleTimeout); - target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iSpecialThrottleTimeout); + target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { target.valueForRead(false); target.iSpecialThrottleTimeout = 0; }, target.iSpecialThrottleTimeoutValue); @@ -1702,7 +1699,7 @@ ko.extenders.specialThrottle = function (target, option) { }; ko.extenders.idleTrigger = function (target) { - target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SaveSettingsStep"].Idle); + target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_13__["SaveSettingsStep"].Idle); return target; }; // functions @@ -1754,7 +1751,7 @@ ko.observable.fn.validateFunc = function (fFunc) { this.hasFuncError = ko.observable(false); - if (___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fFunc)) { + if (___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fFunc)) { this.subscribe(function (value) { _this3.hasFuncError(!fFunc(value)); }); @@ -1853,7 +1850,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResize", function() { return windowResize; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResizeCallback", function() { return windowResizeCallback; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); @@ -1863,31 +1860,31 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); /* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 208); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 211); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 113); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 159); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 162); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 209); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 212); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 138); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 139); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_18__); @@ -1896,12 +1893,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_20__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 212); +/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 215); /* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_22__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 213); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 106); +/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 216); +/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 113); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_26__["a"]; }); @@ -2518,7 +2515,7 @@ function previewMessage(_ref, body, isHtml, print) { bodyClass = isHtml ? 'html' : 'plain'; clearBqSwitcher(bodyClone); var html = bodyClone ? bodyClone.html() : ''; - doc.write(deModule(__webpack_require__(/*! Html/PreviewMessage.html */ 355)).replace('{{title}}', encodeHtml(title)).replace('{{subject}}', encodeHtml(subject)).replace('{{date}}', encodeHtml(date)).replace('{{fromCreds}}', encodeHtml(fromCreds)).replace('{{toCreds}}', encodeHtml(toCreds)).replace('{{toLabel}}', encodeHtml(toLabel)).replace('{{ccClass}}', encodeHtml(ccClass)).replace('{{ccCreds}}', encodeHtml(ccCreds)).replace('{{ccLabel}}', encodeHtml(ccLabel)).replace('{{bodyClass}}', bodyClass).replace('{{html}}', html)); + doc.write(deModule(__webpack_require__(/*! Html/PreviewMessage.html */ 361)).replace('{{title}}', encodeHtml(title)).replace('{{subject}}', encodeHtml(subject)).replace('{{date}}', encodeHtml(date)).replace('{{fromCreds}}', encodeHtml(fromCreds)).replace('{{toCreds}}', encodeHtml(toCreds)).replace('{{toLabel}}', encodeHtml(toLabel)).replace('{{ccClass}}', encodeHtml(ccClass)).replace('{{ccCreds}}', encodeHtml(ccCreds)).replace('{{ccLabel}}', encodeHtml(ccLabel)).replace('{{bodyClass}}', bodyClass).replace('{{html}}', html)); doc.close(); if (print) { @@ -3293,7 +3290,7 @@ function mailToHelper(mailToUrl, PopupComposeViewModel) { var email = mailToUrl.replace(/\?.+$/, ''), query = mailToUrl.replace(/^[^?]*\?/, ''), - EmailModel = __webpack_require__(/*! Model/Email */ 80).default; + EmailModel = __webpack_require__(/*! Model/Email */ 82).default; params = simpleQueryParser(query); @@ -3500,7 +3497,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScopeFake", function() { return keyScopeFake; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScope", function() { return keyScope; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "data", function() { return data; }); -/* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter */ 272); +/* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter */ 277); /* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__); @@ -3829,7 +3826,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 34); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__); @@ -3840,7 +3837,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! hasher */ 61); /* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(hasher__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! crossroads */ 161); +/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! crossroads */ 164); /* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Plugins */ 39); @@ -4469,13 +4466,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reload", function() { return reload; }); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_5__); @@ -4755,7 +4752,7 @@ Common_Globals__WEBPACK_IMPORTED_MODULE_11__["$html"].addClass('rl-' + (Common_G "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inheritsLoose; }); -/* harmony import */ var _core_js_object_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/create */ 256); +/* harmony import */ var _core_js_object_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/create */ 261); /* harmony import */ var _core_js_object_create__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_create__WEBPACK_IMPORTED_MODULE_0__); function _inheritsLoose(subClass, superClass) { @@ -4774,7 +4771,7 @@ function _inheritsLoose(subClass, superClass) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/sort */ 417); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/sort */ 423); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__); @@ -4801,9 +4798,7 @@ function _inheritsLoose(subClass, superClass) { -var FolderUserStore = -/*#__PURE__*/ -function () { +var FolderUserStore = /*#__PURE__*/function () { function FolderUserStore() { this.displaySpecSetting = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(true); this.sentFolder = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(''); @@ -5004,7 +4999,7 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 319); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 325); /***/ }), /* 13 */ @@ -5016,7 +5011,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 31 /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); @@ -5024,7 +5019,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 31 /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__); @@ -5050,14 +5045,14 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 31 /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Momentor */ 60); /* harmony import */ var Helper_Message__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Helper/Message */ 62); -/* harmony import */ var Model_Message__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Model/Message */ 278); +/* harmony import */ var Model_Message__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Model/Message */ 283); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/App */ 31); /* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/Account */ 46); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Stores/User/Pgp */ 41); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Settings */ 38); -/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Stores/User/Notification */ 115); +/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Stores/User/Notification */ 116); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Remote/User/Ajax */ 16); @@ -5093,9 +5088,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 31 -var MessageUserStore = -/*#__PURE__*/ -function () { +var MessageUserStore = /*#__PURE__*/function () { function MessageUserStore() { this.staticMessage = new Model_Message__WEBPACK_IMPORTED_MODULE_22__[/* MessageModel */ "a"](); this.messageList = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observableArray([]).extend({ @@ -6200,7 +6193,7 @@ function storeMessageFlagsToCacheBySetAction(folder, uid, setAction) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return mailBox; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); @@ -6641,7 +6634,7 @@ function mailBox(folder, page, search, threadUid) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1__); @@ -6654,12 +6647,12 @@ function mailBox(folder, page, search, threadUid) { /* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Consts */ 25); /* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Cache */ 14); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Links */ 15); -/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Base64 */ 392); +/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Base64 */ 398); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/App */ 31); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Settings */ 38); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/User */ 22); -/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Remote/AbstractAjax */ 263); +/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Remote/AbstractAjax */ 268); @@ -6676,9 +6669,7 @@ function mailBox(folder, page, search, threadUid) { -var RemoteUserAjax = -/*#__PURE__*/ -function (_AbstractAjaxRemote) { +var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(RemoteUserAjax, _AbstractAjaxRemote); function RemoteUserAjax() { @@ -7584,7 +7575,7 @@ function (_AbstractAjaxRemote) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; }); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 160); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 163); /* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); function _defineProperty(obj, key, value) { @@ -7611,7 +7602,7 @@ function _defineProperty(obj, key, value) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 340); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 345); /***/ }), /* 19 */ @@ -7622,7 +7613,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 340 /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 363); +module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 369); /***/ }), /* 20 */ @@ -7635,17 +7626,17 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-prop "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _applyDecoratedDescriptor; }); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 160); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 163); /* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/instance/slice */ 258); +/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/instance/slice */ 263); /* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/instance/reverse */ 259); +/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/instance/reverse */ 264); /* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/instance/reduce */ 260); +/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/instance/reduce */ 265); /* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core-js/object/keys */ 261); +/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core-js/object/keys */ 266); /* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core-js/instance/for-each */ 262); +/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core-js/instance/for-each */ 267); /* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); @@ -7713,7 +7704,7 @@ module.exports = window.key; * @returns {AppUser} */ function getApp() { - return __webpack_require__(/*! App/User */ 389).default; + return __webpack_require__(/*! App/User */ 395).default; } /***/ }), @@ -7842,7 +7833,7 @@ var DATA_IMAGE_LAZY_PLACEHOLDER_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUh /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 328); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 334); /***/ }), /* 27 */ @@ -7867,7 +7858,7 @@ module.exports = // eslint-disable-next-line no-new-func Function('return this')(); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) /***/ }), /* 28 */ @@ -7890,9 +7881,7 @@ module.exports = -var AbstractViewNext = -/*#__PURE__*/ -function () { +var AbstractViewNext = /*#__PURE__*/function () { function AbstractViewNext() { Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "bDisabeCloseOnEsc", false); @@ -7982,9 +7971,7 @@ function () { -var SocialStore = -/*#__PURE__*/ -function () { +var SocialStore = /*#__PURE__*/function () { function SocialStore() { var _this = this; @@ -8086,7 +8073,7 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 315); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 321); /***/ }), /* 31 */ @@ -8104,7 +8091,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of * /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 257); +/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 262); @@ -8113,9 +8100,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of * -var AppUserStore = -/*#__PURE__*/ -function (_AbstractAppStore) { +var AppUserStore = /*#__PURE__*/function (_AbstractAppStore) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AppUserStore, _AbstractAppStore); function AppUserStore() { @@ -8202,11 +8187,11 @@ function (_AbstractAppStore) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var shared = __webpack_require__(/*! ../internals/shared */ 127); +var shared = __webpack_require__(/*! ../internals/shared */ 128); var has = __webpack_require__(/*! ../internals/has */ 42); -var uid = __webpack_require__(/*! ../internals/uid */ 128); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); -var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 183); +var uid = __webpack_require__(/*! ../internals/uid */ 129); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 185); var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; @@ -8248,7 +8233,7 @@ function _assertThisInitialized(self) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 356); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 362); /***/ }), /* 35 */ @@ -8262,7 +8247,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return componentExportHelper; }); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); @@ -8277,9 +8262,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ -var AbstractComponent = -/*#__PURE__*/ -function () { +var AbstractComponent = /*#__PURE__*/function () { function AbstractComponent() { Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(this, "disposable", []); } @@ -8383,7 +8366,7 @@ module.exports = function (it) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__); @@ -8404,9 +8387,7 @@ module.exports = function (it) { -var SettingsUserStore = -/*#__PURE__*/ -function () { +var SettingsUserStore = /*#__PURE__*/function () { function SettingsUserStore() { this.iAutoLogoutTimer = 0; this.layout = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview).extend({ @@ -8610,7 +8591,7 @@ function settingsGet(pluginSection, name) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__); @@ -8642,9 +8623,7 @@ function settingsGet(pluginSection, name) { -var PgpUserStore = -/*#__PURE__*/ -function () { +var PgpUserStore = /*#__PURE__*/function () { function PgpUserStore() { var _this = this; @@ -8828,7 +8807,7 @@ function () { var privateKeys = this.findPrivateKeysByEncryptionKeyIds(message.getEncryptionKeyIds(), recipients, true); if (privateKeys && 0 < privateKeys.length) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 522), [function (decryptedKey) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 528), [function (decryptedKey) { if (decryptedKey) { message.decrypt(decryptedKey).then(function (decryptedMessage) { var privateKey = null; @@ -9049,13 +9028,13 @@ module.exports = function (it, key) { "use strict"; -var global = __webpack_require__(/*! ../internals/global */ 75); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 235).f; -var isForced = __webpack_require__(/*! ../internals/is-forced */ 289); -var path = __webpack_require__(/*! ../internals/path */ 96); -var bind = __webpack_require__(/*! ../internals/bind-context */ 238); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var has = __webpack_require__(/*! ../internals/has */ 95); +var global = __webpack_require__(/*! ../internals/global */ 66); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 238).f; +var isForced = __webpack_require__(/*! ../internals/is-forced */ 294); +var path = __webpack_require__(/*! ../internals/path */ 97); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 241); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var has = __webpack_require__(/*! ../internals/has */ 78); var wrapConstructor = function (NativeConstructor) { var Wrapper = function (a, b, c) { @@ -9127,18 +9106,22 @@ module.exports = function (options, source) { // add a flag to not completely full polyfills if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { - hide(resultProperty, 'sham', true); + createNonEnumerableProperty(resultProperty, 'sham', true); } target[key] = resultProperty; if (PROTO) { VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; - if (!has(path, VIRTUAL_PROTOTYPE)) hide(path, VIRTUAL_PROTOTYPE, {}); + if (!has(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } // export virtual prototype methods path[VIRTUAL_PROTOTYPE][key] = sourceProperty; // export real prototype methods - if (options.real && targetPrototype && !targetPrototype[key]) hide(targetPrototype, key, sourceProperty); + if (options.real && targetPrototype && !targetPrototype[key]) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } } } }; @@ -9169,7 +9152,7 @@ module.exports = function (it) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); +var $ = __webpack_require__(/*! ../internals/export */ 50); var exec = __webpack_require__(/*! ../internals/regexp-exec */ 110); $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { @@ -9200,9 +9183,7 @@ $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { -var AccountUserStore = -/*#__PURE__*/ -function () { +var AccountUserStore = /*#__PURE__*/function () { function AccountUserStore() { this.email = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(''); this.parentEmail = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(''); @@ -9275,6 +9256,43 @@ module.exports = !fails(function () { /***/ }), /* 48 */ +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! + \**************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 49 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/classof-raw.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 50 */ /*!**************************************************!*\ !*** ./node_modules/core-js/internals/export.js ***! \**************************************************/ @@ -9283,12 +9301,12 @@ module.exports = !fails(function () { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 179); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 181); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); /* options.target - name of the target object @@ -9338,43 +9356,6 @@ module.exports = function (options, source) { }; -/***/ }), -/* 49 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); - -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 50 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - /***/ }), /* 51 */ /*!**********************************************************!*\ @@ -9417,9 +9398,9 @@ if (DESCRIPTORS && !(NAME in FunctionPrototype)) { /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); var nativeDefineProperty = Object.defineProperty; @@ -9448,11 +9429,11 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var has = __webpack_require__(/*! ../internals/has */ 42); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); var getInternalState = InternalStateModule.get; var enforceInternalState = InternalStateModule.enforce; @@ -9492,7 +9473,7 @@ var TEMPLATE = String(String).split('String'); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var path = __webpack_require__(/*! ../internals/path */ 96); +var path = __webpack_require__(/*! ../internals/path */ 97); module.exports = function (CONSTRUCTOR) { return path[CONSTRUCTOR + 'Prototype']; @@ -9501,6 +9482,24 @@ module.exports = function (CONSTRUCTOR) { /***/ }), /* 55 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/fails.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), +/* 56 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/require-object-coercible.js ***! \********************************************************************/ @@ -9517,7 +9516,7 @@ module.exports = function (it) { /***/ }), -/* 56 */ +/* 57 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.replace.js ***! \***********************************************************/ @@ -9526,14 +9525,14 @@ module.exports = function (it) { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); var max = Math.max; var min = Math.min; @@ -9662,24 +9661,6 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma }); -/***/ }), -/* 57 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js-pure/internals/fails.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - /***/ }), /* 58 */ /*!*******************************!*\ @@ -9696,8 +9677,8 @@ module.exports = function (exec) { /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var Common_ClientStorageDriver_Cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/ClientStorageDriver/Cookie */ 420); -/* harmony import */ var Common_ClientStorageDriver_LocalStorage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/ClientStorageDriver/LocalStorage */ 421); +/* harmony import */ var Common_ClientStorageDriver_Cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/ClientStorageDriver/Cookie */ 426); +/* harmony import */ var Common_ClientStorageDriver_LocalStorage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/ClientStorageDriver/LocalStorage */ 427); @@ -9735,7 +9716,7 @@ function get(key) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var path = __webpack_require__(/*! ../internals/path */ 148); +var path = __webpack_require__(/*! ../internals/path */ 150); var global = __webpack_require__(/*! ../internals/global */ 27); var aFunction = function (variable) { @@ -9771,7 +9752,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 97); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 98); /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); @@ -9948,12 +9929,12 @@ module.exports = window.hasher; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return emailArrayToStringClear; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return emailArrayFromJson; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return replyHelper; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Email */ 80); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Email */ 82); @@ -10058,9 +10039,9 @@ function replyHelper(inputEmails, unic, localEmails) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 184); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 186); // `Object.prototype.toString` method // https://tc39.github.io/ecma262/#sec-object.prototype.tostring @@ -10080,16 +10061,14 @@ if (!TO_STRING_TAG_SUPPORT) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractModel; }); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); -var AbstractModel = -/*#__PURE__*/ -function () { +var AbstractModel = /*#__PURE__*/function () { /** * @param {string} modelName = '' */ @@ -10129,6 +10108,31 @@ function () { /***/ }), /* 65 */, /* 66 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/global.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + (function () { return this; })() || Function('return this')(); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) + +/***/ }), +/* 67 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-function.js ***! \******************************************************/ @@ -10144,16 +10148,16 @@ module.exports = function (it) { /***/ }), -/* 67 */ +/* 68 */ /*!****************************************************!*\ !*** ./node_modules/core-js/modules/web.timers.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var $ = __webpack_require__(/*! ../internals/export */ 48); +var $ = __webpack_require__(/*! ../internals/export */ 50); var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); var slice = [].slice; var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check @@ -10182,7 +10186,7 @@ $({ global: true, bind: true, forced: MSIE }, { /***/ }), -/* 68 */ +/* 69 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/well-known-symbol.js ***! \******************************************************************/ @@ -10190,22 +10194,27 @@ $({ global: true, bind: true, forced: MSIE }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var shared = __webpack_require__(/*! ../internals/shared */ 202); -var uid = __webpack_require__(/*! ../internals/uid */ 240); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 299); +var global = __webpack_require__(/*! ../internals/global */ 66); +var shared = __webpack_require__(/*! ../internals/shared */ 244); +var has = __webpack_require__(/*! ../internals/has */ 78); +var uid = __webpack_require__(/*! ../internals/uid */ 245); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 248); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 306); +var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; -var store = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; module.exports = function (name) { - return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name] - || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name)); + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; }; /***/ }), -/* 69 */ +/* 70 */ /*!*********************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js ***! \*********************************************************************************/ @@ -10213,10 +10222,10 @@ module.exports = function (name) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ 253); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ 258); /***/ }), -/* 70 */ +/* 71 */ /*!********************************!*\ !*** ./dev/Stores/Language.js ***! \********************************/ @@ -10232,9 +10241,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each * -var LanguageStore = -/*#__PURE__*/ -function () { +var LanguageStore = /*#__PURE__*/function () { function LanguageStore() { this.languages = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); this.languagesAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); @@ -10271,7 +10278,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new LanguageStore()); /***/ }), -/* 71 */ +/* 72 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-indexed-object.js ***! \*************************************************************/ @@ -10280,8 +10287,8 @@ function () { /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); @@ -10289,7 +10296,7 @@ module.exports = function (it) { /***/ }), -/* 72 */ +/* 73 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-length.js ***! \*****************************************************/ @@ -10297,7 +10304,7 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); var min = Math.min; @@ -10309,7 +10316,7 @@ module.exports = function (argument) { /***/ }), -/* 73 */ +/* 74 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/iterators.js ***! \*****************************************************/ @@ -10321,7 +10328,7 @@ module.exports = {}; /***/ }), -/* 74 */ +/* 75 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es.array.join.js ***! \*******************************************************/ @@ -10330,10 +10337,10 @@ module.exports = {}; "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 282); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 287); var nativeJoin = [].join; @@ -10350,33 +10357,24 @@ $({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, { /***/ }), -/* 75 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js-pure/internals/global.js ***! - \*******************************************************/ +/* 76 */ +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/descriptors.js ***! + \************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(global) {var O = 'object'; -var check = function (it) { - return it && it.Math == Math && it; -}; +var fails = __webpack_require__(/*! ../internals/fails */ 55); -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == O && globalThis) || - check(typeof window == O && window) || - check(typeof self == O && self) || - check(typeof global == O && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) /***/ }), -/* 76 */ +/* 77 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-object.js ***! \**********************************************************/ @@ -10390,8 +10388,24 @@ module.exports = function (it) { /***/ }), -/* 77 */, /* 78 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js-pure/internals/has.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 79 */, +/* 80 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/is-pure.js ***! \***************************************************/ @@ -10403,7 +10417,7 @@ module.exports = false; /***/ }), -/* 79 */ +/* 81 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/to-integer.js ***! \******************************************************/ @@ -10422,7 +10436,7 @@ module.exports = function (argument) { /***/ }), -/* 80 */ +/* 82 */ /*!****************************!*\ !*** ./dev/Model/Email.js ***! \****************************/ @@ -10438,20 +10452,20 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search */ 273); +/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search */ 278); /* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! emailjs-addressparser */ 163); +/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! emailjs-addressparser */ 166); /* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2); @@ -10466,9 +10480,7 @@ __webpack_require__.r(__webpack_exports__); -var EmailModel = -/*#__PURE__*/ -function () { +var EmailModel = /*#__PURE__*/function () { /** * @param {string=} email = '' * @param {string=} name = '' @@ -10707,7 +10719,7 @@ function () { /***/ }), -/* 81 */ +/* 83 */ /*!*****************************!*\ !*** ./dev/Common/Audio.js ***! \*****************************/ @@ -10718,7 +10730,7 @@ function () { "use strict"; /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! window */ 4); @@ -10736,9 +10748,7 @@ function () { -var Audio = -/*#__PURE__*/ -function () { +var Audio = /*#__PURE__*/function () { function Audio() { var _this = this; @@ -10884,45 +10894,66 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new Audio()); /***/ }), -/* 82 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/descriptors.js ***! - \************************************************************/ +/* 84 */ +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/create-non-enumerable-property.js ***! + \*******************************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 137); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; /***/ }), -/* 83 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js-pure/internals/hide.js ***! - \*****************************************************/ +/* 85 */ +/*!****************************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-method-uses-to-length.js ***! + \****************************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var has = __webpack_require__(/*! ../internals/has */ 78); -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; +var defineProperty = Object.defineProperty; +var cache = {}; + +var thrower = function (it) { throw it; }; + +module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); }; /***/ }), -/* 84 */ +/* 86 */ /*!****************************************!*\ !*** ./dev/Component/AbstractInput.js ***! \****************************************/ @@ -10949,9 +10980,7 @@ module.exports = DESCRIPTORS ? function (object, key, value) { -var AbstractInput = -/*#__PURE__*/ -function (_AbstractComponent) { +var AbstractInput = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(AbstractInput, _AbstractComponent); /** @@ -11019,8 +11048,8 @@ function (_AbstractComponent) { /***/ }), -/* 85 */, -/* 86 */ +/* 87 */, +/* 88 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/internal-state.js ***! \**********************************************************/ @@ -11028,13 +11057,13 @@ function (_AbstractComponent) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 178); +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 180); var global = __webpack_require__(/*! ../internals/global */ 27); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var objectHas = __webpack_require__(/*! ../internals/has */ 42); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); var WeakMap = global.WeakMap; var set, get, has; @@ -11092,7 +11121,7 @@ module.exports = { /***/ }), -/* 87 */ +/* 89 */ /*!***********************************!*\ !*** ./dev/Promises/User/Ajax.js ***! \***********************************/ @@ -11101,22 +11130,20 @@ module.exports = { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Promises/User/Populator */ 393); -/* harmony import */ var Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Promises/AbstractAjax */ 423); +/* harmony import */ var Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Promises/User/Populator */ 399); +/* harmony import */ var Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Promises/AbstractAjax */ 429); -var UserAjaxUserPromises = -/*#__PURE__*/ -function (_AbstractAjaxPromises) { +var UserAjaxUserPromises = /*#__PURE__*/function (_AbstractAjaxPromises) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(UserAjaxUserPromises, _AbstractAjaxPromises); function UserAjaxUserPromises() { @@ -11184,8 +11211,8 @@ function (_AbstractAjaxPromises) { /* harmony default export */ __webpack_exports__["a"] = (new UserAjaxUserPromises()); /***/ }), -/* 88 */, -/* 89 */ +/* 90 */, +/* 91 */ /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! \******************************************************************************/ @@ -11194,12 +11221,12 @@ function (_AbstractAjaxPromises) { /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 164); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 167); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); var has = __webpack_require__(/*! ../internals/has */ 42); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -11216,7 +11243,7 @@ exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnProper /***/ }), -/* 90 */ +/* 92 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! \**********************************************************************/ @@ -11235,7 +11262,7 @@ module.exports = function (bitmap, value) { /***/ }), -/* 91 */ +/* 93 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/set-global.js ***! \******************************************************/ @@ -11244,7 +11271,7 @@ module.exports = function (bitmap, value) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); module.exports = function (key, value) { try { @@ -11256,7 +11283,7 @@ module.exports = function (key, value) { /***/ }), -/* 92 */ +/* 94 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/inspect-source.js ***! \**********************************************************/ @@ -11264,7 +11291,7 @@ module.exports = function (key, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var store = __webpack_require__(/*! ../internals/shared-store */ 126); +var store = __webpack_require__(/*! ../internals/shared-store */ 127); var functionToString = Function.toString; @@ -11279,7 +11306,7 @@ module.exports = store.inspectSource; /***/ }), -/* 93 */ +/* 95 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! \*****************************************************************/ @@ -11298,7 +11325,7 @@ module.exports = String(test) === '[object z]'; /***/ }), -/* 94 */ +/* 96 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-indexed-object.js ***! \******************************************************************/ @@ -11307,8 +11334,8 @@ module.exports = String(test) === '[object z]'; /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 199); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 200); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); @@ -11316,23 +11343,7 @@ module.exports = function (it) { /***/ }), -/* 95 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js-pure/internals/has.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; - -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 96 */ +/* 97 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/internals/path.js ***! \*****************************************************/ @@ -11344,7 +11355,7 @@ module.exports = {}; /***/ }), -/* 97 */ +/* 98 */ /*!********************************!*\ !*** external "window.moment" ***! \********************************/ @@ -11355,7 +11366,7 @@ module.exports = {}; module.exports = window.moment; /***/ }), -/* 98 */ +/* 99 */ /*!************************************!*\ !*** external "window.progressJs" ***! \************************************/ @@ -11366,7 +11377,7 @@ module.exports = window.moment; module.exports = window.progressJs; /***/ }), -/* 99 */ +/* 100 */ /*!*************************************!*\ !*** ./dev/Stores/User/Identity.js ***! \*************************************/ @@ -11401,7 +11412,7 @@ var IdentityUserStore = function IdentityUserStore() { /* harmony default export */ __webpack_exports__["a"] = (new IdentityUserStore()); /***/ }), -/* 100 */ +/* 101 */ /*!************************************!*\ !*** ./dev/Stores/User/Contact.js ***! \************************************/ @@ -11417,9 +11428,7 @@ var IdentityUserStore = function IdentityUserStore() { -var ContactUserStore = -/*#__PURE__*/ -function () { +var ContactUserStore = /*#__PURE__*/function () { function ContactUserStore() { this.contacts = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); this.contacts.loading = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({ @@ -11460,7 +11469,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new ContactUserStore()); /***/ }), -/* 101 */ +/* 102 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/document-create-element.js ***! \*******************************************************************/ @@ -11481,7 +11490,7 @@ module.exports = function (it) { /***/ }), -/* 102 */ +/* 103 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/hidden-keys.js ***! \*******************************************************/ @@ -11493,7 +11502,7 @@ module.exports = {}; /***/ }), -/* 103 */ +/* 104 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/function-bind-context.js ***! \*****************************************************************/ @@ -11501,7 +11510,7 @@ module.exports = {}; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); // optional / simple context binding module.exports = function (fn, that, length) { @@ -11528,7 +11537,7 @@ module.exports = function (fn, that, length) { /***/ }), -/* 104 */ +/* 105 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-user-agent.js ***! \*************************************************************/ @@ -11542,7 +11551,7 @@ module.exports = getBuiltIn('navigator', 'userAgent') || ''; /***/ }), -/* 105 */ +/* 106 */ /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/new-promise-capability.js ***! \******************************************************************/ @@ -11552,7 +11561,7 @@ module.exports = getBuiltIn('navigator', 'userAgent') || ''; "use strict"; -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); var PromiseCapability = function (C) { var resolve, reject; @@ -11572,7 +11581,224 @@ module.exports.f = function (C) { /***/ }), -/* 106 */ +/* 107 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/shared-key.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(/*! ../internals/shared */ 128); +var uid = __webpack_require__(/*! ../internals/uid */ 129); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), +/* 108 */ +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! + \*********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), +/* 109 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; +var has = __webpack_require__(/*! ../internals/has */ 42); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC) { + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + + +/***/ }), +/* 110 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-exec.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 173); +var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 236); + +var nativeExec = RegExp.prototype.exec; +// This always refers to the native implementation, because the +// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, +// which loads this file before patching the method. +var nativeReplace = String.prototype.replace; + +var patchedExec = nativeExec; + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; +})(); + +var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; + +if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = String(str).slice(re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; +} + +module.exports = patchedExec; + + +/***/ }), +/* 111 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var flags = __webpack_require__(/*! ../internals/regexp-flags */ 173); + +var TO_STRING = 'toString'; +var RegExpPrototype = RegExp.prototype; +var nativeToString = RegExpPrototype[TO_STRING]; + +var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); +// FF44- RegExp#toString has a wrong name +var INCORRECT_NAME = nativeToString.name != TO_STRING; + +// `RegExp.prototype.toString` method +// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring +if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); +} + + +/***/ }), +/* 112 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-length.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 202); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), +/* 113 */ /*!*****************************!*\ !*** ./dev/Common/Jassl.js ***! \*****************************/ @@ -11584,7 +11810,7 @@ module.exports.f = function (C) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); @@ -11642,224 +11868,7 @@ function jassl(src, async) { } /***/ }), -/* 107 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/shared-key.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ../internals/shared */ 127); -var uid = __webpack_require__(/*! ../internals/uid */ 128); - -var keys = shared('keys'); - -module.exports = function (key) { - return keys[key] || (keys[key] = uid(key)); -}; - - -/***/ }), -/* 108 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// IE8- don't enum bug keys -module.exports = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' -]; - - -/***/ }), -/* 109 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; -var has = __webpack_require__(/*! ../internals/has */ 42); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - -module.exports = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } -}; - - -/***/ }), -/* 110 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-exec.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 170); -var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 233); - -var nativeExec = RegExp.prototype.exec; -// This always refers to the native implementation, because the -// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, -// which loads this file before patching the method. -var nativeReplace = String.prototype.replace; - -var patchedExec = nativeExec; - -var UPDATES_LAST_INDEX_WRONG = (function () { - var re1 = /a/; - var re2 = /b*/g; - nativeExec.call(re1, 'a'); - nativeExec.call(re2, 'a'); - return re1.lastIndex !== 0 || re2.lastIndex !== 0; -})(); - -var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; - -// nonparticipating capturing group, copied from es5-shim's String#split patch. -var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - -var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; - -if (PATCH) { - patchedExec = function exec(str) { - var re = this; - var lastIndex, reCopy, match, i; - var sticky = UNSUPPORTED_Y && re.sticky; - var flags = regexpFlags.call(re); - var source = re.source; - var charsAdded = 0; - var strCopy = str; - - if (sticky) { - flags = flags.replace('y', ''); - if (flags.indexOf('g') === -1) { - flags += 'g'; - } - - strCopy = String(str).slice(re.lastIndex); - // Support anchored sticky behavior. - if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { - source = '(?: ' + source + ')'; - strCopy = ' ' + strCopy; - charsAdded++; - } - // ^(? + rx + ) is needed, in combination with some str slicing, to - // simulate the 'y' flag. - reCopy = new RegExp('^(?:' + source + ')', flags); - } - - if (NPCG_INCLUDED) { - reCopy = new RegExp('^' + source + '$(?!\\s)', flags); - } - if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; - - match = nativeExec.call(sticky ? reCopy : re, strCopy); - - if (sticky) { - if (match) { - match.input = match.input.slice(charsAdded); - match[0] = match[0].slice(charsAdded); - match.index = re.lastIndex; - re.lastIndex += match[0].length; - } else re.lastIndex = 0; - } else if (UPDATES_LAST_INDEX_WRONG && match) { - re.lastIndex = re.global ? match.index + match[0].length : lastIndex; - } - if (NPCG_INCLUDED && match && match.length > 1) { - // Fix browsers whose `exec` methods don't consistently return `undefined` - // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ - nativeReplace.call(match[0], reCopy, function () { - for (i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) match[i] = undefined; - } - }); - } - - return match; - }; -} - -module.exports = patchedExec; - - -/***/ }), -/* 111 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var flags = __webpack_require__(/*! ../internals/regexp-flags */ 170); - -var TO_STRING = 'toString'; -var RegExpPrototype = RegExp.prototype; -var nativeToString = RegExpPrototype[TO_STRING]; - -var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); -// FF44- RegExp#toString has a wrong name -var INCORRECT_NAME = nativeToString.name != TO_STRING; - -// `RegExp.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring -if (NOT_GENERIC || INCORRECT_NAME) { - redefine(RegExp.prototype, TO_STRING, function toString() { - var R = anObject(this); - var p = String(R.source); - var rf = R.flags; - var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); - return '/' + p + '/' + f; - }, { unsafe: true }); -} - - -/***/ }), -/* 112 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js-pure/internals/to-length.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); - -var min = Math.min; - -// `ToLength` abstract operation -// https://tc39.github.io/ecma262/#sec-tolength -module.exports = function (argument) { - return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - - -/***/ }), -/* 113 */ +/* 114 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js ***! \*******************************************************************************/ @@ -11867,10 +11876,10 @@ module.exports = function (argument) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 291); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 298); /***/ }), -/* 114 */ +/* 115 */ /*!*****************************!*\ !*** ./dev/Stores/Theme.js ***! \*****************************/ @@ -11886,9 +11895,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ -var ThemeStore = -/*#__PURE__*/ -function () { +var ThemeStore = /*#__PURE__*/function () { function ThemeStore() { this.themes = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]); this.themeBackgroundName = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(''); @@ -11914,7 +11921,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new ThemeStore()); /***/ }), -/* 115 */ +/* 116 */ /*!*****************************************!*\ !*** ./dev/Stores/User/Notification.js ***! \*****************************************/ @@ -11923,14 +11930,14 @@ function () { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Events */ 24); -/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Audio */ 81); +/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Audio */ 83); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5); @@ -11940,9 +11947,7 @@ function () { -var NotificationUserStore = -/*#__PURE__*/ -function () { +var NotificationUserStore = /*#__PURE__*/function () { function NotificationUserStore() { var _this = this; @@ -12112,9 +12117,9 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new NotificationUserStore()); /***/ }), -/* 116 */, /* 117 */, -/* 118 */ +/* 118 */, +/* 119 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/indexed-object.js ***! \**********************************************************/ @@ -12123,7 +12128,7 @@ function () { /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); var split = ''.split; @@ -12138,7 +12143,7 @@ module.exports = fails(function () { /***/ }), -/* 119 */ +/* 120 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-object.js ***! \*****************************************************/ @@ -12146,7 +12151,7 @@ module.exports = fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); // `ToObject` abstract operation // https://tc39.github.io/ecma262/#sec-toobject @@ -12156,7 +12161,7 @@ module.exports = function (argument) { /***/ }), -/* 120 */ +/* 121 */ /*!****************************************************!*\ !*** ./node_modules/core-js/modules/es.promise.js ***! \****************************************************/ @@ -12166,33 +12171,33 @@ module.exports = function (argument) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); var global = __webpack_require__(/*! ../internals/global */ 27); var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 168); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 171); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 187); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 189); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 188); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 190); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 189); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); -var iterate = __webpack_require__(/*! ../internals/iterate */ 142); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 193); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var task = __webpack_require__(/*! ../internals/task */ 132).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 194); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 169); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 195); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); -var perform = __webpack_require__(/*! ../internals/perform */ 144); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 191); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); +var iterate = __webpack_require__(/*! ../internals/iterate */ 143); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 195); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 144); +var task = __webpack_require__(/*! ../internals/task */ 133).set; +var microtask = __webpack_require__(/*! ../internals/microtask */ 196); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 172); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 197); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 106); +var perform = __webpack_require__(/*! ../internals/perform */ 145); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 153); var SPECIES = wellKnownSymbol('species'); var PROMISE = 'Promise'; @@ -12547,7 +12552,7 @@ $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { /***/ }), -/* 121 */ +/* 122 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-object.js ***! \**********************************************************/ @@ -12555,17 +12560,17 @@ $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 200); // `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject +// https://tc39.es/ecma262/#sec-toobject module.exports = function (argument) { return Object(requireObjectCoercible(argument)); }; /***/ }), -/* 122 */ +/* 123 */ /*!***********************************!*\ !*** ./dev/View/Popup/Compose.js ***! \***********************************/ @@ -12577,7 +12582,7 @@ module.exports = function (argument) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposePopupView", function() { return ComposePopupView; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ComposePopupView; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); @@ -12587,13 +12592,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); /* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9__); @@ -12619,7 +12624,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! key */ 21); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Jua */ 175); +/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Jua */ 177); /* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_23__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Utils */ 2); @@ -12629,10 +12634,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Common/Momentor */ 60); /* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Common/Cache */ 14); -/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Common/HtmlEditor */ 207); +/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Common/HtmlEditor */ 210); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Stores/User/App */ 31); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Stores/User/Settings */ 38); -/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Stores/User/Identity */ 99); +/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Stores/User/Identity */ 100); /* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! Stores/User/Account */ 46); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! Stores/User/Pgp */ 41); @@ -12641,7 +12646,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Remote/User/Ajax */ 16); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Common/Events */ 24); -/* harmony import */ var Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Model/ComposeAttachment */ 269); +/* harmony import */ var Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Model/ComposeAttachment */ 274); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -12713,9 +12718,7 @@ var ComposePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__[ return self.dropboxEnabled(); }), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.driveEnabled(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"])(ComposePopupView, _AbstractViewNext); function ComposePopupView() { @@ -13038,7 +13041,7 @@ function (_AbstractViewNext) { } if ('' === sSentFolder) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 274), [Common_Enums__WEBPACK_IMPORTED_MODULE_24__["SetSystemFoldersNotification"].Sent]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 279), [Common_Enums__WEBPACK_IMPORTED_MODULE_24__["SetSystemFoldersNotification"].Sent]); } else { this.sendError(false); this.sending(true); @@ -13073,7 +13076,7 @@ function (_AbstractViewNext) { } if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolderNotEnabled()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 274), [Common_Enums__WEBPACK_IMPORTED_MODULE_24__["SetSystemFoldersNotification"].Draft]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 279), [Common_Enums__WEBPACK_IMPORTED_MODULE_24__["SetSystemFoldersNotification"].Draft]); } else { this.savedError(false); this.saving(true); @@ -13088,7 +13091,7 @@ function (_AbstractViewNext) { _proto.deleteCommand = function deleteCommand() { var _this2 = this; - var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 221); + var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 224); if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["isPopupVisible"])(PopupsAskViewModel) && this.modalVisibility()) { Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () { @@ -13117,7 +13120,7 @@ function (_AbstractViewNext) { this.skipCommand(); ___WEBPACK_IMPORTED_MODULE_19___default.a.delay(function () { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 408), [true, _this3.sLastFocusedField]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 414), [true, _this3.sLastFocusedField]); }, Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Magics"].Time200ms); } }; @@ -13174,7 +13177,7 @@ function (_AbstractViewNext) { var _this5 = this; if (Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].capaOpenPGP() && this.oEditor && !this.oEditor.isHtml()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ComposeOpenPgp */ 526), [function (result) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ComposeOpenPgp */ 532), [function (result) { _this5.editor(function (editor) { editor.setPlain(result); }); @@ -13446,7 +13449,7 @@ function (_AbstractViewNext) { type = type || Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty; if (Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty !== type) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 221), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/DISCARD_UNSAVED_DATA'), function () { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 224), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/DISCARD_UNSAVED_DATA'), function () { _this8.initOnShow(type, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText); }, null, null, null, false]); } else { @@ -13771,7 +13774,7 @@ function (_AbstractViewNext) { _proto.tryToClosePopup = function tryToClosePopup() { var _this12 = this; - var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 221); + var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 224); if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["isPopupVisible"])(PopupsAskViewModel) && this.modalVisibility()) { if (this.bSkipNextHide || this.isEmptyForm() && !this.draftUid()) { @@ -14363,7 +14366,7 @@ function (_AbstractViewNext) { /***/ }), -/* 123 */ +/* 124 */ /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ @@ -14394,7 +14397,7 @@ module.exports = g; /***/ }), -/* 124 */ +/* 125 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/to-primitive.js ***! \********************************************************/ @@ -14419,7 +14422,7 @@ module.exports = function (input, PREFERRED_STRING) { /***/ }), -/* 125 */ +/* 126 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! \**********************************************************/ @@ -14429,7 +14432,7 @@ module.exports = function (input, PREFERRED_STRING) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); var fails = __webpack_require__(/*! ../internals/fails */ 36); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); // Thank's IE8 for his funny defineProperty module.exports = !DESCRIPTORS && !fails(function () { @@ -14440,7 +14443,7 @@ module.exports = !DESCRIPTORS && !fails(function () { /***/ }), -/* 126 */ +/* 127 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/shared-store.js ***! \********************************************************/ @@ -14449,7 +14452,7 @@ module.exports = !DESCRIPTORS && !fails(function () { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); var SHARED = '__core-js_shared__'; var store = global[SHARED] || setGlobal(SHARED, {}); @@ -14458,7 +14461,7 @@ module.exports = store; /***/ }), -/* 127 */ +/* 128 */ /*!**************************************************!*\ !*** ./node_modules/core-js/internals/shared.js ***! \**************************************************/ @@ -14466,8 +14469,8 @@ module.exports = store; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var store = __webpack_require__(/*! ../internals/shared-store */ 126); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); +var store = __webpack_require__(/*! ../internals/shared-store */ 127); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); @@ -14479,7 +14482,7 @@ var store = __webpack_require__(/*! ../internals/shared-store */ 126); /***/ }), -/* 128 */ +/* 129 */ /*!***********************************************!*\ !*** ./node_modules/core-js/internals/uid.js ***! \***********************************************/ @@ -14496,7 +14499,7 @@ module.exports = function (key) { /***/ }), -/* 129 */ +/* 130 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-forced.js ***! \*****************************************************/ @@ -14528,7 +14531,7 @@ module.exports = isForced; /***/ }), -/* 130 */ +/* 131 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/native-symbol.js ***! \*********************************************************/ @@ -14546,7 +14549,7 @@ module.exports = !!Object.getOwnPropertySymbols && !fails(function () { /***/ }), -/* 131 */ +/* 132 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/classof.js ***! \***************************************************/ @@ -14554,8 +14557,8 @@ module.exports = !!Object.getOwnPropertySymbols && !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 50); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 49); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); @@ -14583,7 +14586,7 @@ module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { /***/ }), -/* 132 */ +/* 133 */ /*!************************************************!*\ !*** ./node_modules/core-js/internals/task.js ***! \************************************************/ @@ -14593,11 +14596,11 @@ module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var global = __webpack_require__(/*! ../internals/global */ 27); var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var html = __webpack_require__(/*! ../internals/html */ 141); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 101); -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var html = __webpack_require__(/*! ../internals/html */ 142); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); var location = global.location; var set = global.setImmediate; @@ -14695,7 +14698,7 @@ module.exports = { /***/ }), -/* 133 */ +/* 134 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/engine-is-ios.js ***! \*********************************************************/ @@ -14703,13 +14706,13 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); /***/ }), -/* 134 */ +/* 135 */ /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! \******************************************************************************/ @@ -14725,7 +14728,7 @@ var redefine = __webpack_require__(/*! ../internals/redefine */ 53); var fails = __webpack_require__(/*! ../internals/fails */ 36); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var SPECIES = wellKnownSymbol('species'); @@ -14846,7 +14849,7 @@ module.exports = function (KEY, length, exec, sham) { /***/ }), -/* 135 */ +/* 136 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! \****************************************************************/ @@ -14854,7 +14857,7 @@ module.exports = function (KEY, length, exec, sham) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var classof = __webpack_require__(/*! ./classof-raw */ 50); +var classof = __webpack_require__(/*! ./classof-raw */ 49); var regexpExec = __webpack_require__(/*! ./regexp-exec */ 110); // `RegExpExec` abstract operation @@ -14879,7 +14882,7 @@ module.exports = function (R, S) { /***/ }), -/* 136 */ +/* 137 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-define-property.js ***! \***********************************************************************/ @@ -14887,15 +14890,15 @@ module.exports = function (R, S) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 236); -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 200); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 239); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 201); var nativeDefineProperty = Object.defineProperty; // `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty +// https://tc39.es/ecma262/#sec-object.defineproperty exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); @@ -14910,7 +14913,7 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A /***/ }), -/* 137 */ +/* 138 */ /*!*************************************!*\ !*** ./dev/Knoin/AbstractScreen.js ***! \*************************************/ @@ -14920,14 +14923,14 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractScreen; }); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! crossroads */ 161); +/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! crossroads */ 164); /* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2); @@ -14936,9 +14939,7 @@ exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, A -var AbstractScreen = -/*#__PURE__*/ -function () { +var AbstractScreen = /*#__PURE__*/function () { function AbstractScreen(screenName, viewModels) { if (viewModels === void 0) { viewModels = []; @@ -15015,7 +15016,7 @@ function () { }(); /***/ }), -/* 138 */ +/* 139 */ /*!*****************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js ***! \*****************************************************************************/ @@ -15023,10 +15024,10 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 333); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 339); /***/ }), -/* 139 */ +/* 140 */ /*!*****************************!*\ !*** external "window.ssm" ***! \*****************************/ @@ -15037,7 +15038,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 33 module.exports = window.ssm; /***/ }), -/* 140 */ +/* 141 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/object-keys-internal.js ***! \****************************************************************/ @@ -15046,9 +15047,9 @@ module.exports = window.ssm; /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ 42); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 165).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ 168).indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); module.exports = function (object, names) { var O = toIndexedObject(object); @@ -15065,7 +15066,7 @@ module.exports = function (object, names) { /***/ }), -/* 141 */ +/* 142 */ /*!************************************************!*\ !*** ./node_modules/core-js/internals/html.js ***! \************************************************/ @@ -15079,7 +15080,7 @@ module.exports = getBuiltIn('document', 'documentElement'); /***/ }), -/* 142 */ +/* 143 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/iterate.js ***! \***************************************************/ @@ -15088,11 +15089,11 @@ module.exports = getBuiltIn('document', 'documentElement'); /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 190); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 191); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 192); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 192); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 193); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 194); var Result = function (stopped, result) { this.stopped = stopped; @@ -15133,7 +15134,7 @@ iterate.stop = function (result) { /***/ }), -/* 143 */ +/* 144 */ /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/species-constructor.js ***! \***************************************************************/ @@ -15142,7 +15143,7 @@ iterate.stop = function (result) { /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var SPECIES = wellKnownSymbol('species'); @@ -15157,7 +15158,7 @@ module.exports = function (O, defaultConstructor) { /***/ }), -/* 144 */ +/* 145 */ /*!***************************************************!*\ !*** ./node_modules/core-js/internals/perform.js ***! \***************************************************/ @@ -15175,21 +15176,21 @@ module.exports = function (exec) { /***/ }), -/* 145 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/sloppy-array-method.js ***! - \********************************************************************/ +/* 146 */ +/*!***********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/array-method-is-strict.js ***! + \***********************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var fails = __webpack_require__(/*! ../internals/fails */ 55); module.exports = function (METHOD_NAME, argument) { var method = [][METHOD_NAME]; - return !method || !fails(function () { + return !!method && fails(function () { // eslint-disable-next-line no-useless-call,no-throw-literal method.call(null, argument || function () { throw 1; }, 1); }); @@ -15197,7 +15198,44 @@ module.exports = function (METHOD_NAME, argument) { /***/ }), -/* 146 */ +/* 147 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 208); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 156); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; +}; + + +/***/ }), +/* 148 */ /*!*********************************!*\ !*** ./dev/Storage/RainLoop.js ***! \*********************************/ @@ -15217,7 +15255,7 @@ module.exports = function (METHOD_NAME, argument) { /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__); @@ -15345,8 +15383,8 @@ function checkTimestamp() { window__WEBPACK_IMPORTED_MODULE_4___default.a.setInterval(setTimestamp, 1000 * 60); // 1m /***/ }), -/* 147 */, -/* 148 */ +/* 149 */, +/* 150 */ /*!************************************************!*\ !*** ./node_modules/core-js/internals/path.js ***! \************************************************/ @@ -15360,7 +15398,7 @@ module.exports = global; /***/ }), -/* 149 */ +/* 151 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/object-create.js ***! \*********************************************************/ @@ -15369,11 +15407,11 @@ module.exports = global; /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 224); +var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 227); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); -var html = __webpack_require__(/*! ../internals/html */ 141); -var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 101); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); +var html = __webpack_require__(/*! ../internals/html */ 142); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 102); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); var GT = '>'; @@ -15449,7 +15487,7 @@ module.exports = Object.create || function create(O, Properties) { /***/ }), -/* 150 */ +/* 152 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! \*******************************************************************/ @@ -15458,9 +15496,9 @@ module.exports = Object.create || function create(O, Properties) { /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ 42); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 228); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 231); var IE_PROTO = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; @@ -15477,7 +15515,7 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /***/ }), -/* 151 */ +/* 153 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-v8-version.js ***! \*************************************************************/ @@ -15486,7 +15524,7 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); var process = global.process; var versions = process && process.versions; @@ -15508,7 +15546,7 @@ module.exports = version && +version; /***/ }), -/* 152 */ +/* 154 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/advance-string-index.js ***! \****************************************************************/ @@ -15518,7 +15556,7 @@ module.exports = version && +version; "use strict"; -var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 185).charAt; +var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 187).charAt; // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex @@ -15528,7 +15566,7 @@ module.exports = function (S, index, unicode) { /***/ }), -/* 153 */ +/* 155 */ /*!***************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/create-property-descriptor.js ***! \***************************************************************************/ @@ -15547,7 +15585,23 @@ module.exports = function (bitmap, value) { /***/ }), -/* 154 */ +/* 156 */ +/*!************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/classof-raw.js ***! + \************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 157 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/an-object.js ***! \**********************************************************/ @@ -15555,7 +15609,7 @@ module.exports = function (bitmap, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); module.exports = function (it) { if (!isObject(it)) { @@ -15565,7 +15619,7 @@ module.exports = function (it) { /***/ }), -/* 155 */ +/* 158 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/iterators.js ***! \**********************************************************/ @@ -15577,7 +15631,7 @@ module.exports = {}; /***/ }), -/* 156 */ +/* 159 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-array.js ***! \*********************************************************/ @@ -15585,17 +15639,17 @@ module.exports = {}; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var classof = __webpack_require__(/*! ../internals/classof-raw */ 198); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 156); // `IsArray` abstract operation -// https://tc39.github.io/ecma262/#sec-isarray +// https://tc39.es/ecma262/#sec-isarray module.exports = Array.isArray || function isArray(arg) { return classof(arg) == 'Array'; }; /***/ }), -/* 157 */ +/* 160 */ /*!*********************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-method-has-species-support.js ***! \*********************************************************************************/ @@ -15603,13 +15657,17 @@ module.exports = Array.isArray || function isArray(arg) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 203); var SPECIES = wellKnownSymbol('species'); module.exports = function (METHOD_NAME) { - return !fails(function () { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { var array = []; var constructor = array.constructor = {}; constructor[SPECIES] = function () { @@ -15621,7 +15679,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 158 */ +/* 161 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-iteration.js ***! \****************************************************************/ @@ -15629,21 +15687,22 @@ module.exports = function (METHOD_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var bind = __webpack_require__(/*! ../internals/bind-context */ 238); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 241); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 199); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 250); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 256); var push = [].push; -// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation var createMethod = function (TYPE) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_OUT = TYPE == 7; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; return function ($this, callbackfn, that, specificCreate) { var O = toObject($this); @@ -15652,7 +15711,7 @@ var createMethod = function (TYPE) { var length = toLength(self.length); var index = 0; var create = specificCreate || arraySpeciesCreate; - var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined; var value, result; for (;length > index; index++) if (NO_HOLES || index in self) { value = self[index]; @@ -15664,7 +15723,10 @@ var createMethod = function (TYPE) { case 5: return value; // find case 6: return index; // findIndex case 2: push.call(target, value); // filter - } else if (IS_EVERY) return false; // every + } else switch (TYPE) { + case 4: return false; // every + case 7: push.call(target, value); // filterOut + } } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; @@ -15673,31 +15735,34 @@ var createMethod = function (TYPE) { module.exports = { // `Array.prototype.forEach` method - // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + // https://tc39.es/ecma262/#sec-array.prototype.foreach forEach: createMethod(0), // `Array.prototype.map` method - // https://tc39.github.io/ecma262/#sec-array.prototype.map + // https://tc39.es/ecma262/#sec-array.prototype.map map: createMethod(1), // `Array.prototype.filter` method - // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // https://tc39.es/ecma262/#sec-array.prototype.filter filter: createMethod(2), // `Array.prototype.some` method - // https://tc39.github.io/ecma262/#sec-array.prototype.some + // https://tc39.es/ecma262/#sec-array.prototype.some some: createMethod(3), // `Array.prototype.every` method - // https://tc39.github.io/ecma262/#sec-array.prototype.every + // https://tc39.es/ecma262/#sec-array.prototype.every every: createMethod(4), // `Array.prototype.find` method - // https://tc39.github.io/ecma262/#sec-array.prototype.find + // https://tc39.es/ecma262/#sec-array.prototype.find find: createMethod(5), // `Array.prototype.findIndex` method - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - findIndex: createMethod(6) + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterOut` method + // https://github.com/tc39/proposal-array-filtering + filterOut: createMethod(7) }; /***/ }), -/* 159 */ +/* 162 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js ***! \*******************************************************************************/ @@ -15705,10 +15770,10 @@ module.exports = { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ 311); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ 317); /***/ }), -/* 160 */ +/* 163 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js ***! \*******************************************************************************/ @@ -15716,10 +15781,10 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/object/define-property */ 344); +module.exports = __webpack_require__(/*! core-js-pure/features/object/define-property */ 349); /***/ }), -/* 161 */ +/* 164 */ /*!************************************!*\ !*** external "window.crossroads" ***! \************************************/ @@ -15730,7 +15795,7 @@ module.exports = __webpack_require__(/*! core-js-pure/features/object/define-pro module.exports = window.crossroads; /***/ }), -/* 162 */ +/* 165 */ /*!*******************************************!*\ !*** ./dev/Component/AbstractCheckbox.js ***! \*******************************************/ @@ -15750,9 +15815,7 @@ module.exports = window.crossroads; -var AbstractCheckbox = -/*#__PURE__*/ -function (_AbstractComponent) { +var AbstractCheckbox = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractCheckbox, _AbstractComponent); /** @@ -15807,7 +15870,7 @@ function (_AbstractComponent) { /***/ }), -/* 163 */ +/* 166 */ /*!******************************************************************!*\ !*** ./node_modules/emailjs-addressparser/dist/addressparser.js ***! \******************************************************************/ @@ -16123,7 +16186,7 @@ var Tokenizer = function () { //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGRyZXNzcGFyc2VyLmpzIl0sIm5hbWVzIjpbInBhcnNlIiwic3RyIiwidG9rZW5pemVyIiwiVG9rZW5pemVyIiwidG9rZW5zIiwidG9rZW5pemUiLCJhZGRyZXNzZXMiLCJhZGRyZXNzIiwicGFyc2VkQWRkcmVzc2VzIiwiZm9yRWFjaCIsInRva2VuIiwidHlwZSIsInZhbHVlIiwibGVuZ3RoIiwicHVzaCIsIl9oYW5kbGVBZGRyZXNzIiwiY29uY2F0IiwiaXNHcm91cCIsInN0YXRlIiwiZGF0YSIsImNvbW1lbnQiLCJncm91cCIsInRleHQiLCJpIiwibGVuIiwiam9pbiIsIm5hbWUiLCJtYXRjaCIsInNwbGljZSIsIl9yZWdleEhhbmRsZXIiLCJ0cmltIiwicmVwbGFjZSIsIk9QRVJBVE9SUyIsInRvU3RyaW5nIiwib3BlcmF0b3JDdXJyZW50Iiwib3BlcmF0b3JFeHBlY3RpbmciLCJub2RlIiwiZXNjYXBlZCIsImxpc3QiLCJjaHIiLCJjaGFyQXQiLCJjaGVja0NoYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O2tCQWN3QkEsSzs7OztBQWR4Qjs7Ozs7Ozs7Ozs7Ozs7QUFjZSxTQUFTQSxLQUFULENBQWdCQyxHQUFoQixFQUFxQjtBQUNsQyxNQUFNQyxZQUFZLElBQUlDLFNBQUosQ0FBY0YsR0FBZCxDQUFsQjtBQUNBLE1BQU1HLFNBQVNGLFVBQVVHLFFBQVYsRUFBZjs7QUFFQSxNQUFNQyxZQUFZLEVBQWxCO0FBQ0EsTUFBSUMsVUFBVSxFQUFkO0FBQ0EsTUFBSUMsa0JBQWtCLEVBQXRCOztBQUVBSixTQUFPSyxPQUFQLENBQWUsVUFBVUMsS0FBVixFQUFpQjtBQUM5QixRQUFJQSxNQUFNQyxJQUFOLEtBQWUsVUFBZixLQUE4QkQsTUFBTUUsS0FBTixLQUFnQixHQUFoQixJQUF1QkYsTUFBTUUsS0FBTixLQUFnQixHQUFyRSxDQUFKLEVBQStFO0FBQzdFLFVBQUlMLFFBQVFNLE1BQVosRUFBb0I7QUFDbEJQLGtCQUFVUSxJQUFWLENBQWVQ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QUFJLENBQUMsS0FBS0YsaUJBQU4sSUFBMkJJLE9BQU9QLFNBQXRDLEVBQWlEO0FBQ3RELGFBQUtJLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sVUFESTtBQUVWQyxpQkFBTzJCO0FBRkcsU0FBWjtBQUlBLGFBQUtELElBQUwsQ0FBVXhCLElBQVYsQ0FBZSxLQUFLc0IsSUFBcEI7QUFDQSxhQUFLQSxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUtELGlCQUFMLEdBQXlCSCxVQUFVTyxHQUFWLENBQXpCO0FBQ0EsYUFBS0YsT0FBTCxHQUFlLEtBQWY7QUFDQTtBQUNEOztBQUVELFVBQUksQ0FBQyxLQUFLQSxPQUFOLElBQWlCRSxRQUFRLElBQTdCLEVBQW1DO0FBQ2pDLGFBQUtGLE9BQUwsR0FBZSxJQUFmO0FBQ0E7QUFDRDs7QUFFRCxVQUFJLENBQUMsS0FBS0QsSUFBVixFQUFnQjtBQUNkLGFBQUtBLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sTUFESTtBQUVWQyxpQkFBTztBQUZHLFNBQVo7QUFJQSxhQUFLMEIsSUFBTCxDQUFVeEIsSUFBVixDQUFlLEtBQUtzQixJQUFwQjtBQUNEOztBQUVELFVBQUksS0FBS0MsT0FBTCxJQUFnQkUsUUFBUSxJQUE1QixFQUFrQztBQUNoQyxhQUFLSCxJQUFMLENBQVV4QixLQUFWLElBQW1CLElBQW5CO0FBQ0Q7O0FBRUQsV0FBS3dCLElBQUwsQ0FBVXhCLEtBQVYsSUFBbUIyQixHQUFuQjtBQUNBLFdBQUtGLE9BQUwsR0FBZSxLQUFmO0FBQ0QiLCJmaWxlIjoiYWRkcmVzc3BhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZSAoc3RyKSB7XG4gIGNvbnN0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKVxuICBjb25zdCB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUoKVxuXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGxldCBhZGRyZXNzID0gW11cbiAgbGV0IHBhcnNlZEFkZHJlc3NlcyA9IFtdXG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgICAgfVxuICAgICAgYWRkcmVzcyA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbilcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcylcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpXG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXNcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyAodG9rZW5zKSB7XG4gIGxldCBpc0dyb3VwID0gZmFsc2VcbiAgbGV0IHN0YXRlID0gJ3RleHQnXG4gIGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG4gIH1cblxuICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJ1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgc3RhdGUgPSAnZ3JvdXAnXG4gICAgICAgICAgaXNHcm91cCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0YXRlID0gJ3RleHQnXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgZGF0YS5jb21tZW50ID0gW11cbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJylcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lKSxcbiAgICAgIGdyb3VwOiBkYXRhLmdyb3VwLmxlbmd0aCA/IHBhcnNlKGRhdGEuZ3JvdXAuam9pbignLCcpKSA6IFtdXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgIGRhdGEuYWRkcmVzcyA9IFthZGRyZXNzLnRyaW0oKV1cbiAgICAgICAgICByZXR1cm4gJyAnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtpXSA9IGRhdGEudGV4dFtpXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpXG4gICAgICAgICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXVxuICAgIH1cblxuICAgIC8vIEtlZXAgb25seSB0aGUgZmlyc3QgYWRkcmVzcyBvY2N1cmVuY2UsIHB1c2ggb3RoZXJzIHRvIHJlZ3VsYXIgdGV4dFxuICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoID4gMSkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmNvbmNhdChkYXRhLmFkZHJlc3Muc3BsaWNlKDEpKVxuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKVxuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJylcblxuICAgIGlmICghZGF0YS5hZGRyZXNzICYmIGlzR3JvdXApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkcmVzcy5hZGRyZXNzID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXNcbn07XG5cbi8qXG4gKiBPcGVyYXRvciB0b2tlbnMgYW5kIHdoaWNoIHRva2VucyBhcmUgZXhwZWN0ZWQgdG8gZW5kIHRoZSBzZXF1ZW5jZVxuICovXG5jb25zdCBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICovXG5jbGFzcyBUb2tlbml6ZXIge1xuICBjb25zdHJ1Y3RvciAoc3RyKSB7XG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpXG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJ1xuICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJ1xuICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIHRoaXMubGlzdCA9IFtdXG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuICB0b2tlbml6ZSAoKSB7XG4gICAgbGV0IGNoclxuICAgIGxldCBsaXN0ID0gW11cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNociA9IHRoaXMuc3RyLmNoYXJBdChpKVxuICAgICAgdGhpcy5jaGVja0NoYXIoY2hyKVxuICAgIH1cblxuICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICBsaXN0LnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGxpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaXMgYW4gb3BlcmF0b3Igb3IgdGV4dCBhbmQgYWN0cyBhY2NvcmRpbmdseVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAqL1xuICBjaGVja0NoYXIgKGNocikge1xuICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgPT09IHRoaXMub3BlcmF0b3JFeHBlY3RpbmcpIHtcbiAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgdmFsdWU6IGNoclxuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgICAgdGhpcy5ub2RlID0gbnVsbFxuICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnXG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdvcGVyYXRvcicsXG4gICAgICAgIHZhbHVlOiBjaHJcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSlcbiAgICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXVxuICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5lc2NhcGVkICYmIGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCdcbiAgICB9XG5cbiAgICB0aGlzLm5vZGUudmFsdWUgKz0gY2hyXG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgfVxufVxuIl19 /***/ }), -/* 164 */ +/* 167 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! \*************************************************************************/ @@ -16148,7 +16211,7 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /***/ }), -/* 165 */ +/* 168 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/array-includes.js ***! \**********************************************************/ @@ -16156,9 +16219,9 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 182); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 184); // `Array.prototype.{ indexOf, includes }` methods implementation var createMethod = function (IS_INCLUDES) { @@ -16191,7 +16254,7 @@ module.exports = { /***/ }), -/* 166 */ +/* 169 */ /*!***************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! \***************************************************************************/ @@ -16203,7 +16266,7 @@ exports.f = Object.getOwnPropertySymbols; /***/ }), -/* 167 */ +/* 170 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/iterators-core.js ***! \**********************************************************/ @@ -16213,11 +16276,11 @@ exports.f = Object.getOwnPropertySymbols; "use strict"; -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 152); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var has = __webpack_require__(/*! ../internals/has */ 42); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); var ITERATOR = wellKnownSymbol('iterator'); var BUGGY_SAFARI_ITERATORS = false; @@ -16252,7 +16315,7 @@ module.exports = { /***/ }), -/* 168 */ +/* 171 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! \**********************************************************************/ @@ -16266,7 +16329,7 @@ module.exports = global.Promise; /***/ }), -/* 169 */ +/* 172 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/promise-resolve.js ***! \***********************************************************/ @@ -16276,7 +16339,7 @@ module.exports = global.Promise; var anObject = __webpack_require__(/*! ../internals/an-object */ 37); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 105); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 106); module.exports = function (C, x) { anObject(C); @@ -16289,7 +16352,7 @@ module.exports = function (C, x) { /***/ }), -/* 170 */ +/* 173 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/regexp-flags.js ***! \********************************************************/ @@ -16317,7 +16380,7 @@ module.exports = function () { /***/ }), -/* 171 */ +/* 174 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.split.js ***! \*********************************************************/ @@ -16326,14 +16389,14 @@ module.exports = function () { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); -var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 226); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 229); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 144); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); var fails = __webpack_require__(/*! ../internals/fails */ 36); @@ -16462,7 +16525,7 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal /***/ }), -/* 172 */ +/* 175 */ /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.link.js ***! \********************************************************/ @@ -16471,9 +16534,9 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var createHTML = __webpack_require__(/*! ../internals/create-html */ 283); -var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 284); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 288); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 289); // `String.prototype.link` method // https://tc39.github.io/ecma262/#sec-string.prototype.link @@ -16485,7 +16548,7 @@ $({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, { /***/ }), -/* 173 */ +/* 176 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/a-function.js ***! \***********************************************************/ @@ -16501,43 +16564,7 @@ module.exports = function (it) { /***/ }), -/* 174 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js-pure/internals/classof.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 198); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; -}; - - -/***/ }), -/* 175 */ +/* 177 */ /*!*****************************!*\ !*** external "window.Jua" ***! \*****************************/ @@ -16548,7 +16575,7 @@ module.exports = function (it) { module.exports = window.Jua; /***/ }), -/* 176 */ +/* 178 */ /*!*************************************!*\ !*** ./dev/Stores/User/Template.js ***! \*************************************/ @@ -16569,9 +16596,7 @@ module.exports = window.Jua; // import Remote from 'Remote/User/Ajax'; -var TemplateUserStore = -/*#__PURE__*/ -function () { +var TemplateUserStore = /*#__PURE__*/function () { function TemplateUserStore() { this.templates = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observableArray([]); this.templates.loading = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false).extend({ @@ -16611,7 +16636,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new TemplateUserStore()); /***/ }), -/* 177 */ +/* 179 */ /*!*********************************!*\ !*** ./dev/Model/Attachment.js ***! \*********************************/ @@ -16627,9 +16652,9 @@ function () { /* unused harmony export default */ /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); @@ -16644,7 +16669,7 @@ function () { /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/AbstractModel */ 64); -/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Audio */ 81); +/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Audio */ 83); @@ -16855,9 +16880,7 @@ var staticCombinedIconClass = function staticCombinedIconClass(data) { return result; }; -var AttachmentModel = -/*#__PURE__*/ -function (_AbstractModel) { +var AttachmentModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(AttachmentModel, _AbstractModel); function AttachmentModel() { @@ -17137,7 +17160,7 @@ function (_AbstractModel) { /***/ }), -/* 178 */ +/* 180 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/native-weak-map.js ***! \***********************************************************/ @@ -17146,7 +17169,7 @@ function (_AbstractModel) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); var WeakMap = global.WeakMap; @@ -17154,7 +17177,7 @@ module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSour /***/ }), -/* 179 */ +/* 181 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! \***********************************************************************/ @@ -17163,8 +17186,8 @@ module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSour /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ 42); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 180); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 182); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); module.exports = function (target, source) { @@ -17179,7 +17202,7 @@ module.exports = function (target, source) { /***/ }), -/* 180 */ +/* 182 */ /*!****************************************************!*\ !*** ./node_modules/core-js/internals/own-keys.js ***! \****************************************************/ @@ -17188,8 +17211,8 @@ module.exports = function (target, source) { /***/ (function(module, exports, __webpack_require__) { var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 181); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 166); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 183); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 169); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); // all object keys, includes non-enumerable and symbols @@ -17201,7 +17224,7 @@ module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { /***/ }), -/* 181 */ +/* 183 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! \*************************************************************************/ @@ -17209,7 +17232,7 @@ module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 141); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); var hiddenKeys = enumBugKeys.concat('length', 'prototype'); @@ -17222,7 +17245,7 @@ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { /***/ }), -/* 182 */ +/* 184 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-absolute-index.js ***! \*************************************************************/ @@ -17230,7 +17253,7 @@ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); var max = Math.max; var min = Math.min; @@ -17245,7 +17268,7 @@ module.exports = function (index, length) { /***/ }), -/* 183 */ +/* 185 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! \*************************************************************/ @@ -17253,7 +17276,7 @@ module.exports = function (index, length) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); module.exports = NATIVE_SYMBOL // eslint-disable-next-line no-undef @@ -17263,7 +17286,7 @@ module.exports = NATIVE_SYMBOL /***/ }), -/* 184 */ +/* 186 */ /*!************************************************************!*\ !*** ./node_modules/core-js/internals/object-to-string.js ***! \************************************************************/ @@ -17273,8 +17296,8 @@ module.exports = NATIVE_SYMBOL "use strict"; -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); -var classof = __webpack_require__(/*! ../internals/classof */ 131); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var classof = __webpack_require__(/*! ../internals/classof */ 132); // `Object.prototype.toString` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.tostring @@ -17284,7 +17307,7 @@ module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { /***/ }), -/* 185 */ +/* 187 */ /*!************************************************************!*\ !*** ./node_modules/core-js/internals/string-multibyte.js ***! \************************************************************/ @@ -17292,8 +17315,8 @@ module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); // `String.prototype.{ codePointAt, at }` methods implementation var createMethod = function (CONVERT_TO_STRING) { @@ -17322,7 +17345,7 @@ module.exports = { /***/ }), -/* 186 */ +/* 188 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.iterator.js ***! \***********************************************************/ @@ -17332,11 +17355,11 @@ module.exports = { "use strict"; -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 216); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 217); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 219); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 220); var ARRAY_ITERATOR = 'Array Iterator'; var setInternalState = InternalStateModule.set; @@ -17387,7 +17410,7 @@ addToUnscopables('entries'); /***/ }), -/* 187 */ +/* 189 */ /*!********************************************************!*\ !*** ./node_modules/core-js/internals/redefine-all.js ***! \********************************************************/ @@ -17404,7 +17427,7 @@ module.exports = function (target, src, options) { /***/ }), -/* 188 */ +/* 190 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/set-species.js ***! \*******************************************************/ @@ -17435,7 +17458,7 @@ module.exports = function (CONSTRUCTOR_NAME) { /***/ }), -/* 189 */ +/* 191 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/an-instance.js ***! \*******************************************************/ @@ -17451,7 +17474,7 @@ module.exports = function (it, Constructor, name) { /***/ }), -/* 190 */ +/* 192 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! \********************************************************************/ @@ -17460,7 +17483,7 @@ module.exports = function (it, Constructor, name) { /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); var ITERATOR = wellKnownSymbol('iterator'); var ArrayPrototype = Array.prototype; @@ -17472,7 +17495,7 @@ module.exports = function (it) { /***/ }), -/* 191 */ +/* 193 */ /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/get-iterator-method.js ***! \***************************************************************/ @@ -17480,8 +17503,8 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var classof = __webpack_require__(/*! ../internals/classof */ 131); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); +var classof = __webpack_require__(/*! ../internals/classof */ 132); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var ITERATOR = wellKnownSymbol('iterator'); @@ -17494,7 +17517,7 @@ module.exports = function (it) { /***/ }), -/* 192 */ +/* 194 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! \****************************************************************************/ @@ -17518,7 +17541,7 @@ module.exports = function (iterator, fn, value, ENTRIES) { /***/ }), -/* 193 */ +/* 195 */ /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! \**************************************************************************/ @@ -17567,7 +17590,7 @@ module.exports = function (exec, SKIP_CLOSING) { /***/ }), -/* 194 */ +/* 196 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/microtask.js ***! \*****************************************************/ @@ -17576,10 +17599,10 @@ module.exports = function (exec, SKIP_CLOSING) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); -var macrotask = __webpack_require__(/*! ../internals/task */ 132).set; -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 133); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var macrotask = __webpack_require__(/*! ../internals/task */ 133).set; +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; var process = global.process; @@ -17656,7 +17679,7 @@ module.exports = queueMicrotask || function (fn) { /***/ }), -/* 195 */ +/* 197 */ /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/host-report-errors.js ***! \**************************************************************/ @@ -17675,7 +17698,7 @@ module.exports = function (a, b) { /***/ }), -/* 196 */ +/* 198 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.match.js ***! \*********************************************************/ @@ -17684,12 +17707,12 @@ module.exports = function (a, b) { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); // @@match logic fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) { @@ -17730,7 +17753,7 @@ fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCal /***/ }), -/* 197 */ +/* 199 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/indexed-object.js ***! \***************************************************************/ @@ -17738,8 +17761,8 @@ fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCal /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 198); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 156); var split = ''.split; @@ -17754,23 +17777,7 @@ module.exports = fails(function () { /***/ }), -/* 198 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/classof-raw.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 199 */ +/* 200 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/require-object-coercible.js ***! \*************************************************************************/ @@ -17779,7 +17786,7 @@ module.exports = function (it) { /***/ (function(module, exports) { // `RequireObjectCoercible` abstract operation -// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +// https://tc39.es/ecma262/#sec-requireobjectcoercible module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; @@ -17787,7 +17794,7 @@ module.exports = function (it) { /***/ }), -/* 200 */ +/* 201 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-primitive.js ***! \*************************************************************/ @@ -17795,10 +17802,10 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); // `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive +// https://tc39.es/ecma262/#sec-toprimitive // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function (input, PREFERRED_STRING) { @@ -17812,7 +17819,7 @@ module.exports = function (input, PREFERRED_STRING) { /***/ }), -/* 201 */ +/* 202 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-integer.js ***! \***********************************************************/ @@ -17824,51 +17831,63 @@ var ceil = Math.ceil; var floor = Math.floor; // `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger +// https://tc39.es/ecma262/#sec-tointeger module.exports = function (argument) { return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); }; /***/ }), -/* 202 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js-pure/internals/shared.js ***! - \*******************************************************/ +/* 203 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/engine-v8-version.js ***! + \******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 295); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 203); +var global = __webpack_require__(/*! ../internals/global */ 66); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 296); -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8; +var match, version; -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.1.3', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' -}); +if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; +} else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } +} + +module.exports = version && +version; /***/ }), -/* 203 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js-pure/internals/is-pure.js ***! - \********************************************************/ +/* 204 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared-store.js ***! + \*************************************************************/ /*! no static exports found */ /*! all exports used */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -module.exports = true; +var global = __webpack_require__(/*! ../internals/global */ 66); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 302); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; /***/ }), -/* 204 */ +/* 205 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/shared-key.js ***! \***********************************************************/ @@ -17876,8 +17895,8 @@ module.exports = true; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(/*! ../internals/shared */ 202); -var uid = __webpack_require__(/*! ../internals/uid */ 240); +var shared = __webpack_require__(/*! ../internals/shared */ 244); +var uid = __webpack_require__(/*! ../internals/uid */ 245); var keys = shared('keys'); @@ -17887,7 +17906,19 @@ module.exports = function (key) { /***/ }), -/* 205 */ +/* 206 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js-pure/internals/is-pure.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), +/* 207 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/hidden-keys.js ***! \************************************************************/ @@ -17899,7 +17930,26 @@ module.exports = {}; /***/ }), -/* 206 */ +/* 208 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/to-string-tag-support.js ***! + \**********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), +/* 209 */ /*!***********************************!*\ !*** ./dev/Component/Checkbox.js ***! \***********************************/ @@ -17911,14 +17961,12 @@ module.exports = {}; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractCheckbox */ 162); +/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractCheckbox */ 165); -var CheckboxComponent = -/*#__PURE__*/ -function (_AbstractCheckbox) { +var CheckboxComponent = /*#__PURE__*/function (_AbstractCheckbox) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(CheckboxComponent, _AbstractCheckbox); function CheckboxComponent() { @@ -17931,7 +17979,7 @@ function (_AbstractCheckbox) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(CheckboxComponent, 'CheckboxComponent')); /***/ }), -/* 207 */ +/* 210 */ /*!**********************************!*\ !*** ./dev/Common/HtmlEditor.js ***! \**********************************/ @@ -17945,11 +17993,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HtmlEditor; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_4__); @@ -17976,9 +18024,7 @@ __webpack_require__.r(__webpack_exports__); -var HtmlEditor = -/*#__PURE__*/ -function () { +var HtmlEditor = /*#__PURE__*/function () { /** * @param {Object} element * @param {Function=} onBlur @@ -18383,7 +18429,7 @@ function () { /***/ }), -/* 208 */ +/* 211 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js ***! \*******************************************************************************/ @@ -18391,10 +18437,10 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ 285); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ 290); /***/ }), -/* 209 */ +/* 212 */ /*!**************************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/last-index-of.js ***! \**************************************************************************************/ @@ -18402,10 +18448,10 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/last-index-of */ 323); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/last-index-of */ 329); /***/ }), -/* 210 */ +/* 213 */ /*!*********************************!*\ !*** ./dev/External/Opentip.js ***! \*********************************/ @@ -18451,7 +18497,7 @@ Opentip.styles.rainloopErrorTip = { /***/ }), -/* 211 */ +/* 214 */ /*!*****************************************!*\ !*** ./node_modules/pikaday/pikaday.js ***! \*****************************************/ @@ -18473,7 +18519,7 @@ Opentip.styles.rainloopErrorTip = { if (true) { // CommonJS module // Load moment.js as an optional dependency - try { moment = __webpack_require__(/*! moment */ 97); } catch (e) {} + try { moment = __webpack_require__(/*! moment */ 98); } catch (e) {} module.exports = factory(moment); } else {} }(this, function (moment) @@ -19708,7 +19754,7 @@ Opentip.styles.rainloopErrorTip = { /***/ }), -/* 212 */ +/* 215 */ /*!************************************!*\ !*** external "window.Autolinker" ***! \************************************/ @@ -19719,7 +19765,7 @@ Opentip.styles.rainloopErrorTip = { module.exports = window.Autolinker; /***/ }), -/* 213 */ +/* 216 */ /*!****************************!*\ !*** ./dev/Common/Mime.js ***! \****************************/ @@ -19887,7 +19933,7 @@ var Mime = { /***/ }), -/* 214 */ +/* 217 */ /*!***********************************!*\ !*** ./dev/Stores/User/Filter.js ***! \***********************************/ @@ -19917,7 +19963,7 @@ var FilterUserStore = function FilterUserStore() { /* harmony default export */ __webpack_exports__["a"] = (new FilterUserStore()); /***/ }), -/* 215 */ +/* 218 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/object-keys.js ***! \*******************************************************/ @@ -19925,7 +19971,7 @@ var FilterUserStore = function FilterUserStore() { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 140); +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 141); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); // `Object.keys` method @@ -19936,7 +19982,7 @@ module.exports = Object.keys || function keys(O) { /***/ }), -/* 216 */ +/* 219 */ /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/add-to-unscopables.js ***! \**************************************************************/ @@ -19945,7 +19991,7 @@ module.exports = Object.keys || function keys(O) { /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var create = __webpack_require__(/*! ../internals/object-create */ 149); +var create = __webpack_require__(/*! ../internals/object-create */ 151); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); var UNSCOPABLES = wellKnownSymbol('unscopables'); @@ -19967,7 +20013,7 @@ module.exports = function (key) { /***/ }), -/* 217 */ +/* 220 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/define-iterator.js ***! \***********************************************************/ @@ -19977,17 +20023,17 @@ module.exports = function (key) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 227); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 150); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 218); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 230); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 152); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 221); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var redefine = __webpack_require__(/*! ../internals/redefine */ 53); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 167); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 170); var IteratorPrototype = IteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; @@ -20069,7 +20115,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I /***/ }), -/* 218 */ +/* 221 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! \*******************************************************************/ @@ -20078,7 +20124,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 229); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 232); // `Object.setPrototypeOf` method // https://tc39.github.io/ecma262/#sec-object.setprototypeof @@ -20104,7 +20150,7 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /***/ }), -/* 219 */ +/* 222 */ /*!***************************************************************************!*\ !*** ./node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***! \***************************************************************************/ @@ -20112,27 +20158,28 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ./es.array.iterator */ 220); -var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 308); -var global = __webpack_require__(/*! ../internals/global */ 75); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +__webpack_require__(/*! ./es.array.iterator */ 223); +var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 314); +var global = __webpack_require__(/*! ../internals/global */ 66); +var classof = __webpack_require__(/*! ../internals/classof */ 147); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); for (var COLLECTION_NAME in DOMIterables) { var Collection = global[COLLECTION_NAME]; var CollectionPrototype = Collection && Collection.prototype; - if (CollectionPrototype && !CollectionPrototype[TO_STRING_TAG]) { - hide(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); } Iterators[COLLECTION_NAME] = Iterators.Array; } /***/ }), -/* 220 */ +/* 223 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.iterator.js ***! \****************************************************************/ @@ -20142,26 +20189,26 @@ for (var COLLECTION_NAME in DOMIterables) { "use strict"; -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 239); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 292); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 296); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 243); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 299); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 303); var ARRAY_ITERATOR = 'Array Iterator'; var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); // `Array.prototype.entries` method -// https://tc39.github.io/ecma262/#sec-array.prototype.entries +// https://tc39.es/ecma262/#sec-array.prototype.entries // `Array.prototype.keys` method -// https://tc39.github.io/ecma262/#sec-array.prototype.keys +// https://tc39.es/ecma262/#sec-array.prototype.keys // `Array.prototype.values` method -// https://tc39.github.io/ecma262/#sec-array.prototype.values +// https://tc39.es/ecma262/#sec-array.prototype.values // `Array.prototype[@@iterator]` method -// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator // `CreateArrayIterator` internal method -// https://tc39.github.io/ecma262/#sec-createarrayiterator +// https://tc39.es/ecma262/#sec-createarrayiterator module.exports = defineIterator(Array, 'Array', function (iterated, kind) { setInternalState(this, { type: ARRAY_ITERATOR, @@ -20170,7 +20217,7 @@ module.exports = defineIterator(Array, 'Array', function (iterated, kind) { kind: kind // kind }); // `%ArrayIteratorPrototype%.next` method -// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next }, function () { var state = getInternalState(this); var target = state.target; @@ -20186,18 +20233,18 @@ module.exports = defineIterator(Array, 'Array', function (iterated, kind) { }, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% -// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject -// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject Iterators.Arguments = Iterators.Array; -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), -/* 221 */ +/* 224 */ /*!*******************************!*\ !*** ./dev/View/Popup/Ask.js ***! \*******************************/ @@ -20232,9 +20279,7 @@ var _dec, _class; var AskPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["popup"])({ name: 'View/Popup/Ask', templateID: 'PopupsAsk' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AskPopupView, _AbstractViewNext); function AskPopupView() { @@ -20359,7 +20404,7 @@ function (_AbstractViewNext) { /***/ }), -/* 222 */ +/* 225 */ /*!**********************************!*\ !*** ./dev/Stores/User/Quota.js ***! \**********************************/ @@ -20376,9 +20421,7 @@ function (_AbstractViewNext) { -var QuotaUserStore = -/*#__PURE__*/ -function () { +var QuotaUserStore = /*#__PURE__*/function () { function QuotaUserStore() { var _this = this; @@ -20410,7 +20453,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new QuotaUserStore()); /***/ }), -/* 223 */ +/* 226 */ /*!***********************************!*\ !*** external "window.ifvisible" ***! \***********************************/ @@ -20421,7 +20464,7 @@ function () { module.exports = window.ifvisible; /***/ }), -/* 224 */ +/* 227 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/object-define-properties.js ***! \********************************************************************/ @@ -20432,7 +20475,7 @@ module.exports = window.ifvisible; var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 215); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 218); // `Object.defineProperties` method // https://tc39.github.io/ecma262/#sec-object.defineproperties @@ -20448,7 +20491,7 @@ module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperti /***/ }), -/* 225 */ +/* 228 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-uses-to-length.js ***! \***********************************************************************/ @@ -20486,7 +20529,7 @@ module.exports = function (METHOD_NAME, options) { /***/ }), -/* 226 */ +/* 229 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-regexp.js ***! \*****************************************************/ @@ -20495,7 +20538,7 @@ module.exports = function (METHOD_NAME, options) { /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var MATCH = wellKnownSymbol('match'); @@ -20509,7 +20552,7 @@ module.exports = function (it) { /***/ }), -/* 227 */ +/* 230 */ /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***! \***********************************************************************/ @@ -20519,11 +20562,11 @@ module.exports = function (it) { "use strict"; -var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 167).IteratorPrototype; -var create = __webpack_require__(/*! ../internals/object-create */ 149); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); +var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 170).IteratorPrototype; +var create = __webpack_require__(/*! ../internals/object-create */ 151); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); var returnThis = function () { return this; }; @@ -20537,7 +20580,7 @@ module.exports = function (IteratorConstructor, NAME, next) { /***/ }), -/* 228 */ +/* 231 */ /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! \********************************************************************/ @@ -20555,7 +20598,7 @@ module.exports = !fails(function () { /***/ }), -/* 229 */ +/* 232 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/a-possible-prototype.js ***! \****************************************************************/ @@ -20573,7 +20616,7 @@ module.exports = function (it) { /***/ }), -/* 230 */ +/* 233 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js/modules/web.dom-collections.iterator.js ***! \**********************************************************************/ @@ -20582,9 +20625,9 @@ module.exports = function (it) { /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ 27); -var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 231); -var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 186); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 234); +var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 188); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var ITERATOR = wellKnownSymbol('iterator'); @@ -20617,7 +20660,7 @@ for (var COLLECTION_NAME in DOMIterables) { /***/ }), -/* 231 */ +/* 234 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/dom-iterables.js ***! \*********************************************************/ @@ -20663,8 +20706,8 @@ module.exports = { /***/ }), -/* 232 */, -/* 233 */ +/* 235 */, +/* 236 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***! \*****************************************************************/ @@ -20699,7 +20742,7 @@ exports.BROKEN_CARET = fails(function () { /***/ }), -/* 234 */ +/* 237 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/reduce.js ***! \*********************************************************/ @@ -20707,7 +20750,7 @@ exports.BROKEN_CARET = fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var reduce = __webpack_require__(/*! ../array/virtual/reduce */ 286); +var reduce = __webpack_require__(/*! ../array/virtual/reduce */ 291); var ArrayPrototype = Array.prototype; @@ -20718,7 +20761,7 @@ module.exports = function (it) { /***/ }), -/* 235 */ +/* 238 */ /*!***********************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js ***! \***********************************************************************************/ @@ -20726,18 +20769,18 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 288); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 200); -var has = __webpack_require__(/*! ../internals/has */ 95); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 236); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 293); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 201); +var has = __webpack_require__(/*! ../internals/has */ 78); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 239); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject(O); P = toPrimitive(P, true); @@ -20749,7 +20792,7 @@ exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnProper /***/ }), -/* 236 */ +/* 239 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/ie8-dom-define.js ***! \***************************************************************/ @@ -20757,9 +20800,9 @@ exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnProper /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 237); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 240); // Thank's IE8 for his funny defineProperty module.exports = !DESCRIPTORS && !fails(function () { @@ -20770,7 +20813,7 @@ module.exports = !DESCRIPTORS && !fails(function () { /***/ }), -/* 237 */ +/* 240 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/document-create-element.js ***! \************************************************************************/ @@ -20778,8 +20821,8 @@ module.exports = !DESCRIPTORS && !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var global = __webpack_require__(/*! ../internals/global */ 66); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); var document = global.document; // typeof document.createElement is 'object' in old IE @@ -20791,15 +20834,15 @@ module.exports = function (it) { /***/ }), -/* 238 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/bind-context.js ***! - \*************************************************************/ +/* 241 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/function-bind-context.js ***! + \**********************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); // optional / simple context binding module.exports = function (fn, that, length) { @@ -20826,7 +20869,29 @@ module.exports = function (fn, that, length) { /***/ }), -/* 239 */ +/* 242 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/get-built-in.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(/*! ../internals/path */ 97); +var global = __webpack_require__(/*! ../internals/global */ 66); + +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; +}; + + +/***/ }), +/* 243 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/add-to-unscopables.js ***! \*******************************************************************/ @@ -20838,7 +20903,28 @@ module.exports = function () { /* empty */ }; /***/ }), -/* 240 */ +/* 244 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/shared.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 206); +var store = __webpack_require__(/*! ../internals/shared-store */ 204); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.8.2', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), +/* 245 */ /*!****************************************************!*\ !*** ./node_modules/core-js-pure/internals/uid.js ***! \****************************************************/ @@ -20855,7 +20941,7 @@ module.exports = function (key) { /***/ }), -/* 241 */ +/* 246 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/iterators-core.js ***! \***************************************************************/ @@ -20865,11 +20951,11 @@ module.exports = function (key) { "use strict"; -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 242); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var has = __webpack_require__(/*! ../internals/has */ 95); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 203); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 247); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var has = __webpack_require__(/*! ../internals/has */ 78); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 206); var ITERATOR = wellKnownSymbol('iterator'); var BUGGY_SAFARI_ITERATORS = false; @@ -20877,7 +20963,7 @@ var BUGGY_SAFARI_ITERATORS = false; var returnThis = function () { return this; }; // `%IteratorPrototype%` object -// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; if ([].keys) { @@ -20893,7 +20979,9 @@ if ([].keys) { if (IteratorPrototype == undefined) IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); +if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); +} module.exports = { IteratorPrototype: IteratorPrototype, @@ -20902,7 +20990,7 @@ module.exports = { /***/ }), -/* 242 */ +/* 247 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-get-prototype-of.js ***! \************************************************************************/ @@ -20910,16 +20998,16 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var has = __webpack_require__(/*! ../internals/has */ 95); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 204); -var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 298); +var has = __webpack_require__(/*! ../internals/has */ 78); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 205); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 305); var IE_PROTO = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; // `Object.getPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.getprototypeof +// https://tc39.es/ecma262/#sec-object.getprototypeof module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; @@ -20930,7 +21018,25 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /***/ }), -/* 243 */ +/* 248 */ +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/native-symbol.js ***! + \**************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(/*! ../internals/fails */ 55); + +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); +}); + + +/***/ }), +/* 249 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-create.js ***! \**************************************************************/ @@ -20938,59 +21044,88 @@ module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 300); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 247); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 205); -var html = __webpack_require__(/*! ../internals/html */ 302); -var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 237); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 204); -var IE_PROTO = sharedKey('IE_PROTO'); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 307); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 253); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 207); +var html = __webpack_require__(/*! ../internals/html */ 309); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 240); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 205); +var GT = '>'; +var LT = '<'; var PROTOTYPE = 'prototype'; -var Empty = function () { /* empty */ }; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; // Create object with fake `null` prototype: use iframe Object with cleared prototype -var createDict = function () { +var NullProtoObjectViaIFrame = function () { // Thrash, waste and sodomy: IE GC bug var iframe = documentCreateElement('iframe'); - var length = enumBugKeys.length; - var lt = '<'; - var script = 'script'; - var gt = '>'; - var js = 'java' + script + ':'; + var JS = 'java' + SCRIPT + ':'; var iframeDocument; iframe.style.display = 'none'; html.appendChild(iframe); - iframe.src = String(js); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); - iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt); + iframeDocument.write(scriptTag('document.F=Object')); iframeDocument.close(); - createDict = iframeDocument.F; - while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]]; - return createDict(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); }; +hiddenKeys[IE_PROTO] = true; + // `Object.create` method -// https://tc39.github.io/ecma262/#sec-object.create +// https://tc39.es/ecma262/#sec-object.create module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO] = O; - } else result = createDict(); + } else result = NullProtoObject(); return Properties === undefined ? result : defineProperties(result, Properties); }; -hiddenKeys[IE_PROTO] = true; - /***/ }), -/* 244 */ +/* 250 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-keys.js ***! \************************************************************/ @@ -20998,18 +21133,18 @@ hiddenKeys[IE_PROTO] = true; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 301); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 247); +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 308); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 253); // `Object.keys` method -// https://tc39.github.io/ecma262/#sec-object.keys +// https://tc39.es/ecma262/#sec-object.keys module.exports = Object.keys || function keys(O) { return internalObjectKeys(O, enumBugKeys); }; /***/ }), -/* 245 */ +/* 251 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-includes.js ***! \***************************************************************/ @@ -21017,9 +21152,9 @@ module.exports = Object.keys || function keys(O) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 246); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 252); // `Array.prototype.{ indexOf, includes }` methods implementation var createMethod = function (IS_INCLUDES) { @@ -21043,16 +21178,16 @@ var createMethod = function (IS_INCLUDES) { module.exports = { // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes + // https://tc39.es/ecma262/#sec-array.prototype.includes includes: createMethod(true), // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + // https://tc39.es/ecma262/#sec-array.prototype.indexof indexOf: createMethod(false) }; /***/ }), -/* 246 */ +/* 252 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-absolute-index.js ***! \******************************************************************/ @@ -21060,14 +21195,14 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 202); var max = Math.max; var min = Math.min; // Helper for a popular repeating case of the spec: // Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). module.exports = function (index, length) { var integer = toInteger(index); return integer < 0 ? max(integer + length, 0) : min(integer, length); @@ -21075,7 +21210,7 @@ module.exports = function (index, length) { /***/ }), -/* 247 */ +/* 253 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/enum-bug-keys.js ***! \**************************************************************/ @@ -21096,7 +21231,7 @@ module.exports = [ /***/ }), -/* 248 */ +/* 254 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/set-to-string-tag.js ***! \******************************************************************/ @@ -21104,14 +21239,14 @@ module.exports = [ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 136).f; -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var has = __webpack_require__(/*! ../internals/has */ 95); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 304); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 208); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 137).f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var has = __webpack_require__(/*! ../internals/has */ 78); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 310); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var METHOD_REQUIRED = toString !== ({}).toString; module.exports = function (it, TAG, STATIC, SET_METHOD) { if (it) { @@ -21119,13 +21254,15 @@ module.exports = function (it, TAG, STATIC, SET_METHOD) { if (!has(target, TO_STRING_TAG)) { defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); } - if (SET_METHOD && METHOD_REQUIRED) hide(target, 'toString', toString); + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } } }; /***/ }), -/* 249 */ +/* 255 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/create-property.js ***! \****************************************************************/ @@ -21135,9 +21272,9 @@ module.exports = function (it, TAG, STATIC, SET_METHOD) { "use strict"; -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 200); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 201); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 137); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); module.exports = function (object, key, value) { var propertyKey = toPrimitive(key); @@ -21147,7 +21284,7 @@ module.exports = function (object, key, value) { /***/ }), -/* 250 */ +/* 256 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-species-create.js ***! \*********************************************************************/ @@ -21155,14 +21292,14 @@ module.exports = function (object, key, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); var SPECIES = wellKnownSymbol('species'); // `ArraySpeciesCreate` abstract operation -// https://tc39.github.io/ecma262/#sec-arrayspeciescreate +// https://tc39.es/ecma262/#sec-arrayspeciescreate module.exports = function (originalArray, length) { var C; if (isArray(originalArray)) { @@ -21178,7 +21315,7 @@ module.exports = function (originalArray, length) { /***/ }), -/* 251 */ +/* 257 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/whitespaces.js ***! \************************************************************/ @@ -21192,25 +21329,7 @@ module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u /***/ }), -/* 252 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/is-array.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); - -// `IsArray` abstract operation -// https://tc39.github.io/ecma262/#sec-isarray -module.exports = Array.isArray || function isArray(arg) { - return classof(arg) == 'Array'; -}; - - -/***/ }), -/* 253 */ +/* 258 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/for-each.js ***! \***************************************************************/ @@ -21218,9 +21337,9 @@ module.exports = Array.isArray || function isArray(arg) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 219); -var forEach = __webpack_require__(/*! ../array/virtual/for-each */ 350); -var classof = __webpack_require__(/*! ../../internals/classof */ 174); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 222); +var forEach = __webpack_require__(/*! ../array/virtual/for-each */ 356); +var classof = __webpack_require__(/*! ../../internals/classof */ 147); var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -21237,7 +21356,7 @@ module.exports = function (it) { /***/ }), -/* 254 */ +/* 259 */ /*!*************************************!*\ !*** ./dev/View/Popup/Languages.js ***! \*************************************/ @@ -21272,9 +21391,7 @@ var _dec, _class; var LanguagesPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["popup"])({ name: 'View/Popup/Languages', templateID: 'PopupsLanguages' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(LanguagesPopupView, _AbstractViewNext); function LanguagesPopupView() { @@ -21344,7 +21461,7 @@ function (_AbstractViewNext) { /***/ }), -/* 255 */ +/* 260 */ /*!**************************!*\ !*** ./dev/bootstrap.js ***! \**************************/ @@ -21353,7 +21470,7 @@ function (_AbstractViewNext) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__); @@ -21362,7 +21479,7 @@ function (_AbstractViewNext) { /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Plugins */ 39); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Model/Email */ 80); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Model/Email */ 82); @@ -21390,15 +21507,21 @@ function (_AbstractViewNext) { rl.Enums = Common_Enums__WEBPACK_IMPORTED_MODULE_4__; window__WEBPACK_IMPORTED_MODULE_1___default.a.rl = rl; + var start = function start() { + window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { + Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].removeClass('no-js rl-booted-trigger').addClass('rl-booted'); + App.bootstart(); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms); + }; + window__WEBPACK_IMPORTED_MODULE_1___default.a.__APP_BOOT = function (fErrorCallback) { Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["domReady"])(function () { window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { - if (window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES && window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]) { + if (window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rainloop-templates-id')) { + start(); + } else if (window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES && window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]) { window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rl-templates').innerHTML = window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]; - window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { - Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].removeClass('no-js rl-booted-trigger').addClass('rl-booted'); - App.bootstart(); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms); + start(); } else { fErrorCallback(); } @@ -21410,7 +21533,7 @@ function (_AbstractViewNext) { }); /***/ }), -/* 256 */ +/* 261 */ /*!**********************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/object/create.js ***! \**********************************************************************/ @@ -21418,10 +21541,10 @@ function (_AbstractViewNext) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ 360); +module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ 366); /***/ }), -/* 257 */ +/* 262 */ /*!***********************************!*\ !*** ./dev/Stores/AbstractApp.js ***! \***********************************/ @@ -21439,9 +21562,7 @@ module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ -var AbstractAppStore = -/*#__PURE__*/ -function () { +var AbstractAppStore = /*#__PURE__*/function () { function AbstractAppStore() { this.allowLanguagesOnSettings = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true); this.allowLanguagesOnLogin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true); @@ -21473,7 +21594,7 @@ function () { /***/ }), -/* 258 */ +/* 263 */ /*!***********************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js ***! \***********************************************************************/ @@ -21481,10 +21602,10 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ 366); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ 372); /***/ }), -/* 259 */ +/* 264 */ /*!*************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reverse.js ***! \*************************************************************************/ @@ -21492,10 +21613,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse */ 370); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse */ 376); /***/ }), -/* 260 */ +/* 265 */ /*!************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js ***! \************************************************************************/ @@ -21503,10 +21624,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce */ 374); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce */ 380); /***/ }), -/* 261 */ +/* 266 */ /*!********************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js ***! \********************************************************************/ @@ -21514,10 +21635,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce * /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 375); +module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 381); /***/ }), -/* 262 */ +/* 267 */ /*!**************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js ***! \**************************************************************************/ @@ -21525,10 +21646,10 @@ module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 37 /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each */ 378); +module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each */ 384); /***/ }), -/* 263 */ +/* 268 */ /*!************************************!*\ !*** ./dev/Remote/AbstractAjax.js ***! \************************************/ @@ -21563,9 +21684,7 @@ module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each -var AbstractAjaxRemote = -/*#__PURE__*/ -function () { +var AbstractAjaxRemote = /*#__PURE__*/function () { function AbstractAjaxRemote() { this.oRequests = {}; } @@ -21796,7 +21915,7 @@ function () { /***/ }), -/* 264 */ +/* 269 */ /*!****************************************!*\ !*** ./dev/Screen/AbstractSettings.js ***! \****************************************/ @@ -21819,7 +21938,7 @@ function () { /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/AbstractScreen */ 137); +/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/AbstractScreen */ 138); @@ -21831,9 +21950,7 @@ function () { -var AbstractSettingsScreen = -/*#__PURE__*/ -function (_AbstractScreen) { +var AbstractSettingsScreen = /*#__PURE__*/function (_AbstractScreen) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractSettingsScreen, _AbstractScreen); /** @@ -22009,7 +22126,7 @@ function (_AbstractScreen) { /***/ }), -/* 265 */ +/* 270 */ /*!*****************************!*\ !*** ./dev/App/Abstract.js ***! \*****************************/ @@ -22032,7 +22149,7 @@ function (_AbstractScreen) { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! key */ 21); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ssm */ 139); +/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ssm */ 140); /* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(ssm__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2); @@ -22041,11 +22158,11 @@ function (_AbstractScreen) { /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Events */ 24); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Language */ 70); -/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Theme */ 114); +/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Language */ 71); +/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Theme */ 115); /* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Stores/Social */ 29); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/AbstractBoot */ 266); +/* harmony import */ var Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/AbstractBoot */ 271); @@ -22067,9 +22184,7 @@ function (_AbstractScreen) { -var AbstractApp = -/*#__PURE__*/ -function (_AbstractBoot) { +var AbstractApp = /*#__PURE__*/function (_AbstractBoot) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractApp, _AbstractBoot); /** @@ -22288,22 +22403,22 @@ function (_AbstractBoot) { // log('Ps' + 'ss, hac' + 'kers! The' + 're\'s not' + 'hing inte' + 'resting :' + ')'); Common_Events__WEBPACK_IMPORTED_MODULE_13__[/* pub */ "a"]('rl.bootstart'); var mobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('mobile'); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('SaveTrigger', __webpack_require__(/*! Component/SaveTrigger */ 381).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Input', __webpack_require__(/*! Component/Input */ 382).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Select', __webpack_require__(/*! Component/Select */ 383).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Radio', __webpack_require__(/*! Component/Radio */ 384).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('TextArea', __webpack_require__(/*! Component/TextArea */ 385).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Date', __webpack_require__(/*! Component/Date */ 386).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('x-script', __webpack_require__(/*! Component/Script */ 387).default); // ko.components.register('svg-icon', require('Component/SvgIcon').default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('SaveTrigger', __webpack_require__(/*! Component/SaveTrigger */ 387).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Input', __webpack_require__(/*! Component/Input */ 388).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Select', __webpack_require__(/*! Component/Select */ 389).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Radio', __webpack_require__(/*! Component/Radio */ 390).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('TextArea', __webpack_require__(/*! Component/TextArea */ 391).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Date', __webpack_require__(/*! Component/Date */ 392).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('x-script', __webpack_require__(/*! Component/Script */ 393).default); // ko.components.register('svg-icon', require('Component/SvgIcon').default); if (Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('materialDesign') && Common_Globals__WEBPACK_IMPORTED_MODULE_8__["bAnimationSupported"]) { - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/MaterialDesign/Checkbox */ 388).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 206).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/MaterialDesign/Checkbox */ 394).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 209).default); } else { // ko.components.register('Checkbox', require('Component/Classic/Checkbox').default); // ko.components.register('CheckboxSimple', require('Component/Classic/Checkbox').default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/Checkbox */ 206).default); - ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 206).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/Checkbox */ 209).default); + ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 209).default); } Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["initOnStartOrLangChange"])(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["initNotificationLanguage"]); @@ -22386,7 +22501,7 @@ function (_AbstractBoot) { /***/ }), -/* 266 */ +/* 271 */ /*!***********************************!*\ !*** ./dev/Knoin/AbstractBoot.js ***! \***********************************/ @@ -22396,9 +22511,7 @@ function (_AbstractBoot) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractBoot; }); -var AbstractBoot = -/*#__PURE__*/ -function () { +var AbstractBoot = /*#__PURE__*/function () { function AbstractBoot() {} var _proto = AbstractBoot.prototype; @@ -22411,7 +22524,7 @@ function () { }(); /***/ }), -/* 267 */ +/* 272 */ /*!****************************************!*\ !*** ./dev/Component/AbstractRadio.js ***! \****************************************/ @@ -22422,17 +22535,17 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractRadio; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.iterator */ 186); +/* harmony import */ var core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.iterator */ 188); /* harmony import */ var core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator */ 230); +/* harmony import */ var core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator */ 233); /* harmony import */ var core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 113); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); @@ -22454,9 +22567,7 @@ function () { -var AbstractRadio = -/*#__PURE__*/ -function (_AbstractComponent) { +var AbstractRadio = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(AbstractRadio, _AbstractComponent); /** @@ -22503,7 +22614,7 @@ function (_AbstractComponent) { /***/ }), -/* 268 */ +/* 273 */ /*!*****************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js ***! \*****************************************************************************/ @@ -22511,10 +22622,10 @@ function (_AbstractComponent) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/keys */ 523); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/keys */ 529); /***/ }), -/* 269 */ +/* 274 */ /*!****************************************!*\ !*** ./dev/Model/ComposeAttachment.js ***! \****************************************/ @@ -22528,7 +22639,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/keys */ 52 /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Model_Attachment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Attachment */ 177); +/* harmony import */ var Model_Attachment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Attachment */ 179); /* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/AbstractModel */ 64); @@ -22536,9 +22647,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/keys */ 52 -var ComposeAttachmentModel = -/*#__PURE__*/ -function (_AbstractModel) { +var ComposeAttachmentModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ComposeAttachmentModel, _AbstractModel); /** @@ -22664,7 +22773,7 @@ function (_AbstractModel) { /***/ }), -/* 270 */ +/* 275 */ /*!**************************************!*\ !*** ./dev/Model/ContactProperty.js ***! \**************************************/ @@ -22688,9 +22797,7 @@ function (_AbstractModel) { -var ContactPropertyModel = -/*#__PURE__*/ -function (_AbstractModel) { +var ContactPropertyModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ContactPropertyModel, _AbstractModel); /** @@ -22749,8 +22856,8 @@ function (_AbstractModel) { /***/ }), -/* 271 */, -/* 272 */ +/* 276 */, +/* 277 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.filter.js ***! \*********************************************************/ @@ -22759,10 +22866,10 @@ function (_AbstractModel) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 48); -var $filter = __webpack_require__(/*! ../internals/array-iteration */ 347).filter; -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 349); -var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 225); +var $ = __webpack_require__(/*! ../internals/export */ 50); +var $filter = __webpack_require__(/*! ../internals/array-iteration */ 352).filter; +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 355); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 228); var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); // Edge 14- issue @@ -22779,7 +22886,7 @@ $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGT /***/ }), -/* 273 */ +/* 278 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.search.js ***! \**********************************************************/ @@ -22788,11 +22895,11 @@ $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGT "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); -var sameValue = __webpack_require__(/*! ../internals/same-value */ 354); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var sameValue = __webpack_require__(/*! ../internals/same-value */ 360); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); // @@search logic fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) { @@ -22824,7 +22931,7 @@ fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybe /***/ }), -/* 274 */ +/* 279 */ /*!****************************************!*\ !*** ./dev/View/Popup/FolderSystem.js ***! \****************************************/ @@ -22867,9 +22974,7 @@ var _dec, _class; var FolderSystemPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["popup"])({ name: 'View/Popup/FolderSystem', templateID: 'PopupsFolderSystem' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FolderSystemPopupView, _AbstractViewNext); function FolderSystemPopupView() { @@ -22968,7 +23073,7 @@ function (_AbstractViewNext) { /***/ }), -/* 275 */ +/* 280 */ /*!***************************************!*\ !*** ./dev/Promises/AbstractBasic.js ***! \***************************************/ @@ -22980,9 +23085,9 @@ function (_AbstractViewNext) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractBasicPromises; }); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4); @@ -22994,9 +23099,7 @@ function (_AbstractViewNext) { -var AbstractBasicPromises = -/*#__PURE__*/ -function () { +var AbstractBasicPromises = /*#__PURE__*/function () { function AbstractBasicPromises() { Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(this, "oPromisesStack", {}); } @@ -23034,7 +23137,7 @@ function () { }(); /***/ }), -/* 276 */ +/* 281 */ /*!*************************************************!*\ !*** ./dev/View/User/AbstractSystemDropDown.js ***! \*************************************************/ @@ -23083,9 +23186,7 @@ function () { -var AbstractSystemDropDownUserView = -/*#__PURE__*/ -function (_AbstractViewNext) { +var AbstractSystemDropDownUserView = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(AbstractSystemDropDownUserView, _AbstractViewNext); function AbstractSystemDropDownUserView() { @@ -23144,13 +23245,13 @@ function (_AbstractViewNext) { _proto.settingsHelp = function settingsHelp() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Capa"].Help)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/KeyboardShortcutsHelp */ 407)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/KeyboardShortcutsHelp */ 413)); } }; _proto.addAccountClick = function addAccountClick() { if (this.capaAdditionalAccounts()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 379)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 385)); } }; @@ -23171,7 +23272,7 @@ function (_AbstractViewNext) { key__WEBPACK_IMPORTED_MODULE_5___default()('shift+/', [Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].MessageView, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].Settings], function () { if (_this2.viewModelVisibility()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/KeyboardShortcutsHelp */ 407)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/KeyboardShortcutsHelp */ 413)); return false; } @@ -23185,7 +23286,7 @@ function (_AbstractViewNext) { /***/ }), -/* 277 */ +/* 282 */ /*!********************************!*\ !*** ./dev/Common/Selector.js ***! \********************************/ @@ -23229,9 +23330,7 @@ function (_AbstractViewNext) { -var Selector = -/*#__PURE__*/ -function () { +var Selector = /*#__PURE__*/function () { /** * @param {koProperty} koList * @param {koProperty} koSelectedItem @@ -23894,7 +23993,7 @@ function () { /***/ }), -/* 278 */ +/* 283 */ /*!******************************!*\ !*** ./dev/Model/Message.js ***! \******************************/ @@ -23905,17 +24004,17 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MessageModel; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 159); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 162); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 208); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 211); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__); @@ -23925,11 +24024,11 @@ function () { /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! moment */ 97); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! moment */ 98); /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! classnames */ 418); +/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! classnames */ 424); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var lozad__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! lozad */ 419); +/* harmony import */ var lozad__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! lozad */ 425); /* harmony import */ var lozad__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(lozad__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Translator */ 9); @@ -23940,7 +24039,7 @@ function () { /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Stores/User/Pgp */ 41); /* harmony import */ var Helper_Message__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Helper/Message */ 62); -/* harmony import */ var Model_Attachment__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Model/Attachment */ 177); +/* harmony import */ var Model_Attachment__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Model/Attachment */ 179); /* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Knoin/AbstractModel */ 64); @@ -23968,9 +24067,7 @@ function () { -var MessageModel = -/*#__PURE__*/ -function (_AbstractModel) { +var MessageModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(MessageModel, _AbstractModel); function MessageModel() { @@ -24850,7 +24947,7 @@ function (_AbstractModel) { /***/ }), -/* 279 */ +/* 284 */ /*!*************************************************!*\ !*** ./node_modules/js-cookie/src/js.cookie.js ***! \*************************************************/ @@ -25028,9 +25125,9 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! /***/ }), -/* 280 */, -/* 281 */, -/* 282 */ +/* 285 */, +/* 286 */, +/* 287 */ /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-is-strict.js ***! \******************************************************************/ @@ -25052,7 +25149,7 @@ module.exports = function (METHOD_NAME, argument) { /***/ }), -/* 283 */ +/* 288 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/create-html.js ***! \*******************************************************/ @@ -25060,7 +25157,7 @@ module.exports = function (METHOD_NAME, argument) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); var quot = /"/g; @@ -25075,7 +25172,7 @@ module.exports = function (string, tag, attribute, value) { /***/ }), -/* 284 */ +/* 289 */ /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/string-html-forced.js ***! \**************************************************************/ @@ -25096,7 +25193,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 285 */ +/* 290 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/reduce.js ***! \*************************************************************/ @@ -25104,11 +25201,13 @@ module.exports = function (METHOD_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); +var parent = __webpack_require__(/*! ../../es/instance/reduce */ 237); + +module.exports = parent; /***/ }), -/* 286 */ +/* 291 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/reduce.js ***! \**************************************************************/ @@ -25116,14 +25215,14 @@ module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.reduce */ 287); +__webpack_require__(/*! ../../../modules/es.array.reduce */ 292); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').reduce; /***/ }), -/* 287 */ +/* 292 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.reduce.js ***! \**************************************************************/ @@ -25134,12 +25233,21 @@ module.exports = entryVirtual('Array').reduce; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $reduce = __webpack_require__(/*! ../internals/array-reduce */ 290).left; -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var $reduce = __webpack_require__(/*! ../internals/array-reduce */ 295).left; +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); +var CHROME_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 203); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 297); + +var STRICT_METHOD = arrayMethodIsStrict('reduce'); +var USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 }); +// Chrome 80-82 has a critical bug +// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 +var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83; // `Array.prototype.reduce` method -// https://tc39.github.io/ecma262/#sec-array.prototype.reduce -$({ target: 'Array', proto: true, forced: sloppyArrayMethod('reduce') }, { +// https://tc39.es/ecma262/#sec-array.prototype.reduce +$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, { reduce: function reduce(callbackfn /* , initialValue */) { return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); } @@ -25147,7 +25255,7 @@ $({ target: 'Array', proto: true, forced: sloppyArrayMethod('reduce') }, { /***/ }), -/* 288 */ +/* 293 */ /*!******************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-property-is-enumerable.js ***! \******************************************************************************/ @@ -25164,7 +25272,7 @@ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); // `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { var descriptor = getOwnPropertyDescriptor(this, V); return !!descriptor && descriptor.enumerable; @@ -25172,7 +25280,7 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /***/ }), -/* 289 */ +/* 294 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-forced.js ***! \**********************************************************/ @@ -25180,7 +25288,7 @@ exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var fails = __webpack_require__(/*! ../internals/fails */ 55); var replacement = /#|\.prototype\./; @@ -25204,7 +25312,7 @@ module.exports = isForced; /***/ }), -/* 290 */ +/* 295 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-reduce.js ***! \*************************************************************/ @@ -25212,9 +25320,9 @@ module.exports = isForced; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 199); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); // `Array.prototype.{ reduce, reduceRight }` methods implementation @@ -25246,16 +25354,45 @@ var createMethod = function (IS_RIGHT) { module.exports = { // `Array.prototype.reduce` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + // https://tc39.es/ecma262/#sec-array.prototype.reduce left: createMethod(false), // `Array.prototype.reduceRight` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright + // https://tc39.es/ecma262/#sec-array.prototype.reduceright right: createMethod(true) }; /***/ }), -/* 291 */ +/* 296 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/engine-user-agent.js ***! + \******************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 242); + +module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + +/***/ }), +/* 297 */ +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/engine-is-node.js ***! + \***************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ 156); +var global = __webpack_require__(/*! ../internals/global */ 66); + +module.exports = classof(global.process) == 'process'; + + +/***/ }), +/* 298 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/values.js ***! \*************************************************************/ @@ -25263,9 +25400,9 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 219); -var values = __webpack_require__(/*! ../array/virtual/values */ 309); -var classof = __webpack_require__(/*! ../../internals/classof */ 174); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 222); +var values = __webpack_require__(/*! ../array/virtual/values */ 315); +var classof = __webpack_require__(/*! ../../internals/classof */ 147); var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -25282,7 +25419,7 @@ module.exports = function (it) { /***/ }), -/* 292 */ +/* 299 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/internal-state.js ***! \***************************************************************/ @@ -25290,13 +25427,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 293); -var global = __webpack_require__(/*! ../internals/global */ 75); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var objectHas = __webpack_require__(/*! ../internals/has */ 95); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 204); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 205); +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 300); +var global = __webpack_require__(/*! ../internals/global */ 66); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var objectHas = __webpack_require__(/*! ../internals/has */ 78); +var shared = __webpack_require__(/*! ../internals/shared-store */ 204); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 205); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 207); var WeakMap = global.WeakMap; var set, get, has; @@ -25315,11 +25453,12 @@ var getterFor = function (TYPE) { }; if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); + var store = shared.state || (shared.state = new WeakMap()); var wmget = store.get; var wmhas = store.has; var wmset = store.set; set = function (it, metadata) { + metadata.facade = it; wmset.call(store, it, metadata); return metadata; }; @@ -25333,7 +25472,8 @@ if (NATIVE_WEAK_MAP) { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { - hide(it, STATE, metadata); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { @@ -25354,7 +25494,7 @@ module.exports = { /***/ }), -/* 293 */ +/* 300 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/native-weak-map.js ***! \****************************************************************/ @@ -25362,30 +25502,39 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ 294); +var global = __webpack_require__(/*! ../internals/global */ 66); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 301); var WeakMap = global.WeakMap; -module.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap)); +module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); /***/ }), -/* 294 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/function-to-string.js ***! - \*******************************************************************/ +/* 301 */ +/*!***************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/inspect-source.js ***! + \***************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(/*! ../internals/shared */ 202); +var store = __webpack_require__(/*! ../internals/shared-store */ 204); -module.exports = shared('native-function-to-string', Function.toString); +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; +} + +module.exports = store.inspectSource; /***/ }), -/* 295 */ +/* 302 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/internals/set-global.js ***! \***********************************************************/ @@ -25393,12 +25542,12 @@ module.exports = shared('native-function-to-string', Function.toString); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 75); -var hide = __webpack_require__(/*! ../internals/hide */ 83); +var global = __webpack_require__(/*! ../internals/global */ 66); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); module.exports = function (key, value) { try { - hide(global, key, value); + createNonEnumerableProperty(global, key, value); } catch (error) { global[key] = value; } return value; @@ -25406,7 +25555,7 @@ module.exports = function (key, value) { /***/ }), -/* 296 */ +/* 303 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/define-iterator.js ***! \****************************************************************/ @@ -25417,16 +25566,16 @@ module.exports = function (key, value) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 297); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 242); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 305); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 248); -var hide = __webpack_require__(/*! ../internals/hide */ 83); -var redefine = __webpack_require__(/*! ../internals/redefine */ 307); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 203); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); -var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 241); +var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 304); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 247); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 311); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 254); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); +var redefine = __webpack_require__(/*! ../internals/redefine */ 313); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 206); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 246); var IteratorPrototype = IteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; @@ -25468,7 +25617,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I if (setPrototypeOf) { setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { - hide(CurrentIteratorPrototype, ITERATOR, returnThis); + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); } } // Set @@toStringTag to native iterators @@ -25485,7 +25634,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I // define iterator if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { - hide(IterablePrototype, ITERATOR, defaultIterator); + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); } Iterators[NAME] = defaultIterator; @@ -25508,7 +25657,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I /***/ }), -/* 297 */ +/* 304 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/create-iterator-constructor.js ***! \****************************************************************************/ @@ -25518,11 +25667,11 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I "use strict"; -var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 241).IteratorPrototype; -var create = __webpack_require__(/*! ../internals/object-create */ 243); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 248); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 155); +var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 246).IteratorPrototype; +var create = __webpack_require__(/*! ../internals/object-create */ 249); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 155); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 254); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 158); var returnThis = function () { return this; }; @@ -25536,7 +25685,7 @@ module.exports = function (IteratorConstructor, NAME, next) { /***/ }), -/* 298 */ +/* 305 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/correct-prototype-getter.js ***! \*************************************************************************/ @@ -25544,7 +25693,7 @@ module.exports = function (IteratorConstructor, NAME, next) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var fails = __webpack_require__(/*! ../internals/fails */ 55); module.exports = !fails(function () { function F() { /* empty */ } @@ -25554,25 +25703,25 @@ module.exports = !fails(function () { /***/ }), -/* 299 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/native-symbol.js ***! - \**************************************************************/ +/* 306 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/use-symbol-as-uid.js ***! + \******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 248); -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion +module.exports = NATIVE_SYMBOL // eslint-disable-next-line no-undef - return !String(Symbol()); -}); + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; /***/ }), -/* 300 */ +/* 307 */ /*!*************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-define-properties.js ***! \*************************************************************************/ @@ -25580,13 +25729,13 @@ module.exports = !!Object.getOwnPropertySymbols && !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 244); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 137); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 250); // `Object.defineProperties` method -// https://tc39.github.io/ecma262/#sec-object.defineproperties +// https://tc39.es/ecma262/#sec-object.defineproperties module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = objectKeys(Properties); @@ -25599,7 +25748,7 @@ module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperti /***/ }), -/* 301 */ +/* 308 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-keys-internal.js ***! \*********************************************************************/ @@ -25607,10 +25756,10 @@ module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperti /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var has = __webpack_require__(/*! ../internals/has */ 95); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 245).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 205); +var has = __webpack_require__(/*! ../internals/has */ 78); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ 251).indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 207); module.exports = function (object, names) { var O = toIndexedObject(object); @@ -25627,7 +25776,7 @@ module.exports = function (object, names) { /***/ }), -/* 302 */ +/* 309 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/internals/html.js ***! \*****************************************************/ @@ -25635,35 +25784,13 @@ module.exports = function (object, names) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 303); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 242); module.exports = getBuiltIn('document', 'documentElement'); /***/ }), -/* 303 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/get-built-in.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var path = __webpack_require__(/*! ../internals/path */ 96); -var global = __webpack_require__(/*! ../internals/global */ 75); - -var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; -}; - -module.exports = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) - : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; -}; - - -/***/ }), -/* 304 */ +/* 310 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-to-string.js ***! \*****************************************************************/ @@ -25673,23 +25800,18 @@ module.exports = function (namespace, method) { "use strict"; -var classof = __webpack_require__(/*! ../internals/classof */ 174); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 208); +var classof = __webpack_require__(/*! ../internals/classof */ 147); // `Object.prototype.toString` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = String(test) !== '[object z]' ? function toString() { +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; -} : test.toString; +}; /***/ }), -/* 305 */ +/* 311 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/internals/object-set-prototype-of.js ***! \************************************************************************/ @@ -25697,11 +25819,11 @@ module.exports = String(test) !== '[object z]' ? function toString() { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(/*! ../internals/an-object */ 154); -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 306); +var anObject = __webpack_require__(/*! ../internals/an-object */ 157); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 312); // `Object.setPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.setprototypeof +// https://tc39.es/ecma262/#sec-object.setprototypeof // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { @@ -25724,7 +25846,7 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /***/ }), -/* 306 */ +/* 312 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/a-possible-prototype.js ***! \*********************************************************************/ @@ -25732,7 +25854,7 @@ module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); module.exports = function (it) { if (!isObject(it) && it !== null) { @@ -25742,7 +25864,7 @@ module.exports = function (it) { /***/ }), -/* 307 */ +/* 313 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/internals/redefine.js ***! \*********************************************************/ @@ -25750,16 +25872,16 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var hide = __webpack_require__(/*! ../internals/hide */ 83); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 84); module.exports = function (target, key, value, options) { if (options && options.enumerable) target[key] = value; - else hide(target, key, value); + else createNonEnumerableProperty(target, key, value); }; /***/ }), -/* 308 */ +/* 314 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/dom-iterables.js ***! \**************************************************************/ @@ -25805,7 +25927,7 @@ module.exports = { /***/ }), -/* 309 */ +/* 315 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/stable/array/virtual/values.js ***! \******************************************************************/ @@ -25813,11 +25935,13 @@ module.exports = { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../../es/array/virtual/values */ 310); +var parent = __webpack_require__(/*! ../../../es/array/virtual/values */ 316); + +module.exports = parent; /***/ }), -/* 310 */ +/* 316 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/values.js ***! \**************************************************************/ @@ -25825,14 +25949,14 @@ module.exports = __webpack_require__(/*! ../../../es/array/virtual/values */ 310 /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.iterator */ 220); +__webpack_require__(/*! ../../../modules/es.array.iterator */ 223); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').values; /***/ }), -/* 311 */ +/* 317 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/concat.js ***! \*************************************************************/ @@ -25840,11 +25964,13 @@ module.exports = entryVirtual('Array').values; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/concat */ 312); +var parent = __webpack_require__(/*! ../../es/instance/concat */ 318); + +module.exports = parent; /***/ }), -/* 312 */ +/* 318 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/concat.js ***! \*********************************************************/ @@ -25852,7 +25978,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/concat */ 312); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var concat = __webpack_require__(/*! ../array/virtual/concat */ 313); +var concat = __webpack_require__(/*! ../array/virtual/concat */ 319); var ArrayPrototype = Array.prototype; @@ -25863,7 +25989,7 @@ module.exports = function (it) { /***/ }), -/* 313 */ +/* 319 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/concat.js ***! \**************************************************************/ @@ -25871,14 +25997,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.concat */ 314); +__webpack_require__(/*! ../../../modules/es.array.concat */ 320); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').concat; /***/ }), -/* 314 */ +/* 320 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.concat.js ***! \**************************************************************/ @@ -25889,21 +26015,25 @@ module.exports = entryVirtual('Array').concat; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var createProperty = __webpack_require__(/*! ../internals/create-property */ 249); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 250); -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 255); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 256); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 203); var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; -var IS_CONCAT_SPREADABLE_SUPPORT = !fails(function () { +// We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 +var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { var array = []; array[IS_CONCAT_SPREADABLE] = false; return array.concat()[0] !== array; @@ -25920,7 +26050,7 @@ var isConcatSpreadable = function (O) { var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; // `Array.prototype.concat` method -// https://tc39.github.io/ecma262/#sec-array.prototype.concat +// https://tc39.es/ecma262/#sec-array.prototype.concat // with adding support of @@isConcatSpreadable and @@species $({ target: 'Array', proto: true, forced: FORCED }, { concat: function concat(arg) { // eslint-disable-line no-unused-vars @@ -25946,7 +26076,7 @@ $({ target: 'Array', proto: true, forced: FORCED }, { /***/ }), -/* 315 */ +/* 321 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/index-of.js ***! \***************************************************************/ @@ -25954,11 +26084,13 @@ $({ target: 'Array', proto: true, forced: FORCED }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/index-of */ 316); +var parent = __webpack_require__(/*! ../../es/instance/index-of */ 322); + +module.exports = parent; /***/ }), -/* 316 */ +/* 322 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/index-of.js ***! \***********************************************************/ @@ -25966,7 +26098,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/index-of */ 316); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var indexOf = __webpack_require__(/*! ../array/virtual/index-of */ 317); +var indexOf = __webpack_require__(/*! ../array/virtual/index-of */ 323); var ArrayPrototype = Array.prototype; @@ -25977,7 +26109,7 @@ module.exports = function (it) { /***/ }), -/* 317 */ +/* 323 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/index-of.js ***! \****************************************************************/ @@ -25985,14 +26117,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.index-of */ 318); +__webpack_require__(/*! ../../../modules/es.array.index-of */ 324); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').indexOf; /***/ }), -/* 318 */ +/* 324 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.index-of.js ***! \****************************************************************/ @@ -26003,17 +26135,19 @@ module.exports = entryVirtual('Array').indexOf; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $indexOf = __webpack_require__(/*! ../internals/array-includes */ 245).indexOf; -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var $indexOf = __webpack_require__(/*! ../internals/array-includes */ 251).indexOf; +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); var nativeIndexOf = [].indexOf; var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; -var SLOPPY_METHOD = sloppyArrayMethod('indexOf'); +var STRICT_METHOD = arrayMethodIsStrict('indexOf'); +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); // `Array.prototype.indexOf` method -// https://tc39.github.io/ecma262/#sec-array.prototype.indexof -$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { +// https://tc39.es/ecma262/#sec-array.prototype.indexof +$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, { indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { return NEGATIVE_ZERO // convert -0 to +0 @@ -26024,7 +26158,7 @@ $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { /***/ }), -/* 319 */ +/* 325 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/find.js ***! \***********************************************************/ @@ -26032,11 +26166,13 @@ $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/find */ 320); +var parent = __webpack_require__(/*! ../../es/instance/find */ 326); + +module.exports = parent; /***/ }), -/* 320 */ +/* 326 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/find.js ***! \*******************************************************/ @@ -26044,7 +26180,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/find */ 320); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var find = __webpack_require__(/*! ../array/virtual/find */ 321); +var find = __webpack_require__(/*! ../array/virtual/find */ 327); var ArrayPrototype = Array.prototype; @@ -26055,7 +26191,7 @@ module.exports = function (it) { /***/ }), -/* 321 */ +/* 327 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/find.js ***! \************************************************************/ @@ -26063,14 +26199,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.find */ 322); +__webpack_require__(/*! ../../../modules/es.array.find */ 328); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').find; /***/ }), -/* 322 */ +/* 328 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.find.js ***! \************************************************************/ @@ -26081,29 +26217,32 @@ module.exports = entryVirtual('Array').find; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $find = __webpack_require__(/*! ../internals/array-iteration */ 158).find; -var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 239); +var $find = __webpack_require__(/*! ../internals/array-iteration */ 161).find; +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 243); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); var FIND = 'find'; var SKIPS_HOLES = true; +var USES_TO_LENGTH = arrayMethodUsesToLength(FIND); + // Shouldn't skip holes if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); // `Array.prototype.find` method -// https://tc39.github.io/ecma262/#sec-array.prototype.find -$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { +// https://tc39.es/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, { find: function find(callbackfn /* , that = undefined */) { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables addToUnscopables(FIND); /***/ }), -/* 323 */ +/* 329 */ /*!********************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/last-index-of.js ***! \********************************************************************/ @@ -26111,11 +26250,13 @@ addToUnscopables(FIND); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/last-index-of */ 324); +var parent = __webpack_require__(/*! ../../es/instance/last-index-of */ 330); + +module.exports = parent; /***/ }), -/* 324 */ +/* 330 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/last-index-of.js ***! \****************************************************************/ @@ -26123,7 +26264,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/last-index-of */ 324) /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var lastIndexOf = __webpack_require__(/*! ../array/virtual/last-index-of */ 325); +var lastIndexOf = __webpack_require__(/*! ../array/virtual/last-index-of */ 331); var ArrayPrototype = Array.prototype; @@ -26134,7 +26275,7 @@ module.exports = function (it) { /***/ }), -/* 325 */ +/* 331 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/last-index-of.js ***! \*********************************************************************/ @@ -26142,14 +26283,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.last-index-of */ 326); +__webpack_require__(/*! ../../../modules/es.array.last-index-of */ 332); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').lastIndexOf; /***/ }), -/* 326 */ +/* 332 */ /*!*********************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.last-index-of.js ***! \*********************************************************************/ @@ -26158,17 +26299,17 @@ module.exports = entryVirtual('Array').lastIndexOf; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var lastIndexOf = __webpack_require__(/*! ../internals/array-last-index-of */ 327); +var lastIndexOf = __webpack_require__(/*! ../internals/array-last-index-of */ 333); // `Array.prototype.lastIndexOf` method -// https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof $({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, { lastIndexOf: lastIndexOf }); /***/ }), -/* 327 */ +/* 333 */ /*!********************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-last-index-of.js ***! \********************************************************************/ @@ -26178,19 +26319,23 @@ $({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, { "use strict"; -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 202); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); var min = Math.min; var nativeLastIndexOf = [].lastIndexOf; var NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; -var SLOPPY_METHOD = sloppyArrayMethod('lastIndexOf'); +var STRICT_METHOD = arrayMethodIsStrict('lastIndexOf'); +// For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); +var FORCED = NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH; // `Array.prototype.lastIndexOf` method implementation -// https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof -module.exports = (NEGATIVE_ZERO || SLOPPY_METHOD) ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof +module.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { // convert -0 to +0 if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0; var O = toIndexedObject(this); @@ -26204,7 +26349,7 @@ module.exports = (NEGATIVE_ZERO || SLOPPY_METHOD) ? function lastIndexOf(searchE /***/ }), -/* 328 */ +/* 334 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/bind.js ***! \***********************************************************/ @@ -26212,11 +26357,13 @@ module.exports = (NEGATIVE_ZERO || SLOPPY_METHOD) ? function lastIndexOf(searchE /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/bind */ 329); +var parent = __webpack_require__(/*! ../../es/instance/bind */ 335); + +module.exports = parent; /***/ }), -/* 329 */ +/* 335 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/bind.js ***! \*******************************************************/ @@ -26224,7 +26371,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/bind */ 329); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var bind = __webpack_require__(/*! ../function/virtual/bind */ 330); +var bind = __webpack_require__(/*! ../function/virtual/bind */ 336); var FunctionPrototype = Function.prototype; @@ -26235,7 +26382,7 @@ module.exports = function (it) { /***/ }), -/* 330 */ +/* 336 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/es/function/virtual/bind.js ***! \***************************************************************/ @@ -26243,14 +26390,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.function.bind */ 331); +__webpack_require__(/*! ../../../modules/es.function.bind */ 337); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Function').bind; /***/ }), -/* 331 */ +/* 337 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.function.bind.js ***! \***************************************************************/ @@ -26259,17 +26406,17 @@ module.exports = entryVirtual('Function').bind; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var bind = __webpack_require__(/*! ../internals/function-bind */ 332); +var bind = __webpack_require__(/*! ../internals/function-bind */ 338); // `Function.prototype.bind` method -// https://tc39.github.io/ecma262/#sec-function.prototype.bind +// https://tc39.es/ecma262/#sec-function.prototype.bind $({ target: 'Function', proto: true }, { bind: bind }); /***/ }), -/* 332 */ +/* 338 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/internals/function-bind.js ***! \**************************************************************/ @@ -26279,8 +26426,8 @@ $({ target: 'Function', proto: true }, { "use strict"; -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); var slice = [].slice; var factories = {}; @@ -26294,7 +26441,7 @@ var construct = function (C, argsLength, args) { }; // `Function.prototype.bind` method implementation -// https://tc39.github.io/ecma262/#sec-function.prototype.bind +// https://tc39.es/ecma262/#sec-function.prototype.bind module.exports = Function.bind || function bind(that /* , ...args */) { var fn = aFunction(this); var partArgs = slice.call(arguments, 1); @@ -26308,7 +26455,7 @@ module.exports = Function.bind || function bind(that /* , ...args */) { /***/ }), -/* 333 */ +/* 339 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/trim.js ***! \***********************************************************/ @@ -26316,11 +26463,13 @@ module.exports = Function.bind || function bind(that /* , ...args */) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/trim */ 334); +var parent = __webpack_require__(/*! ../../es/instance/trim */ 340); + +module.exports = parent; /***/ }), -/* 334 */ +/* 340 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/trim.js ***! \*******************************************************/ @@ -26328,7 +26477,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/trim */ 334); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var trim = __webpack_require__(/*! ../string/virtual/trim */ 335); +var trim = __webpack_require__(/*! ../string/virtual/trim */ 341); var StringPrototype = String.prototype; @@ -26340,7 +26489,7 @@ module.exports = function (it) { /***/ }), -/* 335 */ +/* 341 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/es/string/virtual/trim.js ***! \*************************************************************/ @@ -26348,14 +26497,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.string.trim */ 336); +__webpack_require__(/*! ../../../modules/es.string.trim */ 342); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('String').trim; /***/ }), -/* 336 */ +/* 342 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.string.trim.js ***! \*************************************************************/ @@ -26366,11 +26515,11 @@ module.exports = entryVirtual('String').trim; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $trim = __webpack_require__(/*! ../internals/string-trim */ 337).trim; -var forcedStringTrimMethod = __webpack_require__(/*! ../internals/forced-string-trim-method */ 338); +var $trim = __webpack_require__(/*! ../internals/string-trim */ 343).trim; +var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 344); // `String.prototype.trim` method -// https://tc39.github.io/ecma262/#sec-string.prototype.trim +// https://tc39.es/ecma262/#sec-string.prototype.trim $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { trim: function trim() { return $trim(this); @@ -26379,7 +26528,7 @@ $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { /***/ }), -/* 337 */ +/* 343 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/string-trim.js ***! \************************************************************/ @@ -26387,8 +26536,8 @@ $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); -var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 251); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 200); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 257); var whitespace = '[' + whitespaces + ']'; var ltrim = RegExp('^' + whitespace + whitespace + '*'); @@ -26406,28 +26555,28 @@ var createMethod = function (TYPE) { module.exports = { // `String.prototype.{ trimLeft, trimStart }` methods - // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + // https://tc39.es/ecma262/#sec-string.prototype.trimstart start: createMethod(1), // `String.prototype.{ trimRight, trimEnd }` methods - // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + // https://tc39.es/ecma262/#sec-string.prototype.trimend end: createMethod(2), // `String.prototype.trim` method - // https://tc39.github.io/ecma262/#sec-string.prototype.trim + // https://tc39.es/ecma262/#sec-string.prototype.trim trim: createMethod(3) }; /***/ }), -/* 338 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/forced-string-trim-method.js ***! - \**************************************************************************/ +/* 344 */ +/*!*******************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/string-trim-forced.js ***! + \*******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 251); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 257); var non = '\u200B\u0085\u180E'; @@ -26441,36 +26590,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 339 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/es.array.reverse.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 48); -var isArray = __webpack_require__(/*! ../internals/is-array */ 252); - -var nativeReverse = [].reverse; -var test = [1, 2]; - -// `Array.prototype.reverse` method -// https://tc39.github.io/ecma262/#sec-array.prototype.reverse -// fix for Safari 12.0 bug -// https://bugs.webkit.org/show_bug.cgi?id=188794 -$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { - reverse: function reverse() { - // eslint-disable-next-line no-self-assign - if (isArray(this)) this.length = this.length; - return nativeReverse.call(this); - } -}); - - -/***/ }), -/* 340 */ +/* 345 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/map.js ***! \**********************************************************/ @@ -26478,11 +26598,13 @@ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse() /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/map */ 341); +var parent = __webpack_require__(/*! ../../es/instance/map */ 346); + +module.exports = parent; /***/ }), -/* 341 */ +/* 346 */ /*!******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/map.js ***! \******************************************************/ @@ -26490,7 +26612,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/map */ 341); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var map = __webpack_require__(/*! ../array/virtual/map */ 342); +var map = __webpack_require__(/*! ../array/virtual/map */ 347); var ArrayPrototype = Array.prototype; @@ -26501,7 +26623,7 @@ module.exports = function (it) { /***/ }), -/* 342 */ +/* 347 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/map.js ***! \***********************************************************/ @@ -26509,14 +26631,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.map */ 343); +__webpack_require__(/*! ../../../modules/es.array.map */ 348); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').map; /***/ }), -/* 343 */ +/* 348 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.map.js ***! \***********************************************************/ @@ -26527,13 +26649,18 @@ module.exports = entryVirtual('Array').map; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $map = __webpack_require__(/*! ../internals/array-iteration */ 158).map; -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); +var $map = __webpack_require__(/*! ../internals/array-iteration */ 161).map; +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); +// FF49- issue +var USES_TO_LENGTH = arrayMethodUsesToLength('map'); // `Array.prototype.map` method -// https://tc39.github.io/ecma262/#sec-array.prototype.map +// https://tc39.es/ecma262/#sec-array.prototype.map // with adding support of @@species -$({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') }, { +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { map: function map(callbackfn /* , thisArg */) { return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } @@ -26541,7 +26668,7 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') } /***/ }), -/* 344 */ +/* 349 */ /*!**********************************************************************!*\ !*** ./node_modules/core-js-pure/features/object/define-property.js ***! \**********************************************************************/ @@ -26549,11 +26676,13 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') } /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/define-property */ 345); +var parent = __webpack_require__(/*! ../../es/object/define-property */ 350); + +module.exports = parent; /***/ }), -/* 345 */ +/* 350 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/object/define-property.js ***! \****************************************************************/ @@ -26561,8 +26690,8 @@ module.exports = __webpack_require__(/*! ../../es/object/define-property */ 345) /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.define-property */ 346); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.define-property */ 351); +var path = __webpack_require__(/*! ../../internals/path */ 97); var Object = path.Object; @@ -26574,7 +26703,7 @@ if (Object.defineProperty.sham) defineProperty.sham = true; /***/ }), -/* 346 */ +/* 351 */ /*!************************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.define-property.js ***! \************************************************************************/ @@ -26583,18 +26712,18 @@ if (Object.defineProperty.sham) defineProperty.sham = true; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ 136); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ 137); // `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty +// https://tc39.es/ecma262/#sec-object.defineproperty $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { defineProperty: objectDefinePropertyModile.f }); /***/ }), -/* 347 */ +/* 352 */ /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/array-iteration.js ***! \***********************************************************/ @@ -26602,11 +26731,11 @@ $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 103); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); -var toObject = __webpack_require__(/*! ../internals/to-object */ 119); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 348); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 353); var push = [].push; @@ -26670,7 +26799,7 @@ module.exports = { /***/ }), -/* 348 */ +/* 353 */ /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/array-species-create.js ***! \****************************************************************/ @@ -26679,7 +26808,7 @@ module.exports = { /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var isArray = __webpack_require__(/*! ../internals/is-array */ 252); +var isArray = __webpack_require__(/*! ../internals/is-array */ 354); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var SPECIES = wellKnownSymbol('species'); @@ -26701,7 +26830,25 @@ module.exports = function (originalArray, length) { /***/ }), -/* 349 */ +/* 354 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/is-array.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); + +// `IsArray` abstract operation +// https://tc39.github.io/ecma262/#sec-isarray +module.exports = Array.isArray || function isArray(arg) { + return classof(arg) == 'Array'; +}; + + +/***/ }), +/* 355 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***! \****************************************************************************/ @@ -26711,7 +26858,7 @@ module.exports = function (originalArray, length) { var fails = __webpack_require__(/*! ../internals/fails */ 36); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 153); var SPECIES = wellKnownSymbol('species'); @@ -26731,7 +26878,7 @@ module.exports = function (METHOD_NAME) { /***/ }), -/* 350 */ +/* 356 */ /*!********************************************************************!*\ !*** ./node_modules/core-js-pure/stable/array/virtual/for-each.js ***! \********************************************************************/ @@ -26739,11 +26886,13 @@ module.exports = function (METHOD_NAME) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 351); +var parent = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 357); + +module.exports = parent; /***/ }), -/* 351 */ +/* 357 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/for-each.js ***! \****************************************************************/ @@ -26751,14 +26900,14 @@ module.exports = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 3 /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.for-each */ 352); +__webpack_require__(/*! ../../../modules/es.array.for-each */ 358); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').forEach; /***/ }), -/* 352 */ +/* 358 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.for-each.js ***! \****************************************************************/ @@ -26769,17 +26918,17 @@ module.exports = entryVirtual('Array').forEach; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var forEach = __webpack_require__(/*! ../internals/array-for-each */ 353); +var forEach = __webpack_require__(/*! ../internals/array-for-each */ 359); // `Array.prototype.forEach` method -// https://tc39.github.io/ecma262/#sec-array.prototype.foreach +// https://tc39.es/ecma262/#sec-array.prototype.foreach $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { forEach: forEach }); /***/ }), -/* 353 */ +/* 359 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/internals/array-for-each.js ***! \***************************************************************/ @@ -26789,18 +26938,22 @@ $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { "use strict"; -var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 158).forEach; -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 161).forEach; +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var STRICT_METHOD = arrayMethodIsStrict('forEach'); +var USES_TO_LENGTH = arrayMethodUsesToLength('forEach'); // `Array.prototype.forEach` method implementation -// https://tc39.github.io/ecma262/#sec-array.prototype.foreach -module.exports = sloppyArrayMethod('forEach') ? function forEach(callbackfn /* , thisArg */) { +// https://tc39.es/ecma262/#sec-array.prototype.foreach +module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) { return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } : [].forEach; /***/ }), -/* 354 */ +/* 360 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/same-value.js ***! \******************************************************/ @@ -26817,7 +26970,7 @@ module.exports = Object.is || function is(x, y) { /***/ }), -/* 355 */ +/* 361 */ /*!**************************************!*\ !*** ./dev/Html/PreviewMessage.html ***! \**************************************/ @@ -26830,7 +26983,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("\n\n\t\n\t\n\t\n\t\n\t{{title}}\n\t\n\n\n\t
\n\t\t
{{subject}}
\n\t
\n\t
\n\t\t
{{date}}
\n\t\t
{{fromCreds}}
\n\t\t
{{toLabel}}: {{toCreds}}
\n\t\t
{{ccLabel}}: {{ccCreds}}
\n\t
\n\t
{{html}}
\n\n"); /***/ }), -/* 356 */ +/* 362 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/filter.js ***! \*************************************************************/ @@ -26838,11 +26991,13 @@ __webpack_require__.r(__webpack_exports__); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/filter */ 357); +var parent = __webpack_require__(/*! ../../es/instance/filter */ 363); + +module.exports = parent; /***/ }), -/* 357 */ +/* 363 */ /*!*********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/filter.js ***! \*********************************************************/ @@ -26850,7 +27005,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/filter */ 357); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var filter = __webpack_require__(/*! ../array/virtual/filter */ 358); +var filter = __webpack_require__(/*! ../array/virtual/filter */ 364); var ArrayPrototype = Array.prototype; @@ -26861,7 +27016,7 @@ module.exports = function (it) { /***/ }), -/* 358 */ +/* 364 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/filter.js ***! \**************************************************************/ @@ -26869,14 +27024,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.filter */ 359); +__webpack_require__(/*! ../../../modules/es.array.filter */ 365); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').filter; /***/ }), -/* 359 */ +/* 365 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.filter.js ***! \**************************************************************/ @@ -26887,13 +27042,18 @@ module.exports = entryVirtual('Array').filter; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var $filter = __webpack_require__(/*! ../internals/array-iteration */ 158).filter; -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); +var $filter = __webpack_require__(/*! ../internals/array-iteration */ 161).filter; +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); +// Edge 14- issue +var USES_TO_LENGTH = arrayMethodUsesToLength('filter'); // `Array.prototype.filter` method -// https://tc39.github.io/ecma262/#sec-array.prototype.filter +// https://tc39.es/ecma262/#sec-array.prototype.filter // with adding support of @@species -$({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter') }, { +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { filter: function filter(callbackfn /* , thisArg */) { return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } @@ -26901,7 +27061,7 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter' /***/ }), -/* 360 */ +/* 366 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/features/object/create.js ***! \*************************************************************/ @@ -26909,11 +27069,13 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter' /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/create */ 361); +var parent = __webpack_require__(/*! ../../es/object/create */ 367); + +module.exports = parent; /***/ }), -/* 361 */ +/* 367 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/object/create.js ***! \*******************************************************/ @@ -26921,8 +27083,8 @@ module.exports = __webpack_require__(/*! ../../es/object/create */ 361); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.create */ 362); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.create */ 368); +var path = __webpack_require__(/*! ../../internals/path */ 97); var Object = path.Object; @@ -26932,7 +27094,7 @@ module.exports = function create(P, D) { /***/ }), -/* 362 */ +/* 368 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.create.js ***! \***************************************************************/ @@ -26941,18 +27103,18 @@ module.exports = function create(P, D) { /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); -var create = __webpack_require__(/*! ../internals/object-create */ 243); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); +var create = __webpack_require__(/*! ../internals/object-create */ 249); // `Object.create` method -// https://tc39.github.io/ecma262/#sec-object.create +// https://tc39.es/ecma262/#sec-object.create $({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { create: create }); /***/ }), -/* 363 */ +/* 369 */ /*!********************************************************************************!*\ !*** ./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js ***! \********************************************************************************/ @@ -26960,11 +27122,13 @@ $({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ 364); +var parent = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ 370); + +module.exports = parent; /***/ }), -/* 364 */ +/* 370 */ /*!****************************************************************************!*\ !*** ./node_modules/core-js-pure/es/object/get-own-property-descriptor.js ***! \****************************************************************************/ @@ -26972,8 +27136,8 @@ module.exports = __webpack_require__(/*! ../../es/object/get-own-property-descri /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 365); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 371); +var path = __webpack_require__(/*! ../../internals/path */ 97); var Object = path.Object; @@ -26985,7 +27149,7 @@ if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true; /***/ }), -/* 365 */ +/* 371 */ /*!************************************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js ***! \************************************************************************************/ @@ -26994,16 +27158,16 @@ if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 235).f; -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 238).f; +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 76); var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); }); var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES; // `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); @@ -27012,7 +27176,7 @@ $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { /***/ }), -/* 366 */ +/* 372 */ /*!**************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/slice.js ***! \**************************************************************/ @@ -27020,11 +27184,13 @@ $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/slice */ 367); +var parent = __webpack_require__(/*! ../../es/instance/slice */ 373); + +module.exports = parent; /***/ }), -/* 367 */ +/* 373 */ /*!********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/slice.js ***! \********************************************************/ @@ -27032,7 +27198,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/slice */ 367); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var slice = __webpack_require__(/*! ../array/virtual/slice */ 368); +var slice = __webpack_require__(/*! ../array/virtual/slice */ 374); var ArrayPrototype = Array.prototype; @@ -27043,7 +27209,7 @@ module.exports = function (it) { /***/ }), -/* 368 */ +/* 374 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/slice.js ***! \*************************************************************/ @@ -27051,14 +27217,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.slice */ 369); +__webpack_require__(/*! ../../../modules/es.array.slice */ 375); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').slice; /***/ }), -/* 369 */ +/* 375 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.slice.js ***! \*************************************************************/ @@ -27069,23 +27235,27 @@ module.exports = entryVirtual('Array').slice; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var isObject = __webpack_require__(/*! ../internals/is-object */ 76); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 246); +var isObject = __webpack_require__(/*! ../internals/is-object */ 77); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 252); var toLength = __webpack_require__(/*! ../internals/to-length */ 112); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 94); -var createProperty = __webpack_require__(/*! ../internals/create-property */ 249); -var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 157); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 68); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 96); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 255); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 69); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 160); +var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 85); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); +var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); var SPECIES = wellKnownSymbol('species'); var nativeSlice = [].slice; var max = Math.max; // `Array.prototype.slice` method -// https://tc39.github.io/ecma262/#sec-array.prototype.slice +// https://tc39.es/ecma262/#sec-array.prototype.slice // fallback for not array-like ES3 strings and DOM objects -$({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') }, { +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { slice: function slice(start, end) { var O = toIndexedObject(this); var length = toLength(O.length); @@ -27115,7 +27285,7 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') /***/ }), -/* 370 */ +/* 376 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/reverse.js ***! \****************************************************************/ @@ -27123,11 +27293,13 @@ $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/reverse */ 371); +var parent = __webpack_require__(/*! ../../es/instance/reverse */ 377); + +module.exports = parent; /***/ }), -/* 371 */ +/* 377 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/reverse.js ***! \**********************************************************/ @@ -27135,7 +27307,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/reverse */ 371); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var reverse = __webpack_require__(/*! ../array/virtual/reverse */ 372); +var reverse = __webpack_require__(/*! ../array/virtual/reverse */ 378); var ArrayPrototype = Array.prototype; @@ -27146,7 +27318,7 @@ module.exports = function (it) { /***/ }), -/* 372 */ +/* 378 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/reverse.js ***! \***************************************************************/ @@ -27154,14 +27326,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.reverse */ 373); +__webpack_require__(/*! ../../../modules/es.array.reverse */ 379); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').reverse; /***/ }), -/* 373 */ +/* 379 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.reverse.js ***! \***************************************************************/ @@ -27172,17 +27344,18 @@ module.exports = entryVirtual('Array').reverse; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var isArray = __webpack_require__(/*! ../internals/is-array */ 156); +var isArray = __webpack_require__(/*! ../internals/is-array */ 159); var nativeReverse = [].reverse; var test = [1, 2]; // `Array.prototype.reverse` method -// https://tc39.github.io/ecma262/#sec-array.prototype.reverse +// https://tc39.es/ecma262/#sec-array.prototype.reverse // fix for Safari 12.0 bug // https://bugs.webkit.org/show_bug.cgi?id=188794 $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { reverse: function reverse() { + // eslint-disable-next-line no-self-assign if (isArray(this)) this.length = this.length; return nativeReverse.call(this); } @@ -27190,7 +27363,7 @@ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse() /***/ }), -/* 374 */ +/* 380 */ /*!***************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/reduce.js ***! \***************************************************************/ @@ -27198,11 +27371,13 @@ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse() /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); +var parent = __webpack_require__(/*! ../../es/instance/reduce */ 237); + +module.exports = parent; /***/ }), -/* 375 */ +/* 381 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/features/object/keys.js ***! \***********************************************************/ @@ -27210,11 +27385,13 @@ module.exports = __webpack_require__(/*! ../../es/instance/reduce */ 234); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/object/keys */ 376); +var parent = __webpack_require__(/*! ../../es/object/keys */ 382); + +module.exports = parent; /***/ }), -/* 376 */ +/* 382 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/es/object/keys.js ***! \*****************************************************/ @@ -27222,14 +27399,14 @@ module.exports = __webpack_require__(/*! ../../es/object/keys */ 376); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/es.object.keys */ 377); -var path = __webpack_require__(/*! ../../internals/path */ 96); +__webpack_require__(/*! ../../modules/es.object.keys */ 383); +var path = __webpack_require__(/*! ../../internals/path */ 97); module.exports = path.Object.keys; /***/ }), -/* 377 */ +/* 383 */ /*!*************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.object.keys.js ***! \*************************************************************/ @@ -27238,14 +27415,14 @@ module.exports = path.Object.keys; /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ 43); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 244); -var fails = __webpack_require__(/*! ../internals/fails */ 57); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 250); +var fails = __webpack_require__(/*! ../internals/fails */ 55); var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); // `Object.keys` method -// https://tc39.github.io/ecma262/#sec-object.keys +// https://tc39.es/ecma262/#sec-object.keys $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { keys: function keys(it) { return nativeKeys(toObject(it)); @@ -27254,7 +27431,7 @@ $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { /***/ }), -/* 378 */ +/* 384 */ /*!*****************************************************************!*\ !*** ./node_modules/core-js-pure/features/instance/for-each.js ***! \*****************************************************************/ @@ -27262,11 +27439,13 @@ $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../stable/instance/for-each */ 253); +var parent = __webpack_require__(/*! ../../stable/instance/for-each */ 258); + +module.exports = parent; /***/ }), -/* 379 */ +/* 385 */ /*!***********************************!*\ !*** ./dev/View/Popup/Account.js ***! \***********************************/ @@ -27309,9 +27488,7 @@ var AccountPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__[" templateID: 'PopupsAccount' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["command"])(function (self) { return !self.submitRequest(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AccountPopupView, _AbstractViewNext); function AccountPopupView() { @@ -27405,7 +27582,7 @@ function (_AbstractViewNext) { /***/ }), -/* 380 */ +/* 386 */ /*!************************************!*\ !*** ./dev/View/Popup/Identity.js ***! \************************************/ @@ -27453,9 +27630,7 @@ var IdentityPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ templateID: 'PopupsIdentity' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["command"])(function (self) { return !self.submitRequest(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(IdentityPopupView, _AbstractViewNext); function IdentityPopupView() { @@ -27601,7 +27776,7 @@ function (_AbstractViewNext) { /***/ }), -/* 381 */ +/* 387 */ /*!**************************************!*\ !*** ./dev/Component/SaveTrigger.js ***! \**************************************/ @@ -27625,9 +27800,7 @@ __webpack_require__.r(__webpack_exports__); -var SaveTriggerComponent = -/*#__PURE__*/ -function (_AbstractComponent) { +var SaveTriggerComponent = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(SaveTriggerComponent, _AbstractComponent); /** @@ -27694,7 +27867,7 @@ function (_AbstractComponent) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* componentExportHelper */ "b"])(SaveTriggerComponent, 'SaveTriggerComponent')); /***/ }), -/* 382 */ +/* 388 */ /*!********************************!*\ !*** ./dev/Component/Input.js ***! \********************************/ @@ -27706,14 +27879,12 @@ function (_AbstractComponent) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 86); -var InputComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var InputComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(InputComponent, _AbstractInput); function InputComponent() { @@ -27726,7 +27897,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(InputComponent, 'InputComponent')); /***/ }), -/* 383 */ +/* 389 */ /*!*********************************!*\ !*** ./dev/Component/Select.js ***! \*********************************/ @@ -27740,16 +27911,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/AbstractInput */ 86); -var SelectComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var SelectComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SelectComponent, _AbstractInput); /** @@ -27778,7 +27947,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_3__[/* componentExportHelper */ "b"])(SelectComponent, 'SelectComponent')); /***/ }), -/* 384 */ +/* 390 */ /*!********************************!*\ !*** ./dev/Component/Radio.js ***! \********************************/ @@ -27790,14 +27959,12 @@ function (_AbstractInput) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractRadio */ 267); +/* harmony import */ var Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractRadio */ 272); -var RadioComponent = -/*#__PURE__*/ -function (_AbstractRadio) { +var RadioComponent = /*#__PURE__*/function (_AbstractRadio) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RadioComponent, _AbstractRadio); function RadioComponent() { @@ -27810,7 +27977,7 @@ function (_AbstractRadio) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(RadioComponent, 'RadioComponent')); /***/ }), -/* 385 */ +/* 391 */ /*!***********************************!*\ !*** ./dev/Component/TextArea.js ***! \***********************************/ @@ -27823,16 +27990,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/AbstractInput */ 86); var DEFAULT_ROWS = 5; -var TextAreaComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var TextAreaComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TextAreaComponent, _AbstractInput); /** @@ -27853,7 +28018,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_2__[/* componentExportHelper */ "b"])(TextAreaComponent, 'TextAreaComponent')); /***/ }), -/* 386 */ +/* 392 */ /*!*******************************!*\ !*** ./dev/Component/Date.js ***! \*******************************/ @@ -27865,14 +28030,12 @@ function (_AbstractInput) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 84); +/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 86); -var DateComponent = -/*#__PURE__*/ -function (_AbstractInput) { +var DateComponent = /*#__PURE__*/function (_AbstractInput) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(DateComponent, _AbstractInput); function DateComponent() { @@ -27885,7 +28048,7 @@ function (_AbstractInput) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(DateComponent, 'DateComponent')); /***/ }), -/* 387 */ +/* 393 */ /*!*********************************!*\ !*** ./dev/Component/Script.js ***! \*********************************/ @@ -27897,7 +28060,7 @@ function (_AbstractInput) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 8); @@ -27909,9 +28072,7 @@ __webpack_require__.r(__webpack_exports__); -var ScriptComponent = -/*#__PURE__*/ -function (_AbstractComponent) { +var ScriptComponent = /*#__PURE__*/function (_AbstractComponent) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(ScriptComponent, _AbstractComponent); /** @@ -27943,7 +28104,7 @@ function (_AbstractComponent) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* componentExportHelper */ "b"])(ScriptComponent, 'ScriptComponent')); /***/ }), -/* 388 */ +/* 394 */ /*!**************************************************!*\ !*** ./dev/Component/MaterialDesign/Checkbox.js ***! \**************************************************/ @@ -27961,7 +28122,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Component/Abstract */ 35); -/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/AbstractCheckbox */ 162); +/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/AbstractCheckbox */ 165); @@ -27970,9 +28131,7 @@ __webpack_require__.r(__webpack_exports__); -var CheckboxMaterialDesignComponent = -/*#__PURE__*/ -function (_AbstractCheckbox) { +var CheckboxMaterialDesignComponent = /*#__PURE__*/function (_AbstractCheckbox) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(CheckboxMaterialDesignComponent, _AbstractCheckbox); /** @@ -28026,7 +28185,7 @@ function (_AbstractCheckbox) { /* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* componentExportHelper */ "b"])(CheckboxMaterialDesignComponent, 'CheckboxMaterialDesignComponent')); /***/ }), -/* 389 */ +/* 395 */ /*!*************************!*\ !*** ./dev/App/User.js ***! \*************************/ @@ -28042,7 +28201,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__); @@ -28058,7 +28217,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! progressJs */ 98); +/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! progressJs */ 99); /* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(progressJs__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0); @@ -28073,30 +28232,30 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Stores/Social */ 29); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/App */ 31); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/Settings */ 38); -/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Notification */ 115); +/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Notification */ 116); /* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Stores/User/Account */ 46); -/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Contact */ 100); -/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Stores/User/Identity */ 99); -/* harmony import */ var Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Stores/User/Template */ 176); +/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Contact */ 101); +/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Stores/User/Identity */ 100); +/* harmony import */ var Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Stores/User/Template */ 178); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Stores/User/Pgp */ 41); /* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Stores/User/Message */ 13); -/* harmony import */ var Stores_User_Quota__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Stores/User/Quota */ 222); +/* harmony import */ var Stores_User_Quota__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Stores/User/Quota */ 225); /* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Storage/Client */ 58); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Storage/RainLoop */ 146); +/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Storage/RainLoop */ 148); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! Remote/User/Ajax */ 16); -/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! Promises/User/Ajax */ 87); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! Model/Email */ 80); -/* harmony import */ var Model_Account__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Model/Account */ 424); -/* harmony import */ var Model_Identity__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Model/Identity */ 425); -/* harmony import */ var Model_Template__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Model/Template */ 426); -/* harmony import */ var Model_OpenPgpKey__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Model/OpenPgpKey */ 427); -/* harmony import */ var Screen_User_Login__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Screen/User/Login */ 428); -/* harmony import */ var Screen_User_MailBox__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Screen/User/MailBox */ 430); -/* harmony import */ var Screen_User_Settings__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! Screen/User/Settings */ 436); +/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! Promises/User/Ajax */ 89); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! Model/Email */ 82); +/* harmony import */ var Model_Account__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Model/Account */ 430); +/* harmony import */ var Model_Identity__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Model/Identity */ 431); +/* harmony import */ var Model_Template__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Model/Template */ 432); +/* harmony import */ var Model_OpenPgpKey__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Model/OpenPgpKey */ 433); +/* harmony import */ var Screen_User_Login__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Screen/User/Login */ 434); +/* harmony import */ var Screen_User_MailBox__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Screen/User/MailBox */ 436); +/* harmony import */ var Screen_User_Settings__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! Screen/User/Settings */ 442); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var App_Abstract__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! App/Abstract */ 265); +/* harmony import */ var App_Abstract__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! App/Abstract */ 270); @@ -28149,9 +28308,7 @@ __webpack_require__.r(__webpack_exports__); -var AppUser = -/*#__PURE__*/ -function (_AbstractApp) { +var AppUser = /*#__PURE__*/function (_AbstractApp) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"])(AppUser, _AbstractApp); function AppUser() { @@ -28434,9 +28591,9 @@ function (_AbstractApp) { } if (!oMoveFolder && bUseFolder) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 274), [nSetSystemFoldersNotification]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 279), [nSetSystemFoldersNotification]); } else if (!bUseFolder || Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Trash === iDeleteType && (sFromFolderFullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].spamFolder() || sFromFolderFullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].trashFolder())) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 221), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 224), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () { _this3.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove); Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove); @@ -29148,11 +29305,11 @@ function (_AbstractApp) { }; _proto.bootstartTwoFactorScreen = function bootstartTwoFactorScreen() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorConfiguration */ 411), [true]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorConfiguration */ 417), [true]); }; _proto.bootstartWelcomePopup = function bootstartWelcomePopup(url) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/WelcomePage */ 533), [url]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/WelcomePage */ 539), [url]); }; _proto.bootstartLoginScreen = function bootstartLoginScreen() { @@ -29340,7 +29497,7 @@ function (_AbstractApp) { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('MailToEmail')) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["mailToHelper"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('MailToEmail'), __webpack_require__(/*! View/Popup/Compose */ 122)); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["mailToHelper"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('MailToEmail'), __webpack_require__(/*! View/Popup/Compose */ 123)); } }, 500); } @@ -29397,9 +29554,9 @@ function (_AbstractApp) { /* harmony default export */ __webpack_exports__["default"] = (new AppUser()); /***/ }), -/* 390 */, -/* 391 */, -/* 392 */ +/* 396 */, +/* 397 */, +/* 398 */ /*!******************************!*\ !*** ./dev/Common/Base64.js ***! \******************************/ @@ -29413,7 +29570,7 @@ function (_AbstractApp) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return urlsafe_encode; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2__); @@ -29557,7 +29714,7 @@ var urlsafe_encode = Base64.urlsafe_encode; /* eslint-enable */ /***/ }), -/* 393 */ +/* 399 */ /*!****************************************!*\ !*** ./dev/Promises/User/Populator.js ***! \****************************************/ @@ -29580,8 +29737,8 @@ var urlsafe_encode = Base64.urlsafe_encode; /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/App */ 31); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Remote/User/Ajax */ 16); -/* harmony import */ var Model_Folder__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Model/Folder */ 422); -/* harmony import */ var Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Promises/AbstractBasic */ 275); +/* harmony import */ var Model_Folder__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Model/Folder */ 428); +/* harmony import */ var Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Promises/AbstractBasic */ 280); @@ -29597,9 +29754,7 @@ var urlsafe_encode = Base64.urlsafe_encode; -var PromisesUserPopulator = -/*#__PURE__*/ -function (_AbstractBasicPromise) { +var PromisesUserPopulator = /*#__PURE__*/function (_AbstractBasicPromise) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(PromisesUserPopulator, _AbstractBasicPromise); function PromisesUserPopulator() { @@ -29744,7 +29899,7 @@ function (_AbstractBasicPromise) { /* harmony default export */ __webpack_exports__["a"] = (new PromisesUserPopulator()); /***/ }), -/* 394 */ +/* 400 */ /*!*****************************!*\ !*** ./dev/Model/Filter.js ***! \*****************************/ @@ -29755,13 +29910,13 @@ function (_AbstractBasicPromise) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FilterModel; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); @@ -29778,7 +29933,7 @@ function (_AbstractBasicPromise) { /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Cache */ 14); /* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Account */ 46); -/* harmony import */ var Model_FilterCondition__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Model/FilterCondition */ 395); +/* harmony import */ var Model_FilterCondition__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Model/FilterCondition */ 401); /* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Knoin/AbstractModel */ 64); @@ -29798,9 +29953,7 @@ function (_AbstractBasicPromise) { -var FilterModel = -/*#__PURE__*/ -function (_AbstractModel) { +var FilterModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(FilterModel, _AbstractModel); function FilterModel() { @@ -30065,7 +30218,7 @@ function (_AbstractModel) { /***/ }), -/* 395 */ +/* 401 */ /*!**************************************!*\ !*** ./dev/Model/FilterCondition.js ***! \**************************************/ @@ -30089,9 +30242,7 @@ function (_AbstractModel) { -var FilterConditionModel = -/*#__PURE__*/ -function (_AbstractModel) { +var FilterConditionModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(FilterConditionModel, _AbstractModel); function FilterConditionModel() { @@ -30187,7 +30338,7 @@ function (_AbstractModel) { /***/ }), -/* 396 */ +/* 402 */ /*!****************************!*\ !*** external "window.qr" ***! \****************************/ @@ -30198,17 +30349,17 @@ function (_AbstractModel) { module.exports = window.qr; /***/ }), -/* 397 */, -/* 398 */, -/* 399 */, -/* 400 */, -/* 401 */, -/* 402 */, /* 403 */, /* 404 */, /* 405 */, /* 406 */, -/* 407 */ +/* 407 */, +/* 408 */, +/* 409 */, +/* 410 */, +/* 411 */, +/* 412 */, +/* 413 */ /*!*************************************************!*\ !*** ./dev/View/Popup/KeyboardShortcutsHelp.js ***! \*************************************************/ @@ -30246,9 +30397,7 @@ var _dec, _class; var KeyboardShortcutsHelpPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["popup"])({ name: 'View/Popup/KeyboardShortcutsHelp', templateID: 'PopupsKeyboardShortcutsHelp' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(KeyboardShortcutsHelpPopupView, _AbstractViewNext); function KeyboardShortcutsHelpPopupView() { @@ -30293,7 +30442,7 @@ function (_AbstractViewNext) { /***/ }), -/* 408 */ +/* 414 */ /*!************************************!*\ !*** ./dev/View/Popup/Contacts.js ***! \************************************/ @@ -30305,11 +30454,11 @@ function (_AbstractViewNext) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContactsPopupView", function() { return ContactsPopupView; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ContactsPopupView; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.search */ 273); +/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.search */ 278); /* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); @@ -30332,22 +30481,22 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! key */ 21); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Jua */ 175); +/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Jua */ 177); /* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Consts */ 25); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Selector__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Selector */ 277); +/* harmony import */ var Common_Selector__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Selector */ 282); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Stores/User/Settings */ 38); -/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/Contact */ 100); +/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/Contact */ 101); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Remote/User/Ajax */ 16); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Model/Email */ 80); -/* harmony import */ var Model_Contact__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Model/Contact */ 433); -/* harmony import */ var Model_ContactProperty__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Model/ContactProperty */ 270); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Model/Email */ 82); +/* harmony import */ var Model_Contact__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Model/Contact */ 439); +/* harmony import */ var Model_ContactProperty__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Model/ContactProperty */ 275); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -30400,9 +30549,7 @@ var ContactsPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__ return !self.viewSaving() && bV && !bReadOnly; }), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["command"])(function (self) { return !self.contacts.syncing() && !self.contacts.importing(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"])(ContactsPopupView, _AbstractViewNext); function ContactsPopupView() { @@ -30627,7 +30774,7 @@ function (_AbstractViewNext) { this.sLastComposeFocusedField = ''; ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122), [Common_Enums__WEBPACK_IMPORTED_MODULE_16__["ComposeType"].Empty, null, toEmails, ccEmails, bccEmails]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123), [Common_Enums__WEBPACK_IMPORTED_MODULE_16__["ComposeType"].Empty, null, toEmails, ccEmails, bccEmails]); }, Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Magics"].Time200ms); } @@ -30996,7 +31143,7 @@ function (_AbstractViewNext) { this.bBackToCompose = false; if (Storage_Settings__WEBPACK_IMPORTED_MODULE_26__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Capa"].Composer)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123)); } } }; @@ -31006,7 +31153,7 @@ function (_AbstractViewNext) { /***/ }), -/* 409 */ +/* 415 */ /*!****************************************!*\ !*** ./dev/View/Popup/FolderCreate.js ***! \****************************************/ @@ -31030,7 +31177,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/Folder */ 11); -/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Promises/User/Ajax */ 87); +/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Promises/User/Ajax */ 89); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -31056,9 +31203,7 @@ var FolderCreateView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__[ templateID: 'PopupsFolderCreate' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(function (self) { return self.simpleFolderNameValidation(self.folderName()); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(FolderCreateView, _AbstractViewNext); function FolderCreateView() { @@ -31128,7 +31273,7 @@ function (_AbstractViewNext) { /***/ }), -/* 410 */ +/* 416 */ /*!**********************************!*\ !*** ./dev/View/Popup/Filter.js ***! \**********************************/ @@ -31140,7 +31285,7 @@ function (_AbstractViewNext) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterPopupView", function() { return FilterPopupView; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FilterPopupView; }); -/* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter */ 272); +/* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter */ 277); /* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); @@ -31160,7 +31305,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Stores_User_Filter__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Filter */ 214); +/* harmony import */ var Stores_User_Filter__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Filter */ 217); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -31188,9 +31333,7 @@ var _dec, _dec2, _class, _class2; var FilterPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["popup"])({ name: 'View/Popup/Filter', templateID: 'PopupsFilter' -}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"])(FilterPopupView, _AbstractViewNext); function FilterPopupView() { @@ -31398,7 +31541,7 @@ function (_AbstractViewNext) { /***/ }), -/* 411 */ +/* 417 */ /*!**************************************************!*\ !*** ./dev/View/Popup/TwoFactorConfiguration.js ***! \**************************************************/ @@ -31412,7 +31555,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TwoFactorConfigurationPopupView; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_2__); @@ -31423,7 +31566,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var qr__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! qr */ 396); +/* harmony import */ var qr__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! qr */ 402); /* harmony import */ var qr__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(qr__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2); @@ -31456,9 +31599,7 @@ var _dec, _class; var TwoFactorConfigurationPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["popup"])({ name: 'View/Popup/TwoFactorConfiguration', templateID: 'PopupsTwoFactorConfiguration' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(TwoFactorConfigurationPopupView, _AbstractViewNext); function TwoFactorConfigurationPopupView() { @@ -31544,7 +31685,7 @@ function (_AbstractViewNext) { }; _proto.testTwoFactor = function testTwoFactor() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorTest */ 529), [this.twoFactorTested]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorTest */ 535), [this.twoFactorTested]); }; _proto.clearTwoFactor = function clearTwoFactor() { @@ -31634,7 +31775,7 @@ function (_AbstractViewNext) { /***/ }), -/* 412 */ +/* 418 */ /*!************************************!*\ !*** ./dev/View/Popup/Template.js ***! \************************************/ @@ -31656,7 +31797,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/HtmlEditor */ 207); +/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/HtmlEditor */ 210); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Remote/User/Ajax */ 16); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -31682,9 +31823,7 @@ var TemplatePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ templateID: 'PopupsTemplate' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["command"])(function (self) { return !self.submitRequest(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(TemplatePopupView, _AbstractViewNext); function TemplatePopupView() { @@ -31829,11 +31968,11 @@ function (_AbstractViewNext) { /***/ }), -/* 413 */, -/* 414 */, -/* 415 */, -/* 416 */, -/* 417 */ +/* 419 */, +/* 420 */, +/* 421 */, +/* 422 */, +/* 423 */ /*!*****************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js ***! \*****************************************************************************/ @@ -31841,10 +31980,10 @@ function (_AbstractViewNext) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/sort */ 518); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/sort */ 524); /***/ }), -/* 418 */ +/* 424 */ /*!******************************************!*\ !*** ./node_modules/classnames/index.js ***! \******************************************/ @@ -31906,7 +32045,7 @@ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! /***/ }), -/* 419 */ +/* 425 */ /*!**********************************************!*\ !*** ./node_modules/lozad/dist/lozad.min.js ***! \**********************************************/ @@ -31927,7 +32066,7 @@ n=-1===n.indexOf("url(")?"url("+n+")":n,1===i.length?t.style.backgroundImage=n:t /***/ }), -/* 420 */ +/* 426 */ /*!**************************************************!*\ !*** ./dev/Common/ClientStorageDriver/Cookie.js ***! \**************************************************/ @@ -31940,7 +32079,7 @@ n=-1===n.indexOf("url(")?"url("+n+")":n,1===i.length?t.style.backgroundImage=n:t /* unused harmony export default */ /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! js-cookie */ 279); +/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! js-cookie */ 284); /* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(js_cookie__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 25); @@ -31949,9 +32088,7 @@ n=-1===n.indexOf("url(")?"url("+n+")":n,1===i.length?t.style.backgroundImage=n:t -var CookieDriver = -/*#__PURE__*/ -function () { +var CookieDriver = /*#__PURE__*/function () { function CookieDriver() {} var _proto = CookieDriver.prototype; @@ -32014,7 +32151,7 @@ function () { /***/ }), -/* 421 */ +/* 427 */ /*!********************************************************!*\ !*** ./dev/Common/ClientStorageDriver/LocalStorage.js ***! \********************************************************/ @@ -32029,7 +32166,7 @@ function () { /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/RainLoop */ 146); +/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/RainLoop */ 148); /* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Consts */ 25); @@ -32037,9 +32174,7 @@ function () { -var LocalStorageDriver = -/*#__PURE__*/ -function () { +var LocalStorageDriver = /*#__PURE__*/function () { function LocalStorageDriver() { Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "s", null); @@ -32112,7 +32247,7 @@ function () { /***/ }), -/* 422 */ +/* 428 */ /*!*****************************!*\ !*** ./dev/Model/Folder.js ***! \*****************************/ @@ -32123,13 +32258,13 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FolderModel; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__); @@ -32158,9 +32293,7 @@ function () { -var FolderModel = -/*#__PURE__*/ -function (_AbstractModel) { +var FolderModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(FolderModel, _AbstractModel); function FolderModel() { @@ -32455,7 +32588,7 @@ function (_AbstractModel) { /***/ }), -/* 423 */ +/* 429 */ /*!**************************************!*\ !*** ./dev/Promises/AbstractAjax.js ***! \**************************************/ @@ -32468,7 +32601,7 @@ function (_AbstractModel) { /* unused harmony export default */ /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); @@ -32484,7 +32617,7 @@ function (_AbstractModel) { /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Plugins */ 39); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Promises/AbstractBasic */ 275); +/* harmony import */ var Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Promises/AbstractBasic */ 280); @@ -32501,9 +32634,7 @@ function (_AbstractModel) { -var AbstractAjaxPromises = -/*#__PURE__*/ -function (_AbstractBasicPromise) { +var AbstractAjaxPromises = /*#__PURE__*/function (_AbstractBasicPromise) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(AbstractAjaxPromises, _AbstractBasicPromise); function AbstractAjaxPromises() { @@ -32681,7 +32812,7 @@ function (_AbstractBasicPromise) { /***/ }), -/* 424 */ +/* 430 */ /*!******************************!*\ !*** ./dev/Model/Account.js ***! \******************************/ @@ -32701,9 +32832,7 @@ function (_AbstractBasicPromise) { -var AccountModel = -/*#__PURE__*/ -function (_AbstractModel) { +var AccountModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AccountModel, _AbstractModel); /** @@ -32747,7 +32876,7 @@ function (_AbstractModel) { /***/ }), -/* 425 */ +/* 431 */ /*!*******************************!*\ !*** ./dev/Model/Identity.js ***! \*******************************/ @@ -32768,9 +32897,7 @@ function (_AbstractModel) { -var IdentityModel = -/*#__PURE__*/ -function (_AbstractModel) { +var IdentityModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(IdentityModel, _AbstractModel); /** @@ -32813,7 +32940,7 @@ function (_AbstractModel) { /***/ }), -/* 426 */ +/* 432 */ /*!*******************************!*\ !*** ./dev/Model/Template.js ***! \*******************************/ @@ -32836,9 +32963,7 @@ function (_AbstractModel) { -var TemplateModel = -/*#__PURE__*/ -function (_AbstractModel) { +var TemplateModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(TemplateModel, _AbstractModel); /** @@ -32884,7 +33009,7 @@ function (_AbstractModel) { /***/ }), -/* 427 */ +/* 433 */ /*!*********************************!*\ !*** ./dev/Model/OpenPgpKey.js ***! \*********************************/ @@ -32897,7 +33022,7 @@ function (_AbstractModel) { /* unused harmony export default */ /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/keys */ 268); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/keys */ 273); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); @@ -32912,9 +33037,7 @@ function (_AbstractModel) { -var OpenPgpKeyModel = -/*#__PURE__*/ -function (_AbstractModel) { +var OpenPgpKeyModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(OpenPgpKeyModel, _AbstractModel); /** @@ -32999,7 +33122,7 @@ function (_AbstractModel) { /***/ }), -/* 428 */ +/* 434 */ /*!**********************************!*\ !*** ./dev/Screen/User/Login.js ***! \**********************************/ @@ -33011,17 +33134,15 @@ function (_AbstractModel) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginUserScreen; }); /* unused harmony export default */ /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); -/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/AbstractScreen */ 137); -/* harmony import */ var View_User_Login__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/Login */ 429); +/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/AbstractScreen */ 138); +/* harmony import */ var View_User_Login__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/Login */ 435); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Helper/Apps/User */ 22); -var LoginUserScreen = -/*#__PURE__*/ -function (_AbstractScreen) { +var LoginUserScreen = /*#__PURE__*/function (_AbstractScreen) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LoginUserScreen, _AbstractScreen); function LoginUserScreen() { @@ -33040,7 +33161,7 @@ function (_AbstractScreen) { /***/ }), -/* 429 */ +/* 435 */ /*!********************************!*\ !*** ./dev/View/User/Login.js ***! \********************************/ @@ -33067,7 +33188,7 @@ function (_AbstractScreen) { /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Plugins */ 39); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Language */ 70); +/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Language */ 71); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Storage/Client */ 58); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Remote/User/Ajax */ 16); @@ -33111,9 +33232,7 @@ var LoginUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["vi return !self.submitRequest() && self.twitterLoginEnabled(); }), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["command"])(function (self) { return !self.submitRequest(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(LoginUserView, _AbstractViewNext); function LoginUserView() { @@ -33473,7 +33592,7 @@ function (_AbstractViewNext) { }; _proto.selectLanguage = function selectLanguage() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 254), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].userLanguage()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 259), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].userLanguage()]); }; _proto.selectLanguageOnTab = function selectLanguageOnTab(bShift) { @@ -33495,7 +33614,7 @@ function (_AbstractViewNext) { /***/ }), -/* 430 */ +/* 436 */ /*!************************************!*\ !*** ./dev/Screen/User/MailBox.js ***! \************************************/ @@ -33508,7 +33627,7 @@ function (_AbstractViewNext) { /* unused harmony export default */ /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3); @@ -33525,13 +33644,13 @@ function (_AbstractViewNext) { /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Settings */ 38); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/User/Message */ 13); -/* harmony import */ var View_User_MailBox_SystemDropDown__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! View/User/MailBox/SystemDropDown */ 431); -/* harmony import */ var View_User_MailBox_FolderList__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! View/User/MailBox/FolderList */ 432); -/* harmony import */ var View_User_MailBox_MessageList__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! View/User/MailBox/MessageList */ 434); -/* harmony import */ var View_User_MailBox_MessageView__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! View/User/MailBox/MessageView */ 435); +/* harmony import */ var View_User_MailBox_SystemDropDown__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! View/User/MailBox/SystemDropDown */ 437); +/* harmony import */ var View_User_MailBox_FolderList__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! View/User/MailBox/FolderList */ 438); +/* harmony import */ var View_User_MailBox_MessageList__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! View/User/MailBox/MessageList */ 440); +/* harmony import */ var View_User_MailBox_MessageView__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! View/User/MailBox/MessageView */ 441); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Knoin/AbstractScreen */ 137); +/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Knoin/AbstractScreen */ 138); @@ -33556,9 +33675,7 @@ function (_AbstractViewNext) { -var MailBoxUserScreen = -/*#__PURE__*/ -function (_AbstractScreen) { +var MailBoxUserScreen = /*#__PURE__*/function (_AbstractScreen) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(MailBoxUserScreen, _AbstractScreen); function MailBoxUserScreen() { @@ -33642,7 +33759,7 @@ function (_AbstractScreen) { }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time50ms); ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () { - return Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_21__["warmUpScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122)); + return Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_21__["warmUpScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123)); }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time500ms); Common_Events__WEBPACK_IMPORTED_MODULE_9__[/* sub */ "b"]('mailbox.inbox-unread-count', function (count) { @@ -33722,7 +33839,7 @@ function (_AbstractScreen) { /***/ }), -/* 431 */ +/* 437 */ /*!*************************************************!*\ !*** ./dev/View/User/MailBox/SystemDropDown.js ***! \*************************************************/ @@ -33735,7 +33852,7 @@ function (_AbstractScreen) { /* unused harmony export default */ /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/AbstractSystemDropDown */ 276); +/* harmony import */ var View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/AbstractSystemDropDown */ 281); var _dec, _class; @@ -33746,9 +33863,7 @@ var SystemDropDownMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED name: 'View/User/MailBox/SystemDropDown', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["ViewType"].Right, templateID: 'SystemDropDown' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractSystemDropDo) { +}), _dec(_class = /*#__PURE__*/function (_AbstractSystemDropDo) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SystemDropDownMailBoxUserView, _AbstractSystemDropDo); function SystemDropDownMailBoxUserView() { @@ -33760,7 +33875,7 @@ function (_AbstractSystemDropDo) { /***/ }), -/* 432 */ +/* 438 */ /*!*********************************************!*\ !*** ./dev/View/User/MailBox/FolderList.js ***! \*********************************************/ @@ -33771,7 +33886,7 @@ function (_AbstractSystemDropDo) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FolderListMailBoxUserView; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 34); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__); @@ -33826,9 +33941,7 @@ var FolderListMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MOD name: 'View/User/MailBox/FolderList', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["ViewType"].Left, templateID: 'MailFolderList' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(FolderListMailBoxUserView, _AbstractViewNext); function FolderListMailBoxUserView() { @@ -34047,12 +34160,12 @@ function (_AbstractViewNext) { _proto.composeClick = function composeClick() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_17__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Capa"].Composer)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123)); } }; _proto.createFolder = function createFolder() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderCreate */ 409)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderCreate */ 415)); }; _proto.configureFolders = function configureFolders() { @@ -34061,7 +34174,7 @@ function (_AbstractViewNext) { _proto.contactsClick = function contactsClick() { if (this.allowContacts) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 408)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 414)); } }; @@ -34070,7 +34183,7 @@ function (_AbstractViewNext) { /***/ }), -/* 433 */ +/* 439 */ /*!******************************!*\ !*** ./dev/Model/Contact.js ***! \******************************/ @@ -34081,7 +34194,7 @@ function (_AbstractViewNext) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactModel; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3); @@ -34100,9 +34213,7 @@ function (_AbstractViewNext) { -var ContactModel = -/*#__PURE__*/ -function (_AbstractModel) { +var ContactModel = /*#__PURE__*/function (_AbstractModel) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(ContactModel, _AbstractModel); function ContactModel() { @@ -34224,7 +34335,7 @@ function (_AbstractModel) { /***/ }), -/* 434 */ +/* 440 */ /*!**********************************************!*\ !*** ./dev/View/User/MailBox/MessageList.js ***! \**********************************************/ @@ -34235,7 +34346,7 @@ function (_AbstractModel) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MessageListMailBoxUserView; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__); @@ -34259,21 +34370,21 @@ function (_AbstractModel) { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! key */ 21); /* harmony import */ var key__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Jua */ 175); +/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Jua */ 177); /* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var ifvisible__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ifvisible */ 223); +/* harmony import */ var ifvisible__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ifvisible */ 226); /* harmony import */ var ifvisible__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(ifvisible__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Consts */ 25); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Links */ 15); -/* harmony import */ var Common_Selector__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Selector */ 277); +/* harmony import */ var Common_Selector__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Selector */ 282); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Common/Events */ 24); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Cache */ 14); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_User_Quota__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Quota */ 222); +/* harmony import */ var Stores_User_Quota__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Quota */ 225); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Stores/User/Settings */ 38); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Folder */ 11); /* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Stores/User/Message */ 13); @@ -34329,9 +34440,7 @@ var MessageListMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MO name: 'View/User/MailBox/MessageList', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["ViewType"].Right, templateID: 'MailMessageList' -}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec9 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec10 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec11 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec9 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec10 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec11 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["command"])(canBeMovedHelper), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(MessageListMailBoxUserView, _AbstractViewNext); function MessageListMailBoxUserView() { @@ -34530,7 +34639,7 @@ function (_AbstractViewNext) { _proto.clearCommand = function clearCommand() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_30__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Capa"].DangerousActions)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderClear */ 527), [Stores_User_Folder__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].currentFolder()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderClear */ 533), [Stores_User_Folder__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].currentFolder()]); } }; @@ -34542,7 +34651,7 @@ function (_AbstractViewNext) { _proto.multyForwardCommand = function multyForwardCommand() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_30__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Capa"].Composer)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122), [Common_Enums__WEBPACK_IMPORTED_MODULE_16__["ComposeType"].ForwardAsAttachment, Stores_User_Message__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].messageListCheckedOrSelected()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123), [Common_Enums__WEBPACK_IMPORTED_MODULE_16__["ComposeType"].ForwardAsAttachment, Stores_User_Message__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].messageListCheckedOrSelected()]); } }; @@ -34605,7 +34714,7 @@ function (_AbstractViewNext) { _proto.composeClick = function composeClick() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_30__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Capa"].Composer)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123)); } }; @@ -35009,7 +35118,7 @@ function (_AbstractViewNext) { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_30__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Capa"].Composer)) { // write/compose (open compose popup) key__WEBPACK_IMPORTED_MODULE_13___default()('w,c', [Common_Enums__WEBPACK_IMPORTED_MODULE_16__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_16__["KeyState"].MessageView], function () { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123)); return false; }); } @@ -35138,7 +35247,7 @@ function (_AbstractViewNext) { _proto.advancedSearchClick = function advancedSearchClick() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_30__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_16__["Capa"].SearchAdv)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/AdvancedSearch */ 528), [this.mainMessageListSearch()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_33__["showScreenPopup"])(__webpack_require__(/*! View/Popup/AdvancedSearch */ 534), [this.mainMessageListSearch()]); } }; @@ -35201,7 +35310,7 @@ function (_AbstractViewNext) { /***/ }), -/* 435 */ +/* 441 */ /*!**********************************************!*\ !*** ./dev/View/User/MailBox/MessageView.js ***! \**********************************************/ @@ -35236,7 +35345,7 @@ function (_AbstractViewNext) { /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Audio */ 81); +/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Audio */ 83); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Events */ 24); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Links */ 15); @@ -35250,7 +35359,7 @@ function (_AbstractViewNext) { /* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Storage/Client */ 58); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Remote/User/Ajax */ 16); -/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Promises/User/Ajax */ 87); +/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Promises/User/Ajax */ 89); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -35303,9 +35412,7 @@ var MessageViewMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MO return !self.messageListAndMessageViewLoading(); }), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(function (self) { return !self.messageListAndMessageViewLoading(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(MessageViewMailBoxUserView, _AbstractViewNext); function MessageViewMailBoxUserView() { @@ -35741,7 +35848,7 @@ function (_AbstractViewNext) { _proto.replyOrforward = function replyOrforward(sType) { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_28__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Capa"].Composer)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122), [sType, Stores_User_Message__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].message()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123), [sType, Stores_User_Message__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].message()]); } }; @@ -35874,7 +35981,7 @@ function (_AbstractViewNext) { dom.on('click', 'a', function (event) { // eslint-disable-line prefer-arrow-callback // setup maito protocol - return !(!!event && Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].EventWhichMouseMiddle !== event.which && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["mailToHelper"])($__WEBPACK_IMPORTED_MODULE_9___default()(this).attr('href'), Storage_Settings__WEBPACK_IMPORTED_MODULE_28__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Capa"].Composer) ? __webpack_require__(/*! View/Popup/Compose */ 122) : null // eslint-disable-line no-invalid-this + return !(!!event && Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].EventWhichMouseMiddle !== event.which && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["mailToHelper"])($__WEBPACK_IMPORTED_MODULE_9___default()(this).attr('href'), Storage_Settings__WEBPACK_IMPORTED_MODULE_28__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Capa"].Composer) ? __webpack_require__(/*! View/Popup/Compose */ 123) : null // eslint-disable-line no-invalid-this )); }).on('click', '.attachmentsPlace .attachmentIconParent', function (event) { if (event && event.stopPropagation) { @@ -36139,13 +36246,13 @@ function (_AbstractViewNext) { _proto.composeClick = function composeClick() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_28__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Capa"].Composer)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123)); } }; _proto.editMessage = function editMessage() { if (Storage_Settings__WEBPACK_IMPORTED_MODULE_28__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Capa"].Composer) && Stores_User_Message__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].message()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 122), [Common_Enums__WEBPACK_IMPORTED_MODULE_13__["ComposeType"].Draft, Stores_User_Message__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].message()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 123), [Common_Enums__WEBPACK_IMPORTED_MODULE_13__["ComposeType"].Draft, Stores_User_Message__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].message()]); } }; @@ -36322,7 +36429,7 @@ function (_AbstractViewNext) { /***/ }), -/* 436 */ +/* 442 */ /*!*************************************!*\ !*** ./dev/Screen/User/Settings.js ***! \*************************************/ @@ -36342,21 +36449,21 @@ function (_AbstractViewNext) { /* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/User/Account */ 46); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Screen/AbstractSettings */ 264); -/* harmony import */ var Settings_User_General__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Settings/User/General */ 437); -/* harmony import */ var Settings_User_Contacts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Settings/User/Contacts */ 438); -/* harmony import */ var Settings_User_Accounts__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Settings/User/Accounts */ 439); -/* harmony import */ var Settings_User_Filters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Settings/User/Filters */ 440); -/* harmony import */ var Settings_User_Security__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Settings/User/Security */ 441); -/* harmony import */ var Settings_User_Social__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Settings/User/Social */ 442); -/* harmony import */ var Settings_User_ChangePassword__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Settings/User/ChangePassword */ 443); -/* harmony import */ var Settings_User_Templates__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Settings/User/Templates */ 444); -/* harmony import */ var Settings_User_Folders__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Settings/User/Folders */ 445); -/* harmony import */ var Settings_User_Themes__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Settings/User/Themes */ 446); -/* harmony import */ var Settings_User_OpenPgp__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Settings/User/OpenPgp */ 447); -/* harmony import */ var View_User_Settings_SystemDropDown__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! View/User/Settings/SystemDropDown */ 448); -/* harmony import */ var View_User_Settings_Menu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! View/User/Settings/Menu */ 449); -/* harmony import */ var View_User_Settings_Pane__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! View/User/Settings/Pane */ 450); +/* harmony import */ var Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Screen/AbstractSettings */ 269); +/* harmony import */ var Settings_User_General__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Settings/User/General */ 443); +/* harmony import */ var Settings_User_Contacts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Settings/User/Contacts */ 444); +/* harmony import */ var Settings_User_Accounts__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Settings/User/Accounts */ 445); +/* harmony import */ var Settings_User_Filters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Settings/User/Filters */ 446); +/* harmony import */ var Settings_User_Security__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Settings/User/Security */ 447); +/* harmony import */ var Settings_User_Social__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Settings/User/Social */ 448); +/* harmony import */ var Settings_User_ChangePassword__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Settings/User/ChangePassword */ 449); +/* harmony import */ var Settings_User_Templates__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Settings/User/Templates */ 450); +/* harmony import */ var Settings_User_Folders__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Settings/User/Folders */ 451); +/* harmony import */ var Settings_User_Themes__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Settings/User/Themes */ 452); +/* harmony import */ var Settings_User_OpenPgp__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Settings/User/OpenPgp */ 453); +/* harmony import */ var View_User_Settings_SystemDropDown__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! View/User/Settings/SystemDropDown */ 454); +/* harmony import */ var View_User_Settings_Menu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! View/User/Settings/Menu */ 455); +/* harmony import */ var View_User_Settings_Pane__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! View/User/Settings/Pane */ 456); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Helper/Apps/User */ 22); @@ -36384,9 +36491,7 @@ function (_AbstractViewNext) { -var SettingsUserScreen = -/*#__PURE__*/ -function (_AbstractSettingsScre) { +var SettingsUserScreen = /*#__PURE__*/function (_AbstractSettingsScre) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SettingsUserScreen, _AbstractSettingsScre); function SettingsUserScreen() { @@ -36492,7 +36597,7 @@ function (_AbstractSettingsScre) { /***/ }), -/* 437 */ +/* 443 */ /*!**************************************!*\ !*** ./dev/Settings/User/General.js ***! \**************************************/ @@ -36515,10 +36620,10 @@ function (_AbstractSettingsScre) { /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Language */ 70); +/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Language */ 71); /* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/Settings */ 38); -/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Identity */ 99); -/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Notification */ 115); +/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Identity */ 100); +/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Notification */ 116); /* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Message */ 13); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Remote/User/Ajax */ 16); @@ -36538,9 +36643,7 @@ function (_AbstractSettingsScre) { -var GeneralUserSettings = -/*#__PURE__*/ -function () { +var GeneralUserSettings = /*#__PURE__*/function () { function GeneralUserSettings() { var _this = this; @@ -36622,7 +36725,7 @@ function () { var identity = this.identityMain(); if (identity) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 380), [identity]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 386), [identity]); } }; @@ -36710,7 +36813,7 @@ function () { }; _proto.selectLanguage = function selectLanguage() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 254), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].userLanguage()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 259), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].userLanguage()]); }; return GeneralUserSettings; @@ -36719,7 +36822,7 @@ function () { /***/ }), -/* 438 */ +/* 444 */ /*!***************************************!*\ !*** ./dev/Settings/User/Contacts.js ***! \***************************************/ @@ -36730,13 +36833,13 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactsUserSettings; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/Contact */ 100); +/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/Contact */ 101); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Remote/User/Ajax */ 16); @@ -36746,9 +36849,7 @@ function () { -var ContactsUserSettings = -/*#__PURE__*/ -function () { +var ContactsUserSettings = /*#__PURE__*/function () { function ContactsUserSettings() { var _this = this; @@ -36786,7 +36887,7 @@ function () { /***/ }), -/* 439 */ +/* 445 */ /*!***************************************!*\ !*** ./dev/Settings/User/Accounts.js ***! \***************************************/ @@ -36806,7 +36907,7 @@ function () { /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/User/Account */ 46); -/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Identity */ 99); +/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Identity */ 100); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Remote/User/Ajax */ 16); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -36822,9 +36923,7 @@ function () { -var AccountsUserSettings = -/*#__PURE__*/ -function () { +var AccountsUserSettings = /*#__PURE__*/function () { function AccountsUserSettings() { this.allowAdditionalAccount = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].AdditionalAccounts); this.allowIdentities = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].Identities); @@ -36845,21 +36944,21 @@ function () { }; _proto.addNewAccount = function addNewAccount() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 379)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 385)); }; _proto.editAccount = function editAccount(account) { if (account && account.canBeEdit()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 379), [account]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 385), [account]); } }; _proto.addNewIdentity = function addNewIdentity() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 380)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 386)); }; _proto.editIdentity = function editIdentity(identity) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 380), [identity]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 386), [identity]); } /** * @param {AccountModel} accountToRemove @@ -36941,7 +37040,7 @@ function () { /***/ }), -/* 440 */ +/* 446 */ /*!**************************************!*\ !*** ./dev/Settings/User/Filters.js ***! \**************************************/ @@ -36952,7 +37051,7 @@ function () { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FiltersUserSettings; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__); @@ -36967,9 +37066,9 @@ function () { /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Stores_User_Filter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/User/Filter */ 214); +/* harmony import */ var Stores_User_Filter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/User/Filter */ 217); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Remote/User/Ajax */ 16); -/* harmony import */ var Model_Filter__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Model/Filter */ 394); +/* harmony import */ var Model_Filter__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Model/Filter */ 400); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -36990,9 +37089,7 @@ var _dec, _class; var FiltersUserSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["command"])(function (self) { return self.haveChanges(); -}), (_class = -/*#__PURE__*/ -function () { +}), (_class = /*#__PURE__*/function () { function FiltersUserSettings() { var _this = this; @@ -37130,7 +37227,7 @@ function () { var filter = new Model_Filter__WEBPACK_IMPORTED_MODULE_12__[/* FilterModel */ "a"](); filter.generateID(); - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Filter */ 410), [filter, function () { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Filter */ 416), [filter, function () { _this4.filters.push(filter); _this4.filterRaw.active(false); @@ -37141,7 +37238,7 @@ function () { var _this5 = this; var clonedFilter = filter.cloneSelf(); - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Filter */ 410), [clonedFilter, function () { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Filter */ 416), [clonedFilter, function () { var filters = _this5.filters(), index = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(filters).call(filters, filter); @@ -37177,7 +37274,7 @@ function () { /***/ }), -/* 441 */ +/* 447 */ /*!***************************************!*\ !*** ./dev/Settings/User/Security.js ***! \***************************************/ @@ -37208,9 +37305,7 @@ function () { -var SecurityUserSettings = -/*#__PURE__*/ -function () { +var SecurityUserSettings = /*#__PURE__*/function () { function SecurityUserSettings() { this.capaAutoLogout = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].AutoLogout); this.capaTwoFactor = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].TwoFactor); @@ -37263,7 +37358,7 @@ function () { var _proto = SecurityUserSettings.prototype; _proto.configureTwoFactor = function configureTwoFactor() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorConfiguration */ 411)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorConfiguration */ 417)); }; _proto.onBuild = function onBuild() { @@ -37284,7 +37379,7 @@ function () { /***/ }), -/* 442 */ +/* 448 */ /*!*************************************!*\ !*** ./dev/Settings/User/Social.js ***! \*************************************/ @@ -37315,9 +37410,7 @@ var SocialUserSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__ return !self.facebookLoggined() && !self.facebookActions(); }), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(function (self) { return !self.twitterLoggined() && !self.twitterActions(); -}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(), (_class = -/*#__PURE__*/ -function () { +}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(), (_class = /*#__PURE__*/function () { function SocialUserSettings() { this.googleEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.enabled; this.googleEnableAuth = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.capa.auth; @@ -37374,7 +37467,7 @@ function () { /***/ }), -/* 443 */ +/* 449 */ /*!*********************************************!*\ !*** ./dev/Settings/User/ChangePassword.js ***! \*********************************************/ @@ -37413,9 +37506,7 @@ var _dec, _class; var ChangePasswordUserSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["command"])(function (self) { return !self.changeProcess() && '' !== self.currentPassword() && '' !== self.newPassword() && '' !== self.newPassword2(); -}), (_class = -/*#__PURE__*/ -function () { +}), (_class = /*#__PURE__*/function () { function ChangePasswordUserSettings() { var _this = this; @@ -37507,7 +37598,7 @@ function () { /***/ }), -/* 444 */ +/* 450 */ /*!****************************************!*\ !*** ./dev/Settings/User/Templates.js ***! \****************************************/ @@ -37520,7 +37611,7 @@ function () { /* unused harmony export default */ /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Stores_User_Template__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Stores/User/Template */ 176); +/* harmony import */ var Stores_User_Template__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Stores/User/Template */ 178); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Remote/User/Ajax */ 16); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -37531,9 +37622,7 @@ function () { -var TemplatesUserSettings = -/*#__PURE__*/ -function () { +var TemplatesUserSettings = /*#__PURE__*/function () { function TemplatesUserSettings() { var _this = this; @@ -37558,12 +37647,12 @@ function () { }; _proto.addNewTemplate = function addNewTemplate() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Template */ 412)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Template */ 418)); }; _proto.editTemplate = function editTemplate(oTemplateItem) { if (oTemplateItem) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Template */ 412), [oTemplateItem]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Template */ 418), [oTemplateItem]); } }; @@ -37607,7 +37696,7 @@ function () { /***/ }), -/* 445 */ +/* 451 */ /*!**************************************!*\ !*** ./dev/Settings/User/Folders.js ***! \**************************************/ @@ -37628,7 +37717,7 @@ function () { /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Client */ 58); /* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Stores/User/Folder */ 11); -/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Promises/User/Ajax */ 87); +/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Promises/User/Ajax */ 89); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/User/Ajax */ 16); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Helper/Apps/User */ 22); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -37646,9 +37735,7 @@ function () { -var FoldersUserSettings = -/*#__PURE__*/ -function () { +var FoldersUserSettings = /*#__PURE__*/function () { function FoldersUserSettings() { this.displaySpecSetting = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].displaySpecSetting; this.folderList = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].folderList; @@ -37709,11 +37796,11 @@ function () { }; _proto.createFolder = function createFolder() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderCreate */ 409)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderCreate */ 415)); }; _proto.systemFolder = function systemFolder() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 274)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 279)); }; _proto.deleteFolder = function deleteFolder(folderToRemove) { @@ -37768,7 +37855,7 @@ function () { /***/ }), -/* 446 */ +/* 452 */ /*!*************************************!*\ !*** ./dev/Settings/User/Themes.js ***! \*************************************/ @@ -37788,14 +37875,14 @@ function () { /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Jua */ 175); +/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Jua */ 177); /* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Links */ 15); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Theme */ 114); +/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Theme */ 115); /* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Remote/User/Ajax */ 16); @@ -37811,9 +37898,7 @@ function () { -var ThemesUserSettings = -/*#__PURE__*/ -function () { +var ThemesUserSettings = /*#__PURE__*/function () { function ThemesUserSettings() { var _this = this; @@ -37954,7 +38039,7 @@ function () { /***/ }), -/* 447 */ +/* 453 */ /*!**************************************!*\ !*** ./dev/Settings/User/OpenPgp.js ***! \**************************************/ @@ -37990,9 +38075,7 @@ function () { -var OpenPgpUserSettings = -/*#__PURE__*/ -function () { +var OpenPgpUserSettings = /*#__PURE__*/function () { function OpenPgpUserSettings() { this.openpgpkeys = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeys; this.openpgpkeysPublic = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeysPublic; @@ -38005,16 +38088,16 @@ function () { var _proto = OpenPgpUserSettings.prototype; _proto.addOpenPgpKey = function addOpenPgpKey() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/AddOpenPgpKey */ 530)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/AddOpenPgpKey */ 536)); }; _proto.generateOpenPgpKey = function generateOpenPgpKey() { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/NewOpenPgpKey */ 531)); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/NewOpenPgpKey */ 537)); }; _proto.viewOpenPgpKey = function viewOpenPgpKey(openPgpKey) { if (openPgpKey) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ViewOpenPgpKey */ 532), [openPgpKey]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ViewOpenPgpKey */ 538), [openPgpKey]); } } /** @@ -38058,7 +38141,7 @@ function () { /***/ }), -/* 448 */ +/* 454 */ /*!**************************************************!*\ !*** ./dev/View/User/Settings/SystemDropDown.js ***! \**************************************************/ @@ -38071,7 +38154,7 @@ function () { /* unused harmony export default */ /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/AbstractSystemDropDown */ 276); +/* harmony import */ var View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/AbstractSystemDropDown */ 281); var _dec, _class; @@ -38082,9 +38165,7 @@ var SystemDropDownSettingsUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTE name: 'View/User/Settings/SystemDropDown', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["ViewType"].Right, templateID: 'SystemDropDown' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractSystemDropDo) { +}), _dec(_class = /*#__PURE__*/function (_AbstractSystemDropDo) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SystemDropDownSettingsUserView, _AbstractSystemDropDo); function SystemDropDownSettingsUserView() { @@ -38096,7 +38177,7 @@ function (_AbstractSystemDropDo) { /***/ }), -/* 449 */ +/* 455 */ /*!****************************************!*\ !*** ./dev/View/User/Settings/Menu.js ***! \****************************************/ @@ -38107,7 +38188,7 @@ function (_AbstractSystemDropDo) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuSettingsUserView; }); /* unused harmony export default */ -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); /* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); @@ -38139,9 +38220,7 @@ var MenuSettingsUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9 name: 'View/User/Settings/Menu', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["ViewType"].Left, templateID: 'SettingsMenu' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(MenuSettingsUserView, _AbstractViewNext); /** @@ -38182,7 +38261,7 @@ function (_AbstractViewNext) { /***/ }), -/* 450 */ +/* 456 */ /*!****************************************!*\ !*** ./dev/View/User/Settings/Pane.js ***! \****************************************/ @@ -38216,9 +38295,7 @@ var PaneSettingsUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6 name: 'View/User/Settings/Pane', type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["ViewType"].Right, templateID: 'SettingsPane' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(PaneSettingsUserView, _AbstractViewNext); function PaneSettingsUserView() { @@ -38265,12 +38342,6 @@ function (_AbstractViewNext) { /***/ }), -/* 451 */, -/* 452 */, -/* 453 */, -/* 454 */, -/* 455 */, -/* 456 */, /* 457 */, /* 458 */, /* 459 */, @@ -38331,7 +38402,13 @@ function (_AbstractViewNext) { /* 514 */, /* 515 */, /* 516 */, -/* 517 */ +/* 517 */, +/* 518 */, +/* 519 */, +/* 520 */, +/* 521 */, +/* 522 */, +/* 523 */ /*!********************!*\ !*** ./dev/app.js ***! \********************/ @@ -38341,14 +38418,14 @@ function (_AbstractViewNext) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ 255); -/* harmony import */ var App_User__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! App/User */ 389); +/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ 260); +/* harmony import */ var App_User__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! App/User */ 395); Object(bootstrap__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(App_User__WEBPACK_IMPORTED_MODULE_1__["default"]); /***/ }), -/* 518 */ +/* 524 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/sort.js ***! \***********************************************************/ @@ -38356,11 +38433,13 @@ Object(bootstrap__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(App_User__WEBP /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../es/instance/sort */ 519); +var parent = __webpack_require__(/*! ../../es/instance/sort */ 525); + +module.exports = parent; /***/ }), -/* 519 */ +/* 525 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/es/instance/sort.js ***! \*******************************************************/ @@ -38368,7 +38447,7 @@ module.exports = __webpack_require__(/*! ../../es/instance/sort */ 519); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var sort = __webpack_require__(/*! ../array/virtual/sort */ 520); +var sort = __webpack_require__(/*! ../array/virtual/sort */ 526); var ArrayPrototype = Array.prototype; @@ -38379,7 +38458,7 @@ module.exports = function (it) { /***/ }), -/* 520 */ +/* 526 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/sort.js ***! \************************************************************/ @@ -38387,14 +38466,14 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.sort */ 521); +__webpack_require__(/*! ../../../modules/es.array.sort */ 527); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').sort; /***/ }), -/* 521 */ +/* 527 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/modules/es.array.sort.js ***! \************************************************************/ @@ -38405,13 +38484,13 @@ module.exports = entryVirtual('Array').sort; "use strict"; var $ = __webpack_require__(/*! ../internals/export */ 43); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 173); -var toObject = __webpack_require__(/*! ../internals/to-object */ 121); -var fails = __webpack_require__(/*! ../internals/fails */ 57); -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 145); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 176); +var toObject = __webpack_require__(/*! ../internals/to-object */ 122); +var fails = __webpack_require__(/*! ../internals/fails */ 55); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 146); -var nativeSort = [].sort; -var test = [1, 2, 3]; +var test = []; +var nativeSort = test.sort; // IE8- var FAILS_ON_UNDEFINED = fails(function () { @@ -38422,12 +38501,12 @@ var FAILS_ON_NULL = fails(function () { test.sort(null); }); // Old WebKit -var SLOPPY_METHOD = sloppyArrayMethod('sort'); +var STRICT_METHOD = arrayMethodIsStrict('sort'); -var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD; +var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD; // `Array.prototype.sort` method -// https://tc39.github.io/ecma262/#sec-array.prototype.sort +// https://tc39.es/ecma262/#sec-array.prototype.sort $({ target: 'Array', proto: true, forced: FORCED }, { sort: function sort(comparefn) { return comparefn === undefined @@ -38438,7 +38517,7 @@ $({ target: 'Array', proto: true, forced: FORCED }, { /***/ }), -/* 522 */ +/* 528 */ /*!******************************************!*\ !*** ./dev/View/Popup/MessageOpenPgp.js ***! \******************************************/ @@ -38487,9 +38566,7 @@ var MessageOpenPgpPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODUL templateID: 'PopupsMessageOpenPgp' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(function (self) { return !self.submitRequest(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(MessageOpenPgpPopupView, _AbstractViewNext); function MessageOpenPgpPopupView() { @@ -38622,7 +38699,7 @@ function (_AbstractViewNext) { /***/ }), -/* 523 */ +/* 529 */ /*!***********************************************************!*\ !*** ./node_modules/core-js-pure/stable/instance/keys.js ***! \***********************************************************/ @@ -38630,9 +38707,9 @@ function (_AbstractViewNext) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 219); -var keys = __webpack_require__(/*! ../array/virtual/keys */ 524); -var classof = __webpack_require__(/*! ../../internals/classof */ 174); +__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 222); +var keys = __webpack_require__(/*! ../array/virtual/keys */ 530); +var classof = __webpack_require__(/*! ../../internals/classof */ 147); var ArrayPrototype = Array.prototype; var DOMIterables = { @@ -38649,7 +38726,7 @@ module.exports = function (it) { /***/ }), -/* 524 */ +/* 530 */ /*!****************************************************************!*\ !*** ./node_modules/core-js-pure/stable/array/virtual/keys.js ***! \****************************************************************/ @@ -38657,11 +38734,13 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! ../../../es/array/virtual/keys */ 525); +var parent = __webpack_require__(/*! ../../../es/array/virtual/keys */ 531); + +module.exports = parent; /***/ }), -/* 525 */ +/* 531 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/es/array/virtual/keys.js ***! \************************************************************/ @@ -38669,14 +38748,14 @@ module.exports = __webpack_require__(/*! ../../../es/array/virtual/keys */ 525); /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(/*! ../../../modules/es.array.iterator */ 220); +__webpack_require__(/*! ../../../modules/es.array.iterator */ 223); var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 54); module.exports = entryVirtual('Array').keys; /***/ }), -/* 526 */ +/* 532 */ /*!******************************************!*\ !*** ./dev/View/Popup/ComposeOpenPgp.js ***! \******************************************/ @@ -38688,17 +38767,17 @@ module.exports = entryVirtual('Array').keys; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposeOpenPgpPopupView", function() { return ComposeOpenPgpPopupView; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ComposeOpenPgpPopupView; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 159); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 162); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_6__); @@ -38718,7 +38797,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Translator */ 9); /* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Stores/User/Pgp */ 41); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Model/Email */ 80); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Model/Email */ 82); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -38752,9 +38831,7 @@ var ComposeOpenPgpPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODUL templateID: 'PopupsComposeOpenPgp' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(function (self) { return !self.submitRequest() && (self.sign() || self.encrypt()); -}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_20__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"])(ComposeOpenPgpPopupView, _AbstractViewNext); function ComposeOpenPgpPopupView() { @@ -39140,7 +39217,7 @@ function (_AbstractViewNext) { /***/ }), -/* 527 */ +/* 533 */ /*!***************************************!*\ !*** ./dev/View/Popup/FolderClear.js ***! \***************************************/ @@ -39187,9 +39264,7 @@ var FolderClearPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1 var folder = self.selectedFolder(), isClearing = self.clearingProcess(); return !isClearing && null !== folder; -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(FolderClearPopupView, _AbstractViewNext); function FolderClearPopupView() { @@ -39267,7 +39342,7 @@ function (_AbstractViewNext) { /***/ }), -/* 528 */ +/* 534 */ /*!******************************************!*\ !*** ./dev/View/Popup/AdvancedSearch.js ***! \******************************************/ @@ -39279,11 +39354,11 @@ function (_AbstractViewNext) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdvancedSearchPopupView", function() { return AdvancedSearchPopupView; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdvancedSearchPopupView; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__); @@ -39321,9 +39396,7 @@ var _dec, _dec2, _class, _class2; var AdvancedSearchPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["popup"])({ name: 'View/Popup/AdvancedSearch', templateID: 'PopupsAdvancedSearch' -}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["command"])(), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"])(AdvancedSearchPopupView, _AbstractViewNext); function AdvancedSearchPopupView() { @@ -39491,7 +39564,7 @@ function (_AbstractViewNext) { /***/ }), -/* 529 */ +/* 535 */ /*!*****************************************!*\ !*** ./dev/View/Popup/TwoFactorTest.js ***! \*****************************************/ @@ -39530,9 +39603,7 @@ var TwoFactorTestPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE templateID: 'PopupsTwoFactorTest' }), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_7__["command"])(function (self) { return '' !== self.code() && !self.testing(); -}), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(TwoFactorTestPopupView, _AbstractViewNext); function TwoFactorTestPopupView() { @@ -39588,7 +39659,7 @@ function (_AbstractViewNext) { /***/ }), -/* 530 */ +/* 536 */ /*!*****************************************!*\ !*** ./dev/View/Popup/AddOpenPgpKey.js ***! \*****************************************/ @@ -39602,7 +39673,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AddOpenPgpKeyPopupView; }); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__); @@ -39631,9 +39702,7 @@ var _dec, _dec2, _class, _class2; var AddOpenPgpKeyPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["popup"])({ name: 'View/Popup/AddOpenPgpKey', templateID: 'PopupsAddOpenPgpKey' -}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["command"])(), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(AddOpenPgpKeyPopupView, _AbstractViewNext); function AddOpenPgpKeyPopupView() { @@ -39734,7 +39803,7 @@ function (_AbstractViewNext) { /***/ }), -/* 531 */ +/* 537 */ /*!*****************************************!*\ !*** ./dev/View/Popup/NewOpenPgpKey.js ***! \*****************************************/ @@ -39779,9 +39848,7 @@ var _dec, _dec2, _class, _class2; var NewOpenPgpKeyPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["popup"])({ name: 'View/Popup/NewOpenPgpKey', templateID: 'PopupsNewOpenPgpKey' -}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(), _dec(_class = (_class2 = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(NewOpenPgpKeyPopupView, _AbstractViewNext); function NewOpenPgpKeyPopupView() { @@ -39887,7 +39954,7 @@ function (_AbstractViewNext) { /***/ }), -/* 532 */ +/* 538 */ /*!******************************************!*\ !*** ./dev/View/Popup/ViewOpenPgpKey.js ***! \******************************************/ @@ -39920,9 +39987,7 @@ var _dec, _class; var ViewOpenPgpKeyPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["popup"])({ name: 'View/Popup/ViewOpenPgpKey', templateID: 'PopupsViewOpenPgpKey' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ViewOpenPgpKeyPopupView, _AbstractViewNext); function ViewOpenPgpKeyPopupView() { @@ -39972,7 +40037,7 @@ function (_AbstractViewNext) { /***/ }), -/* 533 */ +/* 539 */ /*!***************************************!*\ !*** ./dev/View/Popup/WelcomePage.js ***! \***************************************/ @@ -39986,7 +40051,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WelcomePagePopupView; }); /* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Promises/User/Ajax */ 87); +/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Promises/User/Ajax */ 89); /* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Knoin/Knoin */ 7); /* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -40000,9 +40065,7 @@ var _dec, _class; var WelcomePagePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_3__["popup"])({ name: 'View/Popup/WelcomePage', templateID: 'PopupsWelcomePage' -}), _dec(_class = -/*#__PURE__*/ -function (_AbstractViewNext) { +}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) { Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(WelcomePagePopupView, _AbstractViewNext); function WelcomePagePopupView() { @@ -40045,4 +40108,4 @@ function (_AbstractViewNext) { /***/ }) /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9Gb2xkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NhY2hlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1JlbW90ZS9Vc2VyL0FqYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5rZXlcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL0FwcHMvVXNlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Vmlld05leHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0FwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9TZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL1BncC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmFnZS9DbGllbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL01vbWVudG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5oYXNoZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL01lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdE1vZGVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0xhbmd1YWdlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0VtYWlsLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vQXVkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Qcm9taXNlcy9Vc2VyL0FqYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5tb21lbnRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cucHJvZ3Jlc3NKc1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9JZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvQ29udGFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSmFzc2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1RoZW1lLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9Ob3RpZmljYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Db21wb3NlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RTY3JlZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuc3NtXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3JhZ2UvUmFpbkxvb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuY3Jvc3Nyb2Fkc1wiIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RDaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZW1haWxqcy1hZGRyZXNzcGFyc2VyL2Rpc3QvYWRkcmVzc3BhcnNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5KdWFcIiIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvVGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0F0dGFjaG1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0NoZWNrYm94LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSHRtbEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwvT3BlbnRpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGlrYWRheS9waWthZGF5LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5BdXRvbGlua2VyXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9NaW1lLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0Fzay5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvUXVvdGEuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmlmdmlzaWJsZVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9MYW5ndWFnZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BYnN0cmFjdEFwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1JlbW90ZS9BYnN0cmFjdEFqYXguanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9BYnN0cmFjdFNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9BcHAvQWJzdHJhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Qm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0UmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvQ29tcG9zZUF0dGFjaG1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0NvbnRhY3RQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtLmpzIiwid2VicGFjazovLy8uL2Rldi9Qcm9taXNlcy9BYnN0cmFjdEJhc2ljLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvQWJzdHJhY3RTeXN0ZW1Ecm9wRG93bi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1NlbGVjdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9NZXNzYWdlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcy1jb29raWUvc3JjL2pzLmNvb2tpZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9BY2NvdW50LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2F2ZVRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9JbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1JhZGlvLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvVGV4dEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9EYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2NyaXB0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9Vc2VyLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vQmFzZTY0LmpzIiwid2VicGFjazovLy8uL2Rldi9Qcm9taXNlcy9Vc2VyL1BvcHVsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvRmlsdGVyLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9GaWx0ZXJDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnFyXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvS2V5Ym9hcmRTaG9ydGN1dHNIZWxwLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0NvbnRhY3RzLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0ZvbGRlckNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvVHdvRmFjdG9yQ29uZmlndXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9UZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb3phZC9kaXN0L2xvemFkLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NsaWVudFN0b3JhZ2VEcml2ZXIvQ29va2llLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vQ2xpZW50U3RvcmFnZURyaXZlci9Mb2NhbFN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0ZvbGRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUHJvbWlzZXMvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9BY2NvdW50LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9JZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvVGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL09wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9Vc2VyL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9Vc2VyL01haWxCb3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9NYWlsQm94L1N5c3RlbURyb3BEb3duLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTWFpbEJveC9Gb2xkZXJMaXN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9Db250YWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTWFpbEJveC9NZXNzYWdlTGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL01haWxCb3gvTWVzc2FnZVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9Vc2VyL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL0dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvQ29udGFjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvQWNjb3VudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvRmlsdGVycy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9TZWN1cml0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvQ2hhbmdlUGFzc3dvcmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvVGVtcGxhdGVzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL0ZvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvVGhlbWVzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL09wZW5QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9TZXR0aW5ncy9TeXN0ZW1Ecm9wRG93bi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL1NldHRpbmdzL01lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTWVzc2FnZU9wZW5QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQ29tcG9zZU9wZW5QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRm9sZGVyQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQWR2YW5jZWRTZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvVHdvRmFjdG9yVGVzdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9BZGRPcGVuUGdwS2V5LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL05ld09wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvVmlld09wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvV2VsY29tZVBhZ2UuanMiXSwibmFtZXMiOlsiRmlsZVR5cGUiLCJTdG9yYWdlUmVzdWx0VHlwZSIsIkZvY3VzZWQiLCJTdGF0ZSIsIlN0YXRlVHlwZSIsIkNhcGEiLCJLZXlTdGF0ZSIsIkZvbGRlclR5cGUiLCJTZXJ2ZXJGb2xkZXJUeXBlIiwiTG9naW5TaWduTWVUeXBlQXNTdHJpbmciLCJMb2dpblNpZ25NZVR5cGUiLCJDb21wb3NlVHlwZSIsIlVwbG9hZEVycm9yQ29kZSIsIlNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24iLCJDbGllbnRTaWRlS2V5TmFtZSIsIkV2ZW50S2V5Q29kZSIsIk1lc3NhZ2VTZXRBY3Rpb24iLCJNZXNzYWdlU2VsZWN0QWN0aW9uIiwiRGVza3RvcE5vdGlmaWNhdGlvbiIsIk1lc3NhZ2VQcmlvcml0eSIsIkVkaXRvckRlZmF1bHRUeXBlIiwiU2VydmVyU2VjdXJlIiwiU2VhcmNoRGF0ZVR5cGUiLCJTYXZlU2V0dGluZ3NTdGVwIiwiTGF5b3V0IiwiRmlsdGVyQ29uZGl0aW9uRmllbGQiLCJGaWx0ZXJDb25kaXRpb25UeXBlIiwiRmlsdGVyc0FjdGlvbiIsIkZpbHRlclJ1bGVzVHlwZSIsIlNpZ25lZFZlcmlmeVN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0eVR5cGUiLCJNYWdpY3MiLCJQb3J0cyIsIk5vdGlmaWNhdGlvbiIsImtvIiwid2luZG93IiwiJHdpbiIsIiQiLCJmRGlzcG9zYWxUb29sdGlwSGVscGVyIiwiZWxlbWVudCIsInV0aWxzIiwiZG9tTm9kZURpc3Bvc2FsIiwiYWRkRGlzcG9zZUNhbGxiYWNrIiwiX19vcGVudGlwIiwiZGVhY3RpdmF0ZSIsImJpbmRpbmdIYW5kbGVycyIsInVwZGF0ZVdpZHRoIiwiaW5pdCIsImZWYWx1ZUFjY2Vzc29yIiwiJGVsIiwiZlZhbHVlIiwiZkluaXQiLCJ3aWR0aCIsInNldFRpbWVvdXQiLCJUaW1lNTAwbXMiLCJvbiIsIm9mZiIsImVkaXRvciIsIkh0bWxFZGl0b3IiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImZVcGRhdGVFZGl0b3JWYWx1ZSIsIl9fZWRpdG9yIiwic2V0SHRtbE9yUGxhaW4iLCJmVXBkYXRlS29WYWx1ZSIsImdldERhdGFXaXRoSHRtbE1hcmsiLCJmT25SZWFkeSIsImlzT2JzZXJ2YWJsZSIsIl9fZmV0Y2hFZGl0b3JWYWx1ZSIsInN1YnNjcmliZSIsImpzb24iLCJ0ZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsInVud3JhcCIsInVwZGF0ZSIsInNjcm9sbGVyU2hhZG93cyIsImxpbWl0IiwiY29udCIsImZGdW5jIiwiXyIsInRocm90dGxlIiwidG9nZ2xlQ2xhc3MiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwaWthZGF5IiwiZkFsbEJpbmRpbmdzQWNjZXNzb3IiLCJ2aWV3TW9kZWwiLCJiaW5kaW5nQ29udGV4dCIsInRleHRJbnB1dCIsIlBpa2FkYXkiLCJfX3Bpa2FkYXkiLCJmaWVsZCIsInZpc2libGVBbmltYXRlZCIsImFkZENsYXNzIiwic2hvdyIsImhpZGUiLCJkZWxheSIsInJlbW92ZUNsYXNzIiwidG9vbHRpcCIsImlzTW9iaWxlIiwiZGF0YSIsImlzSTE4TiIsIkdsb2JhbHMiLCJiTW9iaWxlRGV2aWNlIiwic1ZhbHVlIiwiaXNGdW5jdGlvbiIsIk9wZW50aXAiLCJkcm9wZG93blZpc2liaWxpdHkiLCJ2Iiwic2V0Q29udGVudCIsImFjdGl2YXRlIiwiVHJhbnNsYXRvciIsImkxOG4iLCJ0cmlnZ2VyIiwidG9vbHRpcEVycm9yVGlwIiwic3R5bGUiLCJoaWRlT24iLCJ0aXBKb2ludCIsImRvY3VtZW50IiwidmFsdWUiLCJvcGVuVGlwcyIsImlzIiwiVGltZTEwMG1zIiwicmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duIiwiYUJvb3RzdHJhcERyb3Bkb3ducyIsInB1c2giLCJjbGljayIsImRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSIsIm9wZW5Ecm9wZG93blRyaWdnZXIiLCJoYXNDbGFzcyIsImRyb3Bkb3duIiwiZm9jdXMiLCJkcm9wZG93bkNsb3NlciIsImNsb3Nlc3QiLCJwb3BvdmVyIiwiY3NzdGV4dCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwicmVzaXplY3JvcCIsIm9uS2V5RG93biIsImV2ZW50IiwiY2FsbCIsIm9uRW50ZXIiLCJwYXJzZUludCIsImtleUNvZGUiLCJvblNwYWNlIiwib25UYWIiLCJzaGlmdEtleSIsIm9uRXNjIiwiY2xpY2tPblRydWUiLCJtb2RhbCIsIlV0aWxzIiwid2luZG93UmVzaXplQ2FsbGJhY2siLCIkaHRtbCIsIm1vbWVudCIsIm1vbWVudFRvTm9kZSIsImkxOG5Jbml0IiwiaTE4blRvTm9kZXMiLCJ0cmFuc2xhdG9ySW5pdCIsImkxOG5VcGRhdGUiLCJsaW5rIiwiYXR0ciIsInRpdGxlIiwidGV4dEYiLCJpbml0RG9tIiwiaW5pdEZpeGVkVHJpZ2dlciIsInZhbHVlcyIsInRvcCIsIiRjb250YWluZXIiLCJyZXNpemUiLCJvZmZzZXQiLCJjc3MiLCJpbml0UmVzaXplVHJpZ2dlciIsIm9FbGVtZW50IiwicEludCIsInNpemUiLCJoZWlnaHQiLCJhcHBlbmREb20iLCJlbXB0eSIsImFwcGVuZCIsImRyYWdnYWJsZSIsInRyaWdnZXJab25lIiwic2Nyb2xsU3BlZWQiLCJmQWxsVmFsdWVGdW5jIiwiZHJvcHBhYmxlU2VsZWN0b3IiLCJjb25mIiwiZGlzdGFuY2UiLCJoYW5kbGUiLCJjdXJzb3JBdCIsImxlZnQiLCJyZWZyZXNoUG9zaXRpb25zIiwic2Nyb2xsIiwiZHJhZyIsInN0b3AiLCJoZWxwZXIiLCJlYWNoIiwiJHRoaXMiLCJib3R0b21Qb3MiLCJjbGVhckludGVydmFsIiwicGFnZVgiLCJwYWdlWSIsIm1vdmVVcCIsIndpbmRvd1Jlc2l6ZSIsInNldEludGVydmFsIiwibW92ZURvd24iLCJ0YXJnZXQiLCJkYXRhRm9yIiwicmVtb3ZlSW5Gb2N1cyIsImRyb3BwYWJsZSIsImZWYWx1ZUZ1bmMiLCJmT3ZlckNhbGxiYWNrIiwiZHJvcHBhYmxlT3ZlciIsImZPdXRDYWxsYmFjayIsImRyb3BwYWJsZU91dCIsInRvbGVyYW5jZSIsImhvdmVyQ2xhc3MiLCJkcm9wIiwib3ZlciIsIm91dCIsInVpIiwibmFubyIsIlNldHRpbmdzIiwiYkRpc2FibGVOYW5vU2Nyb2xsIiwiYXBwU2V0dGluZ3NHZXQiLCJuYW5vU2Nyb2xsZXIiLCJpT1NOYXRpdmVTY3JvbGxpbmciLCJwcmV2ZW50UGFnZVNjcm9sbGluZyIsInNhdmVUcmlnZ2VyIiwidG9TdHJpbmciLCJlbmQiLCJlbWFpbHNUYWdzIiwiRW1haWxNb2RlbCIsImZBbGxCaW5kaW5ncyIsImZBdXRvQ29tcGxldGVTb3VyY2UiLCJhdXRvQ29tcGxldGVTb3VyY2UiLCJpbnB1dERlbGltaXRlcnMiLCJmRm9jdXNDYWxsYmFjayIsImZvY3VzZWQiLCJpbnB1dG9zYXVydXMiLCJwYXJzZU9uQmx1ciIsImFsbG93RHJhZ0FuZERyb3AiLCJmb2N1c0NhbGxiYWNrIiwic3BsaXRIb29rIiwic3Vic3RyIiwic3BsaXRFbWFpbExpbmUiLCJwYXJzZUhvb2siLCJpbnB1dCIsImZsYXR0ZW4iLCJpbnB1dFZhbHVlIiwicGFyc2VFbWFpbExpbmUiLCJsZW5ndGgiLCJpdGVtIiwiaXNPYmplY3QiLCJ0b0xpbmUiLCJjaGFuZ2UiLCIkb0VsIiwidmFsIiwiY29tbWFuZCIsImpxRWxlbWVudCIsImlzQ29tbWFuZCIsIkVycm9yIiwiZW5hYmxlZCIsIm9ic2VydmFibGUiLCJjYW5FeGVjdXRlIiwiX19yZWFsQ2FuRXhlY3V0ZSIsImNvbXB1dGVkIiwicmVzdWx0IiwicHJvcCIsImV4dGVuZGVycyIsInRyaW1tZXIiLCJyZWFkIiwid3JpdGUiLCJuZXdWYWx1ZSIsInBvc0ludGVyZXIiLCJkZWZhdWx0VmFsIiwibGltaXRlZExpc3QiLCJjdXJyZW50VmFsdWUiLCJsaXN0IiwiaXNOb25FbXB0eUFycmF5IiwiaW5BcnJheSIsImV4dGVuZCIsIm5vdGlmeSIsInZhbHVlSGFzTXV0YXRlZCIsInJldmVyc2libGUiLCJjb21taXQiLCJyZXZlcnNlIiwiY29tbWl0ZWRWYWx1ZSIsInRvZ2dsZVN1YnNjcmliZSIsIm9wdGlvbnMiLCJ0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSIsInByZXYiLCJuZXh0IiwiZmFsc2VUaW1lb3V0Iiwib3B0aW9uIiwiaUZhbHNlVGltZW91dFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzcGVjaWFsVGhyb3R0bGUiLCJpU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQiLCJ2YWx1ZUZvclJlYWQiLCJiVmFsdWUiLCJpZGxlVHJpZ2dlciIsIklkbGUiLCJmbiIsInZhbGlkYXRlTm9uZSIsImhhc0Vycm9yIiwidmFsaWRhdGVFbWFpbCIsInRlc3QiLCJ2YWxpZGF0ZVNpbXBsZUVtYWlsIiwiZGVsZXRlQWNjZXNzSGVscGVyIiwidmFsaWRhdGVGdW5jIiwiaGFzRnVuY0Vycm9yIiwidHJpbSIsImlzQXJyYXkiLCJpc0Z1bmMiLCJpc1VuZCIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiaGFzIiwiYmluZCIsIm5vb3AiLCJub29wVHJ1ZSIsIm5vb3BGYWxzZSIsInNpbGVudFRyeUNhdGNoIiwiZnVuYyIsImUiLCJpc05vcm1hbCIsImlzUG9zTnVtZXJpYyIsImluY2x1ZGVaZXJvIiwiZGVmYXVsdFZhbHVyIiwiaXNOYU4iLCJwU3RyaW5nIiwicEJvb2wiLCJib29sVG9BamF4IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29tcG9uZW50IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlVVJJIiwidXJsIiwiZW5jb2RlVVJJIiwic2ltcGxlUXVlcnlQYXJzZXIiLCJxdWVyeVN0cmluZyIsImluZGV4IiwibGVuIiwidGVtcCIsInF1ZXJpZXMiLCJzcGxpdCIsInBhcmFtcyIsImZha2VNZDUiLCJsaW5lIiwibGluZUxlbiIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsImVuY29kZUh0bWwiLCJlc2NhcGUiLCJzcGxpdFBsYWluVGV4dCIsInByZWZpeCIsInN1YlRleHQiLCJzcGFjZVBvcyIsIm5ld0xpbmVQb3MiLCJzdWJzdHJpbmciLCJ0aW1lT3V0QWN0aW9uIiwidGltZU91dHMiLCJhY3Rpb24iLCJmRnVuY3Rpb24iLCJ0aW1lT3V0IiwidGltZU91dEFjdGlvblNlY29uZCIsImRlTW9kdWxlIiwibSIsImluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX19pbkZvY3VzQ2FjaGUiLCJmb3JjZSIsImJsdXIiLCJhY3RpdmVFbCIsInJlbW92ZVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInNlbCIsInJlbW92ZUFsbFJhbmdlcyIsInNlbGVjdGlvbiIsInJlcGx5U3ViamVjdEFkZCIsInN1YmplY3QiLCJ0b1VwcGVyQ2FzZSIsInJlcGxhY2UiLCJyZSIsImZ3ZCIsInBhcnRzIiwicHJlZml4SXNSZSIsInBhcnQiLCJ0cmltbWVkUGFydCIsImpvaW4iLCJyb3VuZE51bWJlciIsIm51bSIsImRlYyIsInBvdyIsImZyaWVuZGx5U2l6ZSIsInNpemVJbkJ5dGVzIiwibG9nIiwiZGVzYyIsImNvbnNvbGUiLCJkZWxlZ2F0ZVJ1biIsIm9iamVjdCIsIm1ldGhvZE5hbWUiLCJraWxsQ3RybEFDdHJsUyIsImN0cmxLZXkiLCJhbHRLZXkiLCJrZXkiLCJ3aGljaCIsIlMiLCJwcmV2ZW50RGVmYXVsdCIsIkEiLCJzZW5kZXIiLCJzcmNFbGVtZW50IiwiY29udGVudEVkaXRhYmxlIiwidGFnTmFtZSIsIm1hdGNoIiwiY2xlYXIiLCJjcmVhdGVDb21tYW5kTGVnYWN5IiwiY29udGV4dCIsImZFeGVjdXRlIiwiZkNhbkV4ZWN1dGUiLCJmUmVzdWx0IiwiZk5vbkVtcHR5IiwiYXJncyIsImFwcGx5IiwiY29udmVydFRoZW1lTmFtZSIsIm1lbW9pemUiLCJ0aGVtZSIsInF1b3RlTmFtZSIsIm5hbWUiLCJtaWNyb3RpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVzdGFtcCIsImNvbnZlcnRMYW5nTmFtZSIsImxhbmd1YWdlIiwiaXNFbmciLCJkcmFnZ2FibGVQbGFjZSIsImFwcGVuZFRvIiwiZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIiwiZG9tSXRlbSIsImRpc2FibGVkIiwiY2xlYXJCcVN3aXRjaGVyIiwiYm9keSIsInJlbW92ZSIsInJlbW92ZUF0dHIiLCJwcmV2aWV3TWVzc2FnZSIsImlzSHRtbCIsInByaW50IiwiZGF0ZSIsImZyb21DcmVkcyIsInRvQ3JlZHMiLCJ0b0xhYmVsIiwiY2NDbGFzcyIsImNjQ3JlZHMiLCJjY0xhYmVsIiwid2luIiwib3BlbiIsImRvYyIsImJvZHlDbG9uZSIsImNsb25lIiwiYm9keUNsYXNzIiwiaHRtbCIsImNsb3NlIiwic2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24iLCJmQ2FsbGJhY2siLCJrb1RyaWdnZXIiLCJ0aW1lciIsInR5cGUiLCJjYWNoZWQiLCJyZXF1ZXN0QWN0aW9uIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJSZXN1bHQiLCJUcnVlUmVzdWx0IiwiRmFsc2VSZXN1bHQiLCJzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiIsInNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uIiwicmVtb3RlIiwic2V0dGluZ05hbWUiLCJmVHJpZ2dlckZ1bmN0aW9uIiwic2F2ZUFkbWluQ29uZmlnIiwic2F2ZVNldHRpbmdzIiwiZmluZEVtYWlsQW5kTGlua3MiLCJBdXRvbGlua2VyIiwibmV3V2luZG93Iiwic3RyaXBQcmVmaXgiLCJ1cmxzIiwiZW1haWwiLCJtZW50aW9uIiwicGhvbmUiLCJoYXNodGFnIiwicmVwbGFjZUZuIiwiZ2V0VHlwZSIsIm1hdGNoZWRUZXh0IiwiaHRtbFRvUGxhaW4iLCJwb3MiLCJpUDEiLCJpUDIiLCJpUDMiLCJjb252ZXJ0QmxvY2txdW90ZSIsImJsb2NrcXVvdGVUZXh0IiwiY29udmVydERpdnMiLCJkaXZUZXh0IiwiY29udmVydFByZSIsImZpeEF0dGlidXRlVmFsdWUiLCJjb252ZXJ0TGlua3MiLCIkZGl2IiwicGxhaW5Ub0h0bWwiLCJwbGFpbiIsImZpbmRFbWFpbEFuZExpbmtzSW5UZXh0IiwiYkluIiwiYkRvIiwiYlN0YXJ0IiwiYU5leHRUZXh0Iiwic0xpbmUiLCJpSW5kZXgiLCJhVGV4dCIsImZvbGRlckxpc3RPcHRpb25zQnVpbGRlciIsImFTeXN0ZW0iLCJhTGlzdCIsImFEaXNhYmxlZCIsImFIZWFkZXJMaW5lcyIsImlVbkRlZXAiLCJmRGlzYWJsZUNhbGxiYWNrIiwiZlZpc2libGVDYWxsYmFjayIsImZSZW5hbWVDYWxsYmFjayIsImJTeXN0ZW0iLCJiQnVpbGRVbnZpc2libGUiLCJvSXRlbSIsImJTZXAiLCJpTGVuIiwiYVJlc3VsdCIsInNEZWVwUHJlZml4IiwiaWQiLCJzeXN0ZW0iLCJzZXBvcmF0b3IiLCJmdWxsTmFtZVJhdyIsInNlbGVjdGFibGUiLCJzdWJTY3JpYmVkIiwiZXhpc3RlbiIsImhhc1N1YlNjcmliZWRTdWJmb2xkZXJzIiwiVXNlciIsIkFycmF5IiwiZGVlcCIsInN1YkZvbGRlcnMiLCJzZWxlY3RFbGVtZW50IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImFkZFJhbmdlIiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZWxlY3QiLCJkZWJvdW5jZSIsIkdsb2JhbHNEYXRhIiwidHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIiwiY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlIiwiZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWciLCJjb25maWd1cmF0aW9uIiwicGFyc2UiLCJkaXNwb3NlT25lIiwicHJvcE9yVmFsdWUiLCJkaXNwb3NhYmxlIiwiZGlzcG9zZSIsImRpc3Bvc2VPYmplY3QiLCJkaXNwb3NhYmxlcyIsIm9iamVjdEZvckVhY2giLCJkZWxlZ2F0ZVJ1bk9uRGVzdHJveSIsIm9iamVjdE9yT2JqZWN0cyIsIm9uRGVzdHJveSIsImFwcGVuZFN0eWxlcyIsIiRzdHlsZVRhZyIsIl9fdGhlbWVUaW1lciIsIl9fdGhlbWVBamF4IiwiY2hhbmdlVGhlbWUiLCJ0aGVtZVRyaWdnZXIiLCJ0aGVtZUxpbmsiLCJjbGVhclRpbWVyIiwidGhlbWVTdHlsZSIsIkFuaW1hdGUiLCJhYm9ydCIsImFqYXgiLCJkYXRhVHlwZSIsInRoZW4iLCJhZnRlciIsImNvbXB1dGVkUGFnZW5hdG9ySGVscGVyIiwia29DdXJyZW50UGFnZSIsImtvUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJwYWdlQ291bnQiLCJmQWRkIiwiY3VzdG9tTmFtZSIsImN1cnJlbnQiLCJjdXN0b20iLCJ1bnNoaWZ0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsImZpbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwb3AiLCJtaW1lQ29udGVudFR5cGUiLCJleHQiLCJNaW1lIiwiaXNUcmFuc3BhcmVudCIsImNvbG9yIiwiZ2V0UmVhbEhlaWdodCIsIiRoY29udCIsInJlc2l6ZUFuZENyb3AiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsImRpZmYiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwidG9EYXRhVVJMIiwic3JjIiwibWFpbFRvSGVscGVyIiwibWFpbFRvVXJsIiwiUG9wdXBDb21wb3NlVmlld01vZGVsIiwidG8iLCJjYyIsImJjYyIsInF1ZXJ5Iiwic2hvd1NjcmVlblBvcHVwIiwiRW1wdHkiLCJkb21SZWFkeSIsInRpbWVvdXQiLCJTdHJpbmciLCJzdHIiLCJzdGFydCIsIlNFVFRJTkdTIiwiX19ybGFoX2RhdGEiLCJBUFBfU0VUVElOR1MiLCJTeXN0ZW0iLCJzZXR0aW5nc0dldCIsInNldHRpbmdzU2V0IiwiY2FwYSIsIl9fc2l6ZXMiLCIkZG9jIiwiJGJvZHkiLCJwb3NpdGlvbiIsInN0YXJ0TWljcm90aW1lIiwiY29tbXVuaXR5IiwiUkxfQ09NTVVOSVRZIiwicmF0ZUxpbWl0IiwidXNlS2V5Ym9hcmRTaG9ydGN1dHMiLCJzVXNlckFnZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYklFIiwiYkNocm9tZSIsImJTYWZhcmkiLCJiQW5pbWF0aW9uU3VwcG9ydGVkIiwiYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJiSXNIdHRwcyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJodG1sRWRpdG9yRGVmYXVsdENvbmZpZyIsImdyb3VwcyIsImh0bWxFZGl0b3JMYW5nc01hcCIsImJBbGxvd1BkZlByZXZpZXciLCJtaW1lVHlwZXMiLCJWSUVXX01PREVMUyIsInNldHRpbmdzIiwibW92ZUFjdGlvbiIsImxlZnRQYW5lbERpc2FibGVkIiwibGVmdFBhbmVsVHlwZSIsImxlZnRQYW5lbFdpZHRoIiwicG9wdXBWaXNpYmlsaXR5TmFtZXMiLCJvYnNlcnZhYmxlQXJyYXkiLCJwb3B1cFZpc2liaWxpdHkiLCJrZXlTY29wZVJlYWwiLCJBbGwiLCJrZXlTY29wZUZha2UiLCJrZXlTY29wZSIsIk1lbnUiLCJDb21wb3NlIiwiZmlsdGVyIiwiZWwiLCJjbGFzc05hbWUiLCJzZXRTY29wZSIsImdldFNjb3BlIiwiX19BUFBfXyIsImlBamF4RXJyb3JDb3VudCIsImlUb2tlbkVycm9yQ291bnQiLCJpTWVzc2FnZUJvZHlDYWNoZUNvdW50IiwiYlVubG9hZCIsImN1cnJlbnRTY3JlZW4iLCJkZWZhdWx0U2NyZWVuTmFtZSIsIlNDUkVFTlMiLCJWaWV3VHlwZSIsIlBvcHVwIiwiTGVmdCIsIlJpZ2h0IiwiQ2VudGVyIiwiaGlkZUxvYWRpbmciLCJjcmVhdGVDb21tYW5kIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWwiLCJTZXR0aW5nc1ZpZXdNb2RlbENsYXNzIiwidGVtcGxhdGUiLCJsYWJlbE5hbWUiLCJyb3V0ZSIsImlzRGVmYXVsdCIsIl9fcmxTZXR0aW5nc0RhdGEiLCJMYWJlbCIsIlRlbXBsYXRlIiwiUm91dGUiLCJJc0RlZmF1bHQiLCJyZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsImRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbCIsInJvdXRlT2ZmIiwiaGFzaGVyIiwiY2hhbmdlZCIsImFjdGl2ZSIsInJvdXRlT24iLCJzY3JlZW4iLCJzY3JlZW5OYW1lIiwiZ2V0U2NyZWVuUG9wdXAiLCJQb3B1Vmlld01vZGVsQ2xhc3MiLCJoaWRlU2NyZWVuUG9wdXAiLCJWaWV3TW9kZWxDbGFzc1RvSGlkZSIsIk1vZGFsVmlldyIsIl9fdm0iLCJfX2RvbSIsIm1vZGFsVmlzaWJpbGl0eSIsInZtUnVuSG9vayIsImhvb2tOYW1lIiwiVmlld01vZGVsQ2xhc3MiLCJfX25hbWVzIiwicnVuSG9vayIsImJ1aWxkVmlld01vZGVsIiwidm1TY3JlZW4iLCJfX2J1aWxkZWQiLCJ2bURvbSIsInZtIiwiX190eXBlIiwidm1QbGFjZSIsIm9uU2hvd1RyaWdnZXIiLCJvbkhpZGVUcmlnZ2VyIiwidmlld01vZGVsTmFtZSIsIl9fbmFtZSIsInZpZXdNb2RlbE5hbWVzIiwidmlld01vZGVsVGVtcGxhdGVJRCIsIl9fdGVtcGxhdGVJRCIsInZpZXdNb2RlbFBvc2l0aW9uIiwidmlld01vZGVsRG9tIiwiY2FuY2VsQ29tbWFuZCIsImNsb3NlQ29tbWFuZCIsInN0b3JlQW5kU2V0S2V5U2NvcGUiLCJyZXN0b3JlS2V5U2NvcGUiLCJhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUiLCJyZWdpc3RlclBvcHVwS2V5RG93biIsIlZpZXdNb2RlbENsYXNzVG9TaG93Iiwid2FybVVwU2NyZWVuUG9wdXAiLCJpc1BvcHVwVmlzaWJsZSIsInNjcmVlbk9uUm91dGUiLCJzdWJQYXJ0IiwiaXNTYW1lU2NyZWVuIiwiY3Jvc3MiLCJfX3N0YXJ0ZWQiLCJ2aWV3TW9kZWxzIiwiZGVmZXIiLCJ2aWV3TW9kZWxWaXNpYmlsaXR5IiwiX19jcm9zcyIsInN0YXJ0U2NyZWVucyIsInNjcmVlbnNDbGFzc2VzIiwiQ1NjcmVlbiIsIl9fc3RhcnQiLCJjcm9zc3JvYWRzIiwiY3JlYXRlIiwiYWRkUm91dGUiLCJpbml0aWFsaXplZCIsImFkZCIsInNldEhhc2giLCJoYXNoIiwic2lsZW5jZSIsImNtZCIsInZpZXdEZWNvcmF0b3IiLCJ0ZW1wbGF0ZUlEIiwicG9wdXBEZWNvcmF0b3IiLCJjb21tYW5kRGVjb3JhdG9yIiwiZGVzY3JpcHRvciIsImluaXRpYWxpemVyIiwibm9ybUNhbkV4ZWN1dGUiLCJzZXR0aW5nc01lbnVLZXlzSGFuZGxlciIsIiRpdGVtcyIsImhhbmRsZXIiLCJ1cCIsInNob3J0Y3V0IiwicmVzdWx0SGFzaCIsImVxIiwiVGltZTIwMG1zIiwiSTE4Tl9EQVRBIiwicmFpbmxvb3BJMThOIiwiSTE4Tl9OT1RJRklDQVRJT05fREFUQSIsIkkxOE5fTk9USUZJQ0FUSU9OX01BUCIsIkludmFsaWRUb2tlbiIsIkF1dGhFcnJvciIsIkFjY2Vzc0Vycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiQ2FwdGNoYUVycm9yIiwiU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlIiwiRG9tYWluTm90QWxsb3dlZCIsIkFjY291bnROb3RBbGxvd2VkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IiLCJDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCIsIkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCIsIk5ld1Bhc3N3b3JkU2hvcnQiLCJOZXdQYXNzd29yZFdlYWsiLCJOZXdQYXNzd29yZEZvcmJpZGRlbiIsIkNvbnRhY3RzU3luY0Vycm9yIiwiQ2FudEdldE1lc3NhZ2VMaXN0IiwiQ2FudEdldE1lc3NhZ2UiLCJDYW50RGVsZXRlTWVzc2FnZSIsIkNhbnRNb3ZlTWVzc2FnZSIsIkNhbnRDb3B5TWVzc2FnZSIsIkNhbnRTYXZlTWVzc2FnZSIsIkNhbnRTZW5kTWVzc2FnZSIsIkludmFsaWRSZWNpcGllbnRzIiwiQ2FudFNhdmVGaWx0ZXJzIiwiQ2FudEdldEZpbHRlcnMiLCJGaWx0ZXJzQXJlTm90Q29ycmVjdCIsIkNhbnRDcmVhdGVGb2xkZXIiLCJDYW50UmVuYW1lRm9sZGVyIiwiQ2FudERlbGV0ZUZvbGRlciIsIkNhbnREZWxldGVOb25FbXB0eUZvbGRlciIsIkNhbnRTdWJzY3JpYmVGb2xkZXIiLCJDYW50VW5zdWJzY3JpYmVGb2xkZXIiLCJDYW50U2F2ZVNldHRpbmdzIiwiQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyIsIkRvbWFpbkFscmVhZHlFeGlzdHMiLCJDYW50SW5zdGFsbFBhY2thZ2UiLCJDYW50RGVsZXRlUGFja2FnZSIsIkludmFsaWRQbHVnaW5QYWNrYWdlIiwiVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlIiwiTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSIsIkxpY2Vuc2luZ0V4cGlyZWQiLCJMaWNlbnNpbmdCYW5uZWQiLCJEZW1vU2VuZE1lc3NhZ2VFcnJvciIsIkRlbW9BY2NvdW50RXJyb3IiLCJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJNYWlsU2VydmVyRXJyb3IiLCJJbnZhbGlkSW5wdXRBcmd1bWVudCIsIlVua25vd25Ob3RpZmljYXRpb24iLCJVbmtub3duRXJyb3IiLCJ2YWx1ZUxpc3QiLCJkZWZhdWxWYWx1ZSIsInZhbHVlTmFtZSIsImkxOG5Ub05vZGUiLCJlbGVtZW50cyIsImFuaW1hdGUiLCJsZXR0ZXJmeCIsInJlbG9hZERhdGEiLCJtb21lbnRvclJlbG9hZCIsImluaXROb3RpZmljYXRpb25MYW5ndWFnZSIsImluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlIiwic3RhcnRDYWxsYmFjayIsImxhbmdDYWxsYmFjayIsImdldE5vdGlmaWNhdGlvbiIsImNvZGUiLCJtZXNzYWdlIiwiZGVmQ29kZSIsIkNsaWVudFZpZXdFcnJvciIsImdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZSIsInJlc3BvbnNlIiwiRXJyb3JDb2RlIiwiRXJyb3JNZXNzYWdlIiwiZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIiwiRmlsZUlzVG9vQmlnIiwiRmlsZVBhcnRpYWxseVVwbG9hZGVkIiwiRmlsZU5vVXBsb2FkZWQiLCJNaXNzaW5nVGVtcEZvbGRlciIsIkZpbGVPblNhdmVpbmdFcnJvciIsInJlbG9hZCIsImFkbWluIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsYW5nTGluayIsImNhY2hlIiwiaXNSdGwiLCJGb2xkZXJVc2VyU3RvcmUiLCJkaXNwbGF5U3BlY1NldHRpbmciLCJzZW50Rm9sZGVyIiwiZHJhZnRGb2xkZXIiLCJzcGFtRm9sZGVyIiwidHJhc2hGb2xkZXIiLCJhcmNoaXZlRm9sZGVyIiwibmFtZXNwYWNlIiwiZm9sZGVyTGlzdCIsIm9wdGltaXplZCIsImVycm9yIiwiZm9sZGVyc0xvYWRpbmciLCJmb2xkZXJzQ3JlYXRpbmciLCJmb2xkZXJzRGVsZXRpbmciLCJmb2xkZXJzUmVuYW1pbmciLCJmb2xkZXJzSW5ib3hVbnJlYWRDb3VudCIsImN1cnJlbnRGb2xkZXIiLCJzaWV2ZUFsbG93RmlsZWludG9JbmJveCIsImNvbXB1dGVycyIsInN1YnNjcmliZXJzIiwiZHJhZnRGb2xkZXJOb3RFbmFibGVkIiwiVU5VU0VEX09QVElPTl9WQUxVRSIsImZvbGRlcnNMaXN0V2l0aFNpbmdsZUluYm94Um9vdEZvbGRlciIsImZvbGRlciIsImlzU3lzdGVtRm9sZGVyIiwidmlzaWJsZSIsImN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdyIsImN1cnJlbnRGb2xkZXJGdWxsTmFtZSIsImZ1bGxOYW1lIiwiY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCIsImZ1bGxOYW1lSGFzaCIsImZvbGRlcnNDaGFuZ2luZyIsImxvYWRpbmciLCJjcmVhdGluZyIsImRlbGV0aW5nIiwicmVuYW1pbmciLCJmb2xkZXJMaXN0U3lzdGVtTmFtZXMiLCJnZXRGb2xkZXJJbmJveE5hbWUiLCJmb2xkZXJzIiwiZm9sZGVyTGlzdFN5c3RlbSIsImNvbXBhY3QiLCJnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0IiwiZm9sZGVyTWVudUZvck1vdmUiLCJsb2NhbE5hbWUiLCJmb2xkZXJNZW51Rm9yRmlsdGVycyIsImZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlIiwiZlNldFN5c3RlbUZvbGRlclR5cGUiLCJTZW50SXRlbXMiLCJEcmFmdCIsIlNwYW0iLCJUcmFzaCIsIkFyY2hpdmUiLCJnZXROZXh0Rm9sZGVyTmFtZXMiLCJ1dGMiLCJtb21lbnROb3dVbml4IiwidGltZW91dHMiLCJpbmJveEZvbGRlck5hbWUiLCJmU2VhcmNoRnVuY3Rpb24iLCJpbnRlcnZhbCIsImNoZWNrYWJsZSIsImEiLCJiIiwiYUl0ZW0iLCJ1bmlxIiwiTWVzc2FnZVVzZXJTdG9yZSIsInN0YXRpY01lc3NhZ2UiLCJNZXNzYWdlTW9kZWwiLCJtZXNzYWdlTGlzdCIsIm1lc3NhZ2VMaXN0Q291bnQiLCJtZXNzYWdlTGlzdFNlYXJjaCIsIm1lc3NhZ2VMaXN0VGhyZWFkVWlkIiwibWVzc2FnZUxpc3RQYWdlIiwibWVzc2FnZUxpc3RQYWdlQmVmb3JlVGhyZWFkIiwibWVzc2FnZUxpc3RFcnJvciIsIm1lc3NhZ2VMaXN0RW5kRm9sZGVyIiwibWVzc2FnZUxpc3RFbmRTZWFyY2giLCJtZXNzYWdlTGlzdEVuZFRocmVhZFVpZCIsIm1lc3NhZ2VMaXN0RW5kUGFnZSIsIm1lc3NhZ2VMaXN0TG9hZGluZyIsIm1lc3NhZ2VMaXN0SXNOb3RDb21wbGV0ZWQiLCJtZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlIiwibWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZUZvckFuaW1hdGlvbiIsIm1lc3NhZ2VMaXN0RGlzYWJsZUF1dG9TZWxlY3QiLCJzZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCIsInNlbGVjdG9yTWVzc2FnZUZvY3VzZWQiLCJ2aWV3VHJpZ2dlciIsIm1lc3NhZ2VFcnJvciIsIm1lc3NhZ2VDdXJyZW50TG9hZGluZyIsIm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUiLCJUaW1lNTBtcyIsIm1lc3NhZ2VGdWxsU2NyZWVuTW9kZSIsIm1lc3NhZ2VzQm9kaWVzRG9tIiwibWVzc2FnZUFjdGl2ZURvbSIsIm9uTWVzc2FnZVJlc3BvbnNlIiwicHVyZ2VNZXNzYWdlQm9keUNhY2hlVGhyb3R0bGUiLCJwdXJnZU1lc3NhZ2VCb2R5Q2FjaGUiLCJUaW1lMzBzIiwibWVzc2FnZUxvYWRpbmciLCJtZXNzYWdlTGlzdEVuZEhhc2giLCJtZXNzYWdlTGlzdFBhZ2VDb3VudCIsInBhZ2UiLCJjZWlsIiwiU2V0dGluZ3NTdG9yZSIsIm1lc3NhZ2VzUGVyUGFnZSIsIm1haW5NZXNzYWdlTGlzdFNlYXJjaCIsIm1haWxCb3giLCJGb2xkZXJTdG9yZSIsIm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nIiwib25lIiwidHdvIiwiaXNNZXNzYWdlU2VsZWN0ZWQiLCJtZXNzYWdlTGlzdENoZWNrZWQiLCJjaGVja2VkIiwiaGFzQ2hlY2tlZE1lc3NhZ2VzIiwibWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCIsInNlbGVjdGVkTWVzc2FnZSIsImZvY3VzZWRNZXNzYWdlIiwidW5pb24iLCJtZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscyIsInVpZCIsInRocmVhZHNMZW4iLCJ0aHJlYWRzIiwibmV3Rm9yQW5pbWF0aW9uIiwiTm9QcmV2aWV3IiwibGF5b3V0IiwiQXBwU3RvcmUiLCJmb2N1c2VkU3RhdGUiLCJNZXNzYWdlVmlldyIsIk1lc3NhZ2VMaXN0IiwiaGlkZU1lc3NhZ2VCb2RpZXMiLCJkb20iLCJmb2xkZXJGdWxsTmFtZVJhdyIsImNvdW50IiwiTUVTU0FHRV9CT0RZX0NBQ0hFX0xJTUlUIiwibWVzc2FnZXNEb20iLCJUaW1lMzUwbXMiLCJpbml0VWlkTmV4dEFuZE5ld01lc3NhZ2VzIiwidWlkTmV4dCIsIm5ld01lc3NhZ2VzIiwiYWRkTmV3TWVzc2FnZUNhY2hlIiwiVWlkIiwiTm90aWZpY2F0aW9uU3RvcmUiLCJwbGF5U291bmROb3RpZmljYXRpb24iLCJkaXNwbGF5RGVza3RvcE5vdGlmaWNhdGlvbiIsIm5vdGlmaWNhdGlvbk1haWxJY29uIiwiQWNjb3VudFN0b3JlIiwiTWVzc2FnZUhlbHBlciIsIkZyb20iLCJTdWJqZWN0IiwiRm9sZGVyIiwic2V0Rm9sZGVyVWlkTmV4dCIsInJlbW92ZU1lc3NhZ2VzRnJvbUxpc3QiLCJmcm9tRm9sZGVyRnVsbE5hbWVSYXciLCJ1aWRGb3JSZW1vdmUiLCJ0b0ZvbGRlckZ1bGxOYW1lUmF3IiwiY29weSIsIm1WYWx1ZSIsInVuc2VlbkNvdW50IiwiY3VycmVudE1lc3NhZ2UiLCJmcm9tRm9sZGVyIiwidG9Gb2xkZXIiLCJtZXNzYWdlcyIsInVuc2VlbiIsIm1lc3NhZ2VDb3VudEFsbCIsIm1lc3NhZ2VDb3VudFVucmVhZCIsImFjdGlvbkJsaW5rIiwiZGVsZXRlZCIsInNldEZvbGRlckhhc2giLCJpbml0QmxvY2txdW90ZVN3aXRjaGVyIiwibWVzc2FnZVRleHRCb2R5IiwiJG9MaXN0IiwicGFyZW50IiwiaCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImluaXRPcGVuUGdwQ29udHJvbHMiLCJQZ3BTdG9yZSIsImluaXRNZXNzYWdlQm9keUNvbnRyb2xzIiwic2V0TWVzc2FnZSIsImlzTmV3IiwicmVzdWx0SHRtbCIsInBncFNpZ25lZCIsIm5ld0luc3RhbmNlRnJvbUpzb24iLCJpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlIiwicG9wdWxhdGVCeU1lc3NhZ2VMaXN0SXRlbSIsImluaXRVcGRhdGVCeU1lc3NhZ2VKc29uIiwiYWRkUmVxdWVzdGVkTWVzc2FnZSIsImluaXRGbGFnc0J5SnNvbiIsInRleHRCb2R5IiwiSHRtbCIsIlBsYWluIiwiaXNQZ3BTaWduZWQiLCJpc1BncEVuY3J5cHRlZCIsImNhcGFPcGVuUEdQIiwiaGFzSW1hZ2VzIiwiSGFzRXh0ZXJuYWxzIiwic3RvcmVEYXRhSW5Eb20iLCJIYXNJbnRlcm5hbHMiLCJzaG93SW50ZXJuYWxJbWFnZXMiLCJzaG93SW1hZ2VzIiwic2hvd0V4dGVybmFsSW1hZ2VzIiwiZmV0Y2hEYXRhRnJvbURvbSIsImhhc1Vuc2VlblN1Yk1lc3NhZ2UiLCJnZXRBcHAiLCJtZXNzYWdlTGlzdEFjdGlvbiIsIlNldFNlZW4iLCJzdWJNZXNzYWdlIiwic2VsZWN0TWVzc2FnZSIsIm9NZXNzYWdlIiwicG9wdWxhdGVNZXNzYWdlQm9keSIsInNlbGVjdE1lc3NhZ2VCeUZvbGRlckFuZFVpZCIsInNGb2xkZXIiLCJzVWlkIiwiUmVtb3RlIiwic1Jlc3VsdCIsIm9EYXRhIiwiYkNhY2hlZCIsIlN1Y2Nlc3MiLCJVbmxvYWQiLCJBYm9ydCIsImNhbGN1bGF0ZU1lc3NhZ2VMaXN0SGFzaCIsImZsYWdIYXNoIiwic2V0TWVzc2FnZUxpc3QiLCJuZXdDb3VudCIsInVucmVhZENvdW50Q2hhbmdlIiwiaUNvdW50IiwiTWVzc2FnZVJlc3VsdENvdW50IiwiaU9mZnNldCIsIk9mZnNldCIsIkZvbGRlckhhc2giLCJNZXNzYWdlQ291bnQiLCJNZXNzYWdlVW5zZWVuQ291bnQiLCJVaWROZXh0IiwiTmV3TWVzc2FnZXMiLCJjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyIiwianNvbk1lc3NhZ2UiLCJoYXNOZXdNZXNzYWdlQW5kUmVtb3ZlRnJvbUNhY2hlIiwic3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlIiwiU2VhcmNoIiwiVGhyZWFkVWlkIiwiY2xlYXJOZXdNZXNzYWdlQ2FjaGUiLCJ1c2VUaHJlYWRzIiwiZm9sZGVySW5mb3JtYXRpb24iLCJGT0xERVJTX0NBQ0hFIiwiRk9MREVSU19OQU1FX0NBQ0hFIiwiRk9MREVSU19IQVNIX0NBQ0hFIiwiRk9MREVSU19VSURfTkVYVF9DQUNIRSIsIk1FU1NBR0VfRkxBR1NfQ0FDSEUiLCJORVdfTUVTU0FHRV9DQUNIRSIsIlJFUVVFU1RFRF9NRVNTQUdFX0NBQ0hFIiwiY2FwYUdyYXZhdGFyIiwiR3JhdmF0YXIiLCJnZXRVc2VyUGljIiwiY2FsbGJhY2siLCJMaW5rcyIsImdldE1lc3NhZ2VLZXkiLCJoYXNSZXF1ZXN0ZWRNZXNzYWdlIiwiZ2V0Rm9sZGVyRnVsbE5hbWVSYXciLCJmb2xkZXJIYXNoIiwic2V0Rm9sZGVyRnVsbE5hbWVSYXciLCJnZXRGb2xkZXJIYXNoIiwiZ2V0Rm9sZGVyVWlkTmV4dCIsInNldEZvbGRlclRvQ2FjaGVMaXN0IiwicmVtb3ZlRm9sZGVyRnJvbUNhY2hlTGlzdCIsImdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSIsImZvbGRlckZ1bGxOYW1lIiwic2V0TWVzc2FnZUZsYWdzVG9DYWNoZSIsImZsYWdzQ2FjaGUiLCJmbGFncyIsImZsYWdnZWQiLCJpc1NpbXBsZU1lc3NhZ2UiLCJhbnN3ZXJlZCIsImZvcndhcmRlZCIsImlzUmVhZFJlY2VpcHQiLCJkZWxldGVkTWFyayIsInVuc2VlblN1YlVpZCIsInNTdWJVaWQiLCJzdWJGbGFncyIsImZsYWdnZWRTdWJVaWQiLCJoYXNGbGFnZ2VkU3ViTWVzc2FnZSIsInN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5Rm9sZGVyQW5kVWlkIiwic3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24iLCJzZXRBY3Rpb24iLCJ1bnJlYWQiLCJVbnNldFNlZW4iLCJTZXRGbGFnIiwiVW5zZXRGbGFnIiwiUk9PVCIsIkhBU0hfUFJFRklYIiwiU0VSVkVSX1BSRUZJWCIsIlNVQl9RVUVSWV9QUkVGSVgiLCJWRVJTSU9OIiwiV0VCX1BSRUZJWCIsIlZFUlNJT05fUFJFRklYIiwiU1RBVElDX1BSRUZJWCIsIkFETUlOX0hPU1RfVVNFIiwiQURNSU5fUEFUSCIsIkFVVEhfUFJFRklYIiwicG9wdWxhdGVBdXRoU3VmZml4Iiwic3ViUXVlcnlQcmVmaXgiLCJyb290Iiwic3RhcnR1cFVybCIsInJvb3RBZG1pbiIsInJvb3RVc2VyIiwiYXR0YWNobWVudFJhdyIsImRvd25sb2FkIiwiY3VzdG9tU3BlY1N1ZmZpeCIsImF0dGFjaG1lbnREb3dubG9hZCIsImF0dGFjaG1lbnRQcmV2aWV3IiwiYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXciLCJhdHRhY2htZW50UHJldmlld0FzUGxhaW4iLCJhdHRhY2htZW50RnJhbWVkIiwic2VydmVyUmVxdWVzdCIsInVwbG9hZCIsInVwbG9hZENvbnRhY3RzIiwidXBsb2FkQmFja2dyb3VuZCIsIm1lc3NhZ2VWaWV3TGluayIsInJlcXVlc3RIYXNoIiwibWVzc2FnZURvd25sb2FkTGluayIsImF2YXRhckxpbmsiLCJwdWJsaWNMaW5rIiwidXNlckJhY2tncm91bmQiLCJwaHBJbmZvIiwibGFuZyIsImlzQWRtaW4iLCJleHBvcnRDb250YWN0c1ZjZiIsImV4cG9ydENvbnRhY3RzQ3N2Iiwic29jaWFsR29vZ2xlIiwieGF1dGgiLCJzb2NpYWxUd2l0dGVyIiwic29jaWFsRmFjZWJvb2siLCJzdGF0aWNQcmVmaXgiLCJwYXRoIiwiZW1wdHlDb250YWN0UGljIiwic291bmQiLCJvcGVuUGdwSnMiLCJvcGVuUGdwV29ya2VySnMiLCJvcGVuUGdwV29ya2VyUGF0aCIsInRoZW1lUHJldmlld0xpbmsiLCJpbmJveCIsImFib3V0Iiwic2VhcmNoIiwidGhyZWFkVWlkIiwicmVzdWx0VGhyZWFkVWlkIiwiUmVtb3RlVXNlckFqYXgiLCJvUmVxdWVzdHMiLCJkZWZhdWx0UmVxdWVzdCIsImxvZ2luIiwic0VtYWlsIiwic0xvZ2luIiwic1Bhc3N3b3JkIiwiYlNpZ25NZSIsInNMYW5ndWFnZSIsInNBZGRpdGlvbmFsQ29kZSIsImJBZGRpdGlvbmFsQ29kZVNpZ25NZSIsImdldFR3b0ZhY3RvciIsImNyZWF0ZVR3b0ZhY3RvciIsImNsZWFyVHdvRmFjdG9yIiwic2hvd1R3b0ZhY3RvclNlY3JldCIsInRlc3RUd29GYWN0b3IiLCJzQ29kZSIsImVuYWJsZVR3b0ZhY3RvciIsImJFbmFibGUiLCJjbGVhclR3b0ZhY3RvckluZm8iLCJjb250YWN0c1N5bmMiLCJDT05UQUNUU19TWU5DX0FKQVhfVElNRU9VVCIsInNhdmVDb250YWN0c1N5bmNEYXRhIiwic1VybCIsInNVc2VyIiwiYWNjb3VudFNldHVwIiwiYk5ldyIsImFjY291bnREZWxldGUiLCJzRW1haWxUb0RlbGV0ZSIsImFjY291bnRzQW5kSWRlbnRpdGllc1NvcnRPcmRlciIsImFBY2NvdW50cyIsImFJZGVudGl0aWVzIiwiaWRlbnRpdHlVcGRhdGUiLCJzSWQiLCJzTmFtZSIsInNSZXBseVRvIiwic0JjYyIsInNTaWduYXR1cmUiLCJiU2lnbmF0dXJlSW5zZXJ0QmVmb3JlIiwiaWRlbnRpdHlEZWxldGUiLCJzSWRUb0RlbGV0ZSIsImFjY291bnRzQW5kSWRlbnRpdGllcyIsImFjY291bnRzQ291bnRzIiwiZmlsdGVyc1NhdmUiLCJmaWx0ZXJzIiwicmF3IiwiaXNSYXdJc0FjdGl2ZSIsInRvSnNvbiIsImZpbHRlcnNHZXQiLCJ0ZW1wbGF0ZXMiLCJ0ZW1wbGF0ZUdldEJ5SWQiLCJzSUQiLCJ0ZW1wbGF0ZURlbGV0ZSIsInRlbXBsYXRlU2V0dXAiLCJzQm9keSIsInNGb2xkZXJGdWxsTmFtZVJhdyIsImlMaW1pdCIsInNTZWFyY2giLCJzVGhyZWFkVWlkIiwiYlNpbGVudCIsInRocmVhZHNBbGxvd2VkIiwiaW5ib3hVaWROZXh0IiwiREVGQVVMVF9BSkFYX1RJTUVPVVQiLCJTRUFSQ0hfQUpBWF9USU1FT1VUIiwiQmFzZTY0IiwicHJvamVjdEhhc2giLCJmcm9tQ2hhckNvZGUiLCJMaW1pdCIsIlVzZVRocmVhZHMiLCJtZXNzYWdlVXBsb2FkQXR0YWNobWVudHMiLCJhRG93bmxvYWRzIiwiaVVpZCIsImNvbXBvc2VVcGxvYWRFeHRlcm5hbHMiLCJhRXh0ZXJuYWxzIiwiY29tcG9zZVVwbG9hZERyaXZlIiwic0FjY2Vzc1Rva2VuIiwicmVxdWVzdCIsInVpZHMiLCJtZXNzYWdlTGlzdEl0ZW0iLCJyZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUiLCJmb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5IiwiYUZvbGRlcnMiLCJsb2dvdXQiLCJtZXNzYWdlU2V0RmxhZ2dlZCIsImFVaWRzIiwiYlNldEZsYWdnZWQiLCJtZXNzYWdlU2V0U2VlbiIsImJTZXRTZWVuIiwibWVzc2FnZVNldFNlZW5Ub0FsbCIsImFUaHJlYWRVaWRzIiwic2F2ZU1lc3NhZ2UiLCJzSWRlbnRpdHlJRCIsInNNZXNzYWdlRm9sZGVyIiwic01lc3NhZ2VVaWQiLCJzRHJhZnRGb2xkZXIiLCJzVG8iLCJzQ2MiLCJzU3ViamVjdCIsImJUZXh0SXNIdG1sIiwic1RleHQiLCJhQXR0YWNobWVudHMiLCJhRHJhZnRJbmZvIiwic0luUmVwbHlUbyIsInNSZWZlcmVuY2VzIiwiYk1hcmtBc0ltcG9ydGFudCIsIlNBVkVfTUVTU0FHRV9BSkFYX1RJTUVPVVQiLCJzZW5kUmVhZFJlY2VpcHRNZXNzYWdlIiwic1JlYWRSZWNlaXB0Iiwic2VuZE1lc3NhZ2UiLCJzU2VudEZvbGRlciIsImJSZXF1ZXN0RHNuIiwiYlJlcXVlc3RSZWFkUmVjZWlwdCIsIlNFTkRfTUVTU0FHRV9BSkFYX1RJTUVPVVQiLCJzYXZlU3lzdGVtRm9sZGVycyIsInNhdmVTZXR0aW5nc0hlbHBlciIsInZhbHVlRm4iLCJjaGFuZ2VQYXNzd29yZCIsInByZXZQYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiZm9sZGVyQ2xlYXIiLCJmb2xkZXJTZXRTdWJzY3JpYmUiLCJiU3Vic2NyaWJlIiwiZm9sZGVyU2V0Q2hlY2thYmxlIiwiYkNoZWNrYWJsZSIsIm1lc3NhZ2VzTW92ZSIsInNUb0ZvbGRlciIsInNMZWFybmluZyIsImJNYXJrQXNSZWFkIiwibWVzc2FnZXNDb3B5IiwibWVzc2FnZXNEZWxldGUiLCJhcHBEZWxheVN0YXJ0IiwicXVvdGEiLCJjb250YWN0cyIsImNvbnRhY3RTYXZlIiwic1JlcXVlc3RVaWQiLCJhUHJvcGVydGllcyIsImNvbnRhY3RzRGVsZXRlIiwic3VnZ2VzdGlvbnMiLCJzUXVlcnkiLCJpUGFnZSIsImNsZWFyVXNlckJhY2tncm91bmQiLCJmYWNlYm9va1VzZXIiLCJmYWNlYm9va0Rpc2Nvbm5lY3QiLCJ0d2l0dGVyVXNlciIsInR3aXR0ZXJEaXNjb25uZWN0IiwiZ29vZ2xlVXNlciIsImdvb2dsZURpc2Nvbm5lY3QiLCJzb2NpYWxVc2VycyIsIkFic3RyYWN0QWpheFJlbW90ZSIsIlNVQlMiLCJzdWIiLCJzdWJGdW5jIiwic3ViTmFtZSIsInB1YiIsIlBsdWdpbnMiLCJpdGVtcyIsIk1FU1NBR0VTX1BFUl9QQUdFIiwiTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIiwiQ09OVEFDVFNfUEVSX1BBR0UiLCJDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUiLCJJTUFQX0RFRkFVTFRfUE9SVCIsIklNQVBfREVGQVVMVF9TRUNVUkVfUE9SVCIsIlNNVFBfREVGQVVMVF9QT1JUIiwiU01UUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU0lFVkVfREVGQVVMVF9QT1JUIiwiQUpBWF9FUlJPUl9MSU1JVCIsIlRPS0VOX0VSUk9SX0xJTUlUIiwiUkFJTkxPT1BfVFJJQUxfS0VZIiwiREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMiLCJEQVRBX0lNQUdFX1RSQU5TUF9QSUMiLCJEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDIiwiQWJzdHJhY3RWaWV3TmV4dCIsIk5vbmUiLCJzQ3VycmVudEtleVNjb3BlIiwic0RlZmF1bHRLZXlTY29wZSIsImJEaXNhYmVDbG9zZU9uRXNjIiwiRXNjIiwiQmFja3NwYWNlIiwiU29jaWFsU3RvcmUiLCJnb29nbGUiLCJ0d2l0dGVyIiwiZmFjZWJvb2siLCJkcm9wYm94IiwiY2xpZW50SUQiLCJjbGllbnRTZWNyZXQiLCJhcGlLZXkiLCJ1c2VyTmFtZSIsImxvZ2dpbmVkIiwiYXV0aCIsImF1dGhHbWFpbCIsImRyaXZlIiwicHJldmlldyIsImNsaWVudFNldHRpbmdzIiwiYXBpS2V5U2V0dGluZ3MiLCJhcHBJRCIsImFwcFNlY3JldCIsInN1cHBvcnRlZCIsImNvbnN1bWVyS2V5IiwiY29uc3VtZXJTZWNyZXQiLCJwb3B1bGF0ZSIsImFwcGVuZERyb3Bib3giLCJEcm9wYm94IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JpcHQiLCJhcHBlbmRDaGlsZCIsIkFwcFVzZXJTdG9yZSIsImN1cnJlbnRBdWRpbyIsIkZvbGRlckxpc3QiLCJjb21wb3NlSW5FZGl0IiwiY29udGFjdHNBdXRvc2F2ZSIsInVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyIsImNvbnRhY3RzSXNBbGxvd2VkIiwiYXR0YWNobWVudHNBY3Rpb25zIiwiZGV2RW1haWwiLCJkZXZQYXNzd29yZCIsIkFic3RyYWN0QXBwU3RvcmUiLCJBYnN0cmFjdENvbXBvbmVudCIsImZ1bmNUb0Rpc3Bvc2UiLCJjb21wb25lbnRFeHBvcnRIZWxwZXIiLCJDbGFzc09iamVjdCIsImNyZWF0ZVZpZXdNb2RlbCIsImNvbXBvbmVudEluZm8iLCJpbmxpbmUiLCJTZXR0aW5nc1VzZXJTdG9yZSIsImlBdXRvTG9nb3V0VGltZXIiLCJTaWRlUHJldmlldyIsIkJvdHRvbVByZXZpZXciLCJlZGl0b3JEZWZhdWx0VHlwZSIsIkh0bWxGb3JjZWQiLCJQbGFpbkZvcmNlZCIsInVzZUNoZWNrYm94ZXNJbkxpc3QiLCJhbGxvd0RyYWZ0QXV0b3NhdmUiLCJyZXBseVNhbWVGb2xkZXIiLCJhdXRvTG9nb3V0IiwiVGltZTMwbUluTWluIiwidXNlUHJldmlld1BhbmUiLCJFdmVudHMiLCJUaW1lMW0iLCJTSU1QTEVfSE9PS1MiLCJVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTIiwiQURNSU5fVklFV19NT0RFTFNfSE9PS1MiLCJhZGRIb29rIiwibWFpblNldHRpbmdzR2V0IiwicmVtb3RlUmVxdWVzdCIsInBhcmFtZXRlcnMiLCJhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluIiwicnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyIsIktub2luIiwidmlldyIsInBsdWdpblNlY3Rpb24iLCJwbHVnaW5zIiwiUGdwVXNlclN0b3JlIiwib3BlbnBncCIsIm9wZW5wZ3BrZXlzIiwib3BlbnBncEtleXJpbmciLCJvcGVucGdwa2V5c1B1YmxpYyIsImlzUHJpdmF0ZSIsIm9wZW5wZ3BrZXlzUHJpdmF0ZSIsImlzU3VwcG9ydGVkIiwiZmluZEtleUJ5SGV4Iiwia2V5cyIsImlkcyIsImZpbmRQdWJsaWNLZXlCeUhleCIsImZpbmRQcml2YXRlS2V5QnlIZXgiLCJmaW5kUHVibGljS2V5c0J5RW1haWwiLCJlbWFpbHMiLCJnZXROYXRpdmVLZXlzIiwiZmluZFB1YmxpY0tleXNCeVNpZ25pbmdLZXlJZHMiLCJzaWduaW5nS2V5SWRzIiwidG9IZXgiLCJmaW5kUHJpdmF0ZUtleXNCeUVuY3J5cHRpb25LZXlJZHMiLCJlbmNyeXB0aW9uS2V5SWRzIiwicmVjaXBpZW50cyIsInJldHVybldyYXBLZXlzIiwiZmluZEFsbFByaXZhdGVLZXlzQnlFbWFpbE5vdE5hdGl2ZSIsImZpbmRQdWJsaWNLZXlCeUVtYWlsTm90TmF0aXZlIiwiZmluZFByaXZhdGVLZXlCeUVtYWlsTm90TmF0aXZlIiwiZmluZEFsbFB1YmxpY0tleXNCeUVtYWlsTm90TmF0aXZlIiwiZmluZFByaXZhdGVLZXlCeUVtYWlsIiwicGFzc3dvcmQiLCJwcml2YXRlS2V5IiwiZGVjcnlwdCIsImZpbmRTZWxmUHJpdmF0ZUtleSIsImRlY3J5cHRNZXNzYWdlIiwiZ2V0RW5jcnlwdGlvbktleUlkcyIsInByaXZhdGVLZXlzIiwiZGVjcnlwdGVkS2V5IiwiZGVjcnlwdGVkTWVzc2FnZSIsInByaW1hcnlLZXkiLCJrZXlpZCIsInZlcmlmeU1lc3NhZ2UiLCJvVmFsaWRLZXkiLCJhU2lnbmluZ0tleUlkcyIsImdldFNpZ25pbmdLZXlJZHMiLCJwdWJsaWNLZXlzIiwidmVyaWZ5IiwidmFsaWQiLCJjb250cm9sc0hlbHBlciIsInZlckNvbnRyb2wiLCJzdWNjZXNzIiwiZG9tQ29udHJvbEVuY3J5cHRlZENsaWNrSGVscGVyIiwic3RvcmUiLCJhcm1vcmVkTWVzc2FnZSIsInJlYWRBcm1vcmVkIiwiZ2V0VGV4dCIsInZhbGlkUHJpdmF0ZUtleSIsInZhbGlkUHVibGljS2V5IiwidXNlciIsImtleUlkcyIsImFkZGl0aW9uYWwiLCJkb21Db250cm9sU2lnbmVkQ2xpY2tIZWxwZXIiLCJjbGVhcnRleHQiLCJ2YWxpZEtleSIsInJhaW5Mb29wTWVzc2FnZSIsImVuY3J5cHRlZCIsInNpZ25lZCIsImdldEVtYWlscyIsImRvbVRleHQiLCJBY2NvdW50VXNlclN0b3JlIiwicGFyZW50RW1haWwiLCJzaWduYXR1cmUiLCJhY2NvdW50cyIsImFjY291bnRzRW1haWxzIiwiYWNjb3VudHNVbnJlYWRDb3VudCIsImlzUm9vdEFjY291bnQiLCJTdXBwb3J0ZWRTdG9yYWdlRHJpdmVyIiwiTG9jYWxTdG9yYWdlRHJpdmVyIiwiQ29va2llRHJpdmVyIiwiU3RvcmFnZURyaXZlciIsImRyaXZlciIsInNldCIsImdldCIsIl9tb21lbnQiLCJfbW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93VW5peCIsInVuaXgiLCJtb21lbnROb3ciLCJzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIiLCJzdWJ0cmFjdCIsImZvcm1hdCIsImZvcm1hdEN1c3RvbVNob3J0RGF0ZSIsIm5vdyIsImZyb21Ob3ciLCJUSU1FIiwieWVhciIsInRpbWVTdGFtcEluVVRDIiwiZm9ybWF0U3RyIiwidGltZSIsImVtYWlsQXJyYXlUb1N0cmluZyIsImZyaWVuZGx5VmlldyIsIndyYXBXaXRoTGluayIsImVtYWlsQXJyYXlUb1N0cmluZ0NsZWFyIiwiZW1haWxBcnJheUZyb21Kc29uIiwicmVwbHlIZWxwZXIiLCJpbnB1dEVtYWlscyIsInVuaWMiLCJsb2NhbEVtYWlscyIsIkFic3RyYWN0TW9kZWwiLCJtb2RlbE5hbWUiLCJzTW9kZWxOYW1lIiwicmVnRGlzcG9zYWJsZXMiLCJMYW5ndWFnZVN0b3JlIiwibGFuZ3VhZ2VzIiwibGFuZ3VhZ2VzQWRtaW4iLCJsYW5ndWFnZUFkbWluIiwidXNlckxhbmd1YWdlIiwidXNlckxhbmd1YWdlQWRtaW4iLCJhTGFuZ3VhZ2VzIiwiYUxhbmd1YWdlc0FkbWluIiwiZGtpbVN0YXR1cyIsImRraW1WYWx1ZSIsImNsZWFyRHVwbGljYXRlTmFtZSIsImluaXRCeUpzb24iLCJ2YWxpZGF0ZSIsIndpdGhvdXROYW1lIiwiTmFtZSIsIkVtYWlsIiwiRGtpbVN0YXR1cyIsIkRraW1WYWx1ZSIsInVzZUVuY29kZUh0bWwiLCJwYXJzZWRSZXN1bHQiLCJhZGRyZXNzcGFyc2VyIiwiZXhpc3RzIiwiYWRkcmVzcyIsImVtYWlsQWRkcmVzcyIsIkF1ZGlvIiwicGxheWVyIiwiY3JlYXRlTmV3T2JqZWN0IiwicGxheSIsImNhblBsYXlUeXBlIiwic3VwcG9ydGVkTXAzIiwic3VwcG9ydGVkV2F2Iiwic3VwcG9ydGVkT2dnIiwic3VwcG9ydGVkTm90aWZpY2F0aW9uIiwic3RvcEZuIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhdXNlIiwicHJlbG9hZCIsImxvb3AiLCJhdXRvcGxheSIsIm11dGVkIiwicGF1c2VkIiwiY2xlYXJOYW1lIiwicGxheU1wMyIsInBsYXlPZ2ciLCJwbGF5V2F2IiwicGxheU5vdGlmaWNhdGlvbiIsIm5vdGlmaWNhdG9yIiwiQWJzdHJhY3RJbnB1dCIsImxhYmVsIiwicHJlTGFiZWwiLCJlbmFibGUiLCJwbGFjZWhvbGRlciIsImxhYmVsZWQiLCJwcmVMYWJlbGVkIiwidHJpZ2dlcmVkIiwiY2xhc3NGb3JUcmlnZ2VyIiwic3VmZml4VmFsdWUiLCJzZXRUcmlnZ2VyU3RhdGUiLCJVc2VyQWpheFVzZXJQcm9taXNlcyIsImZvbGRlcnNUaW1lb3V0IiwiZm9sZGVyc1JlbG9hZCIsImZUcmlnZ2VyIiwicG9zdFJlcXVlc3QiLCJQcm9taXNlc1BvcHVsYXRvciIsImZvbGRlcnNMaXN0IiwiZm9sZGVyc0FkZGl0aW9uYWxQYXJhbWV0ZXJzIiwiZm9sZGVyc1JlbG9hZFdpdGhUaW1lb3V0Iiwic2V0VHJpZ2dlciIsImZvbGRlckRlbGV0ZSIsImZvbGRlckNyZWF0ZSIsInNOZXdGb2xkZXJOYW1lIiwic1BhcmVudE5hbWUiLCJmb2xkZXJSZW5hbWUiLCJzUHJldkZvbGRlckZ1bGxOYW1lUmF3Iiwic0FjdGlvbiIsImFIYXNoZXMiLCJ3ZWxjb21lQ2xvc2UiLCJBYnN0cmFjdEFqYXhQcm9taXNlcyIsIklkZW50aXR5VXNlclN0b3JlIiwiaWRlbnRpdGllcyIsImlkZW50aXRpZXNJRFMiLCJDb250YWN0VXNlclN0b3JlIiwiaW1wb3J0aW5nIiwic3luY2luZyIsImV4cG9ydGluZ1ZjZiIsImV4cG9ydGluZ0NzdiIsImFsbG93Q29udGFjdHNTeW5jIiwiZW5hYmxlQ29udGFjdHNTeW5jIiwiY29udGFjdHNTeW5jVXJsIiwiY29udGFjdHNTeW5jVXNlciIsImNvbnRhY3RzU3luY1Bhc3MiLCJqYXNzbCIsImFzeW5jIiwiYWxsIiwib25lcnJvciIsIlRoZW1lU3RvcmUiLCJ0aGVtZXMiLCJ0aGVtZUJhY2tncm91bmROYW1lIiwidGhlbWVCYWNrZ3JvdW5kSGFzaCIsIk5vdGlmaWNhdGlvblVzZXJTdG9yZSIsImVuYWJsZVNvdW5kTm90aWZpY2F0aW9uIiwic291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZCIsImFsbG93RGVza3RvcE5vdGlmaWNhdGlvbiIsImRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucyIsIk5vdFN1cHBvcnRlZCIsIk5vdGlmaWNhdGlvbkNsYXNzIiwibm90aWZpY2F0aW9uQ2xhc3MiLCJwZXJtaXNzaW9uIiwiQWxsb3dlZCIsIkRlbmllZCIsIk5vdEFsbG93ZWQiLCJ3ZWJraXROb3RpZmljYXRpb25zIiwiY2hlY2tQZXJtaXNzaW9uIiwiZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbiIsInJlcXVlc3RQZXJtaXNzaW9uIiwiaW5pdE5vdGlmaWNhdGlvblBsYXllciIsImlzRGVza3RvcE5vdGlmaWNhdGlvblN1cHBvcnRlZCIsImlzRGVza3RvcE5vdGlmaWNhdGlvbkRlbmllZCIsInNraXBTZXR0aW5nIiwiaW1hZ2VTcmMiLCJuZXNzYWdlRGF0YSIsIm5vdGlmaWNhdGlvbiIsImljb24iLCJvbmNsaWNrIiwibG9jYWxOb3RpZmljYXRpb25zIiwiY2FuY2VsIiwiVGltZTdzIiwiQ29tcG9zZVBvcHVwVmlldyIsInBvcHVwIiwic2VsZiIsImNhbkJlU2VudE9yU2F2ZWQiLCJpc0RyYWZ0Rm9sZGVyTWVzc2FnZSIsImFsbG93Q29udGFjdHMiLCJkcm9wYm94RW5hYmxlZCIsImRyaXZlRW5hYmxlZCIsImZFbWFpbE91dEluSGVscGVyIiwiaWRlbnRpdHkiLCJpc0luIiwiaWRlbnRpdHlFbWFpbCIsIm9MYXN0TWVzc2FnZSIsIm9FZGl0b3IiLCJiRnJvbURyYWZ0Iiwic0xhc3RGb2N1c2VkRmllbGQiLCJyZXNpemVyVHJpZ2dlciIsImFsbG93Rm9sZGVycyIsIkZvbGRlcnMiLCJiU2tpcE5leHRIaWRlIiwiaWRlbnRpdGllc0Ryb3Bkb3duVHJpZ2dlciIsInJlcGx5VG8iLCJyZXF1ZXN0RHNuIiwicmVxdWVzdFJlYWRSZWNlaXB0IiwibWFya0FzSW1wb3J0YW50Iiwic2VuZEVycm9yIiwic2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3IiLCJzYXZlZEVycm9yIiwic2VuZEJ1dHRvblN1Y2Nlc3MiLCJzZW5kRXJyb3JEZXNjIiwic2F2ZWRFcnJvckRlc2MiLCJzYXZlZFRpbWUiLCJzYXZlZFRpbWVUZXh0IiwibW9tZW50b3JGb3JtYXQiLCJlbXB0eVRvRXJyb3IiLCJlbXB0eVRvRXJyb3JUb29sdGlwIiwiYXR0YWNobWVudHNJblByb2Nlc3NFcnJvciIsImF0dGFjaG1lbnRzSW5FcnJvckVycm9yIiwiYXR0YWNobWVudHNFcnJvclRvb2x0aXAiLCJzaG93Q2MiLCJzaG93QmNjIiwic2hvd1JlcGx5VG8iLCJkcmFmdFVpZCIsInNlbmRpbmciLCJzYXZpbmciLCJhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzSW5Qcm9jZXNzIiwiY29tcGxldGUiLCJhdHRhY2htZW50c0luUmVhZHkiLCJhdHRhY2htZW50c0luRXJyb3IiLCJhdHRhY2htZW50c0NvdW50IiwiYXR0YWNobWVudHNJbkVycm9yQ291bnQiLCJhdHRhY2htZW50c0luUHJvY2Vzc0NvdW50IiwiYXR0YWNobWVudHNQbGFjZSIsImNvbXBvc2VVcGxvYWRlckJ1dHRvbiIsImNvbXBvc2VVcGxvYWRlckRyb3BQbGFjZSIsImRyYWdBbmREcm9wRW5hYmxlZCIsImRyYWdBbmREcm9wT3ZlciIsImRyYWdBbmREcm9wVmlzaWJsZSIsImF0dGFjaGVNdWx0aXBsZUFsbG93ZWQiLCJhZGRBdHRhY2htZW50RW5hYmxlZCIsImNvbXBvc2VFZGl0b3JBcmVhIiwiSWRlbnRpdHlTdG9yZSIsImlkZW50aXRpZXNPcHRpb25zIiwiZm9ybWF0dGVkTmFtZSIsImN1cnJlbnRJZGVudGl0eSIsImN1cnJlbnRJZGVudGl0eVZpZXciLCJyZXNpemVyIiwic2VuZE1lc3NhZ2VSZXNwb25zZSIsInNhdmVNZXNzYWdlUmVzcG9uc2UiLCJpc0VtcHR5Rm9ybSIsInNhdmVDb21tYW5kIiwiZHJvcGJveEFwaUtleSIsImRyaXZlVmlzaWJsZSIsImRyaXZlQ2FsbGJhY2siLCJvbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cyIsInRyeVRvQ2xvc2VQb3B1cCIsImVtYWlsc1NvdXJjZSIsImF1dG9zYXZlRnVuY3Rpb24iLCJpVGltZXIiLCJzZW5kQ29tbWFuZCIsIlNlbnQiLCJnZXREYXRhIiwicHJlcGVhckF0dGFjaG1lbnRzRm9yU2VuZE9yU2F2ZSIsImF1dG9zYXZlU3RhcnQiLCJkZWxldGVDb21tYW5kIiwiUG9wdXBzQXNrVmlld01vZGVsIiwiZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyV2l0aG91dENoZWNrIiwic2tpcENvbW1hbmQiLCJjb250YWN0c0NvbW1hbmQiLCJkcm9wYm94Q29tbWFuZCIsImNob29zZSIsImZpbGVzIiwiYWRkRHJvcGJveEF0dGFjaG1lbnQiLCJsaW5rVHlwZSIsIm11bHRpc2VsZWN0IiwiZHJpdmVDb21tYW5kIiwiZHJpdmVPcGVuUG9wdXAiLCJhdXRvc2F2ZVN0b3AiLCJmUmVzcG9uc2UiLCJnZXRBdXRvY29tcGxldGUiLCJ0ZXJtIiwiYURhdGEiLCJvRW1haWxJdGVtIiwib3Blbk9wZW5QZ3BQb3B1cCIsInNldFBsYWluIiwicmVsb2FkRHJhZnRGb2xkZXIiLCJyZWxvYWRNZXNzYWdlTGlzdCIsImZpbmRJZGVudGl0eUJ5TWVzc2FnZSIsImNvbXBvc2VUeXBlIiwicmVzdWx0SW5kZXgiLCJyZXN1bHRJZGVudGl0eSIsImlkZW50aXRpZXNDYWNoZSIsImZFYWNoSGVscGVyIiwiUmVwbHkiLCJSZXBseUFsbCIsIkZvcndhcmQiLCJGb3J3YXJkQXNBdHRhY2htZW50IiwiZGVsaXZlcmVkVG8iLCJmcm9tIiwic2VsZWN0SWRlbnRpdHkiLCJzZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkiLCJzdGF0dXNSZXN1bHQiLCJOZXdGb2xkZXIiLCJOZXdVaWQiLCJNZXNzYWdlU3RvcmUiLCJvbkhpZGUiLCJyZXNldCIsImZPbkluaXQiLCJiSHRtbCIsImNvbnZlclNpZ25hdHVyZSIsImZyb21MaW5lIiwibW9tZW50cyIsIm1vbWVudFJlZ3giLCJlbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyIiwiZXhlYyIsInNldFNpZ25hdHVyZSIsInNpZ25hdHVyZUluc2VydEJlZm9yZSIsIm9uU2hvdyIsIm9NZXNzYWdlT3JBcnJheSIsImFUb0VtYWlscyIsImFDY0VtYWlscyIsImFCY2NFbWFpbHMiLCJzQ3VzdG9tU3ViamVjdCIsInNDdXN0b21QbGFpblRleHQiLCJpbml0T25TaG93IiwiYWRkRW1haWxzVG8iLCJvbldhcm1VcCIsIm1vZGVUb2dnbGUiLCJmS29WYWx1ZSIsImJGcmllbmRseSIsInNUeXBlIiwic0Zyb20iLCJzRGF0ZSIsInNSZXBseVRpdGxlIiwiZXhjbHVkZUVtYWlsIiwibUVtYWlsIiwibGluZUNvbXBvc2VUeXBlIiwiZGF0ZVRpbWVTdGFtcEluVVRDIiwiY2xvbmVkVGV4dCIsInJlc3BseUFsbFBhcnRzIiwicmVwbHlFbWFpbHMiLCJwcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzIiwic01lc3NhZ2VJZCIsInJlcGx5QWxsRW1haWxzIiwicmVmZXJlbmNlcyIsIkVkaXRBc05ldyIsImZyb21Ub0xpbmUiLCJ0b1RvTGluZSIsImNjVG9MaW5lIiwic2V0SHRtbCIsInNldEZvY3VzSW5Qb3B1cCIsImFkZE1lc3NhZ2VBc0F0dGFjaG1lbnQiLCJkb3dubG9hZHMiLCJnZXRBdHRhY2htZW50c0Rvd25sb2Fkc0ZvclVwbG9hZCIsInRlbXBOYW1lIiwiYXR0YWNobWVudCIsImdldEF0dGFjaG1lbnRCeUlkIiwid2FpdGluZyIsInVwbG9hZGluZyIsInNldE1lc3NhZ2VBdHRhY2htZW50RmFpbGVkRG93bmxvYWRUZXh0Iiwib25TaG93V2l0aERlbGF5Iiwib25CdWlsZCIsImluaXRVcGxvYWRlciIsImhhc0ZvY3VzIiwiZ2V0U2NyaXB0IiwiZ2FwaSIsIlRpbWU1cyIsImFjY2Vzc1Rva2VuIiwicGlja2VyIiwiUmVzcG9uc2UiLCJBQ1RJT04iLCJBY3Rpb24iLCJQSUNLRUQiLCJET0NVTUVOVFMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwicmVzcG9uc2VUZXh0IiwiZkV4cG9ydCIsIm1pbWVUeXBlIiwiZXhwb3J0TGlua3MiLCJkb3dubG9hZFVybCIsImFkZERyaXZlQXR0YWNobWVudCIsInNlbmQiLCJkcml2ZUNyZWF0ZVBpa2VyIiwiYXV0aFRva2VuIiwiYWNjZXNzX3Rva2VuIiwibG9hZCIsImRyaXZlUGlja2VyIiwiUGlja2VyQnVpbGRlciIsImFkZFZpZXciLCJWaWV3SWQiLCJET0NTIiwic2V0QXBwSWQiLCJzZXRPQXV0aFRva2VuIiwic2V0Q2FsbGJhY2siLCJlbmFibGVGZWF0dXJlIiwiRmVhdHVyZSIsIk5BVl9ISURERU4iLCJidWlsZCIsInNldFZpc2libGUiLCJnZXRUb2tlbiIsImF1dGhSZXN1bHQiLCJ0b2tlbiIsImF1dGhvcml6ZSIsImNhbmNlbEF0dGFjaG1lbnRIZWxwZXIiLCJvSnVhIiwidXBsb2FkQ2FjaGUiLCJhdHRhY2htZW50U2l6ZUxpbWl0IiwiSnVhIiwibG9hZGVkIiwidG90YWwiLCJwcm9ncmVzcyIsImZsb29yIiwiRmlsZU5hbWUiLCJTaXplIiwiQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCIsImVycm9yQ29kZSIsImF0dGFjaG1lbnRKc29uIiwiQXR0YWNobWVudCIsImluaXRCeVVwbG9hZEpzb24iLCJpc0RyYWdBbmREcm9wU3VwcG9ydGVkIiwiaXNJbmxpbmUiLCJDSUQiLCJjb250ZW50TG9jYXRpb24iLCJmcm9tTWVzc2FnZSIsImFkZEF0dGFjaG1lbnRIZWxwZXIiLCJkcm9wYm94RmlsZSIsIm1TaXplIiwiYnl0ZXMiLCJkcml2ZUZpbGUiLCJmaWxlU2l6ZSIsImlzTGlua2VkIiwiZXN0aW1hdGVkU2l6ZSIsImNpZCIsInJlbW92ZUxpbmtlZEF0dGFjaG1lbnRzIiwiYXJyYWNobWVudCIsImluY2x1ZGVBdHRhY2htZW50SW5Qcm9ncmVzcyIsIndpdGhvdXRBdHRhY2htZW50IiwiQWJzdHJhY3RTY3JlZW4iLCJzU2NyZWVuTmFtZSIsImFWaWV3TW9kZWxzIiwicm91dGVzIiwib0Nyb3NzIiwiZk1hdGNoZXIiLCJvblJvdXRlIiwicnVsZXMiLCJTVE9SQUdFX0tFWSIsIlRJTUVfS0VZIiwiaXNTdG9yYWdlU3VwcG9ydGVkIiwic3RvcmFnZU5hbWUiLCJzdG9yYWdlSXNBdmFpbGFibGUiLCJzZXRJdGVtIiwicyIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiU0VTU19TVE9SQUdFIiwic2Vzc2lvblN0b3JhZ2UiLCJXSU5fU1RPUkFHRSIsIl9fZ2V0IiwiX19zZXQiLCJzZXRUaW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJnZXRIYXNoIiwiYXBwRGF0YSIsImNsZWFySGFzaCIsImNoZWNrVGltZXN0YW1wIiwiQWJzdHJhY3RDaGVja2JveCIsImRpc2FibGUiLCJyZWFkT25seSIsImludmVydGVkIiwibGFiZWxBbmltYXRlZCIsIlRlbXBsYXRlVXNlclN0b3JlIiwidGVtcGxhdGVzTmFtZXMiLCJza2lwRmlyc3QiLCJzdGF0aWNGaWxlVHlwZSIsIlVua25vd24iLCJtaW1lVHlwZVBhcnRzIiwiVmlkZW8iLCJDb2RlIiwiRW1sIiwiVGV4dCIsIlBkZiIsIkNlcnRpZmljYXRlIiwiQ2VydGlmaWNhdGVCaW4iLCJXb3JkVGV4dCIsIlNoZWV0IiwiUHJlc2VudGF0aW9uIiwic3RhdGljSWNvbkNsYXNzIiwiZmlsZVR5cGUiLCJyZXN1bHRUZXh0IiwicmVzdWx0Q2xhc3MiLCJzdGF0aWNDb21iaW5lZEljb25DbGFzcyIsInR5cGVzIiwiQXR0YWNobWVudE1vZGVsIiwiZmlsZU5hbWVFeHQiLCJpc1RodW1ibmFpbCIsImNpZFdpdGhPdXRUYWdzIiwibWltZUluZGV4IiwiZnJhbWVkIiwiYlJlc3VsdCIsIk1pbWVUeXBlIiwiRXN0aW1hdGVkU2l6ZSIsIklzSW5saW5lIiwiSXNMaW5rZWQiLCJJc1RodW1ibmFpbCIsIkNvbnRlbnRMb2NhdGlvbiIsIkRvd25sb2FkIiwiTWltZUluZGV4IiwiRnJhbWVkIiwiaXNJbWFnZSIsImlzTXAzIiwiaXNPZ2ciLCJpc1dhdiIsImhhc1RodW1ibmFpbCIsImlzVGV4dCIsImlzUGRmIiwiaXNGcmFtZWQiLCJnb29nbGVQcmV2aWV3U3VwcG9ydGVkIiwiaGFzUHJldmlldyIsImhhc1ByZXBsYXkiLCJsaW5rRG93bmxvYWQiLCJsaW5rUHJldmlldyIsImxpbmtUaHVtYm5haWwiLCJsaW5rVGh1bWJuYWlsUHJldmlld1N0eWxlIiwibGlua0ZyYW1lZCIsImxpbmtQcmV2aWV3QXNQbGFpbiIsImxpbmtQcmV2aWV3TWFpbiIsImdlbmVyYXRlVHJhbnNmZXJEb3dubG9hZFVybCIsImhvc3QiLCJwYXRobmFtZSIsImV2ZW50RHJhZ1N0YXJ0IiwibG9jYWxFdmVudCIsIm9yaWdpbmFsRXZlbnQiLCJkYXRhVHJhbnNmZXIiLCJzZXREYXRhIiwiaWNvbkNsYXNzIiwiaWNvblRleHQiLCJDaGVja2JveENvbXBvbmVudCIsIm9uQmx1ciIsIm9uUmVhZHkiLCJvbk1vZGVDaGFuZ2UiLCIkZWxlbWVudCIsInJlc2l6ZUVkaXRvciIsInJ1bk9uQmx1ciIsImJsdXJUcmlnZ2VyIiwiYmx1clRpbWVyIiwiZm9jdXNUcmlnZ2VyIiwibW9kZSIsImNsZWFyQ2FjaGVkU2lnbmF0dXJlIiwiZXhlY0NvbW1hbmQiLCJjbGVhckNhY2hlIiwiY2hlY2tEaXJ0eSIsInJlc2V0RGlydHkiLCJ3cmFwSXNIdG1sIiwiX19wbGFpbiIsImdldFJhd0RhdGEiLCJzZXRNb2RlIiwiX19pbml0ZWQiLCJyZXBsYWNlSHRtbCIsImZpbmQiLCJzZXRSYXdEYXRhIiwiaW5pdEZ1bmMiLCJjb25maWciLCJhbGxvd1NvdXJjZSIsImJpdGkiLCJ0b29sYmFyR3JvdXBzIiwiX19jZmdJbml0ZWQiLCJyZW1vdmVCdXR0b25zIiwicmVtb3ZlUGx1Z2lucyIsImVudGVyTW9kZSIsIkNLRURJVE9SIiwiRU5URVJfQlIiLCJzaGlmdEVudGVyTW9kZSIsIkVOVEVSX1AiLCJlbnYiLCJpc0NvbXBhdGlibGUiLCJUYWIiLCJGaWxlUmVhZGVyIiwiZ2V0RmlsZXNDb3VudCIsImZpbGUiLCJnZXRGaWxlIiwiaW1hZ2VJZCIsInJlYWRlciIsIm9ubG9hZGVuZCIsInJlYWRBc0RhdGFVUkwiLCJyZW1vdmVNZW51SXRlbSIsIl9fcmVzaXphYmxlIiwiX19pbml0RWRpdG9yIiwiZm9jdXNNYW5hZ2VyIiwiaW5uZXJIZWlnaHQiLCJzZXRSZWFkT25seSIsInN0eWxlcyIsInJhaW5sb29wIiwicmFpbmxvb3BUaXAiLCJyYWlubG9vcEVycm9yVGlwIiwiRmlsdGVyVXNlclN0b3JlIiwibW9kdWxlcyIsIkFza1BvcHVwVmlldyIsImFza0Rlc2MiLCJ5ZXNCdXR0b24iLCJub0J1dHRvbiIsInllc0ZvY3VzIiwibm9Gb2N1cyIsImZZZXNBY3Rpb24iLCJmTm9BY3Rpb24iLCJiRm9jdXNZZXNPblNob3ciLCJQb3B1cEFzayIsImNsZWFyUG9wdXAiLCJ5ZXNDbGljayIsIm5vQ2xpY2siLCJmWWVzRnVuYyIsImZOb0Z1bmMiLCJpc0ZvY3VzWWVzT25TaG93IiwiUXVvdGFVc2VyU3RvcmUiLCJ1c2FnZSIsInBlcmNlbnRhZ2UiLCJwb3B1bGF0ZURhdGEiLCJCaXRMZW5ndGgxMDI0IiwiTGFuZ3VhZ2VzUG9wdXBWaWV3IiwiZkxhbmciLCJsYW5ncyIsInNlbGVjdGVkIiwic2V0TGFuZ3VhZ2VTZWxlY3Rpb24iLCJsYW5ndWFnZVRvb2x0aXBOYW1lIiwiY3VycmVudExhbmciLCJvbkJlZm9yZVNob3ciLCJmTGFuZ3VhZ2UiLCJjaGFuZ2VMYW5ndWFnZSIsIkFwcCIsInJsIiwicGx1Z2luU2V0dGluZ3NHZXQiLCJwbHVnaW5SZW1vdGVSZXF1ZXN0IiwiRW51bXMiLCJfX0FQUF9CT09UIiwiZkVycm9yQ2FsbGJhY2siLCJyYWlubG9vcFRFTVBMQVRFUyIsImlubmVySFRNTCIsImJvb3RzdGFydCIsIlRpbWUxMG1zIiwiYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzIiwiYWxsb3dMYW5ndWFnZXNPbkxvZ2luIiwibmV3TW92ZVRvRm9sZGVyIiwiaW50ZXJmYWNlQW5pbWF0aW9uIiwiYW5pbSIsInByZW0iLCJkZWZhdWx0UmVzcG9uc2UiLCJzUmVxdWVzdEFjdGlvbiIsIm9SZXF1ZXN0UGFyYW1ldGVycyIsImZDYWxsIiwibG9naW5BbmRMb2dvdXRSZWxvYWQiLCJDbGVhckF1dGgiLCJMb2dvdXQiLCJjbGVhckNsaWVudFNpZGVUb2tlbiIsImFqYXhSZXF1ZXN0IiwiZlJlc3VsdENhbGxiYWNrIiwiaVRpbWVPdXQiLCJzR2V0QWRkIiwiYWJvcnRBY3Rpb25zIiwiaXNQb3N0IiwiaGVhZGVycyIsImFjdGlvblRvQWJvcnQiLCJfX2Fib3J0ZWQiLCJYVG9rZW4iLCJvRGVmQWpheCIsImdsb2JhbCIsImFsd2F5cyIsIlRpbWUiLCJVcGRhdGVUb2tlbiIsInNldENsaWVudFNpZGVUb2tlbiIsImNhdGNoIiwib1BhcmFtZXRlcnMiLCJpVGltZW91dCIsImFBYm9ydEFjdGlvbnMiLCJnZXRQdWJsaWNLZXkiLCJqc1ZlcnNpb24iLCJzVmVyc2lvbiIsIkFic3RyYWN0U2V0dGluZ3NTY3JlZW4iLCJtZW51Iiwib0N1cnJlbnRTdWJTY3JlZW4iLCJvVmlld01vZGVsUGxhY2UiLCJzZXR1cFNldHRpbmdzIiwic2V0dGluZ3NTY3JlZW4iLCJSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCIsInZpZXdNb2RlbFBsYWNlIiwiU2V0dGluZ3NWaWV3TW9kZWwiLCJEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsIiwidG1wbCIsIlJlbW92ZVNldHRpbmdzVmlld01vZGVsIiwiRGVmYXVsdFZpZXdNb2RlbCIsImRlZmF1bHRSb3V0ZSIsInN1Ym5hbWUiLCJub3JtYWxpemVfIiwicnF1ZXN0IiwidmFscyIsIkFic3RyYWN0QXBwIiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlIiwiaXNMb2NhbEF1dG9jb21wbGV0ZSIsImlmcmFtZSIsImxhc3RFcnJvclRpbWUiLCJpSCIsImlXIiwiZ2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwiZGVmYXVsdF8iLCJhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJvTGluayIsImhyZWYiLCJjcmVhdGVFdmVudCIsIm9FIiwiTW91c2VFdmVudHMiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50Iiwic2V0V2luZG93VGl0bGUiLCJyZWRpcmVjdFRvQWRtaW5QYW5lbCIsIl9fcmxhaF9jbGVhciIsIl9fcmxhaF9zZXQiLCJpbklmcmFtZSIsImN1c3RvbUxvZ291dExpbmsiLCJoaXN0b3J5QmFjayIsImhpc3RvcnkiLCJiYWNrIiwibW9iaWxlIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyIiwiVGltZTFzIiwic3NtIiwiYWRkU3RhdGUiLCJvbkxlYXZlIiwiQWJzdHJhY3RCb290IiwiQWJzdHJhY3RSYWRpbyIsInByb2dyZXNzVGV4dCIsInAiLCJwcm9ncmVzc1N0eWxlIiwibG9jYWxTaXplIiwiZmlsZUV4dCIsIlRlbXBOYW1lIiwiQ29udGFjdFByb3BlcnR5TW9kZWwiLCJ0eXBlU3RyIiwicGxhY2Vob2xkZXJWYWx1ZSIsImxhcmdlVmFsdWUiLCJOb3RlIiwiRm9sZGVyU3lzdGVtUG9wdXBWaWV3Iiwic0Nob29zZU9uVGV4dCIsInNVbnVzZVRleHQiLCJmb2xkZXJTZWxlY3RMaXN0IiwiZlNldFN5c3RlbUZvbGRlcnMiLCJmU2F2ZVN5c3RlbUZvbGRlcnMiLCJTZW50Rm9sZGVyIiwiRHJhZnRGb2xkZXIiLCJTcGFtRm9sZGVyIiwiVHJhc2hGb2xkZXIiLCJBcmNoaXZlRm9sZGVyIiwiTnVsbEZvbGRlciIsIm5vdGlmaWNhdGlvblR5cGUiLCJBYnN0cmFjdEJhc2ljUHJvbWlzZXMiLCJmYXN0UmVzb2x2ZSIsIm1EYXRhIiwiZmFzdFJlamVjdCIsIkFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyIsImxvZ29JbWciLCJsb2dvVGl0bGUiLCJtb2JpbGVEZXZpY2UiLCJhbGxvd1NldHRpbmdzIiwiYWxsb3dIZWxwIiwiSGVscCIsImFjY291bnRFbWFpbCIsImFjY291bnRNZW51RHJvcGRvd25UcmlnZ2VyIiwiY2FwYUFkZGl0aW9uYWxBY2NvdW50cyIsIkFkZGl0aW9uYWxBY2NvdW50cyIsImFkZEFjY291bnRDbGljayIsInN0b3BQbGF5IiwiYWNjb3VudENsaWNrIiwiYWNjb3VudCIsImVtYWlsVGl0bGUiLCJzZXR0aW5nc0NsaWNrIiwic2V0dGluZ3NIZWxwIiwibG9nb3V0Q2xpY2siLCJTZWxlY3RvciIsImtvTGlzdCIsImtvU2VsZWN0ZWRJdGVtIiwia29Gb2N1c2VkSXRlbSIsInNJdGVtU2VsZWN0b3IiLCJzSXRlbVNlbGVjdGVkU2VsZWN0b3IiLCJzSXRlbUNoZWNrZWRTZWxlY3RvciIsInNJdGVtRm9jdXNlZFNlbGVjdG9yIiwibGlzdENoZWNrZWQiLCJpc0xpc3RDaGVja2VkIiwiZm9jdXNlZEl0ZW0iLCJzZWxlY3RlZEl0ZW0iLCJpdGVtU2VsZWN0ZWRUaHJvdHRsZSIsIml0ZW1TZWxlY3RlZCIsImF1dG9TZWxlY3QiLCJzdWJJdGVtIiwic2VsZWN0ZWRJdGVtVXNlQ2FsbGJhY2siLCJzTGFzdFVpZCIsImdldEl0ZW1VaWQiLCJhQ2FjaGUiLCJhQ2hlY2tlZENhY2hlIiwibUZvY3VzZWQiLCJtU2VsZWN0ZWQiLCJhSXRlbXMiLCJnZXROZXh0IiwiaXNOZXh0Rm9jdXNlZCIsImlzQ2hlY2tlZCIsImlzU2VsZWN0ZWQiLCJpU2VsZWN0TmV4dEhlbHBlciIsImlGb2N1c2VkTmV4dEhlbHBlciIsInNjcm9sbFRvRm9jdXNlZCIsIm9DYWxsYmFja3MiLCJvbkl0ZW1TZWxlY3QiLCJnb0Rvd24iLCJmb3JjZVNlbGVjdCIsIm5ld1NlbGVjdFBvc2l0aW9uIiwiRG93biIsImdvVXAiLCJVcCIsInVuc2VsZWN0IiwiY29udGVudFZpc2libGUiLCJjb250ZW50U2Nyb2xsYWJsZSIsIm9Db250ZW50VmlzaWJsZSIsIm9Db250ZW50U2Nyb2xsYWJsZSIsImFjdGlvbkNsaWNrIiwiY3VycmVudFRhcmdldCIsImV2ZW50S2V5IiwiSW5zZXJ0IiwiU3BhY2UiLCJIb21lIiwiRW5kIiwiUGFnZVVwIiwiUGFnZURvd24iLCJzaGlmdCIsIm9uQXV0b1NlbGVjdCIsImRvVXBVcE9yRG93bkRvd24iLCJvblVwVXBPckRvd25Eb3duIiwiZ2V0SXRlbVVpZENhbGxiYWNrIiwib25JdGVtR2V0VWlkIiwiaUV2ZW50S2V5Q29kZSIsImJTaGlmdEtleSIsImJGb3JjZVNlbGVjdCIsImlzTmV4dCIsImlzU3RvcCIsInBhZ2VTdGVwIiwibGlzdExlbiIsIiRmb2N1c2VkIiwidmlzaWJsZUhlaWdodCIsImZvY3VzZWRIZWlnaHQiLCJvdXRlckhlaWdodCIsInNjcm9sbFRvVG9wIiwiZmFzdCIsImV2ZW50Q2xpY2tGdW5jdGlvbiIsImNoYW5nZVJhbmdlIiwiaXNJblJhbmdlIiwibGlzdEl0ZW0iLCJsaW5lVWlkIiwibWV0YUtleSIsInNlbGVjdE1lc3NhZ2VJdGVtIiwiZXZlbnROYW1lIiwibWVzc2FnZUl0ZW0iLCJzdWJqZWN0UHJlZml4Iiwic3ViamVjdFN1ZmZpeCIsInByaW9yaXR5IiwiTm9ybWFsIiwicHJveHkiLCJmcm9tRW1haWxTdHJpbmciLCJmcm9tQ2xlYXJFbWFpbFN0cmluZyIsInRvRW1haWxzU3RyaW5nIiwidG9DbGVhckVtYWlsc1N0cmluZyIsInNlbmRlckVtYWlsc1N0cmluZyIsInNlbmRlckNsZWFyRW1haWxzU3RyaW5nIiwidW5zdWJzcmliZUxpbmtzIiwiaGFzQXR0YWNobWVudHMiLCJhdHRhY2htZW50c1NwZWNEYXRhIiwiYXR0YWNobWVudEljb25DbGFzcyIsInBncFNpZ25lZFZlcmlmeVN0YXR1cyIsInBncFNpZ25lZFZlcmlmeVVzZXIiLCJyZWFkUmVjZWlwdCIsImlzSW1wb3J0YW50IiwiSGlnaCIsIm9NZXNzYWdlTW9kZWwiLCJwcm9wZXJ0aWVzIiwiY2FycnkiLCJwcm9wZXJ0eSIsImdldFJlY2lwaWVudHNFbWFpbHMiLCJjb21wdXRlU2VuZGVyRW1haWwiLCJQcmlvcml0eSIsIkxvdyIsIkhhc2giLCJSZXF1ZXN0SGFzaCIsIkV4dGVybmFsUHJveHkiLCJUbyIsIkNjIiwiQmNjIiwiUmVwbHlUbyIsIkRlbGl2ZXJlZFRvIiwiVW5zdWJzcmliZUxpbmtzIiwiU3ViamVjdFBhcnRzIiwiRGF0ZVRpbWVTdGFtcEluVVRDIiwiSGFzQXR0YWNobWVudHMiLCJBdHRhY2htZW50c1NwZWNEYXRhIiwiVGhyZWFkcyIsIkRyYWZ0SW5mbyIsIk1lc3NhZ2VJZCIsIkluUmVwbHlUbyIsIlJlZmVyZW5jZXMiLCJQZ3BTaWduZWQiLCJQZ3BFbmNyeXB0ZWQiLCJmb3VuZGVkQ0lEcyIsIkZvdW5kZWRDSURzIiwiaW5pdEF0dGFjaG1lbnRzRnJvbUpzb24iLCJBdHRhY2htZW50cyIsIlJlYWRSZWNlaXB0IiwiaGFzVW5zdWJzcmliZUxpbmtzIiwiZ2V0Rmlyc3RVbnN1YnNyaWJlTGluayIsIklzU2VlbiIsIklzRmxhZ2dlZCIsIklzQW5zd2VyZWQiLCJJc0ZvcndhcmRlZCIsIklzUmVhZFJlY2VpcHQiLCJJc0RlbGV0ZWQiLCJmcm9tRGtpbURhdGEiLCJiY2NUb0xpbmUiLCJyZXBseVRvVG9MaW5lIiwibGluZUFzQ3NzIiwiY2xhc3NuYW1lcyIsImhhc1Zpc2libGVBdHRhY2htZW50cyIsImZpbmRBdHRhY2htZW50QnlDaWQiLCJmaW5kQXR0YWNobWVudEJ5Q29udGVudExvY2F0aW9uIiwibWVzc2FnZUlkIiwiaW5SZXBseVRvIiwiZnJvbUFzU2luZ2xlRW1haWwiLCJ2aWV3TGluayIsImRvd25sb2FkTGluayIsImV4Y2x1ZGVFbWFpbHMiLCJsYXN0IiwidG9SZXN1bHQiLCJjY1Jlc3VsdCIsInRleHRCb2R5VG9TdHJpbmciLCJhdHRhY2htZW50c1RvU3RyaW5nTGluZSIsImF0dGFjaExpbmVzIiwidmlld1BvcHVwTWVzc2FnZSIsInNob3dMYXp5RXh0ZXJuYWxJbWFnZXNJbkJvZHkiLCJjY0xpbmUiLCJwcmludE1lc3NhZ2UiLCJnZW5lcmF0ZVVpZCIsImxvemFkIiwidGhyZXNob2xkIiwiZGF0YXNldCIsIm9yaWdpbmFsIiwib3BhY2l0eSIsIm9ic2VydmUiLCJsYXp5IiwicmVwbGFjZVBsYW5lVGV4dEJvZHkiLCJBY2NvdW50UG9wdXBWaWV3Iiwic3VibWl0UmVxdWVzdCIsImVtYWlsRXJyb3IiLCJwYXNzd29yZEVycm9yIiwic3VibWl0RXJyb3IiLCJzdWJtaXRFcnJvckFkZGl0aW9uYWwiLCJlbWFpbEZvY3VzIiwiYWRkQWNjb3VudENvbW1hbmQiLCJFcnJvck1lc3NhZ2VBZGRpdGlvbmFsIiwiY2FuQmVFZGl0IiwiSWRlbnRpdHlQb3B1cFZpZXciLCJlZGl0Iiwib3duZXIiLCJhZGRPckVkaXRJZGVudGl0eUNvbW1hbmQiLCJvbkhpZGVXaXRoRGVsYXkiLCJTYXZlVHJpZ2dlckNvbXBvbmVudCIsInZlcnRpY2FsQWxpZ24iLCJzZXRTdGF0ZSIsIklucHV0Q29tcG9uZW50IiwiU2VsZWN0Q29tcG9uZW50Iiwib3B0aW9uc1RleHQiLCJvcHRpb25zVmFsdWUiLCJvcHRpb25zQ2FwdGlvbiIsIlJhZGlvQ29tcG9uZW50IiwiREVGQVVMVF9ST1dTIiwiVGV4dEFyZWFDb21wb25lbnQiLCJyb3dzIiwic3BlbGxjaGVjayIsIkRhdGVDb21wb25lbnQiLCJTY3JpcHRDb21wb25lbnQiLCJ0ZW1wbGF0ZU5vZGVzIiwib3V0ZXJIVE1MIiwicmVwbGFjZVdpdGgiLCJub2RlVmFsdWUiLCJDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50IiwiYW5pbWF0aW9uQm94IiwiYW5pbWF0aW9uQ2hlY2ttYXJrIiwiYW5pbWF0aW9uQm94U2V0VHJ1ZSIsImFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUiLCJ0cmlnZ2VyQW5pbWF0aW9uIiwiYm94IiwiQXBwVXNlciIsIm1vdmVDYWNoZSIsInF1b3RhRGVib3VuY2UiLCJtb3ZlT3JEZWxldGVSZXNwb25zZUhlbHBlciIsIm1lc3NhZ2VzTW92ZVRyaWdnZXIiLCJUaW1lMm0iLCJUaW1lM20iLCJUaW1lNW0iLCJUaW1lMTBtIiwiVGltZTE1bSIsIlRpbWUyMG0iLCJ3YWtlVXAiLCJUaW1lNjBtIiwiYmFja3N0cmV0Y2giLCJmYWRlIiwiY2VudGVyZWRYIiwiY2VudGVyZWRZIiwiYkRyb3BQYWdlUG9zaXRpb24iLCJiRHJvcEN1cnJlbkZvbGRlckNhY2hlIiwicmVjYWNoZUluYm94TWVzc2FnZUxpc3QiLCJmUmVzdWx0RnVuYyIsIm9Db250YWN0cyIsIkNvbnRhY3RTdG9yZSIsInNUcmFzaEZvbGRlciIsInNTcGFtRm9sZGVyIiwiaXNTcGFtIiwiaXNUcmFzaCIsImlzSGFtIiwibWVzc2FnZXNNb3ZlSGVscGVyIiwidWlkc0Zvck1vdmUiLCJtZXNzYWdlc0NvcHlIZWxwZXIiLCJzRnJvbUZvbGRlckZ1bGxOYW1lUmF3Iiwic1RvRm9sZGVyRnVsbE5hbWVSYXciLCJhVWlkRm9yQ29weSIsIm1lc3NhZ2VzRGVsZXRlSGVscGVyIiwiYVVpZEZvclJlbW92ZSIsImFsZXJ0IiwiZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyIiwiaURlbGV0ZVR5cGUiLCJiVXNlRm9sZGVyIiwib01vdmVGb2xkZXIiLCJuU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiIsIk5vdFNwYW0iLCJtb3ZlTWVzc2FnZXNUb0ZvbGRlciIsImFVaWRGb3JNb3ZlIiwiYkNvcHkiLCJvRnJvbUZvbGRlciIsIm9Ub0ZvbGRlciIsInByb20iLCJQcm9taXNlcyIsImZvbGRlcnNQcm9taXNlc0FjdGlvbkhlbHBlciIsInByb21pc2UiLCJlcnJvckRlZkNvZGUiLCJyZWxvYWRPcGVuUGdwS2V5cyIsIm9wZW5wZ3BLZXlzIiwiZ2V0QWxsS2V5cyIsImFFbWFpbHMiLCJhVXNlcnMiLCJwcmltYXJ5VXNlciIsImdldFByaW1hcnlVc2VyIiwidXNlcklkIiwidXNlcmlkIiwidXNlcnMiLCJPcGVuUGdwS2V5TW9kZWwiLCJnZXRGaW5nZXJwcmludCIsImdldEtleUlkIiwiZ2V0S2V5SWRzIiwiYXJtb3IiLCJiQm9vdCIsImNvdW50cyIsInNBY2NvdW50RW1haWwiLCJBY2NvdW50cyIsIm9BY2NvdW50IiwiQWNjb3VudE1vZGVsIiwiSWRlbnRpdGllcyIsImlkZW50aXR5RGF0YSIsIklkIiwiSWRlbnRpdHlNb2RlbCIsIlNpZ25hdHVyZSIsIlNpZ25hdHVyZUluc2VydEJlZm9yZSIsIlRlbXBsYXRlU3RvcmUiLCJUZW1wbGF0ZXMiLCJ0ZW1wbGF0ZURhdGEiLCJUZW1wbGF0ZU1vZGVsIiwiUXVvdGFTdG9yZSIsImNoZWNrIiwiZm9sZGVyRnJvbUNhY2hlIiwiRmxhZ3MiLCJib290IiwiTGlzdCIsImlTZXRBY3Rpb24iLCJhbHJlYWR5VW5yZWFkIiwicm9vdFVpZHMiLCJnb29nbGVDb25uZWN0IiwidHdpdHRlckNvbm5lY3QiLCJmYWNlYm9va0Nvbm5lY3QiLCJmaXJlQWxsQWN0aW9ucyIsIkdvb2dsZSIsIkZhY2Vib29rIiwiVHdpdHRlciIsImF1dG9jb21wbGV0ZUNhbGxiYWNrIiwic2V0RXhwYW5kZWRGb2xkZXIiLCJzRnVsbE5hbWVIYXNoIiwiYkV4cGFuZGVkIiwiYUV4cGFuZGVkTGlzdCIsIkxvY2FsIiwiRXhwYW5kZWRGb2xkZXJzIiwid2l0aG91dCIsImluaXRIb3Jpem9udGFsTGF5b3V0UmVzaXplciIsInNDbGllbnRTaWRlS2V5TmFtZSIsImJvdHRvbSIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsImZTZXRIZWlnaHQiLCJmUmVzaXplQ3JlYXRlRnVuY3Rpb24iLCJmUmVzaXplU3RhcnRGdW5jdGlvbiIsImZSZXNpemVSZXNpemVGdW5jdGlvbiIsImZSZXNpemVTdG9wRnVuY3Rpb24iLCJvRXZlbnQiLCJvT2JqZWN0Iiwib09wdGlvbnMiLCJoYW5kbGVzIiwiZkRpc2FibGUiLCJiRGlzYWJsZSIsInJlc2l6YWJsZSIsImlIZWlnaHQiLCJpbml0VmVydGljYWxMYXlvdXRSZXNpemVyIiwiZGlzYWJsZWRXaWR0aCIsIm1pbldpZHRoIiwibExlZnQiLCJyaWdodCIsIm1MZWZ0V2lkdGgiLCJmU2V0V2lkdGgiLCJpV2lkdGgiLCJvYmoiLCJtYXhXaWR0aCIsIlNpemUzNTBweCIsImJvb3RzdGFydFR3b0ZhY3RvclNjcmVlbiIsImJvb3RzdGFydFdlbGNvbWVQb3B1cCIsImJvb3RzdGFydExvZ2luU2NyZWVuIiwiY3VzdG9tTG9naW5MaW5rIiwiTG9naW5Vc2VyU2NyZWVuIiwiYm9vdGVuZCIsInByb2dyZXNzSnMiLCJjb250YWN0c1N5bmNJbnRlcnZhbCIsImpzSGFzaCIsImFsbG93R29vZ2xlIiwiYWxsb3dGYWNlYm9vayIsImFsbG93VHdpdHRlciIsIlR3b0ZhY3RvciIsIlR3b0ZhY3RvckZvcmNlIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiT3BlblBHUCIsIm9wZW5wZ3BDYWxsYmFjayIsIldvcmtlciIsImluaXRXb3JrZXIiLCJLZXlyaW5nIiwiTWFpbEJveFVzZXJTY3JlZW4iLCJTZXR0aW5nc1VzZXJTY3JlZW4iLCJzRiIsIlRpbWUxMHMiLCJUaW1lMnMiLCJyZWdpc3RlclByb3RvY29sSGFuZGxlciIsIkNvbXBvc2VyIiwiRm9sZGVyTGlzdFNpemUiLCJtb21lbnRSZWxvYWQiLCJCQVNFXzY0X0NIUiIsInVybHNhZmVfZW5jb2RlIiwiZW5jb2RlIiwib3V0cHV0IiwiY2hyMSIsImNocjIiLCJjaHIzIiwiZW5jMSIsImVuYzIiLCJlbmMzIiwiZW5jNCIsImkiLCJfdXRmOF9lbmNvZGUiLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwiZGVjb2RlIiwiX3V0ZjhfZGVjb2RlIiwic3RyaW5nIiwidXRmdGV4dCIsIm4iLCJsIiwiYyIsImMyIiwiYzMiLCJQcm9taXNlc1VzZXJQb3B1bGF0b3IiLCJpc0ZvbGRlckV4cGFuZGVkIiwiZXhwYW5kZWRGb2xkZXJzIiwibm9ybWFsaXplRm9sZGVyIiwiQ2FjaGUiLCJmb2xkZXJSZXNwb25zZVBhcnNlUmVjIiwic05hbWVzcGFjZSIsImJEaXNwbGF5U3BlY1NldHRpbmciLCJvRm9sZGVyIiwib0NhY2hlRm9sZGVyIiwiRnVsbE5hbWVSYXciLCJGb2xkZXJNb2RlbCIsIkNoZWNrYWJsZSIsImNvbGxhcHNlZCIsIkV4dGVuZGVkIiwiU3ViRm9sZGVycyIsImNudCIsIkNvdW50UmVjIiwiTmFtZXNwYWNlIiwiSXNUaHJlYWRzU3VwcG9ydGVkIiwiT3B0aW1pemVkIiwiU3lzdGVtRm9sZGVycyIsIlNFTlQiLCJEUkFGVFMiLCJKVU5LIiwiVFJBU0giLCJBTEwiLCJGb2xkZXJzTGFzaEhhc2giLCJGb2xkZXJzSGFzaCIsIkZpbHRlck1vZGVsIiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbnNUeXBlIiwiQW55IiwiYWN0aW9uVmFsdWUiLCJhY3Rpb25WYWx1ZVNlY29uZCIsImFjdGlvblZhbHVlVGhpcmQiLCJhY3Rpb25WYWx1ZUZvdXJ0aCIsImFjdGlvbk1hcmtBc1JlYWQiLCJhY3Rpb25LZWVwIiwiYWN0aW9uTm9TdG9wIiwiYWN0aW9uVHlwZSIsIk1vdmVUbyIsImZHZXRSZWFsRm9sZGVyTmFtZSIsImRlbGltaXRlciIsIm5hbWVTdWIiLCJGT0xERVIiLCJFTUFJTCIsIlZhY2F0aW9uIiwiUmVqZWN0IiwiRGlzY2FyZCIsImFjdGlvblRlbXBsYXRlIiwiZGVsZXRlQWNjZXNzIiwiY2FuQmVEZWxldGVkIiwiZ2VuZXJhdGVJRCIsImNvbmQiLCJJRCIsIkVuYWJsZWQiLCJDb25kaXRpb25zVHlwZSIsIkNvbmRpdGlvbnMiLCJBY3Rpb25WYWx1ZSIsIkFjdGlvblZhbHVlU2Vjb25kIiwiQWN0aW9uVmFsdWVUaGlyZCIsIkFjdGlvblZhbHVlRm91cnRoIiwiQWN0aW9uVHlwZSIsIlN0b3AiLCJLZWVwIiwiTWFya0FzUmVhZCIsImFkZENvbmRpdGlvbiIsIkZpbHRlckNvbmRpdGlvbk1vZGVsIiwicmVtb3ZlQ29uZGl0aW9uIiwib0NvbmRpdGlvblRvRGVsZXRlIiwic2V0UmVjaXBpZW50cyIsImZpbHRlckNvbmRpdGlvbiIsImNsb25lU2VsZiIsIkNvbnRhaW5zIiwidmFsdWVTZWNvbmQiLCJIZWFkZXIiLCJGaWVsZCIsIlR5cGUiLCJWYWx1ZSIsIlZhbHVlU2Vjb25kIiwiZmlsdGVyQ29uZCIsIktleWJvYXJkU2hvcnRjdXRzSGVscFBvcHVwVmlldyIsIlBvcHVwS2V5Ym9hcmRTaG9ydGN1dHNIZWxwIiwiJHRhYnMiLCJ0YWIiLCJDb250YWN0c1BvcHVwVmlldyIsImNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQiLCJiViIsInZpZXdIYXNOb25FbXB0eVJlcXVpcmVkUHJvcGVydGllcyIsImJSZWFkT25seSIsInZpZXdSZWFkT25seSIsInZpZXdTYXZpbmciLCJmRmFzdENsZWFyRW1wdHlMaXN0SGVscGVyIiwidmlld1Byb3BlcnRpZXMiLCJyZW1vdmVBbGwiLCJiQmFja1RvQ29tcG9zZSIsInNMYXN0Q29tcG9zZUZvY3VzZWRGaWVsZCIsImFsbG93RXhwb3J0IiwiY29udGFjdHNDb3VudCIsImN1cnJlbnRDb250YWN0IiwiaW1wb3J0VXBsb2FkZXJCdXR0b24iLCJjb250YWN0c1BhZ2UiLCJjb250YWN0c1BhZ2VDb3VudCIsImNvbnRhY3RzUGFnZW5hdG9yIiwiZW1wdHlTZWxlY3Rpb24iLCJ2aWV3Q2xlYXJTZWFyY2giLCJ2aWV3SUQiLCJ2aWV3U2F2ZVRyaWdnZXIiLCJ2aWV3UHJvcGVydGllc05hbWVzIiwiRmlyc3ROYW1lIiwiTGFzdE5hbWUiLCJ2aWV3UHJvcGVydGllc090aGVyIiwiTmljayIsInZpZXdQcm9wZXJ0aWVzRW1haWxzIiwidmlld1Byb3BlcnRpZXNXZWIiLCJXZWIiLCJuYW1lcyIsImZGaWx0ZXIiLCJ2aWV3UHJvcGVydGllc1Bob25lcyIsIlBob25lIiwidmlld1Byb3BlcnRpZXNFbWFpbHNOb25FbXB0eSIsInByb3BlcnR5Rm9jdXNlZCIsInZpZXdQcm9wZXJ0aWVzRW1haWxzRW1wdHlBbmRPbkZvY3VzZWQiLCJ2aWV3UHJvcGVydGllc1Bob25lc0VtcHR5QW5kT25Gb2N1c2VkIiwidmlld1Byb3BlcnRpZXNXZWJFbXB0eUFuZE9uRm9jdXNlZCIsInZpZXdQcm9wZXJ0aWVzT3RoZXJFbXB0eUFuZE9uRm9jdXNlZCIsInJlbG9hZENvbnRhY3RMaXN0IiwiY29udGFjdHNDaGVja2VkIiwiY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZFVpZHMiLCJjb250YWN0IiwiaWRDb250YWN0Iiwic2VsZWN0b3IiLCJwb3B1bGF0ZVZpZXdDb250YWN0IiwiYkRyb3BQYWdlQWZ0ZXJEZWxldGUiLCJ3YXRjaERpcnR5Iiwid2F0Y2hIYXNoIiwidmlld0hhc2giLCJDb250YWN0TGlzdCIsIm5ld0NvbW1hbmQiLCJkZWxldGVTZWxlY3RlZENvbnRhY3RzIiwibmV3TWVzc2FnZUNvbW1hbmQiLCJhRSIsInRvRW1haWxzIiwiY2NFbWFpbHMiLCJiY2NFbWFpbHMiLCJhQyIsImdldE5hbWVBbmRFbWFpbEhlbHBlciIsImNsZWFyQ29tbWFuZCIsInJlcXVlc3RVaWQiLCJGdWxsTmFtZSIsInJlcyIsIlJlcXVlc3RVaWQiLCJSZXN1bHRJRCIsInN5bmNDb21tYW5kIiwiZ2V0UHJvcGVydHlQbGFjZWhvbGRlciIsImFkZE5ld1Byb3BlcnR5IiwiYWRkTmV3T3JGb2N1c1Byb3BlcnR5IiwiYWRkTmV3RW1haWwiLCJhZGROZXdQaG9uZSIsImFkZE5ld1dlYiIsImFkZE5ld05pY2tuYW1lIiwiYWRkTmV3Tm90ZXMiLCJhZGROZXdCaXJ0aGRheSIsIkJpcnRoZGF5IiwiZXhwb3J0VmNmIiwiZXhwb3J0Q3N2IiwiaiIsInJlbW92ZUNoZWNrZWRPclNlbGVjdGVkQ29udGFjdHNGcm9tTGlzdCIsImtvQ29udGFjdHMiLCJkZWxldGVSZXNwb25zZSIsInJlbW92ZVByb3BlcnR5Iiwib1Byb3AiLCJsYXN0TmFtZSIsImZpcnN0TmFtZSIsImRyb3BQYWdlUG9zaXRpb24iLCJDb250YWN0TW9kZWwiLCJDb3VudCIsIkZvbGRlckNyZWF0ZVZpZXciLCJzaW1wbGVGb2xkZXJOYW1lVmFsaWRhdGlvbiIsImZvbGRlck5hbWUiLCJzZWxlY3RlZFBhcmVudFZhbHVlIiwicGFyZW50Rm9sZGVyU2VsZWN0TGlzdCIsIm1hbmFnZUZvbGRlclN5c3RlbU5hbWUiLCJjcmVhdGVGb2xkZXJDb21tYW5kIiwicGFyZW50Rm9sZGVyTmFtZSIsIkZpbHRlclBvcHVwVmlldyIsIkZpbHRlclN0b3JlIiwiZlRydWVDYWxsYmFjayIsImFsbG93TWFya0FzUmVhZCIsInNlbGVjdGVkRm9sZGVyVmFsdWUiLCJhY3Rpb25UeXBlT3B0aW9ucyIsImZpZWxkT3B0aW9ucyIsInR5cGVPcHRpb25zIiwidHlwZU9wdGlvbnNTaXplIiwicG9wdWxhdGVPcHRpb25zIiwic2F2ZUZpbHRlckNvbW1hbmQiLCJtYXJrYXNyZWFkIiwibW92ZXRvIiwicmVkaXJlY3QiLCJ2YWNhdGlvbiIsIlJlY2lwaWVudCIsIk5vdENvbnRhaW5zIiwiRXF1YWxUbyIsIk5vdEVxdWFsVG8iLCJyZWdleCIsIlJlZ2V4IiwiT3ZlciIsIlVuZGVyIiwib0ZpbHRlciIsImJFZGl0IiwiVHdvRmFjdG9yQ29uZmlndXJhdGlvblBvcHVwVmlldyIsImxvY2siLCJjYXBhVHdvRmFjdG9yIiwicHJvY2Vzc2luZyIsImNsZWFyaW5nIiwic2VjcmV0aW5nIiwidmlld1VzZXIiLCJ0d29GYWN0b3JTdGF0dXMiLCJ0d29GYWN0b3JUZXN0ZWQiLCJ2aWV3U2VjcmV0Iiwidmlld0JhY2t1cENvZGVzIiwidmlld1VybFRpdGxlIiwidmlld1VybCIsInZpZXdFbmFibGVfIiwidmlld0VuYWJsZSIsInZpZXdUd29GYWN0b3JFbmFibGVUb29sdGlwIiwidHJhbnNsYXRvclRyaWdnZXIiLCJ2aWV3VHdvRmFjdG9yU3RhdHVzIiwidHdvRmFjdG9yQWxsb3dlZEVuYWJsZSIsIm9uUmVzdWx0Iiwib25TaG93U2VjcmV0UmVzdWx0Iiwic2hvd1NlY3JldCIsImhpZGVTZWNyZXQiLCJiTG9jayIsImdldFFyIiwiRW5hYmxlIiwiSXNTZXQiLCJUZXN0ZWQiLCJTZWNyZXQiLCJCYWNrdXBDb2RlcyIsIlVybFRpdGxlIiwicXIiLCJsZXZlbCIsIlRlbXBsYXRlUG9wdXBWaWV3Iiwic2lnbmF0dXJlRG9tIiwiYWRkVGVtcGxhdGVDb21tYW5kIiwicG9wdWxhdGVCb2R5RnJvbUVkaXRvciIsImVkaXRvclNldEJvZHkiLCJwb3B1bGF0ZWQiLCJCb2R5Iiwic3RvcmFnZVJlc3VsdCIsIkNvb2tpZXMiLCJnZXRKU09OIiwiZXhwaXJlcyIsImNvb2tpZUVuYWJsZWQiLCJsb2NhbFN0b3JhZ2UiLCJzdG9yYWdlVmFsdWUiLCJlZGl0ZWQiLCJuYW1lRm9yRWRpdCIsInByaXZhdGVNZXNzYWdlQ291bnRBbGwiLCJwcml2YXRlTWVzc2FnZUNvdW50VW5yZWFkIiwiY29sbGFwc2VkUHJpdmF0ZSIsImluaXRDb21wdXRlZCIsImlzSW5ib3giLCJJbmJveCIsImNhbkJlRWRpdGVkIiwiaXNTdWJTY3JpYmVkIiwiaXNTdWJGb2xkZXJzIiwiaGlkZGVuIiwiaXNTeXN0ZW0iLCJzZWxlY3RhYmxlRm9yRm9sZGVyTGlzdCIsImlWYWx1ZSIsInByaW50YWJsZVVucmVhZENvdW50IiwiY2FuQmVTdWJTY3JpYmVkIiwiY2FuQmVDaGVja2VkIiwic3VmZml4IiwiaGFzVW5yZWFkTWVzc2FnZXMiLCJoYXNTdWJTY3JpYmVkVW5yZWFkTWVzc2FnZXNTdWJmb2xkZXJzIiwiY29sbGFwc2VkQ3NzIiwic0luYm94Rm9sZGVyTmFtZSIsIkRlbGltaXRlciIsIkZ1bGxOYW1lSGFzaCIsIklzU2VsZWN0YWJsZSIsIklzRXhpc3RzIiwiSXNTdWJzY3JpYmVkIiwicHJpbnRhYmxlRnVsbE5hbWUiLCJiQ2xlYXJPbmx5IiwiX19hYm9ydGVkX18iLCJhZGRpdGlvbmFsR2V0U3RyaW5nIiwib0giLCJ0ZXh0U3RhdHVzIiwiaXNDYWNoZWQiLCJlcnJvckRhdGEiLCJfX2NhY2hlZF9fIiwiQWpheEZhbHNlIiwiQWpheFBhcnNlIiwiQWpheFRpbWVvdXQiLCJBamF4QWJvcnQiLCJnZXRSZXF1ZXN0Iiwic0FkZGl0aW9uYWxHZXRTdHJpbmciLCJjYW5CZURlbGV0ZSIsImNoYW5nZUFjY291bnRMaW5rIiwiUG9wdWxhdGVkIiwiZ3VJRCIsIklEcyIsInVzZXJJRHMiLCJ1c2VySUQiLCJndWlkIiwic2VsZWN0VXNlciIsImdldE5hdGl2ZUtleSIsImVyciIsInBhdHRlcm4iLCJzZWxlY3RFbWFpbCIsIkxvZ2luVXNlclZpZXciLCJmYWNlYm9va0xvZ2luRW5hYmxlZCIsImdvb2dsZUxvZ2luRW5hYmxlZCIsImdvb2dsZUdtYWlsTG9naW5FbmFibGVkIiwidHdpdHRlckxvZ2luRW5hYmxlZCIsImhpZGVTdWJtaXRCdXR0b24iLCJ3ZWxjb21lIiwic2lnbk1lIiwiYWRkaXRpb25hbENvZGUiLCJlcnJvckFuaW1hdGlvbiIsInZpc2liaWxpdHkiLCJhZGRpdGlvbmFsQ29kZVNpZ25NZSIsImxvZ2luRGVzY3JpcHRpb24iLCJmb3Jnb3RQYXNzd29yZExpbmtVcmwiLCJyZWdpc3RyYXRpb25MaW5rVXJsIiwiZW1haWxFcnJvckFuaW1hdGlvbiIsInBhc3N3b3JkRXJyb3JBbmltYXRpb24iLCJmb3JtSGlkZGVuIiwiZm9ybUVycm9yIiwicGFzc3dvcmRGb2N1cyIsInN1Ym1pdEVycm9yQWRkaWRpb25hbCIsImxhbmdSZXF1ZXN0IiwiYlNlbmRMYW5ndWFnZSIsImxhbmd1YWdlRnVsbE5hbWUiLCJzaWduTWVUeXBlIiwiVW51c2VkIiwiRGVmYXVsdE9uIiwic2lnbk1lVmlzaWJpbGl0eSIsInNvY2lhbExvZ2luRW5hYmxlZCIsImJGIiwiYkciLCJiVCIsIndpbmRvd09wZW5GZWF0dXJlcyIsIndoIiwiZmFjZWJvb2tDb21tYW5kIiwiZ29vZ2xlQ29tbWFuZCIsImdvb2dsZUdtYWlsQ29tbWFuZCIsInR3aXR0ZXJDb21tYW5kIiwic3VibWl0Q29tbWFuZCIsInBsdWdpblJlc3VsdENvZGUiLCJwbHVnaW5SZXN1bHRNZXNzYWdlIiwiZlN1Ym1pdFJlc3VsdCIsImlSZXN1bHRDb2RlIiwic1Jlc3VsdE1lc3NhZ2UiLCJmTG9naW5SZXF1ZXN0Iiwic0xvZ2luUGFzc3dvcmQiLCJUd29GYWN0b3JBdXRoIiwiQWRtaW4iLCJMYXN0U2lnbk1lIiwiZGlzcGxheU1haW5Gb3JtIiwic2lnbk1lTG9jYWwiLCJmU29jaWFsIiwiaUVycm9yQ29kZSIsIkRlZmF1bHRPZmYiLCJ0cmFuc2xhdG9yUmVsb2FkIiwic3VibWl0Rm9ybSIsInNlbGVjdExhbmd1YWdlIiwic2VsZWN0TGFuZ3VhZ2VPblRhYiIsImJTaGlmdCIsIlN5c3RlbURyb3BEb3duTWFpbEJveFVzZXJWaWV3IiwiRm9sZGVyTGlzdE1haWxCb3hVc2VyVmlldyIsIk1lc3NhZ2VMaXN0TWFpbEJveFVzZXJWaWV3IiwiTWVzc2FnZVZpZXdNYWlsQm94VXNlclZpZXciLCJ1cGRhdGVXaW5kb3dUaXRsZSIsIkNvbnRhY3RzIiwib25TdGFydCIsIk1lc3NhZ2VMaXN0U2l6ZSIsImZOb3JtUyIsImZOb3JtRCIsImlEcm9wT3ZlclRpbWVyIiwiYWxsb3dDb21wb3NlciIsImZvbGRlckxpc3RGb2N1c2VkIiwiaXNJbmJveFN0YXJyZWQiLCJmU2VsZWN0Rm9sZGVyIiwic3RhcnJlZCIsImlzTW92ZSIsInN0b3BQcm9wYWdhdGlvbiIsIm1lc3NhZ2VzRHJvcE92ZXIiLCJtZXNzYWdlc0Ryb3BPdXQiLCJtZXNzYWdlc0Ryb3AiLCJjb21wb3NlQ2xpY2siLCJjcmVhdGVGb2xkZXIiLCJjb25maWd1cmVGb2xkZXJzIiwiY29udGFjdHNDbGljayIsImRpc3BsYXkiLCJJZENvbnRhY3QiLCJEaXNwbGF5IiwiUmVhZE9ubHkiLCJQcm9wZXJ0aWVzIiwiVHlwZVN0ciIsInNyY0F0dHIiLCJjYW5CZU1vdmVkSGVscGVyIiwiY2FuQmVNb3ZlZCIsImJQcmVmZXRjaCIsImVtcHR5U3ViamVjdFZhbHVlIiwiaUdvVG9VcFVwT3JEb3duRG93blRpbWVvdXQiLCJhbGxvd1JlbG9hZCIsIlJlbG9hZCIsImFsbG93U2VhcmNoIiwiYWxsb3dTZWFyY2hBZHYiLCJTZWFyY2hBZHYiLCJhbGxvd01lc3NhZ2VMaXN0QWN0aW9ucyIsIk1lc3NhZ2VMaXN0QWN0aW9ucyIsImFsbG93RGFuZ2Vyb3VzQWN0aW9ucyIsIkRhbmdlcm91c0FjdGlvbnMiLCJ1c2VyUXVvdGEiLCJ1c2VyVXNhZ2VTaXplIiwidXNlclVzYWdlUHJvYyIsIm1vdmVEcm9wZG93blRyaWdnZXIiLCJtb3JlRHJvcGRvd25UcmlnZ2VyIiwiZHJhZ092ZXIiLCJkcmFnT3ZlckVudGVyIiwiZHJhZ092ZXJBcmVhIiwiZHJhZ092ZXJCb2R5QXJlYSIsIm1lc3NhZ2VMaXN0SXRlbVRlbXBsYXRlIiwibWVzc2FnZUxpc3RTZWFyY2hEZXNjIiwibWVzc2FnZUxpc3RQYWdlbmF0b3IiLCJjaGVja0FsbCIsImlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyIsInNMYXN0U2VhcmNoVmFsdWUiLCJpbnB1dFByb3h5TWVzc2FnZUxpc3RTZWFyY2giLCJpc0luY29tcGxldGVDaGVja2VkIiwiaGFzTWVzc2FnZXMiLCJoYXNDaGVja2VkT3JTZWxlY3RlZExpbmVzIiwiaXNTcGFtRm9sZGVyIiwiaXNTcGFtRGlzYWJsZWQiLCJpc1RyYXNoRm9sZGVyIiwiaXNEcmFmdEZvbGRlciIsImlzU2VudEZvbGRlciIsImlzQXJjaGl2ZUZvbGRlciIsImlzQXJjaGl2ZURpc2FibGVkIiwiaXNBcmNoaXZlVmlzaWJsZSIsImlzU3BhbVZpc2libGUiLCJpc1VuU3BhbVZpc2libGUiLCJtb2JpbGVDaGVja2VkU3RhdGVTaG93IiwibW9iaWxlQ2hlY2tlZFN0YXRlSGlkZSIsIm1lc3NhZ2VMaXN0Rm9jdXNlZCIsInF1b3RhVG9vbHRpcCIsInVzZUF1dG9TZWxlY3QiLCJnb1RvVXBVcE9yRG93bkRvd24iLCJyZWxvYWRDb21tYW5kIiwibXVsdHlGb3J3YXJkQ29tbWFuZCIsImRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCIsImFyY2hpdmVDb21tYW5kIiwic3BhbUNvbW1hbmQiLCJub3RTcGFtQ29tbWFuZCIsIm1vdmVDb21tYW5kIiwibW92ZU5ld0NvbW1hbmQiLCJoaWRlTGVmdCIsInNob3dMZWZ0IiwiZ290b1BhZ2UiLCJzZWFyY2hFbnRlckFjdGlvbiIsInByaW50YWJsZU1lc3NhZ2VDb3VudEZvckRlbGV0aW9uIiwiY2FuY2VsU2VhcmNoIiwiY2FuY2VsVGhyZWFkVWlkIiwibW92ZVNlbGVjdGVkTWVzc2FnZXNUb0ZvbGRlciIsImRyYWdBbmREcm9uSGVscGVyIiwib01lc3NhZ2VMaXN0SXRlbSIsInVwZGF0ZVVpZHNJbmZvIiwiYU1lc3NhZ2VzIiwic2V0QWN0aW9uRm9yQWxsIiwibGlzdFNldFNlZW4iLCJsaXN0U2V0QWxsU2VlbiIsImxpc3RVbnNldFNlZW4iLCJsaXN0U2V0RmxhZ3MiLCJsaXN0VW5zZXRGbGFncyIsImZsYWdNZXNzYWdlcyIsImNoZWNrZWRVaWRzIiwiZmxhZ01lc3NhZ2VzRmFzdCIsImJGbGFnIiwic2Vlbk1lc3NhZ2VzRmFzdCIsInNlZW4iLCJnb3RvVGhyZWFkIiwiY2xlYXJMaXN0SXNWaXNpYmxlIiwiaW5pdFVwbG9hZGVyRm9yQXBwZW5kIiwiaW5pdFNob3J0Y3V0cyIsImlmdmlzaWJsZSIsIlByZWZldGNoIiwic2V0SWRsZUR1cmF0aW9uIiwiaWZ2aXNpYmxlSWRsZTEwcyIsImlkbGUiLCJwcmVmZXRjaE5leHRUaWNrIiwiYWR2YW5jZWRTZWFyY2hDbGljayIsInF1ZXVlU2l6ZSIsIm11bHRpcGxlU2l6ZUxpbWl0IiwiZHJhZ0FuZERyb3BFbGVtZW50IiwiZHJhZ0FuZERyb3BCb2R5RWxlbWVudCIsIm1lc3NhZ2VWaXNpYmlsaXR5IiwibWVzc2FnZUxpc3RBbmRNZXNzYWdlVmlld0xvYWRpbmciLCJsYXN0RW1haWwiLCJjcmVhdGVDb21tYW5kUmVwbHlIZWxwZXIiLCJsYXN0UmVwbHlBY3Rpb24iLCJyZXBseU9yZm9yd2FyZCIsImNhbkJlUmVwbGllZE9yRm9yd2FyZGVkIiwiY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlciIsImZvbGRlclR5cGUiLCJ1c2VGb2xkZXIiLCJvRG9tIiwib0hlYWRlckRvbSIsIm9NZXNzYWdlU2Nyb2xsZXJEb20iLCJib2R5QmFja2dyb3VuZENvbG9yIiwicHN3cCIsImFsbG93TWVzc2FnZUFjdGlvbnMiLCJNZXNzYWdlQWN0aW9ucyIsImxvZ29JZnJhbWUiLCJmdWxsU2NyZWVuTW9kZSIsIm1lc3NhZ2VMaXN0T2ZUaHJlYWRzTG9hZGluZyIsImhpZ2hsaWdodFVuc2VsZWN0ZWRBdHRhY2htZW50cyIsInNob3dBdHRhY2htbmV0Q29udHJvbHMiLCJzaG93QXR0YWNobW5ldENvbnRyb2xzU3RhdGUiLCJNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzIiwiYWxsb3dBdHRhY2htbmV0Q29udHJvbHMiLCJBdHRhY2htZW50c0FjdGlvbnMiLCJkb3dubG9hZEFzWmlwQWxsb3dlZCIsImRvd25sb2FkQXNaaXBMb2FkaW5nIiwiZG93bmxvYWRBc1ppcEVycm9yIiwic2F2ZVRvT3duQ2xvdWRBbGxvd2VkIiwic2F2ZVRvT3duQ2xvdWRMb2FkaW5nIiwic2F2ZVRvT3duQ2xvdWRTdWNjZXNzIiwic2F2ZVRvT3duQ2xvdWRFcnJvciIsInNhdmVUb0Ryb3Bib3hBbGxvd2VkIiwic2F2ZVRvRHJvcGJveExvYWRpbmciLCJzYXZlVG9Ecm9wYm94U3VjY2VzcyIsInNhdmVUb0Ryb3Bib3hFcnJvciIsImxhc3RSZXBseUFjdGlvbl8iLCJMYXN0UmVwbHlBY3Rpb24iLCJzaG93RnVsbEluZm8iLCJNZXNzYWdlSGVhZGVyRnVsbEluZm8iLCJtZXNzYWdlRG9tRm9jdXNlZCIsInJlcGx5Q29tbWFuZCIsInJlcGx5QWxsQ29tbWFuZCIsImZvcndhcmRDb21tYW5kIiwiZm9yd2FyZEFzQXR0YWNobWVudENvbW1hbmQiLCJlZGl0QXNOZXdDb21tYW5kIiwidmlld0JvZHlUb3BWYWx1ZSIsInZpZXdGb2xkZXIiLCJ2aWV3VWlkIiwidmlld1N1YmplY3QiLCJ2aWV3RnJvbVNob3J0Iiwidmlld0Zyb21Ea2ltRGF0YSIsInZpZXdUb1Nob3J0Iiwidmlld0Zyb20iLCJ2aWV3VG8iLCJ2aWV3Q2MiLCJ2aWV3QmNjIiwidmlld1JlcGx5VG8iLCJ2aWV3VGltZVN0YW1wIiwidmlld1NpemUiLCJ2aWV3TGluZUFzQ3NzIiwidmlld1ZpZXdMaW5rIiwidmlld1Vuc3Vic2NyaWJlTGluayIsInZpZXdEb3dubG9hZExpbmsiLCJ2aWV3VXNlclBpYyIsInZpZXdVc2VyUGljVmlzaWJsZSIsInZpZXdJc0ltcG9ydGFudCIsInZpZXdJc0ZsYWdnZWQiLCJ2aWV3RnJvbURraW1WaXNpYmlsaXR5Iiwidmlld0Zyb21Ea2ltU3RhdHVzSWNvbkNsYXNzIiwidmlld0Zyb21Ea2ltU3RhdHVzVGl0bGUiLCJzdGF0dXMiLCJkZXRlY3REb21CYWNrZ3JvdW5kQ29sb3IiLCJzY3JvbGxNZXNzYWdlVG9Ub3AiLCJwaWMiLCJtZXNzYWdlRm9jdXNlZCIsInRvZ2dsZUZ1bGxTY3JlZW4iLCJjbG9zZU1lc3NhZ2VDb21tYW5kIiwibWVzc2FnZVZpc2liaWxpdHlDb21tYW5kIiwibWVzc2FnZUVkaXRDb21tYW5kIiwiZWRpdE1lc3NhZ2UiLCJnb1VwQ29tbWFuZCIsImdvRG93bkNvbW1hbmQiLCJmRmluZERvbSIsImlucHV0RG9tIiwiY2hpbGRyZW4iLCJmRmluZENvbG9yIiwiZnVsbFNjcmVlbiIsInVuRnVsbFNjcmVlbiIsImNoZWNrSGVhZGVySGVpZ2h0IiwiU2l6ZTIwcHgiLCJTaXplMXB4IiwibGlzdEluZGV4IiwiZGl2IiwiZHluYW1pY0VscyIsInRodW1iIiwic3ViSHRtbCIsImxpZ2h0R2FsbGVyeSIsImR5bmFtaWMiLCJsb2FkWW91dHViZVRodW1ibmFpbCIsImxvYWRWaW1lb1RodW1ibmFpbCIsInRodW1iV2lkdGgiLCJ0aHVtYkNvbnRIZWlnaHQiLCJzaG93VGh1bWJCeURlZmF1bHQiLCJkeW5hbWljRWwiLCJmQ2hlY2tIZWFkZXJIZWlnaHQiLCJFdmVudFdoaWNoTW91c2VNaWRkbGUiLCJ0aHJlYWRzRHJvcGRvd25UcmlnZ2VyIiwic2Nyb2xsTWVzc2FnZVRvTGVmdCIsImVzY1Nob3J0Y3V0cyIsInNjcm9sbExlZnQiLCJpc0RyYWZ0T3JTZW50Rm9sZGVyIiwiU2l6ZTUwcHgiLCJnZXRBdHRhY2htZW50c0hhc2hlcyIsImF0dHMiLCJkb3dubG9hZEFzWmlwIiwiaGFzaGVzIiwiRmlsZXMiLCJzYXZlVG9Pd25DbG91ZCIsInNhdmVUb0Ryb3Bib3giLCJVcmwiLCJTaG9ydExpZmUiLCJmaWxlbmFtZSIsInNhdmUiLCJwcmludGFibGVDaGVja2VkTWVzc2FnZUNvdW50IiwiU3lzdGVtRHJvcERvd25TZXR0aW5nc1VzZXJWaWV3IiwiTWVudVNldHRpbmdzVXNlclZpZXciLCJQYW5lU2V0dGluZ3NVc2VyVmlldyIsInNTZXR0aW5nc1RpdGxlIiwic2V0U2V0dGluZ3NUaXRsZSIsIkdlbmVyYWxVc2VyU2V0dGluZ3MiLCJDb250YWN0c1VzZXJTZXR0aW5ncyIsIkFjY291bnRzVXNlclNldHRpbmdzIiwiU2lldmUiLCJGaWx0ZXJzVXNlclNldHRpbmdzIiwiQXV0b0xvZ291dCIsIlNlY3VyaXR5VXNlclNldHRpbmdzIiwiU29jaWFsVXNlclNldHRpbmdzIiwiQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3MiLCJUZW1wbGF0ZXNVc2VyU2V0dGluZ3MiLCJGb2xkZXJzVXNlclNldHRpbmdzIiwiVGhlbWVzIiwiVGhlbWVzVXNlclNldHRpbmdzIiwiT3BlblBncFVzZXJTZXR0aW5ncyIsIm1lc3NhZ2VzUGVyUGFnZUFycmF5IiwibGFuZ3VhZ2VUcmlnZ2VyIiwibXBwVHJpZ2dlciIsImVkaXRvckRlZmF1bHRUeXBlVHJpZ2dlciIsImxheW91dFRyaWdnZXIiLCJpc0FuaW1hdGlvblN1cHBvcnRlZCIsImlkZW50aXR5TWFpbiIsImlkZW50aXR5TWFpbkRlc2MiLCJlZGl0b3JEZWZhdWx0VHlwZXMiLCJsYXlvdXRUeXBlcyIsImVkaXRNYWluSWRlbnRpdHkiLCJ0ZXN0U291bmROb3RpZmljYXRpb24iLCJmMCIsImYxIiwiZjIiLCJmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIiLCJzYXZlU2V0dGluZ3NTdGVwIiwiVGltZTNzIiwiYWxsb3dBZGRpdGlvbmFsQWNjb3VudCIsImFsbG93SWRlbnRpdGllcyIsImFjY291bnRGb3JEZWxldGlvbiIsImlkZW50aXR5Rm9yRGVsZXRpb24iLCJzY3JvbGxhYmxlT3B0aW9ucyIsIndyYXBwZXIiLCJjb250YWlubWVudCIsImF4aXMiLCJhZGROZXdBY2NvdW50IiwiZWRpdEFjY291bnQiLCJhZGROZXdJZGVudGl0eSIsImVkaXRJZGVudGl0eSIsImRlbGV0ZUFjY291bnQiLCJhY2NvdW50VG9SZW1vdmUiLCJkZWxldGVJZGVudGl0eSIsImlkZW50aXR5VG9SZW1vdmUiLCJvSWRlbnRpdHkiLCJhY2NvdW50c0FuZElkZW50aXRpZXNBZnRlck1vdmUiLCJwZWVrIiwiaGF2ZUNoYW5nZXMiLCJpbml0ZWQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yRGVzYyIsInNhdmVFcnJvclRleHQiLCJmaWx0ZXJSYXciLCJhbGxvdyIsImZpbHRlckZvckRlbGV0aW9uIiwic2F2ZUNoYW5nZXNDb21tYW5kIiwidXBkYXRlTGlzdCIsIkZpbHRlcnMiLCJNb2R1bGVzIiwiUmF3IiwiUmF3SXNBY3RpdmUiLCJSYXdJc0FsbG93IiwiZGVsZXRlRmlsdGVyIiwiYWRkRmlsdGVyIiwiZWRpdEZpbHRlciIsImNsb25lZEZpbHRlciIsImNhcGFBdXRvTG9nb3V0IiwiU2V0dGluc1N0b3JlIiwiYXV0b0xvZ291dE9wdGlvbnMiLCJjb25maWd1cmVUd29GYWN0b3IiLCJnb29nbGVMb2dnaW5lZCIsImdvb2dsZUFjdGlvbnMiLCJmYWNlYm9va0xvZ2dpbmVkIiwiZmFjZWJvb2tBY3Rpb25zIiwidHdpdHRlckxvZ2dpbmVkIiwidHdpdHRlckFjdGlvbnMiLCJnb29nbGVFbmFibGUiLCJnb29nbGVFbmFibGVBdXRoIiwiZ29vZ2xlRW5hYmxlQXV0aEdtYWlsIiwiZ29vZ2xlRW5hYmxlRHJpdmUiLCJnb29nbGVFbmFibGVQcmV2aWV3IiwiZ29vZ2xlVXNlck5hbWUiLCJmYWNlYm9va0VuYWJsZSIsImZhY2Vib29rVXNlck5hbWUiLCJ0d2l0dGVyRW5hYmxlIiwidHdpdHRlclVzZXJOYW1lIiwiY29ubmVjdEdvb2dsZUNvbW1hbmQiLCJkaXNjb25uZWN0R29vZ2xlQ29tbWFuZCIsImNvbm5lY3RGYWNlYm9va0NvbW1hbmQiLCJkaXNjb25uZWN0RmFjZWJvb2tDb21tYW5kIiwiY29ubmVjdFR3aXR0ZXJDb21tYW5kIiwiZGlzY29ubmVjdFR3aXR0ZXJDb21tYW5kIiwiY2hhbmdlUHJvY2VzcyIsImN1cnJlbnRQYXNzd29yZCIsIm5ld1Bhc3N3b3JkMiIsImVycm9yRGVzY3JpcHRpb24iLCJwYXNzd29yZE1pc21hdGNoIiwicGFzc3dvcmRVcGRhdGVFcnJvciIsInBhc3N3b3JkVXBkYXRlU3VjY2VzcyIsIm9uQ2hhbmdlUGFzc3dvcmRSZXNwb25zZSIsInNhdmVOZXdQYXNzd29yZENvbW1hbmQiLCJwcm9jZXNzVGV4dCIsInRlbXBsYXRlRm9yRGVsZXRpb24iLCJzV3JhcHBlciIsImFkZE5ld1RlbXBsYXRlIiwiZWRpdFRlbXBsYXRlIiwib1RlbXBsYXRlSXRlbSIsImRlbGV0ZVRlbXBsYXRlIiwidGVtcGxhdGVUb1JlbW92ZSIsInJlbG9hZFRlbXBsYXRlcyIsImZvbGRlckxpc3RIZWxwIiwiZm9sZGVyRm9yRGVsZXRpb24iLCJmb2xkZXJGb3JFZGl0IiwidXNlSW1hcFN1YnNjcmliZSIsImZvbGRlckVkaXRPbkVudGVyIiwibmFtZVRvRWRpdCIsImZvbGRlckVkaXRPbkVzYyIsInN5c3RlbUZvbGRlciIsImRlbGV0ZUZvbGRlciIsImZvbGRlclRvUmVtb3ZlIiwiZlJlbW92ZUZvbGRlciIsInN1YnNjcmliZUZvbGRlciIsInVuU3Vic2NyaWJlRm9sZGVyIiwiY2hlY2thYmxlVHJ1ZUZvbGRlciIsImNoZWNrYWJsZUZhbHNlRm9sZGVyIiwidGhlbWVzT2JqZWN0cyIsImJhY2tncm91bmQiLCJ1cGxvYWRlckJ1dHRvbiIsImNhcGFVc2VyQmFja2dyb3VuZCIsIlVzZXJCYWNrZ3JvdW5kIiwib1RoZW1lQWpheFJlcXVlc3QiLCIkYmciLCJjdXJyZW50VGhlbWUiLCJuYW1lRGlzcGxheSIsInRoZW1lUHJldmlld1NyYyIsImNsZWFyQmFja2dyb3VuZCIsImVycm9yTXNnIiwib3BlblBncEtleUZvckRlbGV0aW9uIiwiaXNIdHRwcyIsImFkZE9wZW5QZ3BLZXkiLCJnZW5lcmF0ZU9wZW5QZ3BLZXkiLCJ2aWV3T3BlblBncEtleSIsIm9wZW5QZ3BLZXkiLCJkZWxldGVPcGVuUGdwS2V5Iiwib3BlblBncEtleVRvUmVtb3ZlIiwiZmluZGVkSXRlbSIsInJlbW92ZUZvcklkIiwiYmFja1RvTWFpbEJveENsaWNrIiwiYm9vdHN0cmFwIiwiTWVzc2FnZU9wZW5QZ3BQb3B1cFZpZXciLCJzZWxlY3RlZEtleSIsImJ1dHRvbkZvY3VzIiwicmVzdWx0Q2FsbGJhY2siLCJQb3B1cE1lc3NhZ2VPcGVuUEdQIiwiZG9Db21tYW5kIiwiZmlyc3QiLCJLRVlfTkFNRV9TVUJTVFIiLCJDb21wb3NlT3BlblBncFBvcHVwVmlldyIsInNpZ24iLCJlbmNyeXB0IiwicHVibGljS2V5c09wdGlvbnNDYXB0aW9uIiwicHJpdmF0ZUtleXNPcHRpb25zQ2FwdGlvbiIsInNlbGVjdGVkUHJpdmF0ZUtleSIsInNlbGVjdGVkUHVibGljS2V5Iiwic2lnbktleSIsImVuY3J5cHRLZXlzIiwiZW5jcnlwdEtleXNWaWV3Iiwib0tleSIsInByaXZhdGVLZXlzT3B0aW9ucyIsIm9wdHMiLCJwdWJsaWNLZXlzT3B0aW9ucyIsInNlbGVjdENvbW1hbmQiLCJ1cGRhdGVDb21tYW5kIiwiYWRkQ29tbWFuZCIsIlBvcHVwQ29tcG9zZU9wZW5QR1AiLCJhZGRPcHRpb25DbGFzcyIsImRvbU9wdGlvbiIsImNsYXNzIiwiZGVsZXRlUHVibGlja0tleSIsImFQdWJsaWNLZXlzIiwicGdwUHJvbWlzZSIsIlRpbWUyMG1zIiwia2V5SWQiLCJyZW1vdmFibGUiLCJwdWJsaWNLZXkiLCJyZWMiLCJlbWFpbExpbmUiLCJyZWNFbWFpbCIsImVuY3J5cHRLZXkiLCJGb2xkZXJDbGVhclBvcHVwVmlldyIsInNlbGVjdGVkRm9sZGVyIiwiaXNDbGVhcmluZyIsImNsZWFyaW5nUHJvY2VzcyIsImNsZWFyaW5nRXJyb3IiLCJmb2xkZXJGdWxsTmFtZUZvckNsZWFyIiwiZm9sZGVyTmFtZUZvckNsZWFyIiwiZGFuZ2VyRGVzY0h0bWwiLCJmb2xkZXJUb0NsZWFyIiwiQWR2YW5jZWRTZWFyY2hQb3B1cFZpZXciLCJmcm9tRm9jdXMiLCJzZWxlY3RlZERhdGVWYWx1ZSIsImhhc0F0dGFjaG1lbnQiLCJzZWxlY3RlZERhdGVzIiwic2VhcmNoQ29tbWFuZCIsImJ1aWxkU2VhcmNoU3RyaW5nIiwicGFyc2VTZWFyY2hTdHJpbmdWYWx1ZSIsImJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUiLCJmcm9tXyIsImlzUGFydCIsImhhc1BhcnQiLCJUd29GYWN0b3JUZXN0UG9wdXBWaWV3IiwidGVzdGluZyIsImtvVGVzdGVkVHJpZ2dlciIsInRlc3RDb2RlQ29tbWFuZCIsIkFkZE9wZW5QZ3BLZXlQb3B1cFZpZXciLCJlcnJvck1lc3NhZ2UiLCJhZGRPcGVuUGdwS2V5Q29tbWFuZCIsInJlZyIsImtleVRyaW1tZWQiLCJkb25lIiwiaW1wb3J0S2V5IiwiTmV3T3BlblBncEtleVBvcHVwVmlldyIsImtleUJpdExlbmd0aCIsIkJpdExlbmd0aDIwNDgiLCJnZW5lcmF0ZU9wZW5QZ3BLZXlDb21tYW5kIiwiZ2VuZXJhdGVLZXkiLCJ1c2VySWRzIiwibnVtQml0cyIsInBhc3NwaHJhc2UiLCJrZXlQYWlyIiwicHJpdmF0ZUtleUFybW9yZWQiLCJwdWJsaWNLZXlBcm1vcmVkIiwic2hvd0Vycm9yIiwiVmlld09wZW5QZ3BLZXlQb3B1cFZpZXciLCJrZXlEb20iLCJQb3B1cFZpZXdPcGVuUEdQIiwic2VsZWN0S2V5IiwiV2VsY29tZVBhZ2VQb3B1cFZpZXciLCJ3ZWxjb21lUGFnZVVSTCIsImNsb3NlRm9jdXNlZCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFF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O0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0Qjs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FB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QUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsNEJBQTRCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdELGdCQUFnQjtBQUN4RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9ELGdCQUFnQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsMkJBQTJCLDRCQUE0QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkIseUJBQXlCO0FBQ3BEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUVEeHRELE0sR0FBQSxrQkFBUztBQUNSK3RCLHNFQUFRLENBQUNoNUIsWUFBVDtBQUNBLEc7OztFQTlCaUMzUSwrRSIsImZpbGUiOiJqcy9hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcInJhaW5sb29wL3YvMC4wLjAvc3RhdGljL2pzL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTE3KTtcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogMCAqL1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlVHlwZSA9IHtcblx0J1Vua25vd24nOiAndW5rbm93bicsXG5cdCdUZXh0JzogJ3RleHQnLFxuXHQnSHRtbCc6ICdodG1sJyxcblx0J0NvZGUnOiAnY29kZScsXG5cdCdFbWwnOiAnZW1sJyxcblx0J1dvcmRUZXh0JzogJ3dvcmQtdGV4dCcsXG5cdCdQZGYnOiAncGRmJyxcblx0J0ltYWdlJzogJ2ltYWdlJyxcblx0J0F1ZGlvJzogJ2F1ZGlvJyxcblx0J1ZpZGVvJzogJ3ZpZGVvJyxcblx0J1NoZWV0JzogJ3NoZWV0Jyxcblx0J1ByZXNlbnRhdGlvbic6ICdwcmVzZW50YXRpb24nLFxuXHQnQ2VydGlmaWNhdGUnOiAnY2VydGlmaWNhdGUnLFxuXHQnQ2VydGlmaWNhdGVCaW4nOiAnY2VydGlmaWNhdGUtYmluJyxcblx0J0FyY2hpdmUnOiAnYXJjaGl2ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFN0b3JhZ2VSZXN1bHRUeXBlID0ge1xuXHQnU3VjY2Vzcyc6ICdzdWNjZXNzJyxcblx0J0Fib3J0JzogJ2Fib3J0Jyxcblx0J0Vycm9yJzogJ2Vycm9yJyxcblx0J1VubG9hZCc6ICd1bmxvYWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2N1c2VkID0ge1xuXHQnTm9uZSc6ICdub25lJyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlID0ge1xuXHQnRW1wdHknOiAxMCxcblx0J0xvZ2luJzogMjAsXG5cdCdBdXRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlVHlwZSA9IHtcblx0J1dlYm1haWwnOiAwLFxuXHQnQWRtaW4nOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDYXBhID0ge1xuXHQnVHdvRmFjdG9yJzogJ1RXT19GQUNUT1InLFxuXHQnVHdvRmFjdG9yRm9yY2UnOiAnVFdPX0ZBQ1RPUl9GT1JDRScsXG5cdCdPcGVuUEdQJzogJ09QRU5fUEdQJyxcblx0J1ByZWZldGNoJzogJ1BSRUZFVENIJyxcblx0J0dyYXZhdGFyJzogJ0dSQVZBVEFSJyxcblx0J0ZvbGRlcnMnOiAnRk9MREVSUycsXG5cdCdDb21wb3Nlcic6ICdDT01QT1NFUicsXG5cdCdDb250YWN0cyc6ICdDT05UQUNUUycsXG5cdCdSZWxvYWQnOiAnUkVMT0FEJyxcblx0J1NlYXJjaCc6ICdTRUFSQ0gnLFxuXHQnU2VhcmNoQWR2JzogJ1NFQVJDSF9BRFYnLFxuXHQnTWVzc2FnZUFjdGlvbnMnOiAnTUVTU0FHRV9BQ1RJT05TJyxcblx0J01lc3NhZ2VMaXN0QWN0aW9ucyc6ICdNRVNTQUdFTElTVF9BQ1RJT05TJyxcblx0J0F0dGFjaG1lbnRzQWN0aW9ucyc6ICdBVFRBQ0hNRU5UU19BQ1RJT05TJyxcblx0J0Rhbmdlcm91c0FjdGlvbnMnOiAnREFOR0VST1VTX0FDVElPTlMnLFxuXHQnU2V0dGluZ3MnOiAnU0VUVElOR1MnLFxuXHQnSGVscCc6ICdIRUxQJyxcblx0J1RoZW1lcyc6ICdUSEVNRVMnLFxuXHQnVXNlckJhY2tncm91bmQnOiAnVVNFUl9CQUNLR1JPVU5EJyxcblx0J1NpZXZlJzogJ1NJRVZFJyxcblx0J0ZpbHRlcnMnOiAnRklMVEVSUycsXG5cdCdBdHRhY2htZW50VGh1bWJuYWlscyc6ICdBVFRBQ0hNRU5UX1RIVU1CTkFJTFMnLFxuXHQnVGVtcGxhdGVzJzogJ1RFTVBMQVRFUycsXG5cdCdBdXRvTG9nb3V0JzogJ0FVVE9MT0dPVVQnLFxuXHQnQWRkaXRpb25hbEFjY291bnRzJzogJ0FERElUSU9OQUxfQUNDT1VOVFMnLFxuXHQnSWRlbnRpdGllcyc6ICdJREVOVElUSUVTJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgS2V5U3RhdGUgPSB7XG5cdCdBbGwnOiAnYWxsJyxcblx0J05vbmUnOiAnbm9uZScsXG5cdCdDb250YWN0TGlzdCc6ICdjb250YWN0LWxpc3QnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0NvbXBvc2UnOiAnY29tcG9zZScsXG5cdCdTZXR0aW5ncyc6ICdzZXR0aW5ncycsXG5cdCdNZW51JzogJ21lbnUnLFxuXHQnUG9wdXBDb21wb3NlT3BlblBHUCc6ICdjb21wb3NlLW9wZW4tcGdwJyxcblx0J1BvcHVwTWVzc2FnZU9wZW5QR1AnOiAnbWVzc2FnZS1vcGVuLXBncCcsXG5cdCdQb3B1cFZpZXdPcGVuUEdQJzogJ3ZpZXctb3Blbi1wZ3AnLFxuXHQnUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAnOiAncG9wdXAta2V5Ym9hcmQtc2hvcnRjdXRzLWhlbHAnLFxuXHQnUG9wdXBBc2snOiAncG9wdXAtYXNrJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRm9sZGVyVHlwZSA9IHtcblx0J0luYm94JzogMTAsXG5cdCdTZW50SXRlbXMnOiAxMSxcblx0J0RyYWZ0JzogMTIsXG5cdCdUcmFzaCc6IDEzLFxuXHQnU3BhbSc6IDE0LFxuXHQnQXJjaGl2ZSc6IDE1LFxuXHQnTm90U3BhbSc6IDgwLFxuXHQnVXNlcic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGb2xkZXJUeXBlID0ge1xuXHQnVVNFUic6IDAsXG5cdCdJTkJPWCc6IDEsXG5cdCdTRU5UJzogMixcblx0J0RSQUZUUyc6IDMsXG5cdCdKVU5LJzogNCxcblx0J1RSQVNIJzogNSxcblx0J0lNUE9SVEFOVCc6IDEwLFxuXHQnRkxBR0dFRCc6IDExLFxuXHQnQUxMJzogMTJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nID0ge1xuXHQnRGVmYXVsdE9mZic6ICdkZWZhdWx0b2ZmJyxcblx0J0RlZmF1bHRPbic6ICdkZWZhdWx0b24nLFxuXHQnVW51c2VkJzogJ3VudXNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZSA9IHtcblx0J0RlZmF1bHRPZmYnOiAwLFxuXHQnRGVmYXVsdE9uJzogMSxcblx0J1VudXNlZCc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBvc2VUeXBlID0ge1xuXHQnRW1wdHknOiAnZW1wdHknLFxuXHQnUmVwbHknOiAncmVwbHknLFxuXHQnUmVwbHlBbGwnOiAncmVwbHlhbGwnLFxuXHQnRm9yd2FyZCc6ICdmb3J3YXJkJyxcblx0J0ZvcndhcmRBc0F0dGFjaG1lbnQnOiAnZm9yd2FyZC1hcy1hdHRhY2htZW50Jyxcblx0J0RyYWZ0JzogJ2RyYWZ0Jyxcblx0J0VkaXRBc05ldyc6ICdlZGl0YXNuZXcnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBVcGxvYWRFcnJvckNvZGUgPSB7XG5cdCdOb3JtYWwnOiAwLFxuXHQnRmlsZUlzVG9vQmlnJzogMSxcblx0J0ZpbGVQYXJ0aWFsbHlVcGxvYWRlZCc6IDIsXG5cdCdGaWxlTm9VcGxvYWRlZCc6IDMsXG5cdCdNaXNzaW5nVGVtcEZvbGRlcic6IDQsXG5cdCdGaWxlT25TYXZlaW5nRXJyb3InOiA1LFxuXHQnRmlsZVR5cGUnOiA5OCxcblx0J1Vua25vd24nOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IHtcblx0J05vbmUnOiAwLFxuXHQnU2VudCc6IDEsXG5cdCdEcmFmdCc6IDIsXG5cdCdTcGFtJzogMyxcblx0J1RyYXNoJzogNCxcblx0J0FyY2hpdmUnOiA1XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRTaWRlS2V5TmFtZSA9IHtcblx0J0ZvbGRlcnNMYXNoSGFzaCc6IDAsXG5cdCdNZXNzYWdlc0luYm94TGFzdEhhc2gnOiAxLFxuXHQnTWFpbEJveExpc3RTaXplJzogMixcblx0J0V4cGFuZGVkRm9sZGVycyc6IDMsXG5cdCdGb2xkZXJMaXN0U2l6ZSc6IDQsXG5cdCdNZXNzYWdlTGlzdFNpemUnOiA1LFxuXHQnTGFzdFJlcGx5QWN0aW9uJzogNixcblx0J0xhc3RTaWduTWUnOiA3LFxuXHQnQ29tcG9zZUxhc3RJZGVudGl0eUlEJzogOCxcblx0J01lc3NhZ2VIZWFkZXJGdWxsSW5mbyc6IDksXG5cdCdNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzJzogMTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50S2V5Q29kZSA9IHtcblx0J0JhY2tzcGFjZSc6IDgsXG5cdCdUYWInOiA5LFxuXHQnRW50ZXInOiAxMyxcblx0J0VzYyc6IDI3LFxuXHQnUGFnZVVwJzogMzMsXG5cdCdQYWdlRG93bic6IDM0LFxuXHQnTGVmdCc6IDM3LFxuXHQnUmlnaHQnOiAzOSxcblx0J1VwJzogMzgsXG5cdCdEb3duJzogNDAsXG5cdCdFbmQnOiAzNSxcblx0J0hvbWUnOiAzNixcblx0J1NwYWNlJzogMzIsXG5cdCdJbnNlcnQnOiA0NSxcblx0J0RlbGV0ZSc6IDQ2LFxuXHQnQSc6IDY1LFxuXHQnUyc6IDgzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2V0QWN0aW9uID0ge1xuXHQnU2V0U2Vlbic6IDAsXG5cdCdVbnNldFNlZW4nOiAxLFxuXHQnU2V0RmxhZyc6IDIsXG5cdCdVbnNldEZsYWcnOiAzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2VsZWN0QWN0aW9uID0ge1xuXHQnQWxsJzogMCxcblx0J05vbmUnOiAxLFxuXHQnSW52ZXJ0JzogMixcblx0J1Vuc2Vlbic6IDMsXG5cdCdTZWVuJzogNCxcblx0J0ZsYWdnZWQnOiA1LFxuXHQnVW5mbGFnZ2VkJzogNlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRGVza3RvcE5vdGlmaWNhdGlvbiA9IHtcblx0J0FsbG93ZWQnOiAwLFxuXHQnTm90QWxsb3dlZCc6IDEsXG5cdCdEZW5pZWQnOiAyLFxuXHQnTm90U3VwcG9ydGVkJzogOVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5ID0ge1xuXHQnTG93JzogNSxcblx0J05vcm1hbCc6IDMsXG5cdCdIaWdoJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRGVmYXVsdFR5cGUgPSB7XG5cdCdIdG1sJzogJ0h0bWwnLFxuXHQnUGxhaW4nOiAnUGxhaW4nLFxuXHQnSHRtbEZvcmNlZCc6ICdIdG1sRm9yY2VkJyxcblx0J1BsYWluRm9yY2VkJzogJ1BsYWluRm9yY2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyU2VjdXJlID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTU0wnOiAxLFxuXHQnVExTJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VhcmNoRGF0ZVR5cGUgPSB7XG5cdCdBbGwnOiAtMSxcblx0J0RheXMzJzogMyxcblx0J0RheXM3JzogNyxcblx0J01vbnRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNhdmVTZXR0aW5nc1N0ZXAgPSB7XG5cdCdBbmltYXRlJzogLTIsXG5cdCdJZGxlJzogLTEsXG5cdCdUcnVlUmVzdWx0JzogMSxcblx0J0ZhbHNlUmVzdWx0JzogMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTGF5b3V0ID0ge1xuXHQnTm9QcmV2aWV3JzogMCxcblx0J1NpZGVQcmV2aWV3JzogMSxcblx0J0JvdHRvbVByZXZpZXcnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25GaWVsZCA9IHtcblx0J0Zyb20nOiAnRnJvbScsXG5cdCdSZWNpcGllbnQnOiAnUmVjaXBpZW50Jyxcblx0J1N1YmplY3QnOiAnU3ViamVjdCcsXG5cdCdIZWFkZXInOiAnSGVhZGVyJyxcblx0J1NpemUnOiAnU2l6ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvblR5cGUgPSB7XG5cdCdDb250YWlucyc6ICdDb250YWlucycsXG5cdCdOb3RDb250YWlucyc6ICdOb3RDb250YWlucycsXG5cdCdFcXVhbFRvJzogJ0VxdWFsVG8nLFxuXHQnTm90RXF1YWxUbyc6ICdOb3RFcXVhbFRvJyxcblx0J1JlZ2V4JzogJ1JlZ2V4Jyxcblx0J092ZXInOiAnT3ZlcicsXG5cdCdVbmRlcic6ICdVbmRlcidcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlcnNBY3Rpb24gPSB7XG5cdCdOb25lJzogJ05vbmUnLFxuXHQnTW92ZVRvJzogJ01vdmVUbycsXG5cdCdEaXNjYXJkJzogJ0Rpc2NhcmQnLFxuXHQnVmFjYXRpb24nOiAnVmFjYXRpb24nLFxuXHQnUmVqZWN0JzogJ1JlamVjdCcsXG5cdCdGb3J3YXJkJzogJ0ZvcndhcmQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJSdWxlc1R5cGUgPSB7XG5cdCdBbGwnOiAnQWxsJyxcblx0J0FueSc6ICdBbnknXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTaWduZWRWZXJpZnlTdGF0dXMgPSB7XG5cdCdVbmtub3duUHVibGljS2V5cyc6IC00LFxuXHQnVW5rbm93blByaXZhdGVLZXknOiAtMyxcblx0J1VudmVyaWZpZWQnOiAtMixcblx0J0Vycm9yJzogLTEsXG5cdCdOb25lJzogMCxcblx0J1N1Y2Nlc3MnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDb250YWN0UHJvcGVydHlUeXBlID0ge1xuXHQnVW5rbm93bic6IDAsXG5cblx0J0Z1bGxOYW1lJzogMTAsXG5cblx0J0ZpcnN0TmFtZSc6IDE1LFxuXHQnTGFzdE5hbWUnOiAxNixcblx0J01pZGRsZU5hbWUnOiAxNixcblx0J05pY2snOiAxOCxcblxuXHQnTmFtZVByZWZpeCc6IDIwLFxuXHQnTmFtZVN1ZmZpeCc6IDIxLFxuXG5cdCdFbWFpbCc6IDMwLFxuXHQnUGhvbmUnOiAzMSxcblx0J1dlYic6IDMyLFxuXG5cdCdCaXJ0aGRheSc6IDQwLFxuXG5cdCdGYWNlYm9vayc6IDkwLFxuXHQnU2t5cGUnOiA5MSxcblx0J0dpdEh1Yic6IDkyLFxuXG5cdCdOb3RlJzogMTEwLFxuXG5cdCdDdXN0b20nOiAyNTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1hZ2ljcyA9IHtcblx0J0V2ZW50V2hpY2hNb3VzZU1pZGRsZSc6IDMsXG5cdCdpZnZpc2libGVJZGxlMTBzJzogMTAsXG5cblx0J0JpdExlbmd0aDIwNDgnOiAyMDQ4LFxuXHQnQml0TGVuZ3RoMTAyNCc6IDEwMjQsXG5cblx0J1NpemUzNTBweCc6IDM1MCxcblx0J1NpemU1MHB4JzogNTAsXG5cdCdTaXplMjBweCc6IDIwLFxuXHQnU2l6ZTFweCc6IDEsXG5cblx0J1RpbWUzMG1Jbk1pbic6IDMwLFxuXG5cdCdUaW1lNjBtJzogNjAwMDAgKiA2MCxcblx0J1RpbWUzMG0nOiA2MDAwMCAqIDMwLFxuXHQnVGltZTIwbSc6IDYwMDAwICogMjAsXG5cdCdUaW1lMTVtJzogNjAwMDAgKiAxNSxcblx0J1RpbWUxMG0nOiA2MDAwMCAqIDEwLFxuXHQnVGltZTVtJzogNjAwMDAgKiA1LFxuXHQnVGltZTNtJzogNjAwMDAgKiAzLFxuXHQnVGltZTJtJzogNjAwMDAgKiAyLFxuXHQnVGltZTFtJzogNjAwMDAsXG5cdCdUaW1lMzBzJzogMzAwMDAsXG5cdCdUaW1lMTBzJzogMTAwMDAsXG5cdCdUaW1lN3MnOiA3MDAwLFxuXHQnVGltZTVzJzogNTAwMCxcblx0J1RpbWUzcyc6IDMwMDAsXG5cdCdUaW1lMXMnOiAxMDAwLFxuXHQnVGltZTUwMG1zJzogNTAwLFxuXHQnVGltZTM1MG1zJzogMzUwLFxuXHQnVGltZTI1MG1zJzogMjUwLFxuXHQnVGltZTIwMG1zJzogMjAwLFxuXHQnVGltZTEwMG1zJzogMTAwLFxuXHQnVGltZTUwbXMnOiA1MCxcblx0J1RpbWUyMG1zJzogMjAsXG5cdCdUaW1lMTBtcyc6IDEwLFxuXHQnVGltZTFtcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBvcnRzID0ge1xuXHQnSW1hcCc6IDE0Myxcblx0J0ltYXBTc2wnOiA5OTMsXG5cdCdTbXRwJzogMjUsXG5cdCdTbXRwU3NsJzogNDY1LFxuXHQnU210cFN0YXJ0VGxzJzogNTg3XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb24gPSB7XG5cdCdJbnZhbGlkVG9rZW4nOiAxMDEsXG5cdCdBdXRoRXJyb3InOiAxMDIsXG5cdCdBY2Nlc3NFcnJvcic6IDEwMyxcblx0J0Nvbm5lY3Rpb25FcnJvcic6IDEwNCxcblx0J0NhcHRjaGFFcnJvcic6IDEwNSxcblx0J1NvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA2LFxuXHQnU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNyxcblx0J1NvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwOCxcblx0J0RvbWFpbk5vdEFsbG93ZWQnOiAxMDksXG5cdCdBY2NvdW50Tm90QWxsb3dlZCc6IDExMCxcblxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCc6IDEyMCxcblx0J0FjY291bnRUd29GYWN0b3JBdXRoRXJyb3InOiAxMjEsXG5cblx0J0NvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkJzogMTMwLFxuXHQnQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0JzogMTMxLFxuXHQnTmV3UGFzc3dvcmRTaG9ydCc6IDEzMixcblx0J05ld1Bhc3N3b3JkV2Vhayc6IDEzMyxcblx0J05ld1Bhc3N3b3JkRm9yYmlkZGVuJzogMTM0LFxuXG5cdCdDb250YWN0c1N5bmNFcnJvcic6IDE0MCxcblxuXHQnQ2FudEdldE1lc3NhZ2VMaXN0JzogMjAxLFxuXHQnQ2FudEdldE1lc3NhZ2UnOiAyMDIsXG5cdCdDYW50RGVsZXRlTWVzc2FnZSc6IDIwMyxcblx0J0NhbnRNb3ZlTWVzc2FnZSc6IDIwNCxcblx0J0NhbnRDb3B5TWVzc2FnZSc6IDIwNSxcblxuXHQnQ2FudFNhdmVNZXNzYWdlJzogMzAxLFxuXHQnQ2FudFNlbmRNZXNzYWdlJzogMzAyLFxuXHQnSW52YWxpZFJlY2lwaWVudHMnOiAzMDMsXG5cblx0J0NhbnRTYXZlRmlsdGVycyc6IDM1MSxcblx0J0NhbnRHZXRGaWx0ZXJzJzogMzUyLFxuXHQnRmlsdGVyc0FyZU5vdENvcnJlY3QnOiAzNTUsXG5cblx0J0NhbnRDcmVhdGVGb2xkZXInOiA0MDAsXG5cdCdDYW50UmVuYW1lRm9sZGVyJzogNDAxLFxuXHQnQ2FudERlbGV0ZUZvbGRlcic6IDQwMixcblx0J0NhbnRTdWJzY3JpYmVGb2xkZXInOiA0MDMsXG5cdCdDYW50VW5zdWJzY3JpYmVGb2xkZXInOiA0MDQsXG5cdCdDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXInOiA0MDUsXG5cblx0J0NhbnRTYXZlU2V0dGluZ3MnOiA1MDEsXG5cdCdDYW50U2F2ZVBsdWdpblNldHRpbmdzJzogNTAyLFxuXG5cdCdEb21haW5BbHJlYWR5RXhpc3RzJzogNjAxLFxuXG5cdCdDYW50SW5zdGFsbFBhY2thZ2UnOiA3MDEsXG5cdCdDYW50RGVsZXRlUGFja2FnZSc6IDcwMixcblx0J0ludmFsaWRQbHVnaW5QYWNrYWdlJzogNzAzLFxuXHQnVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlJzogNzA0LFxuXG5cdCdMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlJzogNzEwLFxuXHQnTGljZW5zaW5nRXhwaXJlZCc6IDcxMSxcblx0J0xpY2Vuc2luZ0Jhbm5lZCc6IDcxMixcblxuXHQnRGVtb1NlbmRNZXNzYWdlRXJyb3InOiA3NTAsXG5cdCdEZW1vQWNjb3VudEVycm9yJzogNzUxLFxuXG5cdCdBY2NvdW50QWxyZWFkeUV4aXN0cyc6IDgwMSxcblx0J0FjY291bnREb2VzTm90RXhpc3QnOiA4MDIsXG5cblx0J01haWxTZXJ2ZXJFcnJvcic6IDkwMSxcblx0J0NsaWVudFZpZXdFcnJvcic6IDkwMixcblx0J0ludmFsaWRJbnB1dEFyZ3VtZW50JzogOTAzLFxuXG5cdCdBamF4RmFsc2UnOiA5NTAsXG5cdCdBamF4QWJvcnQnOiA5NTEsXG5cdCdBamF4UGFyc2UnOiA5NTIsXG5cdCdBamF4VGltZW91dCc6IDk1MyxcblxuXHQnVW5rbm93bk5vdGlmaWNhdGlvbic6IDk5OSxcblx0J1Vua25vd25FcnJvcic6IDk5OVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgT3BlbnRpcCBmcm9tICdPcGVudGlwJztcbmltcG9ydCBQaWthZGF5IGZyb20gJ3Bpa2FkYXknO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCBrbyA9IHdpbmRvdy5rbyxcblx0JHdpbiA9ICQod2luZG93KSxcblx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciA9IChlbGVtZW50KSA9PiB7XG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy51cGRhdGVXaWR0aCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmSW5pdCA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGZWYWx1ZSgkZWwud2lkdGgoKSk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdFx0fTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsIGZJbml0KTtcblx0XHRmSW5pdCgpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkd2luLm9mZigncmVzaXplJywgZkluaXQpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZWRpdG9yID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRsZXQgZWRpdG9yID0gbnVsbDtcblxuXHRcdGNvbnN0IGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRIdG1sRWRpdG9yID0gcmVxdWlyZSgnQ29tbW9uL0h0bWxFZGl0b3InKS5kZWZhdWx0LFxuXHRcdFx0ZlVwZGF0ZUVkaXRvclZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZS5fX2VkaXRvci5zZXRIdG1sT3JQbGFpbihmVmFsdWUoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmVXBkYXRlS29WYWx1ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuX19lZGl0b3IpIHtcblx0XHRcdFx0XHRmVmFsdWUoZlZhbHVlLl9fZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmT25SZWFkeSA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yID0gZWRpdG9yO1xuXHRcdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUoKTtcblx0XHRcdH07XG5cblx0XHRpZiAoa28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgSHRtbEVkaXRvcikge1xuXHRcdFx0ZWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoZWxlbWVudCwgZlVwZGF0ZUtvVmFsdWUsIGZPblJlYWR5LCBmVXBkYXRlS29WYWx1ZSk7XG5cblx0XHRcdGZWYWx1ZS5fX2ZldGNoRWRpdG9yVmFsdWUgPSBmVXBkYXRlS29WYWx1ZTtcblxuXHRcdFx0ZlZhbHVlLnN1YnNjcmliZShmVXBkYXRlRWRpdG9yVmFsdWUpO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmpzb24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudCkudGV4dCh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNjcm9sbGVyU2hhZG93cyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW1pdCA9IDgsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29udCA9ICRlbC5maW5kKCdbZGF0YS1zY3JvbGxlci1zaGFkb3dzLWNvbnRlbnRdJylbMF0gfHwgbnVsbCxcblx0XHRcdGZGdW5jID0gXy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdCRlbFxuXHRcdFx0XHRcdC50b2dnbGVDbGFzcygnc2Nyb2xsZXItc2hhZG93LXRvcCcsIGxpbWl0IDwgY29udC5zY3JvbGxUb3ApXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctYm90dG9tJywgY29udC5zY3JvbGxUb3AgKyBsaW1pdCA8IGNvbnQuc2Nyb2xsSGVpZ2h0IC0gY29udC5jbGllbnRIZWlnaHQpO1xuXHRcdFx0fSwgMTAwKTtcblxuXHRcdGlmIChjb250KSB7XG5cdFx0XHQkKGNvbnQpLm9uKCdzY3JvbGwgcmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0JHdpbi5vbigncmVzaXplJywgZkZ1bmMpO1xuXG5cdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGNvbnQsICgpID0+IHtcblx0XHRcdFx0JChjb250KS5vZmYoKTtcblx0XHRcdFx0JHdpbi5vZmYoJ3Jlc2l6ZScsIGZGdW5jKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBpa2FkYXkgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpID0+IHtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnMudGV4dElucHV0LmluaXQoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChQaWthZGF5KSB7XG5cdFx0XHRlbGVtZW50Ll9fcGlrYWRheSA9IG5ldyBQaWthZGF5KHtcblx0XHRcdFx0ZmllbGQ6IGVsZW1lbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnZpc2libGVBbmltYXRlZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWluaXRlZCcpO1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCRlbC5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLmFkZENsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKS5zaG93KCk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0JGVsLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHRcdH0sIDEwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKS5yZW1vdmVDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudG9vbHRpcCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKTtcblxuXHRcdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRcdCdzdHlsZSc6ICdyYWlubG9vcFRpcCcsXG5cdFx0XHRcdCdlbGVtZW50JzogZWxlbWVudCxcblx0XHRcdFx0J3RpcEpvaW50JzogJGVsLmRhdGEoJ3Rvb2x0aXAtam9pbicpIHx8ICdib3R0b20nXG5cdFx0XHR9KTtcblxuXHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCcnID09PSBzVmFsdWUpIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzSTE4Tikge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdG9yID0gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKTtcblxuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblxuXHRcdFx0XHRUcmFuc2xhdG9yLnRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoc1ZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuYWN0aXZhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UgfHwgaXNNb2JpbGUpICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KGlzSTE4TiA/IHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4bihzVmFsdWUpIDogc1ZhbHVlKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwRXJyb3JUaXAgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRzdHlsZTogJ3JhaW5sb29wRXJyb3JUaXAnLFxuXHRcdFx0aGlkZU9uOiAnbW91c2VvdXQgY2xpY2snLFxuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdHRpcEpvaW50OiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ3RvcCdcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblxuXHRcdCQod2luZG93LmRvY3VtZW50KS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRmRGlzcG9zYWxUb29sdGlwSGVscGVyKGVsZW1lbnQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0dmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpLFxuXHRcdFx0b3BlblRpcHMgPSBlbGVtZW50Ll9fb3BlbnRpcDtcblxuXHRcdGlmIChvcGVuVGlwcykge1xuXHRcdFx0aWYgKCcnID09PSB2YWx1ZSkge1xuXHRcdFx0XHRvcGVuVGlwcy5oaWRlKCk7XG5cdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRpZiAoJGVsLmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmFjdGl2YXRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQoJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmIChHbG9iYWxzICYmIEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zKSB7XG5cdFx0XHRHbG9iYWxzLmRhdGEuYUJvb3RzdHJhcERyb3Bkb3ducy5wdXNoKCQoZWxlbWVudCkpO1xuXG5cdFx0XHQkKGVsZW1lbnQpLmNsaWNrKCgpID0+IHtcblx0XHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vcGVuRHJvcGRvd25UcmlnZ2VyID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0XHRpZiAoISRlbC5oYXNDbGFzcygnb3BlbicpKSB7XG5cdFx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHQkZWwuZmluZCgnLmRyb3Bkb3duLXRvZ2dsZScpLmZvY3VzKCk7XG5cblx0XHRcdHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLmRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJvcGRvd25DbG9zZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmNsb3Nlc3QoJy5kcm9wZG93bicpXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0nLCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudCkuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5wb3BvdmVyID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkucG9wb3Zlcihrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQgPSB7fTtcbmtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LmluaXQgPSBrby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dC51cGRhdGUgPSAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZVNoZWV0ICYmICd1bmRlZmluZWQnICE9PSB0eXBlb2YgZWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQpIHtcblx0XHRlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0fSBlbHNlIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnJlc2l6ZWNyb3AgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmFkZENsYXNzKCdyZXNpemVjcm9wJylcblx0XHRcdC5yZXNpemVjcm9wKHtcblx0XHRcdFx0J3dpZHRoJzogJzEwMCcsXG5cdFx0XHRcdCdoZWlnaHQnOiAnMTAwJyxcblx0XHRcdFx0J3dyYXBwZXJDU1MnOiB7XG5cdFx0XHRcdFx0J2JvcmRlci1yYWRpdXMnOiAnMTBweCdcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKSgpO1xuXHRcdCQoZWxlbWVudCkucmVzaXplY3JvcCh7XG5cdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdCdoZWlnaHQnOiAnMTAwJ1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25LZXlEb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25LZXlEb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0cmV0dXJuIGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIGV2ZW50KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlkb3duLmtvT25LZXlEb3duJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVudGVyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlwcmVzcy5rb09uRW50ZXInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAxMyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXByZXNzLmtvT25FbnRlcicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25TcGFjZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PblNwYWNlJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMzIgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PblNwYWNlJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblRhYiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5ZG93bi5rb09uVGFiJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgOSA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgISFldmVudC5zaGlmdEtleSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PblRhYicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25Fc2MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXVwLmtvT25Fc2MnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAyNyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXVwLmtvT25Fc2MnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNsaWNrT25UcnVlID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5tb2RhbCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpO1xuXG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdmYWRlJywgIUdsb2JhbHMuYk1vYmlsZURldmljZSlcblx0XHRcdC5tb2RhbCh7XG5cdFx0XHRcdCdrZXlib2FyZCc6IGZhbHNlLFxuXHRcdFx0XHQnc2hvdyc6IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKVxuXHRcdFx0fSlcblx0XHRcdC5vbignc2hvd24ua29Nb2RhbCcsIFV0aWxzLndpbmRvd1Jlc2l6ZUNhbGxiYWNrKVxuXHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHQub24oJ2NsaWNrLmtvTW9kYWwnLCAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkoZmFsc2UpO1xuXHRcdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0Lm9mZignc2hvd24ua29Nb2RhbCcpXG5cdFx0XHRcdC5maW5kKCcuY2xvc2UnKVxuXHRcdFx0XHQub2ZmKCdjbGljay5rb01vZGFsJyk7XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpLm1vZGFsKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSA/ICdzaG93JyA6ICdoaWRlJyk7XG5cblx0XHRpZiAoR2xvYmFscy4kaHRtbC5oYXNDbGFzcygncmwtYW5pbScpKSB7XG5cdFx0XHRHbG9iYWxzLiRodG1sLmFkZENsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRHbG9iYWxzLiRodG1sLnJlbW92ZUNsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vbWVudCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKFxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ21vbWVudCcpXG5cdFx0XHRcdC5kYXRhKCdtb21lbnQtdGltZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9Nb21lbnRvcicpLm1vbWVudFRvTm9kZSgkKGVsZW1lbnQpLmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pMThuSW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudHJhbnNsYXRvckluaXQgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5VcGRhdGUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0a28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5saW5rID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCdocmVmJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRpdGxlID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCd0aXRsZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50ZXh0RiA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXREb20gPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKShlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRGaXhlZFRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHR0b3AgPSB2YWx1ZXNbMV0gfHwgMDtcblxuXHRcdGxldCAkY29udGFpbmVyID0gJCh2YWx1ZXNbMF0gfHwgbnVsbCk7XG5cdFx0JGNvbnRhaW5lciA9ICRjb250YWluZXJbMF0gPyAkY29udGFpbmVyIDogbnVsbDtcblx0XHRpZiAoJGNvbnRhaW5lcikge1xuXHRcdFx0JHdpbi5yZXNpemUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvZmZzZXQgPSAkY29udGFpbmVyID8gJGNvbnRhaW5lci5vZmZzZXQoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChvZmZzZXQgJiYgb2Zmc2V0LnRvcCkge1xuXHRcdFx0XHRcdCRlbC5jc3MoJ3RvcCcsIG9mZnNldC50b3AgKyB0b3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0UmVzaXplVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdCQoZWxlbWVudCkuY3NzKHtcblx0XHRcdCdoZWlnaHQnOiB2YWx1ZXNbMV0sXG5cdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlc1sxXVxuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChvRWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHR2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cblx0XHRsZXQgdmFsdWUgPSBVdGlscy5wSW50KHZhbHVlc1sxXSksXG5cdFx0XHRzaXplID0gMCxcblx0XHRcdG9mZnNldCA9ICQob0VsZW1lbnQpLm9mZnNldCgpLnRvcDtcblxuXHRcdGlmICgwIDwgb2Zmc2V0KSB7XG5cdFx0XHRvZmZzZXQgKz0gVXRpbHMucEludCh2YWx1ZXNbMl0pO1xuXHRcdFx0c2l6ZSA9IEdsb2JhbHMuJHdpbi5oZWlnaHQoKSAtIG9mZnNldDtcblxuXHRcdFx0aWYgKHZhbHVlIDwgc2l6ZSkge1xuXHRcdFx0XHR2YWx1ZSA9IHNpemU7XG5cdFx0XHR9XG5cblx0XHRcdCQob0VsZW1lbnQpLmNzcyh7XG5cdFx0XHRcdCdoZWlnaHQnOiB2YWx1ZSxcblx0XHRcdFx0J21pbi1oZWlnaHQnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuYXBwZW5kRG9tID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHRcdC5zaG93KCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgdHJpZ2dlclpvbmUgPSAxMDAsXG5cdFx0XHRcdHNjcm9sbFNwZWVkID0gMyxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGRyb3BwYWJsZVNlbGVjdG9yID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVTZWxlY3RvciA6ICcnLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdGRpc3RhbmNlOiAyMCxcblx0XHRcdFx0XHRoYW5kbGU6ICcuZHJhZ0hhbmRsZScsXG5cdFx0XHRcdFx0Y3Vyc29yQXQ6IHsgdG9wOiAyMiwgbGVmdDogMyB9LFxuXHRcdFx0XHRcdHJlZnJlc2hQb3NpdGlvbnM6IHRydWUsXG5cdFx0XHRcdFx0c2Nyb2xsOiB0cnVlLFxuXHRcdFx0XHRcdGRyYWc6IG51bGwsXG5cdFx0XHRcdFx0c3RvcDogbnVsbCxcblx0XHRcdFx0XHRoZWxwZXI6IG51bGxcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKGRyb3BwYWJsZVNlbGVjdG9yKSB7XG5cdFx0XHRcdGNvbmYuZHJhZyA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHRcdG9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdFx0XHRib3R0b21Qb3MgPSBvZmZzZXQudG9wICsgJHRoaXMuaGVpZ2h0KCk7XG5cblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWCA+PSBvZmZzZXQubGVmdCAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICR0aGlzLndpZHRoKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VZID49IGJvdHRvbVBvcyAtIHRyaWdnZXJab25lICYmIGV2ZW50LnBhZ2VZIDw9IGJvdHRvbVBvcykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVVcCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSArIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlVXAsIDEwKSk7XG5cdFx0XHRcdFx0XHRcdFx0bW92ZVVwKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gb2Zmc2V0LnRvcCAmJiBldmVudC5wYWdlWSA8PSBvZmZzZXQudG9wICsgdHJpZ2dlclpvbmUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb3ZlRG93biA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSAtIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlRG93biwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlRG93bigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uZi5zdG9wID0gKCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCgkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcpKTtcblx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25mLmhlbHBlciA9IChldmVudCkgPT4gZlZhbHVlQWNjZXNzb3IoKShldmVudCAmJiBldmVudC50YXJnZXQgPyBrby5kYXRhRm9yKGV2ZW50LnRhcmdldCkgOiBudWxsKTtcblxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuZHJhZ2dhYmxlKGNvbmYpXG5cdFx0XHRcdC5vbignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFV0aWxzLnJlbW92ZUluRm9jdXMoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0Lm9mZignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJylcblx0XHRcdFx0XHQuZHJhZ2dhYmxlKCdkZXN0cm95Jyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wcGFibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgZlZhbHVlRnVuYyA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRcdGZBbGxWYWx1ZUZ1bmMgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0XHRmT3ZlckNhbGxiYWNrID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgOiBudWxsLFxuXHRcdFx0XHRmT3V0Q2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3V0ID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgOiBudWxsLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdHRvbGVyYW5jZTogJ3BvaW50ZXInLFxuXHRcdFx0XHRcdGhvdmVyQ2xhc3M6ICdkcm9wcGFibGVIb3ZlcicsXG5cdFx0XHRcdFx0ZHJvcDogbnVsbCxcblx0XHRcdFx0XHRvdmVyOiBudWxsLFxuXHRcdFx0XHRcdG91dDogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZlZhbHVlRnVuYykge1xuXHRcdFx0XHRjb25mLmRyb3AgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlRnVuYyhldmVudCwgdWkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChmT3ZlckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdmVyID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdFx0Zk92ZXJDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZk91dENhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdXQgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3V0Q2FsbGJhY2soZXZlbnQsIHVpKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoY29uZik7XG5cblx0XHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubmFubyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFNldHRpbmdzID0gcmVxdWlyZSgnU3RvcmFnZS9TZXR0aW5ncycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJEaXNhYmxlTmFub1Njcm9sbCAmJiAhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZU5hdGl2ZVNjcm9sbGJhcnMnKSkge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ25hbm8nKVxuXHRcdFx0XHQubmFub1Njcm9sbGVyKHtcblx0XHRcdFx0XHRpT1NOYXRpdmVTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdHByZXZlbnRQYWdlU2Nyb2xsaW5nOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNhdmVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHQkZWwuZGF0YShcblx0XHRcdCdzYXZlLXRyaWdnZXItdHlwZScsXG5cdFx0XHQkZWwuaXMoJ2lucHV0W3R5cGU9dGV4dF0saW5wdXRbdHlwZT1lbWFpbF0saW5wdXRbdHlwZT1wYXNzd29yZF0sc2VsZWN0LHRleHRhcmVhJykgPyAnaW5wdXQnIDogJ2N1c3RvbSdcblx0XHQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0JGVsXG5cdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOycgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1zcGlubmVyIGFuaW1hdGVkXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1yZW1vdmUgZXJyb3JcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLW9rIHN1Y2Nlc3NcIj48L2k+J1xuXHRcdFx0XHQpXG5cdFx0XHRcdC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXItaW5wdXQnKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSksXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodmFsdWUudG9TdHJpbmcoKSkge1xuXHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ3N1Y2Nlc3MnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0JGVsLmFkZENsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0yJzpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ2Vycm9yIHN1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lbWFpbHNUYWdzID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZBbGxCaW5kaW5ncyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRmQXV0b0NvbXBsZXRlU291cmNlID0gZkFsbEJpbmRpbmdzLmF1dG9Db21wbGV0ZVNvdXJjZSB8fCBudWxsLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzID0gWycsJywgJzsnLCAnXFxuJ10sXG5cdFx0XHRmRm9jdXNDYWxsYmFjayA9ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5mb2N1c2VkKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLmZvY3VzZWQoISF2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQkZWwuaW5wdXRvc2F1cnVzKHtcblx0XHRcdHBhcnNlT25CbHVyOiB0cnVlLFxuXHRcdFx0YWxsb3dEcmFnQW5kRHJvcDogdHJ1ZSxcblx0XHRcdGZvY3VzQ2FsbGJhY2s6IGZGb2N1c0NhbGxiYWNrLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzOiBpbnB1dERlbGltaXRlcnMsXG5cdFx0XHRhdXRvQ29tcGxldGVTb3VyY2U6IGZBdXRvQ29tcGxldGVTb3VyY2UsXG5cdFx0XHRzcGxpdEhvb2s6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB2ID0gVXRpbHMudHJpbSh2YWx1ZSk7XG5cdFx0XHRcdGlmICh2ICYmIC0xIDwgaW5wdXREZWxpbWl0ZXJzLmluZGV4T2Yodi5zdWJzdHIoLTEpKSkge1xuXHRcdFx0XHRcdHJldHVybiBFbWFpbE1vZGVsLnNwbGl0RW1haWxMaW5lKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRwYXJzZUhvb2s6IChpbnB1dCkgPT5cblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoaW5wdXQsIChpbnB1dFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoaW5wdXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzIDogaW5wdXRWYWx1ZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQoaXRlbSkgPT4gKF8uaXNPYmplY3QoaXRlbSkgPyBbaXRlbS50b0xpbmUoZmFsc2UpLCBpdGVtXSA6IFtpdGVtLCBudWxsXSlcblx0XHRcdFx0KSxcblx0XHRcdGNoYW5nZTogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdCRlbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRmVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQgJiYgZlZhbHVlLmZvY3VzZWQuc3Vic2NyaWJlKSB7XG5cdFx0XHRmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdCRlbC5pbnB1dG9zYXVydXModmFsdWUgPyAnZm9jdXMnIDogJ2JsdXInKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkb0VsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0aWYgKCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJykgIT09IHZhbHVlKSB7XG5cdFx0XHQkb0VsLnZhbCh2YWx1ZSk7XG5cdFx0XHQkb0VsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIHZhbHVlKTtcblx0XHRcdCRvRWwuaW5wdXRvc2F1cnVzKCdyZWZyZXNoJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY29tbWFuZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGpxRWxlbWVudCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb21tYW5kID0gZlZhbHVlQWNjZXNzb3IoKTtcblxuXHRcdGlmICghY29tbWFuZCB8fCAhY29tbWFuZC5pc0NvbW1hbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVmFsdWUgc2hvdWxkIGJlIGEgY29tbWFuZCcpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5lbmFibGVkKSB7XG5cdFx0XHRjb21tYW5kLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5jYW5FeGVjdXRlKSB7XG5cdFx0XHRjb25zdCBfX3JlYWxDYW5FeGVjdXRlID0gY29tbWFuZC5fX3JlYWxDYW5FeGVjdXRlO1xuXHRcdFx0aWYgKF8uaXNGdW5jdGlvbihfX3JlYWxDYW5FeGVjdXRlKSkge1xuXHRcdFx0XHRjb21tYW5kLmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBjb21tYW5kLmVuYWJsZWQoKSAmJiBfX3JlYWxDYW5FeGVjdXRlLmNhbGwodmlld01vZGVsLCB2aWV3TW9kZWwpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmICEhX19yZWFsQ2FuRXhlY3V0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0anFFbGVtZW50LmFkZENsYXNzKCdjb21tYW5kJyk7XG5cdFx0a28uYmluZGluZ0hhbmRsZXJzW2pxRWxlbWVudC5pcygnZm9ybScpID8gJ3N1Ym1pdCcgOiAnY2xpY2snXS5pbml0KFxuXHRcdFx0ZWxlbWVudCxcblx0XHRcdGZWYWx1ZUFjY2Vzc29yLFxuXHRcdFx0ZkFsbEJpbmRpbmdzQWNjZXNzb3IsXG5cdFx0XHR2aWV3TW9kZWwsXG5cdFx0XHRiaW5kaW5nQ29udGV4dFxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0bGV0IHJlc3VsdCA9IGNvbW1hbmQuZW5hYmxlZCgpO1xuXG5cdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLW5vdC1lbmFibGVkJywgIXJlc3VsdCk7XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBjb21tYW5kLmNhbkV4ZWN1dGUoKTtcblx0XHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1jYW4tbm90LWJlLWV4ZWN1dGUnLCAhcmVzdWx0KTtcblx0XHR9XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtZGlzYWJsZWQgZGlzYWJsZSBkaXNhYmxlZCcsICFyZXN1bHQpLnRvZ2dsZUNsYXNzKCduby1kaXNhYmxlZCcsICEhcmVzdWx0KTtcblxuXHRcdGlmIChqcUVsZW1lbnQuaXMoJ2lucHV0JykgfHwganFFbGVtZW50LmlzKCdidXR0b24nKSkge1xuXHRcdFx0anFFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgIXJlc3VsdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBleHRlbmRlcnNcblxua28uZXh0ZW5kZXJzLnRyaW1tZXIgPSAodGFyZ2V0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoVXRpbHMudHJpbShuZXdWYWx1ZS50b1N0cmluZygpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5wb3NJbnRlcmVyID0gKHRhcmdldCwgZGVmYXVsdFZhbCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHZhbCA9IFV0aWxzLnBJbnQobmV3VmFsdWUudG9TdHJpbmcoKSwgZGVmYXVsdFZhbCk7XG5cdFx0XHRcdGlmICgwID49IHZhbCkge1xuXHRcdFx0XHRcdHZhbCA9IGRlZmF1bHRWYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsID09PSB0YXJnZXQoKSAmJiAnJyArIHZhbCAhPT0gJycgKyBuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldCh2YWwgKyAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldCh2YWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMubGltaXRlZExpc3QgPSAodGFyZ2V0LCBsaW1pdGVkTGlzdCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBrby51bndyYXAodGFyZ2V0KSxcblx0XHRcdFx0XHRcdGxpc3QgPSBrby51bndyYXAobGltaXRlZExpc3QpO1xuXG5cdFx0XHRcdFx0aWYgKFV0aWxzLmlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgVXRpbHMuaW5BcnJheShuZXdWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoLTEgPCBVdGlscy5pbkFycmF5KGN1cnJlbnRWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGxpc3RbMF0gKyAnICcpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblxuXHRpZiAoIXJlc3VsdC52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRyZXN1bHQudmFsdWVIYXNNdXRhdGVkID0gKCkgPT4ge1xuXHRcdFx0dGFyZ2V0LnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnJldmVyc2libGUgPSAodGFyZ2V0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHRhcmdldCgpO1xuXG5cdHRhcmdldC5jb21taXQgPSAoKSA9PiB7XG5cdFx0dmFsdWUgPSB0YXJnZXQoKTtcblx0fTtcblxuXHR0YXJnZXQucmV2ZXJzZSA9ICgpID0+IHtcblx0XHR0YXJnZXQodmFsdWUpO1xuXHR9O1xuXG5cdHRhcmdldC5jb21taXRlZFZhbHVlID0gKCkgPT4gdmFsdWU7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMudG9nZ2xlU3Vic2NyaWJlID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMV0sIG9wdGlvbnNbMF0sICdiZWZvcmVDaGFuZ2UnKTtcblx0dGFyZ2V0LnN1YnNjcmliZShvcHRpb25zWzJdLCBvcHRpb25zWzBdKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcCA9IG9wdGlvbnNbMV07XG5cdGlmIChwcm9wKSB7XG5cdFx0dGFyZ2V0LnN1YnNjcmliZShcblx0XHRcdChwcmV2KSA9PiB7XG5cdFx0XHRcdGlmIChwcmV2ICYmIHByZXZbcHJvcF0pIHtcblx0XHRcdFx0XHRwcmV2W3Byb3BdKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnNbMF0sXG5cdFx0XHQnYmVmb3JlQ2hhbmdlJ1xuXHRcdCk7XG5cblx0XHR0YXJnZXQuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG5cdFx0XHRpZiAobmV4dCAmJiBuZXh0W3Byb3BdKSB7XG5cdFx0XHRcdG5leHRbcHJvcF0odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0aW9uc1swXSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmZhbHNlVGltZW91dCA9ICh0YXJnZXQsIG9wdGlvbikgPT4ge1xuXHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHR0YXJnZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQpO1xuXHRcdFx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoZmFsc2UpO1xuXHRcdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHRcdFx0fSwgcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuc3BlY2lhbFRocm90dGxlID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pO1xuXHRpZiAoMCA8IHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKSB7XG5cdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHR0YXJnZXQudmFsdWVGb3JSZWFkID0ga28ub2JzZXJ2YWJsZSghIXRhcmdldCgpKS5leHRlbmQoeyB0aHJvdHRsZTogMTAgfSk7XG5cblx0XHRyZXR1cm4ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LnZhbHVlRm9yUmVhZCxcblx0XHRcdHdyaXRlOiAoYlZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChiVmFsdWUpIHtcblx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldC52YWx1ZUZvclJlYWQoKSkge1xuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHRcdFx0XHRcdH0sIHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChiVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5pZGxlVHJpZ2dlciA9ICh0YXJnZXQpID0+IHtcblx0dGFyZ2V0LnRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBmdW5jdGlvbnNcblxua28ub2JzZXJ2YWJsZS5mbi5pZGxlVHJpZ2dlciA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5leHRlbmQoeyAnaWRsZVRyaWdnZXInOiB0cnVlIH0pO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZU5vbmUgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVFbWFpbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0dGhpcy5oYXNFcnJvcignJyAhPT0gdmFsdWUgJiYgIS9eW15AXFxzXStAW15AXFxzXSskLy50ZXN0KHZhbHVlKSk7XG5cdH0pO1xuXG5cdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZVNpbXBsZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL14uK0AuKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLmRlbGV0ZUFjY2Vzc0hlbHBlciA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMzAwMCB9KS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdkZWxldGVBY2Nlc3MnXSB9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlRnVuYyA9IGZ1bmN0aW9uKGZGdW5jKSB7XG5cdHRoaXMuaGFzRnVuY0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0aWYgKF8uaXNGdW5jdGlvbihmRnVuYykpIHtcblx0XHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHRoaXMuaGFzRnVuY0Vycm9yKCFmRnVuYyh2YWx1ZSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQga287XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBBdXRvbGlua2VyIGZyb20gJ0F1dG9saW5rZXInO1xuXG5pbXBvcnQgeyAkd2luLCAkZGl2LCAkaGNvbnQsIGRyb3Bkb3duVmlzaWJpbGl0eSwgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IENvbXBvc2VUeXBlLCBFdmVudEtleUNvZGUsIFNhdmVTZXR0aW5nc1N0ZXAsIEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgTWltZSB9IGZyb20gJ0NvbW1vbi9NaW1lJztcbmltcG9ydCB7IGphc3NsIH0gZnJvbSAnQ29tbW9uL0phc3NsJztcblxuY29uc3QgdHJpbSA9ICQudHJpbTtcbmNvbnN0IGluQXJyYXkgPSAkLmluQXJyYXk7XG5jb25zdCBpc0FycmF5ID0gXy5pc0FycmF5O1xuY29uc3QgaXNPYmplY3QgPSBfLmlzT2JqZWN0O1xuY29uc3QgaXNGdW5jID0gXy5pc0Z1bmN0aW9uO1xuY29uc3QgaXNVbmQgPSBfLmlzVW5kZWZpbmVkO1xuY29uc3QgaXNOdWxsID0gXy5pc051bGw7XG5jb25zdCBoYXMgPSBfLmhhcztcbmNvbnN0IGJpbmQgPSBfLmJpbmQ7XG5jb25zdCBub29wID0gKCkgPT4ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmNvbnN0IG5vb3BUcnVlID0gKCkgPT4gdHJ1ZTtcbmNvbnN0IG5vb3BGYWxzZSA9ICgpID0+IGZhbHNlO1xuXG5leHBvcnQgeyB0cmltLCBpbkFycmF5LCBpc0FycmF5LCBpc09iamVjdCwgaXNGdW5jLCBpc1VuZCwgaXNOdWxsLCBoYXMsIGJpbmQsIG5vb3AsIG5vb3BUcnVlLCBub29wRmFsc2UsIGphc3NsIH07XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lsZW50VHJ5Q2F0Y2goZnVuYykge1xuXHR0cnkge1xuXHRcdGZ1bmMoKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3JtYWwodmFsdWUpIHtcblx0cmV0dXJuICFpc1VuZCh2YWx1ZSkgJiYgIWlzTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRlWmVybyA9IHRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3NOdW1lcmljKHZhbHVlLCBpbmNsdWRlWmVybyA9IHRydWUpIHtcblx0cmV0dXJuICFpc05vcm1hbCh2YWx1ZSlcblx0XHQ/IGZhbHNlXG5cdFx0OiBpbmNsdWRlWmVyb1xuXHRcdD8gL15bMC05XSokLy50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpXG5cdFx0OiAvXlsxLTldK1swLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBkZWZhdWx0VmFsdXIgPSAwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEludCh2YWx1ZSwgZGVmYXVsdFZhbHVyID0gMCkge1xuXHRjb25zdCByZXN1bHQgPSBpc05vcm1hbCh2YWx1ZSkgJiYgJycgIT09IHZhbHVlID8gd2luZG93LnBhcnNlSW50KHZhbHVlLCAxMCkgOiBkZWZhdWx0VmFsdXI7XG5cdHJldHVybiB3aW5kb3cuaXNOYU4ocmVzdWx0KSA/IGRlZmF1bHRWYWx1ciA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcFN0cmluZyh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb3JtYWwodmFsdWUpID8gJycgKyB2YWx1ZSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEJvb2wodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xUb0FqYXgodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID8gJzEnIDogJzAnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uRW1wdHlBcnJheSh2YWx1ZXMpIHtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiAwIDwgdmFsdWVzLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSSh1cmwpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUkkodXJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5U3RyaW5nKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHR0ZW1wID0gbnVsbDtcblxuXHRjb25zdCBxdWVyaWVzID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKSxcblx0XHRwYXJhbXMgPSB7fTtcblxuXHRmb3IgKGxlbiA9IHF1ZXJpZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdHRlbXAgPSBxdWVyaWVzW2luZGV4XS5zcGxpdCgnPScpO1xuXHRcdHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQodGVtcFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbiA9IDMyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZU1kNShsZW4gPSAzMikge1xuXHRjb25zdCBsaW5lID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdFx0bGluZUxlbiA9IGxpbmUubGVuZ3RoO1xuXG5cdGxlbiA9IHBJbnQobGVuKTtcblxuXHRsZXQgcmVzdWx0ID0gJyc7XG5cdHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbGVuKSB7XG5cdFx0cmVzdWx0ICs9IGxpbmUuc3Vic3RyKHdpbmRvdy5NYXRoLnJvdW5kKHdpbmRvdy5NYXRoLnJhbmRvbSgpICogbGluZUxlbiksIDEpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUh0bWwodGV4dCkge1xuXHRyZXR1cm4gaXNOb3JtYWwodGV4dCkgPyBfLmVzY2FwZSh0ZXh0LnRvU3RyaW5nKCkpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMTAwXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQbGFpblRleHQodGV4dCwgbGVuID0gMTAwKSB7XG5cdGxldCBwcmVmaXggPSAnJyxcblx0XHRzdWJUZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gdGV4dCxcblx0XHRzcGFjZVBvcyA9IDAsXG5cdFx0bmV3TGluZVBvcyA9IDA7XG5cblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPiBsZW4pIHtcblx0XHRzdWJUZXh0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBsZW4pO1xuXHRcdHNwYWNlUG9zID0gc3ViVGV4dC5sYXN0SW5kZXhPZignICcpO1xuXHRcdG5ld0xpbmVQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCdcXG4nKTtcblxuXHRcdGlmICgtMSAhPT0gbmV3TGluZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBuZXdMaW5lUG9zO1xuXHRcdH1cblxuXHRcdGlmICgtMSA9PT0gc3BhY2VQb3MpIHtcblx0XHRcdHNwYWNlUG9zID0gbGVuO1xuXHRcdH1cblxuXHRcdHByZWZpeCArPSBzdWJUZXh0LnN1YnN0cmluZygwLCBzcGFjZVBvcykgKyAnXFxuJztcblx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKHNwYWNlUG9zICsgMSk7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgcmVzdWx0O1xufVxuXG5jb25zdCB0aW1lT3V0QWN0aW9uID0gKGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aW1lT3V0cyA9IHt9O1xuXHRyZXR1cm4gKGFjdGlvbiwgZkZ1bmN0aW9uLCB0aW1lT3V0KSA9PiB7XG5cdFx0dGltZU91dHNbYWN0aW9uXSA9IGlzVW5kKHRpbWVPdXRzW2FjdGlvbl0pID8gMCA6IHRpbWVPdXRzW2FjdGlvbl07XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aW1lT3V0c1thY3Rpb25dKTtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gd2luZG93LnNldFRpbWVvdXQoZkZ1bmN0aW9uLCB0aW1lT3V0KTtcblx0fTtcbn0pKCk7XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb25TZWNvbmQgPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHRpZiAoIXRpbWVPdXRzW2FjdGlvbl0pIHtcblx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZGdW5jdGlvbigpO1xuXHRcdFx0XHR0aW1lT3V0c1thY3Rpb25dID0gMDtcblx0XHRcdH0sIHRpbWVPdXQpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbmV4cG9ydCB7IHRpbWVPdXRBY3Rpb24sIHRpbWVPdXRBY3Rpb25TZWNvbmQgfTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gbVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlTW9kdWxlKG0pIHtcblx0cmV0dXJuIChtICYmIG0uZGVmYXVsdCA/IG0uZGVmYXVsdCA6IG0pIHx8ICcnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5Gb2N1cygpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdGlmIChpc1VuZCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSkpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGUgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhcblx0XHRcdFx0XHQnaW5wdXQsdGV4dGFyZWEsaWZyYW1lLC5ja2VfZWRpdGFibGUnXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhIXdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUluRm9jdXMoZm9yY2UpIHtcblx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFjdGl2ZUVsID0gJCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cdFx0XHRpZiAoYWN0aXZlRWwgJiYgYWN0aXZlRWwuaXMoJ2lucHV0LHRleHRhcmVhJykpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JjZSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5nZXMpIHtcblx0XHRcdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24gJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuXHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbHlTdWJqZWN0QWRkKHByZWZpeCwgc3ViamVjdCkge1xuXHRwcmVmaXggPSB0cmltKHByZWZpeC50b1VwcGVyQ2FzZSgpKTtcblx0c3ViamVjdCA9IHRyaW0oc3ViamVjdC5yZXBsYWNlKC9bXFxzXSsvZywgJyAnKSk7XG5cblx0bGV0IGRyb3AgPSBmYWxzZSxcblx0XHRyZSA9ICdSRScgPT09IHByZWZpeCxcblx0XHRmd2QgPSAnRldEJyA9PT0gcHJlZml4O1xuXG5cdGNvbnN0IHBhcnRzID0gW10sXG5cdFx0cHJlZml4SXNSZSA9ICFmd2Q7XG5cblx0aWYgKCcnICE9PSBzdWJqZWN0KSB7XG5cdFx0Xy5lYWNoKHN1YmplY3Quc3BsaXQoJzonKSwgKHBhcnQpID0+IHtcblx0XHRcdGNvbnN0IHRyaW1tZWRQYXJ0ID0gdHJpbShwYXJ0KTtcblx0XHRcdGlmICghZHJvcCAmJiAoL14oUkV8RldEKSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSB8fCAvXihSRXxGV0QpW1soXVtcXGRdK1tcXF0pXSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSkpIHtcblx0XHRcdFx0aWYgKCFyZSkge1xuXHRcdFx0XHRcdHJlID0gISEvXlJFL2kudGVzdCh0cmltbWVkUGFydCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWZ3ZCkge1xuXHRcdFx0XHRcdGZ3ZCA9ICEhL15GV0QvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydHMucHVzaChwYXJ0KTtcblx0XHRcdFx0ZHJvcCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJlZml4SXNSZSkge1xuXHRcdHJlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0ZndkID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJpbSgocHJlZml4SXNSZSA/ICdSZTogJyA6ICdGd2Q6ICcpICsgKHJlID8gJ1JlOiAnIDogJycpICsgKGZ3ZCA/ICdGd2Q6ICcgOiAnJykgKyB0cmltKHBhcnRzLmpvaW4oJzonKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZE51bWJlcihudW0sIGRlYykge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobnVtICogd2luZG93Lk1hdGgucG93KDEwLCBkZWMpKSAvIHdpbmRvdy5NYXRoLnBvdygxMCwgZGVjKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZUluQnl0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseVNpemUoc2l6ZUluQnl0ZXMpIHtcblx0c2l6ZUluQnl0ZXMgPSBwSW50KHNpemVJbkJ5dGVzKTtcblxuXHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlIDEwNzM3NDE4MjQgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDczNzQxODI0LCAxKSArICdHQic7XG5cdFx0Y2FzZSAxMDQ4NTc2IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTA0ODU3NiwgMSkgKyAnTUInO1xuXHRcdGNhc2UgMTAyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwMjQsIDApICsgJ0tCJztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gc2l6ZUluQnl0ZXMgKyAnQic7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZyhkZXNjKSB7XG5cdGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpIHtcblx0XHR3aW5kb3cuY29uc29sZS5sb2coZGVzYyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gez99IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEBwYXJhbSB7bnVtYmVyPX0gZGVsYXkgPSAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bihvYmplY3QsIG1ldGhvZE5hbWUsIHBhcmFtcywgZGVsYXkgPSAwKSB7XG5cdGlmIChvYmplY3QgJiYgb2JqZWN0W21ldGhvZE5hbWVdKSB7XG5cdFx0ZGVsYXkgPSBwSW50KGRlbGF5KTtcblx0XHRwYXJhbXMgPSBpc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbXTtcblxuXHRcdGlmICgwID49IGRlbGF5KSB7XG5cdFx0XHRvYmplY3RbbWV0aG9kTmFtZV0oLi4ucGFyYW1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdFx0fSwgZGVsYXkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxDdHJsQUN0cmxTKGV2ZW50KSB7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuXHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG5cdFx0aWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLlMpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIGlmIChrZXkgPT09IEV2ZW50S2V5Q29kZS5BKSB7XG5cdFx0XHRjb25zdCBzZW5kZXIgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VuZGVyICYmXG5cdFx0XHRcdCgndHJ1ZScgPT09ICcnICsgc2VuZGVyLmNvbnRlbnRFZGl0YWJsZSB8fCAoc2VuZGVyLnRhZ05hbWUgJiYgc2VuZGVyLnRhZ05hbWUubWF0Y2goL0lOUFVUfFRFWFRBUkVBL2kpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNsZWFyKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhPYmplY3R8bnVsbHx1bmRlZmluZWQpfSBjb250ZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExlZ2FjeShjb250ZXh0LCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdGxldCBmUmVzdWx0ID0gbnVsbDtcblx0Y29uc3QgZk5vbkVtcHR5ID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoZlJlc3VsdCAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUgJiYgZlJlc3VsdC5jYW5FeGVjdXRlKCkpIHtcblx0XHRcdGZFeGVjdXRlLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0ZlJlc3VsdCA9IGZFeGVjdXRlID8gZk5vbkVtcHR5IDogbm9vcDtcblx0ZlJlc3VsdC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0ZlJlc3VsdC5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdGlmIChpc0Z1bmMoZkNhbkV4ZWN1dGUpKSB7XG5cdFx0ZlJlc3VsdC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gZlJlc3VsdCAmJiBmUmVzdWx0LmVuYWJsZWQoKSAmJiBmQ2FuRXhlY3V0ZS5jYWxsKGNvbnRleHQpKTtcblx0fSBlbHNlIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmICEhZkNhbkV4ZWN1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGZSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRoZW1lTmFtZSA9IF8ubWVtb2l6ZSgodGhlbWUpID0+IHtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHR9XG5cblx0cmV0dXJuIHRyaW0oXG5cdFx0dGhlbWVcblx0XHRcdC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJylcblx0XHRcdC5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKVxuXHRcdFx0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpXG5cdCk7XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlTmFtZShuYW1lKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1tcIl0vZywgJ1xcXFxcIicpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWNyb3RpbWUoKSB7XG5cdHJldHVybiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcblx0cmV0dXJuIHdpbmRvdy5NYXRoLnJvdW5kKG1pY3JvdGltZSgpIC8gMTAwMCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNFbmcgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgaXNFbmcgPSBmYWxzZSkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKFxuXHRcdCdMQU5HU19OQU1FUycgKyAodHJ1ZSA9PT0gaXNFbmcgPyAnX0VOJyA6ICcnKSArICcvTEFOR18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICdfJyksXG5cdFx0bnVsbCxcblx0XHRsYW5ndWFnZVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVQbGFjZSgpIHtcblx0cmV0dXJuICQoXG5cdFx0JzxkaXYgY2xhc3M9XCJkcmFnZ2FibGVQbGFjZVwiPicgK1xuXHRcdFx0JzxzcGFuIGNsYXNzPVwidGV4dFwiPjwvc3Bhbj4mbmJzcDsnICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tY29weSBpY29uLXdoaXRlIHZpc2libGUtb24tY3RybFwiPjwvaT4nICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tbWFpbCBpY29uLXdoaXRlIGhpZGRlbi1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzwvZGl2Pidcblx0KS5hcHBlbmRUbygnI3JsLWhpZGRlbicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkb21PcHRpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcihkb21JdGVtLCBpdGVtKSB7XG5cdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmRpc2FibGVkKSAmJiBkb21JdGVtKSB7XG5cdFx0JChkb21JdGVtKVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBpdGVtLmRpc2FibGVkKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJxU3dpdGNoZXIoYm9keSkge1xuXHRib2R5LmZpbmQoJ2Jsb2NrcXVvdGUucmwtYnEtc3dpdGNoZXInKS5yZW1vdmVDbGFzcygncmwtYnEtc3dpdGNoZXIgaGlkZGVuLWJxJyk7XG5cdGJvZHlcblx0XHQuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHQub2ZmKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5yZW1vdmUoKTtcblx0Ym9keS5maW5kKCdbZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXJdJykucmVtb3ZlQXR0cignZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXInKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbWVzc2FnZURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHRtbFxuICogQHBhcmFtIHtib29sZWFufSBwcmludFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aWV3TWVzc2FnZShcblx0eyB0aXRsZSwgc3ViamVjdCwgZGF0ZSwgZnJvbUNyZWRzLCB0b0NyZWRzLCB0b0xhYmVsLCBjY0NsYXNzLCBjY0NyZWRzLCBjY0xhYmVsIH0sXG5cdGJvZHksXG5cdGlzSHRtbCxcblx0cHJpbnRcbikge1xuXHRjb25zdCB3aW4gPSB3aW5kb3cub3BlbignJyksXG5cdFx0ZG9jID0gd2luLmRvY3VtZW50LFxuXHRcdGJvZHlDbG9uZSA9IGJvZHkuY2xvbmUoKSxcblx0XHRib2R5Q2xhc3MgPSBpc0h0bWwgPyAnaHRtbCcgOiAncGxhaW4nO1xuXG5cdGNsZWFyQnFTd2l0Y2hlcihib2R5Q2xvbmUpO1xuXG5cdGNvbnN0IGh0bWwgPSBib2R5Q2xvbmUgPyBib2R5Q2xvbmUuaHRtbCgpIDogJyc7XG5cblx0ZG9jLndyaXRlKFxuXHRcdGRlTW9kdWxlKHJlcXVpcmUoJ0h0bWwvUHJldmlld01lc3NhZ2UuaHRtbCcpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVuY29kZUh0bWwodGl0bGUpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7c3ViamVjdH19JywgZW5jb2RlSHRtbChzdWJqZWN0KSlcblx0XHRcdC5yZXBsYWNlKCd7e2RhdGV9fScsIGVuY29kZUh0bWwoZGF0ZSkpXG5cdFx0XHQucmVwbGFjZSgne3tmcm9tQ3JlZHN9fScsIGVuY29kZUh0bWwoZnJvbUNyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvQ3JlZHN9fScsIGVuY29kZUh0bWwodG9DcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3t0b0xhYmVsfX0nLCBlbmNvZGVIdG1sKHRvTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDbGFzc319JywgZW5jb2RlSHRtbChjY0NsYXNzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjQ3JlZHN9fScsIGVuY29kZUh0bWwoY2NDcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3tjY0xhYmVsfX0nLCBlbmNvZGVIdG1sKGNjTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Ym9keUNsYXNzfX0nLCBib2R5Q2xhc3MpXG5cdFx0XHQucmVwbGFjZSgne3todG1sfX0nLCBodG1sKVxuXHQpO1xuXG5cdGRvYy5jbG9zZSgpO1xuXG5cdGlmIChwcmludCkge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbi5wcmludCgpLCAxMDApO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKiBAcGFyYW0gez99IGtvVHJpZ2dlclxuICogQHBhcmFtIHs/fSBjb250ZXh0ID0gbnVsbFxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lciA9IDEwMDBcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKGZDYWxsYmFjaywga29UcmlnZ2VyLCBjb250ZXh0ID0gbnVsbCwgdGltZXIgPSAxMDAwKSB7XG5cdHRpbWVyID0gcEludCh0aW1lcik7XG5cdHJldHVybiAodHlwZSwgZGF0YSwgY2FjaGVkLCByZXF1ZXN0QWN0aW9uLCByZXF1ZXN0UGFyYW1ldGVycykgPT4ge1xuXHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIGRhdGEgJiYgZGF0YS5SZXN1bHQgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2suY2FsbChjb250ZXh0LCB0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRrb1RyaWdnZXIuY2FsbChjb250ZXh0LCBTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdH0sIHRpbWVyKTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0ga29UcmlnZ2VyXG4gKiBAcGFyYW0ge21peGVkfSBjb250ZXh0XG4gKiBAcmV0dXJucyB7bWl4ZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbihrb1RyaWdnZXIsIGNvbnRleHQpIHtcblx0cmV0dXJuIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKG51bGwsIGtvVHJpZ2dlciwgY29udGV4dCwgMTAwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlbW90ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gZlRyaWdnZXJGdW5jdGlvblxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24ocmVtb3RlLCBzZXR0aW5nTmFtZSwgdHlwZSwgZlRyaWdnZXJGdW5jdGlvbikge1xuXHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHJlbW90ZSkge1xuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID8gJzEnIDogJzAnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHBJbnQodmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0cmltJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHRyaW0odmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHZhbHVlID0gcFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFbc2V0dGluZ05hbWVdID0gdmFsdWU7XG5cblx0XHRcdGlmIChyZW1vdGUuc2F2ZUFkbWluQ29uZmlnKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlQWRtaW5Db25maWcoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH0gZWxzZSBpZiAocmVtb3RlLnNhdmVTZXR0aW5ncykge1xuXHRcdFx0XHRyZW1vdGUuc2F2ZVNldHRpbmdzKGZUcmlnZ2VyRnVuY3Rpb24gfHwgbnVsbCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVtYWlsQW5kTGlua3MoaHRtbCkge1xuXHRyZXR1cm4gQXV0b2xpbmtlclxuXHRcdD8gQXV0b2xpbmtlci5saW5rKGh0bWwsIHtcblx0XHRcdFx0bmV3V2luZG93OiB0cnVlLFxuXHRcdFx0XHRzdHJpcFByZWZpeDogZmFsc2UsXG5cdFx0XHRcdHVybHM6IHRydWUsXG5cdFx0XHRcdGVtYWlsOiB0cnVlLFxuXHRcdFx0XHRtZW50aW9uOiBmYWxzZSxcblx0XHRcdFx0cGhvbmU6IGZhbHNlLFxuXHRcdFx0XHRoYXNodGFnOiBmYWxzZSxcblx0XHRcdFx0cmVwbGFjZUZuOiBmdW5jdGlvbihtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiAhKG1hdGNoICYmICd1cmwnID09PSBtYXRjaC5nZXRUeXBlKCkgJiYgbWF0Y2gubWF0Y2hlZFRleHQgJiYgMCAhPT0gbWF0Y2gubWF0Y2hlZFRleHQuaW5kZXhPZignaHR0cCcpKTtcblx0XHRcdFx0fVxuXHRcdCAgfSlcblx0XHQ6IGh0bWw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sVG9QbGFpbihodG1sKSB7XG5cdGxldCBwb3MgPSAwLFxuXHRcdGxpbWl0ID0gMCxcblx0XHRpUDEgPSAwLFxuXHRcdGlQMiA9IDAsXG5cdFx0aVAzID0gMCxcblx0XHR0ZXh0ID0gJyc7XG5cblx0Y29uc3QgY29udmVydEJsb2NrcXVvdGUgPSAoYmxvY2txdW90ZVRleHQpID0+IHtcblx0XHRibG9ja3F1b3RlVGV4dCA9ICc+ICcgKyB0cmltKGJsb2NrcXVvdGVUZXh0KS5yZXBsYWNlKC9cXG4vZ20sICdcXG4+ICcpO1xuXHRcdHJldHVybiBibG9ja3F1b3RlVGV4dC5yZXBsYWNlKC8oXnxcXG4pKFs+IF0rKS9nbSwgKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDIgPCBhcmdzLmxlbmd0aCA/IGFyZ3NbMV0gKyB0cmltKGFyZ3NbMl0ucmVwbGFjZSgvW1xcc10vZywgJycpKSArICcgJyA6ICcnXG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0RGl2cyA9ICguLi5hcmdzKSA9PiB7XG5cdFx0aWYgKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRsZXQgZGl2VGV4dCA9IHRyaW0oYXJnc1sxXSk7XG5cdFx0XHRpZiAoMCA8IGRpdlRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdGRpdlRleHQgPSBkaXZUZXh0LnJlcGxhY2UoLzxkaXZbXj5dKj4oW1xcc1xcU1xcclxcbl0qKTxcXC9kaXY+L2dpbSwgY29udmVydERpdnMpO1xuXHRcdFx0XHRkaXZUZXh0ID0gJ1xcbicgKyB0cmltKGRpdlRleHQpICsgJ1xcbic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXZUZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0UHJlID0gKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDEgPCBhcmdzLmxlbmd0aFxuXHRcdFx0XHQ/IGFyZ3NbMV1cblx0XHRcdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xcbl0vZ20sICc8YnIgLz4nKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1tcXHJdL2dtLCAnJylcblx0XHRcdFx0OiAnJyxcblx0XHRmaXhBdHRpYnV0ZVZhbHVlID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/ICcnICsgYXJnc1sxXSArIF8uZXNjYXBlKGFyZ3NbMl0pIDogJycpLFxuXHRcdGNvbnZlcnRMaW5rcyA9ICguLi5hcmdzKSA9PiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGggPyB0cmltKGFyZ3NbMV0pIDogJycpO1xuXG5cdHRleHQgPSBodG1sXG5cdFx0LnJlcGxhY2UoLzxwW14+XSo+PFxcL3A+L2dpLCAnJylcblx0XHQucmVwbGFjZSgvPHByZVtePl0qPihbXFxzXFxTXFxyXFxuXFx0XSopPFxcL3ByZT4vZ2ltLCBjb252ZXJ0UHJlKVxuXHRcdC5yZXBsYWNlKC9bXFxzXSsvZ20sICcgJylcblx0XHQucmVwbGFjZSgvKCg/OmhyZWZ8ZGF0YSlcXHM/PVxccz8pKFwiW15cIl0rP1wifCdbXiddKz8nKS9naW0sIGZpeEF0dGlidXRlVmFsdWUpXG5cdFx0LnJlcGxhY2UoLzxicltePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvaFtcXGRdPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9wPi9naSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLzx1bFtePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdWw+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGxpW14+XSo+L2dpbSwgJyAqICcpXG5cdFx0LnJlcGxhY2UoLzxcXC9saT4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdGQ+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3RyPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxocltePl0qPi9naW0sICdcXG5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cylcblx0XHQucmVwbGFjZSgvPGJsb2NrcXVvdGVbXj5dKj4vZ2ltLCAnXFxuX19icV9fc3RhcnRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9ibG9ja3F1b3RlPi9naW0sICdcXG5fX2JxX19lbmRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxhIFtePl0qPihbXFxzXFxTXFxyXFxuXSo/KTxcXC9hPi9naW0sIGNvbnZlcnRMaW5rcylcblx0XHQucmVwbGFjZSgvPFxcL2Rpdj4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJylcblx0XHQucmVwbGFjZSgvJnF1b3Q7L2dpLCAnXCInKVxuXHRcdC5yZXBsYWNlKC88W14+XSo+L2dtLCAnJyk7XG5cblx0dGV4dCA9ICRkaXYuaHRtbCh0ZXh0KS50ZXh0KCk7XG5cblx0dGV4dCA9IHRleHRcblx0XHQucmVwbGFjZSgvXFxuWyBcXHRdKy9nbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoL1tcXG5dezMsfS9nbSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLyZndDsvZ2ksICc+Jylcblx0XHQucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuXHRcdC5yZXBsYWNlKC8mYW1wOy9naSwgJyYnKTtcblxuXHR0ZXh0ID0gc3BsaXRQbGFpblRleHQodGV4dCk7XG5cblx0cG9zID0gMDtcblx0bGltaXQgPSA4MDA7XG5cblx0d2hpbGUgKDAgPCBsaW1pdCkge1xuXHRcdGxpbWl0IC09IDE7XG5cdFx0aVAxID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgcG9zKTtcblx0XHRpZiAoLTEgPCBpUDEpIHtcblx0XHRcdGlQMiA9IHRleHQuaW5kZXhPZignX19icV9fc3RhcnRfXycsIGlQMSArIDUpO1xuXHRcdFx0aVAzID0gdGV4dC5pbmRleE9mKCdfX2JxX19lbmRfXycsIGlQMSArIDUpO1xuXG5cdFx0XHRpZiAoKC0xID09PSBpUDIgfHwgaVAzIDwgaVAyKSAmJiBpUDEgPCBpUDMpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlQMSkgKyBjb252ZXJ0QmxvY2txdW90ZSh0ZXh0LnN1YnN0cmluZyhpUDEgKyAxMywgaVAzKSkgKyB0ZXh0LnN1YnN0cmluZyhpUDMgKyAxMSk7XG5cblx0XHRcdFx0cG9zID0gMDtcblx0XHRcdH0gZWxzZSBpZiAoLTEgPCBpUDIgJiYgaVAyIDwgaVAzKSB7XG5cdFx0XHRcdHBvcyA9IGlQMiAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX2JxX19zdGFydF9fL2dtLCAnJykucmVwbGFjZSgvX19icV9fZW5kX18vZ20sICcnKTtcblxuXHRyZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluZEVtYWlsQW5kTGlua3NJblRleHQgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYWluVG9IdG1sKHBsYWluLCBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlKSB7XG5cdHBsYWluID0gcGxhaW4udG9TdHJpbmcoKS5yZXBsYWNlKC9cXHIvZywgJycpO1xuXHRwbGFpbiA9IHBsYWluLnJlcGxhY2UoL14+Wz4gXT4rL2dtLCAoW21hdGNoXSkgPT4gKG1hdGNoID8gbWF0Y2gucmVwbGFjZSgvWyBdKy9nLCAnJykgOiBtYXRjaCkpO1xuXG5cdGxldCBiSW4gPSBmYWxzZSxcblx0XHRiRG8gPSB0cnVlLFxuXHRcdGJTdGFydCA9IHRydWUsXG5cdFx0YU5leHRUZXh0ID0gW10sXG5cdFx0c0xpbmUgPSAnJyxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGFUZXh0ID0gcGxhaW4uc3BsaXQoJ1xcbicpO1xuXG5cdGRvIHtcblx0XHRiRG8gPSBmYWxzZTtcblx0XHRhTmV4dFRleHQgPSBbXTtcblx0XHRmb3IgKGlJbmRleCA9IDA7IGlJbmRleCA8IGFUZXh0Lmxlbmd0aDsgaUluZGV4KyspIHtcblx0XHRcdHNMaW5lID0gYVRleHRbaUluZGV4XTtcblx0XHRcdGJTdGFydCA9ICc+JyA9PT0gc0xpbmUuc3Vic3RyKDAsIDEpO1xuXHRcdFx0aWYgKGJTdGFydCAmJiAhYkluKSB7XG5cdFx0XHRcdGJEbyA9IHRydWU7XG5cdFx0XHRcdGJJbiA9IHRydWU7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn5ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lLnN1YnN0cigxKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiU3RhcnQgJiYgYkluKSB7XG5cdFx0XHRcdGlmICgnJyAhPT0gc0xpbmUpIHtcblx0XHRcdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+L2Jsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYkluKSB7XG5cdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdH1cblxuXHRcdGFUZXh0ID0gYU5leHRUZXh0O1xuXHR9IHdoaWxlIChiRG8pO1xuXG5cdHBsYWluID0gYVRleHQuam9pbignXFxuJyk7XG5cblx0cGxhaW4gPSBwbGFpblxuXHRcdC8vIC5yZXBsYWNlKC9+fn5cXC9ibG9ja3F1b3Rlfn5+XFxufn5+YmxvY2txdW90ZX5+fi9nLCAnXFxuJylcblx0XHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuXHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0LnJlcGxhY2UoL35+fmJsb2NrcXVvdGV+fn5bXFxzXSovZywgJzxibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKn5+flxcL2Jsb2NrcXVvdGV+fn4vZywgJzwvYmxvY2txdW90ZT4nKVxuXHRcdC5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpO1xuXG5cdHJldHVybiBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA/IGZpbmRFbWFpbEFuZExpbmtzKHBsYWluKSA6IHBsYWluO1xufVxuXG53aW5kb3dbJ3JhaW5sb29wX1V0aWxzX2h0bWxUb1BsYWluJ10gPSBodG1sVG9QbGFpbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfcGxhaW5Ub0h0bWwnXSA9IHBsYWluVG9IdG1sOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFTeXN0ZW1cbiAqIEBwYXJhbSB7QXJyYXl9IGFMaXN0XG4gKiBAcGFyYW0ge0FycmF5PX0gYURpc2FibGVkXG4gKiBAcGFyYW0ge0FycmF5PX0gYUhlYWRlckxpbmVzXG4gKiBAcGFyYW0gez9udW1iZXI9fSBpVW5EZWVwXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkRpc2FibGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZWaXNpYmxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmUmVuYW1lQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJTeXN0ZW1cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJCdWlsZFVudmlzaWJsZVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRhU3lzdGVtLFxuXHRhTGlzdCxcblx0YURpc2FibGVkLFxuXHRhSGVhZGVyTGluZXMsXG5cdGlVbkRlZXAsXG5cdGZEaXNhYmxlQ2FsbGJhY2ssXG5cdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdGZSZW5hbWVDYWxsYmFjayxcblx0YlN5c3RlbSxcblx0YkJ1aWxkVW52aXNpYmxlXG4pIHtcblx0bGV0IC8qKlxuXHRcdCAqIEB0eXBlIHs/Rm9sZGVyTW9kZWx9XG5cdFx0ICovXG5cdFx0b0l0ZW0gPSBudWxsLFxuXHRcdGJTZXAgPSBmYWxzZSxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGlMZW4gPSAwLFxuXHRcdGFSZXN1bHQgPSBbXTtcblxuXHRjb25zdCBzRGVlcFByZWZpeCA9ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTAnO1xuXG5cdGJCdWlsZFVudmlzaWJsZSA9IGlzVW5kKGJCdWlsZFVudmlzaWJsZSkgPyBmYWxzZSA6ICEhYkJ1aWxkVW52aXNpYmxlO1xuXHRiU3lzdGVtID0gIWlzTm9ybWFsKGJTeXN0ZW0pID8gMCA8IGFTeXN0ZW0ubGVuZ3RoIDogYlN5c3RlbTtcblx0aVVuRGVlcCA9ICFpc05vcm1hbChpVW5EZWVwKSA/IDAgOiBpVW5EZWVwO1xuXHRmRGlzYWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZkRpc2FibGVDYWxsYmFjaykgPyBmRGlzYWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlZpc2libGVDYWxsYmFjayA9IGlzTm9ybWFsKGZWaXNpYmxlQ2FsbGJhY2spID8gZlZpc2libGVDYWxsYmFjayA6IG51bGw7XG5cdGZSZW5hbWVDYWxsYmFjayA9IGlzTm9ybWFsKGZSZW5hbWVDYWxsYmFjaykgPyBmUmVuYW1lQ2FsbGJhY2sgOiBudWxsO1xuXG5cdGlmICghaXNBcnJheShhRGlzYWJsZWQpKSB7XG5cdFx0YURpc2FibGVkID0gW107XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYUhlYWRlckxpbmVzKSkge1xuXHRcdGFIZWFkZXJMaW5lcyA9IFtdO1xuXHR9XG5cblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYUhlYWRlckxpbmVzLmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0aWQ6IGFIZWFkZXJMaW5lc1tpSW5kZXhdWzBdLFxuXHRcdFx0bmFtZTogYUhlYWRlckxpbmVzW2lJbmRleF1bMV0sXG5cdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFTeXN0ZW0ubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdG9JdGVtID0gYVN5c3RlbVtpSW5kZXhdO1xuXHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0bmFtZTogZlJlbmFtZUNhbGxiYWNrID8gZlJlbmFtZUNhbGxiYWNrKG9JdGVtKSA6IG9JdGVtLm5hbWUoKSxcblx0XHRcdFx0c3lzdGVtOiB0cnVlLFxuXHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHQhb0l0ZW0uc2VsZWN0YWJsZSB8fFxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJTZXAgPSB0cnVlO1xuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhTGlzdC5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhTGlzdFtpSW5kZXhdO1xuXHRcdC8vIGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKVxuXHRcdGlmIChcblx0XHRcdChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKSAmJlxuXHRcdFx0KG9JdGVtLnNlbGVjdGFibGUgfHwgb0l0ZW0uaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSlcblx0XHQpIHtcblx0XHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRcdGlmIChGb2xkZXJUeXBlLlVzZXIgPT09IG9JdGVtLnR5cGUoKSB8fCAhYlN5c3RlbSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKSB7XG5cdFx0XHRcdFx0aWYgKGJTZXAgJiYgMCA8IGFSZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICctLS0nLFxuXHRcdFx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRiU2VwID0gZmFsc2U7XG5cdFx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG5hbWU6XG5cdFx0XHRcdFx0XHRcdG5ldyB3aW5kb3cuQXJyYXkob0l0ZW0uZGVlcCArIDEgLSBpVW5EZWVwKS5qb2luKHNEZWVwUHJlZml4KSArXG5cdFx0XHRcdFx0XHRcdChmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpKSxcblx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdFx0XHQoZkRpc2FibGVDYWxsYmFjayA/IGZEaXNhYmxlQ2FsbGJhY2sob0l0ZW0pIDogZmFsc2UpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob0l0ZW0uc3ViU2NyaWJlZCgpICYmIDAgPCBvSXRlbS5zdWJGb2xkZXJzKCkubGVuZ3RoKSB7XG5cdFx0XHRhUmVzdWx0ID0gYVJlc3VsdC5jb25jYXQoXG5cdFx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRvSXRlbS5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0YURpc2FibGVkLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdGlVbkRlZXAsXG5cdFx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayxcblx0XHRcdFx0XHRmVmlzaWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZSZW5hbWVDYWxsYmFjayxcblx0XHRcdFx0XHRiU3lzdGVtLFxuXHRcdFx0XHRcdGJCdWlsZFVudmlzaWJsZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZWxlbWVudCkge1xuXHRsZXQgc2VsID0gbnVsbCxcblx0XHRyYW5nZSA9IG51bGw7XG5cblx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuXHRcdHNlbC5hZGRSYW5nZShyYW5nZSk7XG5cdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0cmFuZ2UubW92ZVRvRWxlbWVudFRleHQoZWxlbWVudCk7XG5cdFx0cmFuZ2Uuc2VsZWN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRkcm9wZG93blZpc2liaWxpdHkoISFfLmZpbmQoR2xvYmFsc0RhdGEuYUJvb3RzdHJhcERyb3Bkb3ducywgKGl0ZW0pID0+IGl0ZW0uaGFzQ2xhc3MoJ29wZW4nKSkpO1xufSwgNTApO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlbGF5ID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZShkZWxheSA9IGZhbHNlKSB7XG5cdGNvbnN0IGZGdW5jID0gKCkgPT4ge1xuXHRcdCQoJy5jaGVja0F1dG9jb21wbGV0ZScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHR9O1xuXG5cdGlmIChkZWxheSkge1xuXHRcdF8uZGVsYXkoZkZ1bmMsIDEwMCk7XG5cdH0gZWxzZSB7XG5cdFx0ZkZ1bmMoKTtcblx0fVxufVxuXG5jb25zdCBjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnKGNvbmZpZ3VyYXRpb24pIHtcblx0aWYgKCFjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0pIHtcblx0XHRjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0gPSAkKFxuXHRcdFx0J3NjcmlwdFt0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXVtkYXRhLWNvbmZpZ3VyYXRpb249XCInICsgY29uZmlndXJhdGlvbiArICdcIl0nXG5cdFx0KTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dLnRleHQoKSk7XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHttaXhlZH0gbVByb3BPclZhbHVlXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZU9uZShwcm9wT3JWYWx1ZSwgdmFsdWUpIHtcblx0Y29uc3QgZGlzcG9zYWJsZSA9IHZhbHVlIHx8IHByb3BPclZhbHVlO1xuXHRpZiAoZGlzcG9zYWJsZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZGlzcG9zYWJsZS5kaXNwb3NlKSB7XG5cdFx0ZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT2JqZWN0KG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0LmRpc3Bvc2FibGVzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdC5kaXNwb3NhYmxlcywgZGlzcG9zZU9uZSk7XG5cdFx0fVxuXG5cdFx0a28udXRpbHMub2JqZWN0Rm9yRWFjaChvYmplY3QsIGRpc3Bvc2VPbmUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iamVjdE9yT2JqZWN0c1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvYmplY3RPck9iamVjdHMpIHtcblx0aWYgKG9iamVjdE9yT2JqZWN0cykge1xuXHRcdGlmIChpc0FycmF5KG9iamVjdE9yT2JqZWN0cykpIHtcblx0XHRcdF8uZWFjaChvYmplY3RPck9iamVjdHMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGl0ZW0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RPck9iamVjdHMgJiYgb2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSkge1xuXHRcdFx0b2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSAkc3R5bGVUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU3R5bGVzKCRzdHlsZVRhZywgY3NzKSB7XG5cdGlmICgkc3R5bGVUYWcgJiYgJHN0eWxlVGFnWzBdKSB7XG5cdFx0aWYgKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0ICYmICFpc1VuZCgkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0KSkge1xuXHRcdFx0JHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN0eWxlVGFnLnRleHQoY3NzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxubGV0IF9fdGhlbWVUaW1lciA9IDAsXG5cdF9fdGhlbWVBamF4ID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb249fSB0aGVtZVRyaWdnZXIgPSBub29wXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRoZW1lKHZhbHVlLCB0aGVtZVRyaWdnZXIgPSBub29wKSB7XG5cdGNvbnN0IHRoZW1lTGluayA9ICQoJyNhcHAtdGhlbWUtbGluaycpLFxuXHRcdGNsZWFyVGltZXIgPSAoKSA9PiB7XG5cdFx0XHRfX3RoZW1lVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgMTAwMCk7XG5cdFx0XHRfX3RoZW1lQWpheCA9IG51bGw7XG5cdFx0fTtcblxuXHRsZXQgdGhlbWVTdHlsZSA9ICQoJyNhcHAtdGhlbWUtc3R5bGUnKSxcblx0XHR1cmwgPSB0aGVtZUxpbmsuYXR0cignaHJlZicpO1xuXG5cdGlmICghdXJsKSB7XG5cdFx0dXJsID0gdGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnKTtcblx0fVxuXG5cdGlmICh1cmwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8tXFwvW14vXStcXC8tXFwvLywgJy8tLycgKyB2YWx1ZSArICcvLS8nKTtcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvXFwvQ3NzXFwvW14vXStcXC9Vc2VyXFwvLywgJy9Dc3MvMC9Vc2VyLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9IYXNoXFwvW14vXStcXC8vLCAnL0hhc2gvLS8nKTtcblxuXHRcdGlmICgnSnNvbi8nICE9PSB1cmwuc3Vic3RyaW5nKHVybC5sZW5ndGggLSA1LCB1cmwubGVuZ3RoKSkge1xuXHRcdFx0dXJsICs9ICdKc29uLyc7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dChfX3RoZW1lVGltZXIpO1xuXG5cdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cblx0XHRpZiAoX190aGVtZUFqYXggJiYgX190aGVtZUFqYXguYWJvcnQpIHtcblx0XHRcdF9fdGhlbWVBamF4LmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0X190aGVtZUFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nXG5cdFx0fSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGlzQXJyYXkoZGF0YSkgJiYgMiA9PT0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAodGhlbWVMaW5rICYmIHRoZW1lTGlua1swXSAmJiAoIXRoZW1lU3R5bGUgfHwgIXRoZW1lU3R5bGVbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGVtZVN0eWxlID0gJCgnPHN0eWxlIGlkPVwiYXBwLXRoZW1lLXN0eWxlXCI+PC9zdHlsZT4nKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5hZnRlcih0aGVtZVN0eWxlKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGhlbWVTdHlsZSAmJiB0aGVtZVN0eWxlWzBdKSB7XG5cdFx0XHRcdFx0XHRpZiAoYXBwZW5kU3R5bGVzKHRoZW1lU3R5bGUsIGRhdGFbMV0pKSB7XG5cdFx0XHRcdFx0XHRcdHRoZW1lU3R5bGUuYXR0cignZGF0YS1ocmVmJywgdXJsKS5hdHRyKCdkYXRhLXRoZW1lJywgZGF0YVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQudGhlbihjbGVhclRpbWVyLCBjbGVhclRpbWVyKTtcblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyKGtvQ3VycmVudFBhZ2UsIGtvUGFnZUNvdW50KSB7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSBrb0N1cnJlbnRQYWdlKCksXG5cdFx0XHRwYWdlQ291bnQgPSBrb1BhZ2VDb3VudCgpLFxuXHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRmQWRkID0gKGluZGV4LCBwdXNoID0gdHJ1ZSwgY3VzdG9tTmFtZSA9ICcnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdFx0Y3VycmVudDogaW5kZXggPT09IGN1cnJlbnRQYWdlLFxuXHRcdFx0XHRcdG5hbWU6ICcnID09PSBjdXN0b21OYW1lID8gaW5kZXgudG9TdHJpbmcoKSA6IGN1c3RvbU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRjdXN0b206ICcnICE9PSBjdXN0b21OYW1lLFxuXHRcdFx0XHRcdHRpdGxlOiAnJyA9PT0gY3VzdG9tTmFtZSA/ICcnIDogaW5kZXgudG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2YWx1ZTogaW5kZXgudG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChwdXNoKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LnVuc2hpZnQoZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRsZXQgcHJldiA9IDAsXG5cdFx0XHRuZXh0ID0gMCxcblx0XHRcdGxpbWl0ID0gMjtcblxuXHRcdGlmICgxIDwgcGFnZUNvdW50IHx8ICgwIDwgcGFnZUNvdW50ICYmIHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSkge1xuXHRcdFx0aWYgKHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50KTtcblx0XHRcdFx0cHJldiA9IHBhZ2VDb3VudDtcblx0XHRcdFx0bmV4dCA9IHBhZ2VDb3VudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgzID49IGN1cnJlbnRQYWdlIHx8IHBhZ2VDb3VudCAtIDIgPD0gY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0XHRsaW1pdCArPSAyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZkFkZChjdXJyZW50UGFnZSk7XG5cdFx0XHRcdHByZXYgPSBjdXJyZW50UGFnZTtcblx0XHRcdFx0bmV4dCA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0XHRcdHByZXYgLT0gMTtcblx0XHRcdFx0bmV4dCArPSAxO1xuXG5cdFx0XHRcdGlmICgwIDwgcHJldikge1xuXHRcdFx0XHRcdGZBZGQocHJldiwgZmFsc2UpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFnZUNvdW50ID49IG5leHQpIHtcblx0XHRcdFx0XHRmQWRkKG5leHQsIHRydWUpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoMCA+PSBwcmV2KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKDMgPT09IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKDMgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocHJldiAtIDEpIC8gMiksIGZhbHNlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgLSAyID09PSBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50IC0gMSwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VDb3VudCAtIDIgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocGFnZUNvdW50ICsgbmV4dCkgLyAyKSwgdHJ1ZSwgJy4uLicpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmaXJzdCBhbmQgbGFzdFxuXHRcdFx0aWYgKDEgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoMSwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFnZUNvdW50ID4gbmV4dCkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB7XG5cdGZpbGVOYW1lID0gdHJpbShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuXHRjb25zdCByZXN1bHQgPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuXHRyZXR1cm4gcmVzdWx0ID09PSBmaWxlTmFtZSA/ICcnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbWVDb250ZW50VHlwZShmaWxlTmFtZSkge1xuXHRsZXQgZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmICgnd2lubWFpbC5kYXQnID09PSBmaWxlTmFtZSkge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vbXMtdG5lZic7XG5cdH1cblxuXHRleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcblx0aWYgKGV4dCAmJiAwIDwgZXh0Lmxlbmd0aCAmJiAhaXNVbmQoTWltZVtleHRdKSkge1xuXHRcdHJlc3VsdCA9IE1pbWVbZXh0XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNwYXJlbnQoY29sb3IpIHtcblx0cmV0dXJuICdyZ2JhKDAsIDAsIDAsIDApJyA9PT0gY29sb3IgfHwgJ3RyYW5zcGFyZW50JyA9PT0gY29sb3I7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9ICRlbFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxIZWlnaHQoJGVsKSB7XG5cdCRlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LnNob3coKVxuXHRcdC5hcHBlbmRUbygkaGNvbnQpO1xuXHRjb25zdCByZXN1bHQgPSAkaGNvbnQuaGVpZ2h0KCk7XG5cdCRoY29udC5lbXB0eSgpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVBbmRDcm9wKHVybCwgdmFsdWUsIGZDYWxsYmFjaykge1xuXHRjb25zdCBpbWcgPSBuZXcgd2luZG93LkltYWdlKCk7XG5cdGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRsZXQgZGlmZiA9IFswLCAwXTtcblxuXHRcdGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcblx0XHRcdGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0Y2FudmFzLndpZHRoID0gdmFsdWU7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMud2lkdGggPiB0aGlzLmhlaWdodCkge1xuXHRcdFx0ZGlmZiA9IFt0aGlzLndpZHRoIC0gdGhpcy5oZWlnaHQsIDBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWZmID0gWzAsIHRoaXMuaGVpZ2h0IC0gdGhpcy53aWR0aF07XG5cdFx0fVxuXG5cdFx0Y3R4LmZpbGxTdHlsZSA9ICcjZmZmJztcblx0XHRjdHguZmlsbFJlY3QoMCwgMCwgdmFsdWUsIHZhbHVlKTtcblx0XHRjdHguZHJhd0ltYWdlKHRoaXMsIGRpZmZbMF0gLyAyLCBkaWZmWzFdIC8gMiwgdGhpcy53aWR0aCAtIGRpZmZbMF0sIHRoaXMuaGVpZ2h0IC0gZGlmZlsxXSwgMCwgMCwgdmFsdWUsIHZhbHVlKTtcblxuXHRcdGZDYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykpO1xuXHR9O1xuXG5cdGltZy5zcmMgPSB1cmw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1haWxUb1VybFxuICogQHBhcmFtIHtGdW5jdGlvbn0gUG9wdXBDb21wb3NlVmlld01vZGVsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxUb0hlbHBlcihtYWlsVG9VcmwsIFBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRpZiAoXG5cdFx0bWFpbFRvVXJsICYmXG5cdFx0J21haWx0bzonID09PVxuXHRcdFx0bWFpbFRvVXJsXG5cdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdC5zdWJzdHIoMCwgNylcblx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0KSB7XG5cdFx0aWYgKCFQb3B1cENvbXBvc2VWaWV3TW9kZWwpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdG1haWxUb1VybCA9IG1haWxUb1VybC50b1N0cmluZygpLnN1YnN0cig3KTtcblxuXHRcdGxldCB0byA9IFtdLFxuXHRcdFx0Y2MgPSBudWxsLFxuXHRcdFx0YmNjID0gbnVsbCxcblx0XHRcdHBhcmFtcyA9IHt9O1xuXG5cdFx0Y29uc3QgZW1haWwgPSBtYWlsVG9VcmwucmVwbGFjZSgvXFw/LiskLywgJycpLFxuXHRcdFx0cXVlcnkgPSBtYWlsVG9VcmwucmVwbGFjZSgvXlteP10qXFw/LywgJycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdDtcblxuXHRcdHBhcmFtcyA9IHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLnRvKSkge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChlbWFpbCArICcsJyArIHBhcmFtcy50bykpO1xuXHRcdFx0dG8gPSBfLnZhbHVlcyhcblx0XHRcdFx0dG8ucmVkdWNlKChyZXN1bHQsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlLmVtYWlsXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXJlc3VsdFt2YWx1ZS5lbWFpbF0ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdFt2YWx1ZS5lbWFpbF0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LCB7fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShlbWFpbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuY2MpKSB7XG5cdFx0XHRjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5jYykpO1xuXHRcdH1cblxuXHRcdGlmICghaXNVbmQocGFyYW1zLmJjYykpIHtcblx0XHRcdGJjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5iY2MpKTtcblx0XHR9XG5cblx0XHRyZXF1aXJlKCdLbm9pbi9Lbm9pbicpLnNob3dTY3JlZW5Qb3B1cChQb3B1cENvbXBvc2VWaWV3TW9kZWwsIFtcblx0XHRcdENvbXBvc2VUeXBlLkVtcHR5LFxuXHRcdFx0bnVsbCxcblx0XHRcdHRvLFxuXHRcdFx0Y2MsXG5cdFx0XHRiY2MsXG5cdFx0XHRpc1VuZChwYXJhbXMuc3ViamVjdCkgPyBudWxsIDogcFN0cmluZyhkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnN1YmplY3QpKSxcblx0XHRcdGlzVW5kKHBhcmFtcy5ib2R5KSA/IG51bGwgOiBwbGFpblRvSHRtbChwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuYm9keSkpKVxuXHRcdF0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tUmVhZHkoZm4pIHtcblx0JCgoKSA9PiBmbigpKTtcblx0Ly9cblx0Ly9cdGlmICgnbG9hZGluZycgIT09IHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlKVxuXHQvL1x0e1xuXHQvL1x0XHRmbigpO1xuXHQvL1x0fVxuXHQvL1x0ZWxzZVxuXHQvL1x0e1xuXHQvL1x0XHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0Ly9cdH1cbn1cblxuZXhwb3J0IGNvbnN0IHdpbmRvd1Jlc2l6ZSA9IF8uZGVib3VuY2UoKHRpbWVvdXQpID0+IHtcblx0aWYgKGlzVW5kKHRpbWVvdXQpIHx8IGlzTnVsbCh0aW1lb3V0KSkge1xuXHRcdCR3aW4ucmVzaXplKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fVxufSwgNTApO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2luZG93UmVzaXplQ2FsbGJhY2soKSB7XG5cdHdpbmRvd1Jlc2l6ZSgpO1xufVxuXG5sZXQgc3Vic3RyID0gd2luZG93LlN0cmluZy5zdWJzdHI7XG5pZiAoJ2InICE9PSAnYWInLnN1YnN0cigtMSkpIHtcblx0c3Vic3RyID0gKHN0ciwgc3RhcnQsIGxlbmd0aCkgPT4ge1xuXHRcdHN0YXJ0ID0gMCA+IHN0YXJ0ID8gc3RyLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbmd0aCk7XG5cdH07XG5cblx0d2luZG93LlN0cmluZy5zdWJzdHIgPSBzdWJzdHI7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5fOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGlzVW5kLCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBTRVRUSU5HUyA9IHdpbmRvdy5fX3JsYWhfZGF0YSgpIHx8IG51bGw7XG5TRVRUSU5HUyA9IGlzTm9ybWFsKFNFVFRJTkdTKSA/IFNFVFRJTkdTIDoge307XG5cbmxldCBBUFBfU0VUVElOR1MgPSBTRVRUSU5HUy5TeXN0ZW0gfHwgbnVsbDtcbkFQUF9TRVRUSU5HUyA9IGlzTm9ybWFsKEFQUF9TRVRUSU5HUykgPyBBUFBfU0VUVElOR1MgOiB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChTRVRUSU5HU1tuYW1lXSkgPyBudWxsIDogU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2V0KG5hbWUsIHZhbHVlKSB7XG5cdFNFVFRJTkdTW25hbWVdID0gdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwU2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gaXNVbmQoQVBQX1NFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBBUFBfU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYShuYW1lKSB7XG5cdGNvbnN0IHZhbHVlcyA9IHNldHRpbmdzR2V0KCdDYXBhJyk7XG5cdHJldHVybiBpc0FycmF5KHZhbHVlcykgJiYgaXNOb3JtYWwobmFtZSkgJiYgLTEgPCBpbkFycmF5KG5hbWUsIHZhbHVlcyk7XG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY29uc3QgJHdpbiA9ICQod2luZG93KTtcbiR3aW4uX19zaXplcyA9IFswLCAwXTtcblxuZXhwb3J0IHsgJHdpbiB9O1xuXG5leHBvcnQgY29uc3QgJGRvYyA9ICQod2luZG93LmRvY3VtZW50KTtcblxuZXhwb3J0IGNvbnN0ICRodG1sID0gJCgnaHRtbCcpO1xuXG5leHBvcnQgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cbmV4cG9ydCBjb25zdCAkZGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcblxuZXhwb3J0IGNvbnN0ICRoY29udCA9ICQoJzxkaXY+PC9kaXY+Jyk7XG4kaGNvbnRcblx0LmF0dHIoJ2FyZWEnLCAnaGlkZGVuJylcblx0LmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtNTAwMCB9KVxuXHQuYXBwZW5kVG8oJGJvZHkpO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRNaWNyb3RpbWUgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBjb21tdW5pdHkgPSBSTF9DT01NVU5JVFk7XG5cbi8qKlxuICogQHR5cGUgez99XG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wZG93blZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VLZXlib2FyZFNob3J0Y3V0cyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHNVc2VyQWdlbnQgPVxuXHQoJ25hdmlnYXRvcicgaW4gd2luZG93ICYmICd1c2VyQWdlbnQnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgfHwgJyc7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSUUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignbXNpZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkNocm9tZSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJTYWZhcmkgPSAhYkNocm9tZSAmJiAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiTW9iaWxlRGV2aWNlID1cblx0KC9hbmRyb2lkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGhvbmUvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwb2QvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwYWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2JsYWNrYmVycnkvaSkudGVzdChzVXNlckFnZW50KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJEaXNhYmxlTmFub1Njcm9sbCA9IGJNb2JpbGVEZXZpY2U7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQW5pbWF0aW9uU3VwcG9ydGVkID1cblx0IWJNb2JpbGVEZXZpY2UgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc3RyYW5zaXRpb25zJykgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc2FuaW1hdGlvbnMnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCA9ICEhd2luZG93LlhNTEh0dHBSZXF1ZXN0O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklzSHR0cHMgPVxuXHR3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmxvY2F0aW9uID8gJ2h0dHBzOicgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA6IGZhbHNlO1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcblx0J3RpdGxlJzogZmFsc2UsXG5cdCdzdHlsZXNTZXQnOiBmYWxzZSxcblx0J2N1c3RvbUNvbmZpZyc6ICcnLFxuXHQnY29udGVudHNDc3MnOiAnJyxcblx0J3Rvb2xiYXJHcm91cHMnOiBbXG5cdFx0eyBuYW1lOiAnc3BlYycgfSxcblx0XHR7IG5hbWU6ICdzdHlsZXMnIH0sXG5cdFx0eyBuYW1lOiAnYmFzaWNzdHlsZXMnLCBncm91cHM6IFsnYmFzaWNzdHlsZXMnLCAnY2xlYW51cCcsICdiaWRpJ10gfSxcblx0XHR7IG5hbWU6ICdjb2xvcnMnIH0sXG5cdFx0Yk1vYmlsZURldmljZSA/IHt9IDogeyBuYW1lOiAncGFyYWdyYXBoJywgZ3JvdXBzOiBbJ2xpc3QnLCAnaW5kZW50JywgJ2Jsb2NrcycsICdhbGlnbiddIH0sXG5cdFx0eyBuYW1lOiAnbGlua3MnIH0sXG5cdFx0eyBuYW1lOiAnaW5zZXJ0JyB9LFxuXHRcdHsgbmFtZTogJ2RvY3VtZW50JywgZ3JvdXBzOiBbJ21vZGUnLCAnZG9jdW1lbnQnLCAnZG9jdG9vbHMnXSB9LFxuXHRcdHsgbmFtZTogJ290aGVycycgfVxuXHRdLFxuXG5cdCdyZW1vdmVQbHVnaW5zJzogJ2xpc3RzdHlsZScsXG5cdCdyZW1vdmVCdXR0b25zJzogJ0Zvcm1hdCxVbmRvLFJlZG8sQ3V0LENvcHksUGFzdGUsQW5jaG9yLFN0cmlrZSxTdWJzY3JpcHQsU3VwZXJzY3JpcHQsSW1hZ2UsU2VsZWN0QWxsLFNvdXJjZScsXG5cdCdyZW1vdmVEaWFsb2dUYWJzJzogJ2xpbms6YWR2YW5jZWQ7bGluazp0YXJnZXQ7aW1hZ2U6YWR2YW5jZWQ7aW1hZ2VzOmFkdmFuY2VkJyxcblxuXHQnZXh0cmFQbHVnaW5zJzogJ3BsYWluLHNpZ25hdHVyZScsXG5cblx0J2FsbG93ZWRDb250ZW50JzogdHJ1ZSxcblx0J2V4dHJhQWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXG5cdCdmaWxsRW1wdHlCbG9ja3MnOiBmYWxzZSxcblx0J2lnbm9yZUVtcHR5UGFyYWdyYXBoJzogdHJ1ZSxcblx0J2Rpc2FibGVOYXRpdmVTcGVsbENoZWNrZXInOiBmYWxzZSxcblxuXHQnY29sb3JCdXR0b25fZW5hYmxlQXV0b21hdGljJzogZmFsc2UsXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVNb3JlJzogdHJ1ZSxcblxuXHQnZm9udF9kZWZhdWx0TGFiZWwnOiAnQXJpYWwnLFxuXHQnZm9udFNpemVfZGVmYXVsdExhYmVsJzogJzEzJyxcblx0J2ZvbnRTaXplX3NpemVzJzogJzEwLzEwcHg7MTIvMTJweDsxMy8xM3B4OzE0LzE0cHg7MTYvMTZweDsxOC8xOHB4OzIwLzIwcHg7MjQvMjRweDsyOC8yOHB4OzM2LzM2cHg7NDgvNDhweCdcbn07XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JMYW5nc01hcCA9IHtcblx0J2FyX3NhJzogJ2FyLXNhJyxcblx0J2JnX2JnJzogJ2JnJyxcblx0J2NzX0NaJzogJ2NzJyxcblx0J2RlX2RlJzogJ2RlJyxcblx0J2VsX2dyJzogJ2VsJyxcblx0J2VzX2VzJzogJ2VzJyxcblx0J2V0X2VlJzogJ2V0Jyxcblx0J2ZyX2ZyJzogJ2ZyJyxcblx0J2h1X2h1JzogJ2h1Jyxcblx0J2lzX2lzJzogJ2lzJyxcblx0J2l0X2l0JzogJ2l0Jyxcblx0J2phX2pwJzogJ2phJyxcblx0J2tvX2tyJzogJ2tvJyxcblx0J2x0X2x0JzogJ2x0Jyxcblx0J2x2X2x2JzogJ2x2Jyxcblx0J2ZhX2lyJzogJ2ZhJyxcblx0J25iX25vJzogJ25iJyxcblx0J25sX25sJzogJ25sJyxcblx0J3BsX3BsJzogJ3BsJyxcblx0J3B0X2JyJzogJ3B0LWJyJyxcblx0J3B0X3B0JzogJ3B0Jyxcblx0J3JvX3JvJzogJ3JvJyxcblx0J3J1X3J1JzogJ3J1Jyxcblx0J3NrX3NrJzogJ3NrJyxcblx0J3NsX3NpJzogJ3NsJyxcblx0J3N2X3NlJzogJ3N2Jyxcblx0J3RyX3RyJzogJ3RyJyxcblx0J3VrX3VhJzogJ3VrJyxcblx0J3poX2NuJzogJ3poLWNuJyxcblx0J3poX3R3JzogJ3poJ1xufTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xubGV0IGJBbGxvd1BkZlByZXZpZXcgPSAhYk1vYmlsZURldmljZTtcblxuaWYgKGJBbGxvd1BkZlByZXZpZXcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuXHRiQWxsb3dQZGZQcmV2aWV3ID0gISFfLmZpbmQod2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMsICh0eXBlKSA9PiB0eXBlICYmICdhcHBsaWNhdGlvbi9wZGYnID09PSB0eXBlLnR5cGUpO1xuXG5cdGlmICghYkFsbG93UGRmUHJldmlldykge1xuXHRcdGJBbGxvd1BkZlByZXZpZXcgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi9wZGYnXTtcblx0fVxufVxuXG5leHBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3IH07XG5cbmV4cG9ydCBjb25zdCBWSUVXX01PREVMUyA9IHtcblx0c2V0dGluZ3M6IFtdLFxuXHQnc2V0dGluZ3MtcmVtb3ZlZCc6IFtdLFxuXHQnc2V0dGluZ3MtZGlzYWJsZWQnOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVBY3Rpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxEaXNhYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFR5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxXaWR0aCA9IGtvLm9ic2VydmFibGUoMCk7XG5cbmxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIG1vdmVBY3Rpb24oKSkge1xuXHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHR9XG59KTtcblxubW92ZUFjdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBsZWZ0UGFuZWxEaXNhYmxlZCgpKSB7XG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHR9XG59KTtcblxuLy8gcG9wdXBzXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5TmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoKTtcblxucG9wdXBWaXNpYmlsaXR5LnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tb2RhbCcsIGJWYWx1ZSk7XG59KTtcblxuLy8ga2V5c1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlUmVhbCA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcbmV4cG9ydCBjb25zdCBrZXlTY29wZUZha2UgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5cbmV4cG9ydCBjb25zdCBrZXlTY29wZSA9IGtvLmNvbXB1dGVkKHtcblx0cmVhZDogKCkgPT4ga2V5U2NvcGVGYWtlKCksXG5cdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRpZiAoS2V5U3RhdGUuTWVudSAhPT0gdmFsdWUpIHtcblx0XHRcdGlmIChLZXlTdGF0ZS5Db21wb3NlID09PSB2YWx1ZSkge1xuXHRcdFx0XHQvLyBkaXNhYmxlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoKSA9PiB1c2VLZXlib2FyZFNob3J0Y3V0cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzdG9yZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHVzZUtleWJvYXJkU2hvcnRjdXRzKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRhZ05hbWUgPSBlbCA/IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIShcblx0XHRcdFx0XHRcdFx0J0lOUFVUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnU0VMRUNUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnVEVYVEFSRUEnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdChlbCAmJiAnRElWJyA9PT0gdGFnTmFtZSAmJiAoJ2VkaXRvckh0bWxBcmVhJyA9PT0gZWwuY2xhc3NOYW1lIHx8ICd0cnVlJyA9PT0gJycgKyBlbC5jb250ZW50RWRpdGFibGUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGtleVNjb3BlRmFrZSh2YWx1ZSk7XG5cdFx0XHRpZiAoZHJvcGRvd25WaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0dmFsdWUgPSBLZXlTdGF0ZS5NZW51O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGtleVNjb3BlUmVhbCh2YWx1ZSk7XG5cdH1cbn0pO1xuXG5rZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKCdrZXlTY29wZT0nICsgc1ZhbHVlKTsgLy8gREVCVUdcblx0a2V5LnNldFNjb3BlKHZhbHVlKTtcbn0pO1xuXG5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUpIHtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZW51KTtcblx0fSBlbHNlIGlmIChLZXlTdGF0ZS5NZW51ID09PSBrZXkuZ2V0U2NvcGUoKSkge1xuXHRcdGtleVNjb3BlKGtleVNjb3BlRmFrZSgpKTtcblx0fVxufSk7XG5cbi8qKlxuICogQHR5cGUgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhID0ge1xuXHRfX0FQUF9fOiBudWxsLFxuXHRpQWpheEVycm9yQ291bnQ6IDAsXG5cdGlUb2tlbkVycm9yQ291bnQ6IDAsXG5cdGFCb290c3RyYXBEcm9wZG93bnM6IFtdLFxuXHRpTWVzc2FnZUJvZHlDYWNoZUNvdW50OiAwLFxuXHRiVW5sb2FkOiBmYWxzZVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGhhc2hlciBmcm9tICdoYXNoZXInO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgJGh0bWwsIFZJRVdfTU9ERUxTLCBwb3B1cFZpc2liaWxpdHlOYW1lcyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmQsIHBTdHJpbmcsIGxvZywgaXNGdW5jLCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkZWxlZ2F0ZVJ1biwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IGN1cnJlbnRTY3JlZW4gPSBudWxsLFxuXHRkZWZhdWx0U2NyZWVuTmFtZSA9ICcnO1xuXG5jb25zdCBTQ1JFRU5TID0ge307XG5cbmV4cG9ydCBjb25zdCBWaWV3VHlwZSA9IHtcblx0UG9wdXA6ICdQb3B1cHMnLFxuXHRMZWZ0OiAnTGVmdCcsXG5cdFJpZ2h0OiAnUmlnaHQnLFxuXHRDZW50ZXI6ICdDZW50ZXInXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG5cdCQoJyNybC1jb250ZW50JykuYWRkQ2xhc3MoJ3JsLWNvbnRlbnQtc2hvdycpO1xuXHQkKCcjcmwtbG9hZGluZycpXG5cdFx0LmhpZGUoKVxuXHRcdC5yZW1vdmUoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZChmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiBjcmVhdGVDb21tYW5kTGVnYWN5KG51bGwsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRGVmYXVsdCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlLCBpc0RlZmF1bHQgPSBmYWxzZSkge1xuXHRTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLl9fcmxTZXR0aW5nc0RhdGEgPSB7XG5cdFx0TGFiZWw6IGxhYmVsTmFtZSxcblx0XHRUZW1wbGF0ZTogdGVtcGxhdGUsXG5cdFx0Um91dGU6IHJvdXRlLFxuXHRcdElzRGVmYXVsdDogISFpc0RlZmF1bHRcblx0fTtcblxuXHRWSUVXX01PREVMUy5zZXR0aW5ncy5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPZmYoKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPbigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMgez9PYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW4oc2NyZWVuTmFtZSkge1xuXHRyZXR1cm4gJycgIT09IHNjcmVlbk5hbWUgJiYgIWlzVW5kKFNDUkVFTlNbc2NyZWVuTmFtZV0pID8gU0NSRUVOU1tzY3JlZW5OYW1lXSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyZWVuUG9wdXAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzO1xuXHRcdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdCkge1xuXHRcdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvSGlkZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpO1xuXHRpZiAoTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eShmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge21peGVkPX0gcGFyYW1zID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdm1SdW5Ib29rKGhvb2tOYW1lLCBWaWV3TW9kZWxDbGFzcywgcGFyYW1zID0gbnVsbCkge1xuXHRfLmVhY2goVmlld01vZGVsQ2xhc3MuX19uYW1lcywgKG5hbWUpID0+IHtcblx0XHRydW5Ib29rKGhvb2tOYW1lLCBbbmFtZSwgVmlld01vZGVsQ2xhc3MuX192bSwgcGFyYW1zXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdD19IHZtU2NyZWVuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbikge1xuXHRpZiAoVmlld01vZGVsQ2xhc3MgJiYgIVZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCkge1xuXHRcdGxldCB2bURvbSA9IG51bGw7XG5cdFx0Y29uc3Qgdm0gPSBuZXcgVmlld01vZGVsQ2xhc3Modm1TY3JlZW4pLFxuXHRcdFx0cG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGUgfHwgJycsXG5cdFx0XHR2bVBsYWNlID0gcG9zaXRpb24gPyAkKCcjcmwtY29udGVudCAjcmwtJyArIHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIDogbnVsbDtcblxuXHRcdFZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0Vmlld01vZGVsQ2xhc3MuX192bSA9IHZtO1xuXG5cdFx0dm0ub25TaG93VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHZtLm9uSGlkZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHZtLnZpZXdNb2RlbE5hbWUgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWU7XG5cdFx0dm0udmlld01vZGVsTmFtZXMgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWVzO1xuXHRcdHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgPSBWaWV3TW9kZWxDbGFzcy5fX3RlbXBsYXRlSUQ7XG5cdFx0dm0udmlld01vZGVsUG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGU7XG5cblx0XHRpZiAodm1QbGFjZSAmJiAxID09PSB2bVBsYWNlLmxlbmd0aCkge1xuXHRcdFx0dm1Eb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygncmwtdmlldy1tb2RlbCcpXG5cdFx0XHRcdC5hZGRDbGFzcygnUkwtJyArIHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQpXG5cdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHR2bURvbS5hcHBlbmRUbyh2bVBsYWNlKTtcblxuXHRcdFx0dm0udmlld01vZGVsRG9tID0gdm1Eb207XG5cdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSA9IHZtRG9tO1xuXG5cdFx0XHRpZiAoVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLmNhbmNlbENvbW1hbmQgPSB2bS5jbG9zZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2bS5tb2RhbFZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdHZtLnN0b3JlQW5kU2V0S2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucHVzaCh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAzMDAwICsgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGggKyAxMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uU2hvd1RyaWdnZXIoIXZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDUwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vbkhpZGVUcmlnZ2VyKCF2bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2bS5yZXN0b3JlS2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLWhpZGUnLCBWaWV3TW9kZWxDbGFzcyk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnJlbW92ZSh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAyMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB2bS52aWV3TW9kZWxEb20uaGlkZSgpLCAzMDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wcmUtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXG5cdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdHZtRG9tWzBdLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+ICh7IG5hbWU6IHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgfSlcblx0XHRcdFx0fSxcblx0XHRcdFx0dm1cblx0XHRcdCk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25CdWlsZCcsIFt2bURvbV0pO1xuXHRcdFx0aWYgKHZtICYmIFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5yZWdpc3RlclBvcHVwS2V5RG93bigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcG9zdC1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZygnQ2Fubm90IGZpbmQgdmlldyBtb2RlbCBwb3NpdGlvbjogJyArIHBvc2l0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVmlld01vZGVsQ2xhc3MgPyBWaWV3TW9kZWxDbGFzcy5fX3ZtIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3csIHBhcmFtcyA9IFtdKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uQmVmb3JlU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvblNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIE1vZGFsVmlldywgcGFyYW1zIHx8IFtdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJtVXBTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbldhcm1VcCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9wdXBWaXNpYmxlKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0cmV0dXJuIE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSA/IE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSgpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXJ0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbk9uUm91dGUoc2NyZWVuTmFtZSwgc3ViUGFydCkge1xuXHRsZXQgdm1TY3JlZW4gPSBudWxsLFxuXHRcdGlzU2FtZVNjcmVlbiA9IGZhbHNlLFxuXHRcdGNyb3NzID0gbnVsbDtcblxuXHRpZiAoJycgPT09IHBTdHJpbmcoc2NyZWVuTmFtZSkpIHtcblx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdH1cblxuXHRpZiAoJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHR2bVNjcmVlbiA9IHNjcmVlbihzY3JlZW5OYW1lKTtcblx0XHRpZiAoIXZtU2NyZWVuKSB7XG5cdFx0XHR2bVNjcmVlbiA9IHNjcmVlbihkZWZhdWx0U2NyZWVuTmFtZSk7XG5cdFx0XHRpZiAodm1TY3JlZW4pIHtcblx0XHRcdFx0c3ViUGFydCA9IHNjcmVlbk5hbWUgKyAnLycgKyBzdWJQYXJ0O1xuXHRcdFx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fc3RhcnRlZCkge1xuXHRcdFx0aXNTYW1lU2NyZWVuID0gY3VycmVudFNjcmVlbiAmJiB2bVNjcmVlbiA9PT0gY3VycmVudFNjcmVlbjtcblxuXHRcdFx0aWYgKCF2bVNjcmVlbi5fX2J1aWxkZWQpIHtcblx0XHRcdFx0dm1TY3JlZW4uX19idWlsZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHZtU2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRfLmVhY2godm1TY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uQnVpbGQnKTtcblx0XHRcdH1cblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdC8vIGhpZGUgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGN1cnJlbnRTY3JlZW4gPSB2bVNjcmVlbjtcblxuXHRcdFx0XHQvLyBzaG93IHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcighY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1vbi1zaG93JywgW2N1cnJlbnRTY3JlZW4uc2NyZWVuTmFtZSgpLCBjdXJyZW50U2NyZWVuXSk7XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkJlZm9yZVNob3cnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXHRcdFx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjcm9zcyA9IHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fY3Jvc3MgPyB2bVNjcmVlbi5fX2Nyb3NzKCkgOiBudWxsO1xuXHRcdFx0XHRpZiAoY3Jvc3MpIHtcblx0XHRcdFx0XHRjcm9zcy5wYXJzZShzdWJQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc2NyZWVuc0NsYXNzZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTY3JlZW5zKHNjcmVlbnNDbGFzc2VzKSB7XG5cdF8uZWFjaChzY3JlZW5zQ2xhc3NlcywgKENTY3JlZW4pID0+IHtcblx0XHRpZiAoQ1NjcmVlbikge1xuXHRcdFx0Y29uc3Qgdm1TY3JlZW4gPSBuZXcgQ1NjcmVlbigpLFxuXHRcdFx0XHRzY3JlZW5OYW1lID0gdm1TY3JlZW4gPyB2bVNjcmVlbi5zY3JlZW5OYW1lKCkgOiAnJztcblxuXHRcdFx0aWYgKHZtU2NyZWVuICYmICcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0XHRcdGlmICgnJyA9PT0gZGVmYXVsdFNjcmVlbk5hbWUpIHtcblx0XHRcdFx0XHRkZWZhdWx0U2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRTQ1JFRU5TW3NjcmVlbk5hbWVdID0gdm1TY3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRfLmVhY2goU0NSRUVOUywgKHZtU2NyZWVuKSA9PiB7XG5cdFx0aWYgKHZtU2NyZWVuICYmICF2bVNjcmVlbi5fX3N0YXJ0ZWQgJiYgdm1TY3JlZW4uX19zdGFydCkge1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnQoKTtcblxuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXByZS1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uU3RhcnQnKTtcblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wb3N0LXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGNyb3NzID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblx0Y3Jvc3MuYWRkUm91dGUoL14oW2EtekEtWjAtOS1dKilcXC8/KC4qKSQvLCBzY3JlZW5PblJvdXRlKTtcblxuXHRoYXNoZXIuaW5pdGlhbGl6ZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5jaGFuZ2VkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuaW5pdCgpO1xuXG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXN0YXJ0ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1zdGFydGVkJyksIDEwMCk7XG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQtZGVsYXknKSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHNpbGVuY2UgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goaGFzaCwgc2lsZW5jZSA9IGZhbHNlLCByZXBsYWNlID0gZmFsc2UpIHtcblx0aGFzaCA9ICcjJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cdGhhc2ggPSAnLycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXG5cdGNvbnN0IGNtZCA9IHJlcGxhY2UgPyAncmVwbGFjZUhhc2gnIDogJ3NldEhhc2gnO1xuXG5cdGlmIChzaWxlbmNlKSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5zZXRIYXNoKGhhc2gpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiAodGFyZ2V0KSA9PiB7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IG5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBbbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQuX19uYW1lID0gdGFyZ2V0Ll9fbmFtZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHRhcmdldC5fX3R5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVtcGxhdGVJRCkge1xuXHRcdFx0XHR0YXJnZXQuX190ZW1wbGF0ZUlEID0gdGVtcGxhdGVJRDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwb3B1cERlY29yYXRvcih7IG5hbWUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGU6IFZpZXdUeXBlLlBvcHVwLCB0ZW1wbGF0ZUlEIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbkV4ZWN1dGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tbWFuZERlY29yYXRvcihjYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSA9PiB7XG5cdFx0aWYgKCFrZXkgfHwgIWtleS5tYXRjaCgvQ29tbWFuZCQvKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBuYW1lIFwiJHtrZXl9XCIgc2hvdWxkIGVuZCB3aXRoIENvbW1hbmQgc3VmZml4YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlIHx8IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKSxcblx0XHRcdG5vcm1DYW5FeGVjdXRlID0gaXNGdW5jKGNhbkV4ZWN1dGUpID8gY2FuRXhlY3V0ZSA6ICgpID0+ICEhY2FuRXhlY3V0ZTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobm9ybUNhbkV4ZWN1dGUuY2FsbCh0aGlzLCB0aGlzKSkge1xuXHRcdFx0XHR2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlLl9fcmVhbENhbkV4ZWN1dGUgPSBub3JtQ2FuRXhlY3V0ZTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlLmlzQ29tbWFuZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGVzY3JpcHRvcjtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21pY2VkfSAkaXRlbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJGl0ZW1zKSB7XG5cdHJldHVybiBfLnRocm90dGxlKChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdGNvbnN0IHVwID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0O1xuXG5cdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSk7XG5cdFx0XHRpZiAodXAgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHR9IGVsc2UgaWYgKCF1cCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdEhhc2ggPSAkaXRlbXMuZXEoaW5kZXgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGlmIChyZXN1bHRIYXNoKSB7XG5cdFx0XHRcdHNldEhhc2gocmVzdWx0SGFzaCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG59XG5cbmV4cG9ydCB7XG5cdGNvbW1hbmREZWNvcmF0b3IsXG5cdGNvbW1hbmREZWNvcmF0b3IgYXMgY29tbWFuZCxcblx0dmlld0RlY29yYXRvcixcblx0dmlld0RlY29yYXRvciBhcyB2aWV3LFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXdNb2RlbCxcblx0cG9wdXBEZWNvcmF0b3IsXG5cdHBvcHVwRGVjb3JhdG9yIGFzIHBvcHVwLFxuXHRzZXR0aW5nc01lbnVLZXlzSGFuZGxlclxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmpRdWVyeTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiwgVXBsb2FkRXJyb3JDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzVW5kLCBpc051bGwsIGhhcywgbWljcm90aW1lLCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICRodG1sLCBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIG1vbWVudG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGxhbmdMaW5rIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxubGV0IEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEEgPSB7fTtcbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX01BUCA9IFtcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5BdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FVVEhfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDRVNTX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05ORUNUSU9OX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FwdGNoYUVycm9yLCAnTk9USUZJQ0FUSU9OUy9DQVBUQ0hBX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9GQUNFQk9PS19MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9UV0lUVEVSX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfR09PR0xFX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvRE9NQUlOX05PVF9BTExPV0VEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfTk9UX0FMTE9XRUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX1JFUVVJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkLCAnTk9USUZJQ0FUSU9OUy9DT1VMRF9OT1RfU0FWRV9ORVdfUEFTU1dPUkQnXSxcblx0W05vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QsICdOT1RJRklDQVRJT05TL0NVUlJFTlRfUEFTU1dPUkRfSU5DT1JSRUNUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRTaG9ydCwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1NIT1JUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRXZWFrLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfV0VBSyddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkRm9yYmlkZGVuLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfRk9SQklEREVOVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ29udGFjdHNTeW5jRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTlRBQ1RTX1NZTkNfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRNb3ZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NFTkRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRSZWNpcGllbnRzLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1JFQ0lQSUVOVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkZpbHRlcnNBcmVOb3RDb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9GSUxURVJTX0FSRV9OT1RfQ09SUkVDVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9DUkVBVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9SRU5BTUVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9OT05fRU1QVFlfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9TVUJTQ1JJQkVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFVuc3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1VOU1VCU0NSSUJFX0ZPTERFUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVTZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1NFVFRJTkdTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1BMVUdJTl9TRVRUSU5HUyddLFxuXG5cdFtOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfSU5TVEFMTF9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9QTFVHSU5fUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvVU5TVVBQT1JURURfUExVR0lOX1BBQ0tBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19TRVJWRVJfSVNfVU5BVkFJTEFCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfRVhQSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0Jhbm5lZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0JBTk5FRCddLFxuXG5cdFtOb3RpZmljYXRpb24uRGVtb1NlbmRNZXNzYWdlRXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fU0VORF9NRVNTQUdFX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uRGVtb0FjY291bnRFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19BQ0NPVU5UX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50QWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9BTFJFQURZX0VYSVNUUyddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnREb2VzTm90RXhpc3QsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfRE9FU19OT1RfRVhJU1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvciwgJ05PVElGSUNBVElPTlMvTUFJTF9TRVJWRVJfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudCwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9JTlBVVF9BUkdVTUVOVCddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IsICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXVxuXTtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlTGlzdFxuICogQHBhcmFtIHtzdHJpbmc9fSBkZWZhdWxWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG4oa2V5LCB2YWx1ZUxpc3QsIGRlZmF1bFZhbHVlKSB7XG5cdGxldCB2YWx1ZU5hbWUgPSAnJyxcblx0XHRyZXN1bHQgPSBJMThOX0RBVEFba2V5XTtcblxuXHRpZiAoaXNVbmQocmVzdWx0KSkge1xuXHRcdHJlc3VsdCA9IGlzVW5kKGRlZmF1bFZhbHVlKSA/IGtleSA6IGRlZmF1bFZhbHVlO1xuXHR9XG5cblx0aWYgKCFpc1VuZCh2YWx1ZUxpc3QpICYmICFpc051bGwodmFsdWVMaXN0KSkge1xuXHRcdGZvciAodmFsdWVOYW1lIGluIHZhbHVlTGlzdCkge1xuXHRcdFx0aWYgKGhhcyh2YWx1ZUxpc3QsIHZhbHVlTmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJyUnICsgdmFsdWVOYW1lICsgJyUnLCB2YWx1ZUxpc3RbdmFsdWVOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaTE4blRvTm9kZSA9IChlbGVtZW50KSA9PiB7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ2kxOG4nKTtcblxuXHRpZiAoa2V5KSB7XG5cdFx0aWYgKCdbJyA9PT0ga2V5LnN1YnN0cigwLCAxKSkge1xuXHRcdFx0c3dpdGNoIChrZXkuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdGNhc2UgJ1todG1sXSc6XG5cdFx0XHRcdFx0JGVsLmh0bWwoaTE4bihrZXkuc3Vic3RyKDYpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1twbGFjZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bihrZXkuc3Vic3RyKDEzKSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbdGl0bGUnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGkxOG4oa2V5LnN1YnN0cig3KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC50ZXh0KGkxOG4oa2V5KSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFuPX0gYW5pbWF0ZSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVG9Ob2RlcyhlbGVtZW50cywgYW5pbWF0ZSA9IGZhbHNlKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJ1tkYXRhLWkxOG5dJywgZWxlbWVudHMpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRpMThuVG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFuaW1hdGUgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0JCgnLmkxOG4tYW5pbWF0aW9uW2RhdGEtaTE4bl0nLCBlbGVtZW50cykubGV0dGVyZngoe1xuXHRcdFx0XHQnZngnOiAnZmFsbCBmYWRlJyxcblx0XHRcdFx0J2JhY2t3YXJkcyc6IGZhbHNlLFxuXHRcdFx0XHQndGltaW5nJzogNTAsXG5cdFx0XHRcdCdmeF9kdXJhdGlvbic6ICc1MG1zJyxcblx0XHRcdFx0J2xldHRlcl9lbmQnOiAncmVzdG9yZScsXG5cdFx0XHRcdCdlbGVtZW50X2VuZCc6ICdyZXN0b3JlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgcmVsb2FkRGF0YSA9ICgpID0+IHtcblx0aWYgKHdpbmRvdy5yYWlubG9vcEkxOE4pIHtcblx0XHRJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5cdFx0aTE4blRvTm9kZXMod2luZG93LmRvY3VtZW50LCB0cnVlKTtcblxuXHRcdG1vbWVudG9yUmVsb2FkKCk7XG5cdFx0dHJpZ2dlcighdHJpZ2dlcigpKTtcblx0fVxuXG5cdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSgpIHtcblx0STE4Tl9OT1RJRklDQVRJT05fTUFQLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRJMThOX05PVElGSUNBVElPTl9EQVRBW2l0ZW1bMF1dID0gaTE4bihpdGVtWzFdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RhcnRDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGxhbmdDYWxsYmFjayA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKHN0YXJ0Q2FsbGJhY2ssIGxhbmdDYWxsYmFjayA9IG51bGwpIHtcblx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRzdGFydENhbGxiYWNrKCk7XG5cdH1cblxuXHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRcdFx0c3RhcnRDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdFx0XHRsYW5nQ2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoc3RhcnRDYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHsqPX0gbWVzc2FnZSA9ICcnXG4gKiBAcGFyYW0geyo9fSBkZWZDb2RlID0gbnVsbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbihjb2RlLCBtZXNzYWdlID0gJycsIGRlZkNvZGUgPSBudWxsKSB7XG5cdGNvZGUgPSB3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDA7XG5cdGlmIChOb3RpZmljYXRpb24uQ2xpZW50Vmlld0Vycm9yID09PSBjb2RlICYmIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGRlZkNvZGUgPSBkZWZDb2RlID8gd2luZG93LnBhcnNlSW50KGRlZkNvZGUsIDEwKSB8fCAwIDogMDtcblx0cmV0dXJuIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV0pXG5cdFx0PyBkZWZDb2RlICYmIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV0pXG5cdFx0XHQ/IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV1cblx0XHRcdDogJydcblx0XHQ6IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24pIHtcblx0cmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLkVycm9yQ29kZVxuXHRcdD8gZ2V0Tm90aWZpY2F0aW9uKHBJbnQocmVzcG9uc2UuRXJyb3JDb2RlKSwgcmVzcG9uc2UuRXJyb3JNZXNzYWdlIHx8ICcnKVxuXHRcdDogZ2V0Tm90aWZpY2F0aW9uKGRlZkNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gY29kZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShjb2RlKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblx0c3dpdGNoICh3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDApIHtcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlSXNUb29CaWc6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlUGFydGlhbGx5VXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9QQVJUSUFMTFlfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX05PX0ZJTEVfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLk1pc3NpbmdUZW1wRm9sZGVyOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX01JU1NJTkdfVEVNUF9GT0xERVInKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVPblNhdmVpbmdFcnJvcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9PTl9TQVZJTkdfRklMRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9UWVBFJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZChhZG1pbiwgbGFuZ3VhZ2UpIHtcblx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHQkaHRtbC5hZGRDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiBsYW5nTGluayhsYW5ndWFnZSwgYWRtaW4pLFxuXHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxuXHRcdFx0Y2FjaGU6IHRydWVcblx0XHR9KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlbG9hZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNSdGwgPSAtMSA8IGluQXJyYXkoKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBbJ2FyJywgJ2FyX3NhJywgJ2hlJywgJ2hlX2hlJywgJ3VyJywgJ3VyX2lyJ10pO1xuXG5cdFx0XHRcdFx0XHQkaHRtbFxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJylcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1ydGwgcmwtbHRyJylcblx0XHRcdFx0XHRcdFx0Ly8gLmF0dHIoJ2RpcicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKGlzUnRsID8gJ3JsLXJ0bCcgOiAncmwtbHRyJyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdDUwMCA8IG1pY3JvdGltZSgpIC0gc3RhcnQgPyAxIDogNTAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblx0XHRcdFx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0pO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbiRodG1sLmFkZENsYXNzKCdybC0nICsgKCRodG1sLmF0dHIoJ2RpcicpIHx8ICdsdHInKSk7XG4iLCJpbXBvcnQgX09iamVjdCRjcmVhdGUgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgVU5VU0VEX09QVElPTl9WQUxVRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgaXNBcnJheSwgZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldEZvbGRlckluYm94TmFtZSwgZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IG1vbWVudE5vd1VuaXggfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuXG5jbGFzcyBGb2xkZXJVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRpc3BsYXlTcGVjU2V0dGluZyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLnNlbnRGb2xkZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmRyYWZ0Rm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zcGFtRm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50cmFzaEZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYXJjaGl2ZUZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lc3BhY2UgPSAnJztcblxuXHRcdHRoaXMuZm9sZGVyTGlzdCA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5mb2xkZXJMaXN0Lm9wdGltaXplZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZm9sZGVyTGlzdC5lcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5mb2xkZXJzTG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZm9sZGVyc0NyZWF0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mb2xkZXJzRGVsZXRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZvbGRlcnNSZW5hbWluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb2xkZXJzSW5ib3hVbnJlYWRDb3VudCA9IGtvLm9ic2VydmFibGUoMCk7XG5cblx0XHR0aGlzLmN1cnJlbnRGb2xkZXIgPSBrby5vYnNlcnZhYmxlKG51bGwpLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbdGhpcywgJ3NlbGVjdGVkJ10gfSk7XG5cblx0XHR0aGlzLnNpZXZlQWxsb3dGaWxlaW50b0luYm94ID0gISFzZXR0aW5nc0dldCgnU2lldmVBbGxvd0ZpbGVpbnRvSW5ib3gnKTtcblxuXHRcdHRoaXMuY29tcHV0ZXJzKCk7XG5cdFx0dGhpcy5zdWJzY3JpYmVycygpO1xuXHR9XG5cblx0Y29tcHV0ZXJzKCkge1xuXHRcdHRoaXMuZHJhZnRGb2xkZXJOb3RFbmFibGVkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAnJyA9PT0gdGhpcy5kcmFmdEZvbGRlcigpIHx8IFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IHRoaXMuZHJhZnRGb2xkZXIoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmZvbGRlcnNMaXN0V2l0aFNpbmdsZUluYm94Um9vdEZvbGRlciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gIV8uZmluZCh0aGlzLmZvbGRlckxpc3QoKSwgKGZvbGRlcikgPT4gZm9sZGVyICYmICFmb2xkZXIuaXNTeXN0ZW1Gb2xkZXIoKSAmJiBmb2xkZXIudmlzaWJsZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdyA9IGtvLmNvbXB1dGVkKCgpID0+ICh0aGlzLmN1cnJlbnRGb2xkZXIoKSA/IHRoaXMuY3VycmVudEZvbGRlcigpLmZ1bGxOYW1lUmF3IDogJycpKTtcblxuXHRcdHRoaXMuY3VycmVudEZvbGRlckZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMuY3VycmVudEZvbGRlcigpID8gdGhpcy5jdXJyZW50Rm9sZGVyKCkuZnVsbE5hbWUgOiAnJykpO1xuXHRcdHRoaXMuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCA9IGtvLmNvbXB1dGVkKCgpID0+ICh0aGlzLmN1cnJlbnRGb2xkZXIoKSA/IHRoaXMuY3VycmVudEZvbGRlcigpLmZ1bGxOYW1lSGFzaCA6ICcnKSk7XG5cblx0XHR0aGlzLmZvbGRlcnNDaGFuZ2luZyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGxvYWRpbmcgPSB0aGlzLmZvbGRlcnNMb2FkaW5nKCksXG5cdFx0XHRcdGNyZWF0aW5nID0gdGhpcy5mb2xkZXJzQ3JlYXRpbmcoKSxcblx0XHRcdFx0ZGVsZXRpbmcgPSB0aGlzLmZvbGRlcnNEZWxldGluZygpLFxuXHRcdFx0XHRyZW5hbWluZyA9IHRoaXMuZm9sZGVyc1JlbmFtaW5nKCk7XG5cblx0XHRcdHJldHVybiBsb2FkaW5nIHx8IGNyZWF0aW5nIHx8IGRlbGV0aW5nIHx8IHJlbmFtaW5nO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0U3lzdGVtTmFtZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0ID0gW2dldEZvbGRlckluYm94TmFtZSgpXSxcblx0XHRcdFx0Zm9sZGVycyA9IHRoaXMuZm9sZGVyTGlzdCgpLFxuXHRcdFx0XHRzZW50Rm9sZGVyID0gdGhpcy5zZW50Rm9sZGVyKCksXG5cdFx0XHRcdGRyYWZ0Rm9sZGVyID0gdGhpcy5kcmFmdEZvbGRlcigpLFxuXHRcdFx0XHRzcGFtRm9sZGVyID0gdGhpcy5zcGFtRm9sZGVyKCksXG5cdFx0XHRcdHRyYXNoRm9sZGVyID0gdGhpcy50cmFzaEZvbGRlcigpLFxuXHRcdFx0XHRhcmNoaXZlRm9sZGVyID0gdGhpcy5hcmNoaXZlRm9sZGVyKCk7XG5cblx0XHRcdGlmIChpc0FycmF5KGZvbGRlcnMpICYmIDAgPCBmb2xkZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoJycgIT09IHNlbnRGb2xkZXIgJiYgVU5VU0VEX09QVElPTl9WQUxVRSAhPT0gc2VudEZvbGRlcikge1xuXHRcdFx0XHRcdGxpc3QucHVzaChzZW50Rm9sZGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoJycgIT09IGRyYWZ0Rm9sZGVyICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgIT09IGRyYWZ0Rm9sZGVyKSB7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKGRyYWZ0Rm9sZGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoJycgIT09IHNwYW1Gb2xkZXIgJiYgVU5VU0VEX09QVElPTl9WQUxVRSAhPT0gc3BhbUZvbGRlcikge1xuXHRcdFx0XHRcdGxpc3QucHVzaChzcGFtRm9sZGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoJycgIT09IHRyYXNoRm9sZGVyICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgIT09IHRyYXNoRm9sZGVyKSB7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKHRyYXNoRm9sZGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoJycgIT09IGFyY2hpdmVGb2xkZXIgJiYgVU5VU0VEX09QVElPTl9WQUxVRSAhPT0gYXJjaGl2ZUZvbGRlcikge1xuXHRcdFx0XHRcdGxpc3QucHVzaChhcmNoaXZlRm9sZGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9KTtcblxuXHRcdHRoaXMuZm9sZGVyTGlzdFN5c3RlbSA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmNvbXBhY3QoXy5tYXAodGhpcy5mb2xkZXJMaXN0U3lzdGVtTmFtZXMoKSwgKG5hbWUpID0+IGdldEZvbGRlckZyb21DYWNoZUxpc3QobmFtZSkpKVxuXHRcdCk7XG5cblx0XHR0aGlzLmZvbGRlck1lbnVGb3JNb3ZlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0dGhpcy5mb2xkZXJMaXN0U3lzdGVtKCksXG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdCgpLFxuXHRcdFx0XHRbdGhpcy5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKV0sXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdChpdGVtKSA9PiAoaXRlbSA/IGl0ZW0ubG9jYWxOYW1lKCkgOiAnJylcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0dGhpcy5mb2xkZXJNZW51Rm9yRmlsdGVycyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIoXG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdFN5c3RlbSgpLFxuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3QoKSxcblx0XHRcdFx0W3RoaXMuc2lldmVBbGxvd0ZpbGVpbnRvSW5ib3ggPyAnJyA6ICdJTkJPWCddLFxuXHRcdFx0XHRbWycnLCAnJ11dLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLmxvY2FsTmFtZSgpIDogJycpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdHN1YnNjcmliZXJzKCkge1xuXHRcdGNvbnN0IGZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlID0gKG9ic2VydmFibGUpID0+ICgpID0+IHtcblx0XHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qob2JzZXJ2YWJsZSgpKTtcblx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0Zm9sZGVyLnR5cGUoRm9sZGVyVHlwZS5Vc2VyKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGZTZXRTeXN0ZW1Gb2xkZXJUeXBlID0gKHR5cGUpID0+ICh2YWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCh2YWx1ZSk7XG5cdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdGZvbGRlci50eXBlKHR5cGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLnNlbnRGb2xkZXIuc3Vic2NyaWJlKGZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlKHRoaXMuc2VudEZvbGRlciksIHRoaXMsICdiZWZvcmVDaGFuZ2UnKTtcblx0XHR0aGlzLmRyYWZ0Rm9sZGVyLnN1YnNjcmliZShmUmVtb3ZlU3lzdGVtRm9sZGVyVHlwZSh0aGlzLmRyYWZ0Rm9sZGVyKSwgdGhpcywgJ2JlZm9yZUNoYW5nZScpO1xuXHRcdHRoaXMuc3BhbUZvbGRlci5zdWJzY3JpYmUoZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUodGhpcy5zcGFtRm9sZGVyKSwgdGhpcywgJ2JlZm9yZUNoYW5nZScpO1xuXHRcdHRoaXMudHJhc2hGb2xkZXIuc3Vic2NyaWJlKGZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlKHRoaXMudHJhc2hGb2xkZXIpLCB0aGlzLCAnYmVmb3JlQ2hhbmdlJyk7XG5cdFx0dGhpcy5hcmNoaXZlRm9sZGVyLnN1YnNjcmliZShmUmVtb3ZlU3lzdGVtRm9sZGVyVHlwZSh0aGlzLmFyY2hpdmVGb2xkZXIpLCB0aGlzLCAnYmVmb3JlQ2hhbmdlJyk7XG5cblx0XHR0aGlzLnNlbnRGb2xkZXIuc3Vic2NyaWJlKGZTZXRTeXN0ZW1Gb2xkZXJUeXBlKEZvbGRlclR5cGUuU2VudEl0ZW1zKSwgdGhpcyk7XG5cdFx0dGhpcy5kcmFmdEZvbGRlci5zdWJzY3JpYmUoZlNldFN5c3RlbUZvbGRlclR5cGUoRm9sZGVyVHlwZS5EcmFmdCksIHRoaXMpO1xuXHRcdHRoaXMuc3BhbUZvbGRlci5zdWJzY3JpYmUoZlNldFN5c3RlbUZvbGRlclR5cGUoRm9sZGVyVHlwZS5TcGFtKSwgdGhpcyk7XG5cdFx0dGhpcy50cmFzaEZvbGRlci5zdWJzY3JpYmUoZlNldFN5c3RlbUZvbGRlclR5cGUoRm9sZGVyVHlwZS5UcmFzaCksIHRoaXMpO1xuXHRcdHRoaXMuYXJjaGl2ZUZvbGRlci5zdWJzY3JpYmUoZlNldFN5c3RlbUZvbGRlclR5cGUoRm9sZGVyVHlwZS5BcmNoaXZlKSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0Z2V0TmV4dEZvbGRlck5hbWVzKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdLFxuXHRcdFx0bGltaXQgPSA1LFxuXHRcdFx0dXRjID0gbW9tZW50Tm93VW5peCgpLFxuXHRcdFx0dGltZW91dCA9IHV0YyAtIDYwICogNSxcblx0XHRcdHRpbWVvdXRzID0gW10sXG5cdFx0XHRpbmJveEZvbGRlck5hbWUgPSBnZXRGb2xkZXJJbmJveE5hbWUoKSxcblx0XHRcdGZTZWFyY2hGdW5jdGlvbiA9IChsaXN0KSA9PiB7XG5cdFx0XHRcdF8uZWFjaChsaXN0LCAoZm9sZGVyKSA9PiB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0Zm9sZGVyICYmXG5cdFx0XHRcdFx0XHRpbmJveEZvbGRlck5hbWUgIT09IGZvbGRlci5mdWxsTmFtZVJhdyAmJlxuXHRcdFx0XHRcdFx0Zm9sZGVyLnNlbGVjdGFibGUgJiZcblx0XHRcdFx0XHRcdGZvbGRlci5leGlzdGVuICYmXG5cdFx0XHRcdFx0XHR0aW1lb3V0ID4gZm9sZGVyLmludGVydmFsICYmXG5cdFx0XHRcdFx0XHQoZm9sZGVyLmlzU3lzdGVtRm9sZGVyKCkgfHwgKGZvbGRlci5zdWJTY3JpYmVkKCkgJiYgZm9sZGVyLmNoZWNrYWJsZSgpKSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRpbWVvdXRzLnB1c2goW2ZvbGRlci5pbnRlcnZhbCwgZm9sZGVyLmZ1bGxOYW1lUmF3XSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGZvbGRlciAmJiAwIDwgZm9sZGVyLnN1YkZvbGRlcnMoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGZTZWFyY2hGdW5jdGlvbihmb2xkZXIuc3ViRm9sZGVycygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdGZTZWFyY2hGdW5jdGlvbih0aGlzLmZvbGRlckxpc3QoKSk7XG5cblx0XHR0aW1lb3V0cy5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRpZiAoYVswXSA8IGJbMF0pIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fSBlbHNlIGlmIChhWzBdID4gYlswXSkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fSk7XG5cblx0XHRfLmZpbmQodGltZW91dHMsIChhSXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChhSXRlbVsxXSk7XG5cdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdGZvbGRlci5pbnRlcnZhbCA9IHV0Yztcblx0XHRcdFx0cmVzdWx0LnB1c2goYUl0ZW1bMV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbGltaXQgPD0gcmVzdWx0Lmxlbmd0aDtcblx0XHR9KTtcblxuXHRcdHJldHVybiBfLnVuaXEocmVzdWx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRm9sZGVyVXNlclN0b3JlKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbmRcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5cbmltcG9ydCB7IE1hZ2ljcywgTGF5b3V0LCBGb2N1c2VkLCBNZXNzYWdlU2V0QWN0aW9uLCBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHtcblx0dHJpbSxcblx0aXNOb3JtYWwsXG5cdGlzQXJyYXksXG5cdGluQXJyYXksXG5cdHBJbnQsXG5cdHBTdHJpbmcsXG5cdHBsYWluVG9IdG1sLFxuXHR3aW5kb3dSZXNpemUsXG5cdGZpbmRFbWFpbEFuZExpbmtzLFxuXHRnZXRSZWFsSGVpZ2h0XG59IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7XG5cdGdldEZvbGRlckluYm94TmFtZSxcblx0YWRkTmV3TWVzc2FnZUNhY2hlLFxuXHRzZXRGb2xkZXJVaWROZXh0LFxuXHRnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0LFxuXHRzZXRGb2xkZXJIYXNoLFxuXHRpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlLFxuXHRhZGRSZXF1ZXN0ZWRNZXNzYWdlLFxuXHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyLFxuXHRoYXNOZXdNZXNzYWdlQW5kUmVtb3ZlRnJvbUNhY2hlLFxuXHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGUsXG5cdGNsZWFyTmV3TWVzc2FnZUNhY2hlXG59IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IE1FU1NBR0VfQk9EWV9DQUNIRV9MSU1JVCB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgZGF0YSBhcyBHbG9iYWxzRGF0YSwgJGRpdiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IG1haWxCb3gsIG5vdGlmaWNhdGlvbk1haWxJY29uIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGkxOG4sIGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IG1vbWVudE5vd1VuaXggfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuXG5pbXBvcnQgKiBhcyBNZXNzYWdlSGVscGVyIGZyb20gJ0hlbHBlci9NZXNzYWdlJztcbmltcG9ydCB7IE1lc3NhZ2VNb2RlbCB9IGZyb20gJ01vZGVsL01lc3NhZ2UnO1xuXG5pbXBvcnQgeyBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IE5vdGlmaWNhdGlvblN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL05vdGlmaWNhdGlvbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBNZXNzYWdlVXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zdGF0aWNNZXNzYWdlID0gbmV3IE1lc3NhZ2VNb2RlbCgpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdCA9IGtvLm9ic2VydmFibGVBcnJheShbXSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvdW50ID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlID0ga28ub2JzZXJ2YWJsZSgxKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZUJlZm9yZVRocmVhZCA9IGtvLm9ic2VydmFibGUoMSk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFNlYXJjaCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kUGFnZSA9IGtvLm9ic2VydmFibGUoMSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0TG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RJc05vdENvbXBsZXRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAyMDAgfSk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlRm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgc3BlY2lhbFRocm90dGxlOiA3MDAgfSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0RGlzYWJsZUF1dG9TZWxlY3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDUwMCB9KTtcblxuXHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZCA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHQvLyBtZXNzYWdlIHZpZXdlclxuXHRcdHRoaXMubWVzc2FnZSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLm1lc3NhZ2Uudmlld1RyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubWVzc2FnZUVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm1lc3NhZ2VDdXJyZW50TG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTG9hZGluZ1Rocm90dGxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lNTBtcyB9KTtcblxuXHRcdHRoaXMubWVzc2FnZUZ1bGxTY3JlZW5Nb2RlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLm1lc3NhZ2VBY3RpdmVEb20gPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5jb21wdXRlcnMoKTtcblx0XHR0aGlzLnN1YnNjcmliZXJzKCk7XG5cblx0XHR0aGlzLm9uTWVzc2FnZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMub25NZXNzYWdlUmVzcG9uc2UsIHRoaXMpO1xuXG5cdFx0dGhpcy5wdXJnZU1lc3NhZ2VCb2R5Q2FjaGVUaHJvdHRsZSA9IF8udGhyb3R0bGUodGhpcy5wdXJnZU1lc3NhZ2VCb2R5Q2FjaGUsIE1hZ2ljcy5UaW1lMzBzKTtcblx0fVxuXG5cdGNvbXB1dGVycygpIHtcblx0XHR0aGlzLm1lc3NhZ2VMb2FkaW5nID0ga28uY29tcHV0ZWQoKCkgPT4gdGhpcy5tZXNzYWdlQ3VycmVudExvYWRpbmcoKSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kSGFzaCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICtcblx0XHRcdFx0J3wnICtcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFNlYXJjaCgpICtcblx0XHRcdFx0J3wnICtcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCgpICtcblx0XHRcdFx0J3wnICtcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFBhZ2UoKVxuXHRcdCk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZUNvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFnZSA9IHdpbmRvdy5NYXRoLmNlaWwodGhpcy5tZXNzYWdlTGlzdENvdW50KCkgLyBTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpKTtcblx0XHRcdHJldHVybiAwID49IHBhZ2UgPyAxIDogcGFnZTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGhpcy5tZXNzYWdlTGlzdFNlYXJjaCxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0c2V0SGFzaChcblx0XHRcdFx0XHRtYWlsQm94KEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSwgMSwgdHJpbSh2YWx1ZS50b1N0cmluZygpKSwgdGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG9uZSA9IHRoaXMubWVzc2FnZUxpc3RMb2FkaW5nKCksXG5cdFx0XHRcdHR3byA9IHRoaXMubWVzc2FnZUxpc3RJc05vdENvbXBsZXRlZCgpO1xuXHRcdFx0cmV0dXJuIG9uZSB8fCB0d287XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlzTWVzc2FnZVNlbGVjdGVkID0ga28uY29tcHV0ZWQoKCkgPT4gbnVsbCAhPT0gdGhpcy5tZXNzYWdlKCkpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWQgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMubWVzc2FnZUxpc3QoKSwgKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCgpKSlcblx0XHRcdC5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0XHR0aGlzLmhhc0NoZWNrZWRNZXNzYWdlcyA9IGtvLmNvbXB1dGVkKCgpID0+IDAgPCB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aCkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkKCksXG5cdFx0XHRcdHNlbGVjdGVkTWVzc2FnZSA9IHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQoKSxcblx0XHRcdFx0Zm9jdXNlZE1lc3NhZ2UgPSB0aGlzLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQoKTtcblxuXHRcdFx0aWYgKGNoZWNrZWQubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBfLnVuaW9uKGNoZWNrZWQsIHNlbGVjdGVkTWVzc2FnZSA/IFtzZWxlY3RlZE1lc3NhZ2VdIDogW10pO1xuXHRcdFx0fSBlbHNlIGlmIChzZWxlY3RlZE1lc3NhZ2UpIHtcblx0XHRcdFx0cmV0dXJuIFtzZWxlY3RlZE1lc3NhZ2VdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm9jdXNlZE1lc3NhZ2UgPyBbZm9jdXNlZE1lc3NhZ2VdIDogW107XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHJlc3VsdCA9IFtdO1xuXHRcdFx0Xy5lYWNoKHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpLCAobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG1lc3NhZ2UudWlkKTtcblx0XHRcdFx0XHRpZiAoMSA8IG1lc3NhZ2UudGhyZWFkc0xlbigpKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBfLnVuaW9uKHJlc3VsdCwgbWVzc2FnZS50aHJlYWRzKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXHR9XG5cblx0c3Vic2NyaWJlcnMoKSB7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR2YWx1ZSA9ICEhdmFsdWU7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGUodmFsdWUpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlRm9yQW5pbWF0aW9uKHZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3Quc3Vic2NyaWJlKFxuXHRcdFx0Xy5kZWJvdW5jZSgobGlzdCkgPT4ge1xuXHRcdFx0XHRfLmVhY2gobGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLm5ld0ZvckFuaW1hdGlvbigpKSB7XG5cdFx0XHRcdFx0XHRpdGVtLm5ld0ZvckFuaW1hdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpXG5cdFx0KTtcblxuXHRcdHRoaXMubWVzc2FnZS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdGlmIChMYXlvdXQuTm9QcmV2aWV3ID09PSBTZXR0aW5nc1N0b3JlLmxheW91dCgpKSB7XG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZVZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cblx0XHRcdFx0dGhpcy5tZXNzYWdlRnVsbFNjcmVlbk1vZGUoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLmhpZGVNZXNzYWdlQm9kaWVzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMb2FkaW5nLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHRoaXMubWVzc2FnZUxvYWRpbmdUaHJvdHRsZSh2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tLnN1YnNjcmliZSgoZG9tKSA9PiB7XG5cdFx0XHRpZiAoZG9tICYmICEoZG9tIGluc3RhbmNlb2YgJCkpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlc0JvZGllc0RvbSgkKGRvbSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlci5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgZm9sZGVyICYmIGZvbGRlciAhPT0gbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwdXJnZU1lc3NhZ2VCb2R5Q2FjaGUoKSB7XG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRjb25zdCBlbmQgPSBHbG9iYWxzRGF0YS5pTWVzc2FnZUJvZHlDYWNoZUNvdW50IC0gTUVTU0FHRV9CT0RZX0NBQ0hFX0xJTUlUO1xuXG5cdFx0aWYgKDAgPCBlbmQpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzRG9tID0gdGhpcy5tZXNzYWdlc0JvZGllc0RvbSgpO1xuXHRcdFx0aWYgKG1lc3NhZ2VzRG9tKSB7XG5cdFx0XHRcdG1lc3NhZ2VzRG9tLmZpbmQoJy5ybC1jYWNoZS1jbGFzcycpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0aWYgKGVuZCA+IGl0ZW0uZGF0YSgncmwtY2FjaGUtY291bnQnKSkge1xuXHRcdFx0XHRcdFx0aXRlbS5hZGRDbGFzcygncmwtY2FjaGUtcHVyZ2UnKTtcblx0XHRcdFx0XHRcdGNvdW50ICs9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoMCA8IGNvdW50KSB7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiBtZXNzYWdlc0RvbS5maW5kKCcucmwtY2FjaGUtcHVyZ2UnKS5yZW1vdmUoKSwgTWFnaWNzLlRpbWUzNTBtcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpbml0VWlkTmV4dEFuZE5ld01lc3NhZ2VzKGZvbGRlciwgdWlkTmV4dCwgbmV3TWVzc2FnZXMpIHtcblx0XHRpZiAoZ2V0Rm9sZGVySW5ib3hOYW1lKCkgPT09IGZvbGRlciAmJiBpc05vcm1hbCh1aWROZXh0KSAmJiAnJyAhPT0gdWlkTmV4dCkge1xuXHRcdFx0aWYgKGlzQXJyYXkobmV3TWVzc2FnZXMpICYmIDAgPCBuZXdNZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Xy5lYWNoKG5ld01lc3NhZ2VzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGFkZE5ld01lc3NhZ2VDYWNoZShmb2xkZXIsIGl0ZW0uVWlkKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Tm90aWZpY2F0aW9uU3RvcmUucGxheVNvdW5kTm90aWZpY2F0aW9uKCk7XG5cblx0XHRcdFx0Y29uc3QgbGVuID0gbmV3TWVzc2FnZXMubGVuZ3RoO1xuXHRcdFx0XHRpZiAoMyA8IGxlbikge1xuXHRcdFx0XHRcdE5vdGlmaWNhdGlvblN0b3JlLmRpc3BsYXlEZXNrdG9wTm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0bm90aWZpY2F0aW9uTWFpbEljb24oKSxcblx0XHRcdFx0XHRcdEFjY291bnRTdG9yZS5lbWFpbCgpLFxuXHRcdFx0XHRcdFx0aTE4bignTUVTU0FHRV9MSVNUL05FV19NRVNTQUdFX05PVElGSUNBVElPTicsIHtcblx0XHRcdFx0XHRcdFx0J0NPVU5UJzogbGVuXG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHsgJ0ZvbGRlcic6ICcnLCAnVWlkJzogJycgfVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Xy5lYWNoKG5ld01lc3NhZ2VzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uU3RvcmUuZGlzcGxheURlc2t0b3BOb3RpZmljYXRpb24oXG5cdFx0XHRcdFx0XHRcdG5vdGlmaWNhdGlvbk1haWxJY29uKCksXG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VIZWxwZXIuZW1haWxBcnJheVRvU3RyaW5nKE1lc3NhZ2VIZWxwZXIuZW1haWxBcnJheUZyb21Kc29uKGl0ZW0uRnJvbSksIGZhbHNlKSxcblx0XHRcdFx0XHRcdFx0aXRlbS5TdWJqZWN0LFxuXHRcdFx0XHRcdFx0XHR7ICdGb2xkZXInOiBpdGVtLkZvbGRlciwgJ1VpZCc6IGl0ZW0uVWlkIH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c2V0Rm9sZGVyVWlkTmV4dChmb2xkZXIsIHVpZE5leHQpO1xuXHRcdH1cblx0fVxuXG5cdGhpZGVNZXNzYWdlQm9kaWVzKCkge1xuXHRcdGNvbnN0IG1lc3NhZ2VzRG9tID0gdGhpcy5tZXNzYWdlc0JvZGllc0RvbSgpO1xuXHRcdGlmIChtZXNzYWdlc0RvbSkge1xuXHRcdFx0bWVzc2FnZXNEb20uZmluZCgnLmItdGV4dC1wYXJ0JykuaGlkZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZnJvbUZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHVpZEZvclJlbW92ZVxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHRvRm9sZGVyRnVsbE5hbWVSYXcgPSAnJ1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBjb3B5ID0gZmFsc2Vcblx0ICovXG5cdHJlbW92ZU1lc3NhZ2VzRnJvbUxpc3QoZnJvbUZvbGRlckZ1bGxOYW1lUmF3LCB1aWRGb3JSZW1vdmUsIHRvRm9sZGVyRnVsbE5hbWVSYXcgPSAnJywgY29weSA9IGZhbHNlKSB7XG5cdFx0dWlkRm9yUmVtb3ZlID0gXy5tYXAodWlkRm9yUmVtb3ZlLCAobVZhbHVlKSA9PiBwSW50KG1WYWx1ZSkpO1xuXG5cdFx0bGV0IHVuc2VlbkNvdW50ID0gMCxcblx0XHRcdG1lc3NhZ2VMaXN0ID0gdGhpcy5tZXNzYWdlTGlzdCgpLFxuXHRcdFx0Y3VycmVudE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoKTtcblxuXHRcdGNvbnN0IHRyYXNoRm9sZGVyID0gRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSxcblx0XHRcdHNwYW1Gb2xkZXIgPSBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCksXG5cdFx0XHRmcm9tRm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChmcm9tRm9sZGVyRnVsbE5hbWVSYXcpLFxuXHRcdFx0dG9Gb2xkZXIgPSAnJyA9PT0gdG9Gb2xkZXJGdWxsTmFtZVJhdyA/IG51bGwgOiBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHRvRm9sZGVyRnVsbE5hbWVSYXcgfHwgJycpLFxuXHRcdFx0Y3VycmVudEZvbGRlckZ1bGxOYW1lUmF3ID0gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRtZXNzYWdlcyA9XG5cdFx0XHRcdGN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdyA9PT0gZnJvbUZvbGRlckZ1bGxOYW1lUmF3XG5cdFx0XHRcdFx0PyBfLmZpbHRlcihtZXNzYWdlTGlzdCwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpbkFycmF5KHBJbnQoaXRlbS51aWQpLCB1aWRGb3JSZW1vdmUpKVxuXHRcdFx0XHRcdDogW107XG5cblx0XHRfLmVhY2gobWVzc2FnZXMsIChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSAmJiBpdGVtLnVuc2VlbigpKSB7XG5cdFx0XHRcdHVuc2VlbkNvdW50ICs9IDE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZiAoZnJvbUZvbGRlciAmJiAhY29weSkge1xuXHRcdFx0ZnJvbUZvbGRlci5tZXNzYWdlQ291bnRBbGwoXG5cdFx0XHRcdDAgPD0gZnJvbUZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSAtIHVpZEZvclJlbW92ZS5sZW5ndGggPyBmcm9tRm9sZGVyLm1lc3NhZ2VDb3VudEFsbCgpIC0gdWlkRm9yUmVtb3ZlLmxlbmd0aCA6IDBcblx0XHRcdCk7XG5cblx0XHRcdGlmICgwIDwgdW5zZWVuQ291bnQpIHtcblx0XHRcdFx0ZnJvbUZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoXG5cdFx0XHRcdFx0MCA8PSBmcm9tRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgpIC0gdW5zZWVuQ291bnQgPyBmcm9tRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgpIC0gdW5zZWVuQ291bnQgOiAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRvRm9sZGVyKSB7XG5cdFx0XHRpZiAodHJhc2hGb2xkZXIgPT09IHRvRm9sZGVyLmZ1bGxOYW1lUmF3IHx8IHNwYW1Gb2xkZXIgPT09IHRvRm9sZGVyLmZ1bGxOYW1lUmF3KSB7XG5cdFx0XHRcdHVuc2VlbkNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0dG9Gb2xkZXIubWVzc2FnZUNvdW50QWxsKHRvRm9sZGVyLm1lc3NhZ2VDb3VudEFsbCgpICsgdWlkRm9yUmVtb3ZlLmxlbmd0aCk7XG5cdFx0XHRpZiAoMCA8IHVuc2VlbkNvdW50KSB7XG5cdFx0XHRcdHRvRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCh0b0ZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSArIHVuc2VlbkNvdW50KTtcblx0XHRcdH1cblxuXHRcdFx0dG9Gb2xkZXIuYWN0aW9uQmxpbmsodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPCBtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdGlmIChjb3B5KSB7XG5cdFx0XHRcdF8uZWFjaChtZXNzYWdlcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRpdGVtLmNoZWNrZWQoZmFsc2UpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RJc05vdENvbXBsZXRlZCh0cnVlKTtcblxuXHRcdFx0XHRfLmVhY2gobWVzc2FnZXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRNZXNzYWdlICYmIGN1cnJlbnRNZXNzYWdlLmhhc2ggPT09IGl0ZW0uaGFzaCkge1xuXHRcdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UgPSBudWxsO1xuXHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGl0ZW0uZGVsZXRlZCh0cnVlKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0Xy5lYWNoKG1lc3NhZ2VzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdC5yZW1vdmUoaXRlbSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lMzUwbXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gZnJvbUZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdFx0XHRzZXRGb2xkZXJIYXNoKGZyb21Gb2xkZXJGdWxsTmFtZVJhdywgJycpO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gdG9Gb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdFx0c2V0Rm9sZGVySGFzaCh0b0ZvbGRlckZ1bGxOYW1lUmF3LCAnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCcnICE9PSB0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKCkpIHtcblx0XHRcdG1lc3NhZ2VMaXN0ID0gdGhpcy5tZXNzYWdlTGlzdCgpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2VMaXN0ICYmXG5cdFx0XHRcdDAgPCBtZXNzYWdlTGlzdC5sZW5ndGggJiZcblx0XHRcdFx0ISFfLmZpbmQobWVzc2FnZUxpc3QsIChpdGVtKSA9PiAhIShpdGVtICYmIGl0ZW0uZGVsZXRlZCgpICYmIGl0ZW0udWlkID09PSB0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKCkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBfLmZpbmQobWVzc2FnZUxpc3QsIChpdGVtKSA9PiBpdGVtICYmICFpdGVtLmRlbGV0ZWQoKSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlICYmIHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKSAhPT0gcFN0cmluZyhtZXNzYWdlLnVpZCkpIHtcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKHBTdHJpbmcobWVzc2FnZS51aWQpKTtcblxuXHRcdFx0XHRcdHNldEhhc2goXG5cdFx0XHRcdFx0XHRtYWlsQm94KFxuXHRcdFx0XHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2goKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFtZXNzYWdlKSB7XG5cdFx0XHRcdFx0aWYgKDEgPCB0aGlzLm1lc3NhZ2VMaXN0UGFnZSgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZSh0aGlzLm1lc3NhZ2VMaXN0UGFnZSgpIC0gMSk7XG5cblx0XHRcdFx0XHRcdHNldEhhc2goXG5cdFx0XHRcdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaCgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKCcnKTtcblxuXHRcdFx0XHRcdFx0c2V0SGFzaChcblx0XHRcdFx0XHRcdFx0bWFpbEJveChcblx0XHRcdFx0XHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2VCZWZvcmVUaHJlYWQoKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoKClcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2VUZXh0Qm9keVxuXHQgKi9cblx0aW5pdEJsb2NrcXVvdGVTd2l0Y2hlcihtZXNzYWdlVGV4dEJvZHkpIHtcblx0XHRpZiAobWVzc2FnZVRleHRCb2R5KSB7XG5cdFx0XHRjb25zdCAkb0xpc3QgPSAkKCdibG9ja3F1b3RlOm5vdCgucmwtYnEtc3dpdGNoZXIpJywgbWVzc2FnZVRleHRCb2R5KS5maWx0ZXIoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0MCA9PT1cblx0XHRcdFx0XHQkKHRoaXMpXG5cdFx0XHRcdFx0XHQucGFyZW50KClcblx0XHRcdFx0XHRcdC5jbG9zZXN0KCdibG9ja3F1b3RlJywgbWVzc2FnZVRleHRCb2R5KS5sZW5ndGhcblx0XHRcdFx0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoJG9MaXN0ICYmIDAgPCAkb0xpc3QubGVuZ3RoKSB7XG5cdFx0XHRcdCRvTGlzdC5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblxuXHRcdFx0XHRcdGxldCBoID0gJHRoaXMuaGVpZ2h0KCk7XG5cdFx0XHRcdFx0aWYgKDAgPT09IGgpIHtcblx0XHRcdFx0XHRcdGggPSBnZXRSZWFsSGVpZ2h0KCR0aGlzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoJycgIT09IHRyaW0oJHRoaXMudGV4dCgpKSAmJiAoMCA9PT0gaCB8fCAxMDAgPCBoKSkge1xuXHRcdFx0XHRcdFx0JHRoaXMuYWRkQ2xhc3MoJ3JsLWJxLXN3aXRjaGVyIGhpZGRlbi1icScpO1xuXHRcdFx0XHRcdFx0JCgnPHNwYW4gY2xhc3M9XCJybEJsb2NrcXVvdGVTd2l0Y2hlclwiPjxpIGNsYXNzPVwiaWNvbi1lbGxpcHNpc1wiIC8+PC9zcGFuPicpXG5cdFx0XHRcdFx0XHRcdC5pbnNlcnRCZWZvcmUoJHRoaXMpXG5cdFx0XHRcdFx0XHRcdC5vbignY2xpY2sucmxCbG9ja3F1b3RlU3dpdGNoZXInLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMudG9nZ2xlQ2xhc3MoJ2hpZGRlbi1icScpO1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuYWZ0ZXIoJzxiciAvPicpXG5cdFx0XHRcdFx0XHRcdC5iZWZvcmUoJzxiciAvPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXNzYWdlVGV4dEJvZHlcblx0ICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2Vcblx0ICovXG5cdGluaXRPcGVuUGdwQ29udHJvbHMobWVzc2FnZVRleHRCb2R5LCBtZXNzYWdlKSB7XG5cdFx0aWYgKG1lc3NhZ2VUZXh0Qm9keSAmJiBtZXNzYWdlVGV4dEJvZHkuZmluZCkge1xuXHRcdFx0bWVzc2FnZVRleHRCb2R5LmZpbmQoJy5iLXBsYWluLW9wZW5wZ3A6bm90KC5pbml0ZWQpJykuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0UGdwU3RvcmUuaW5pdE1lc3NhZ2VCb2R5Q29udHJvbHMoJCh0aGlzKSwgbWVzc2FnZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRzZXRNZXNzYWdlKGRhdGEsIGNhY2hlZCkge1xuXHRcdGxldCBpc05ldyA9IGZhbHNlLFxuXHRcdFx0Ym9keSA9IG51bGwsXG5cdFx0XHRpZCA9ICcnLFxuXHRcdFx0cGxhaW4gPSAnJyxcblx0XHRcdHJlc3VsdEh0bWwgPSAnJyxcblx0XHRcdHBncFNpZ25lZCA9IGZhbHNlLFxuXHRcdFx0bWVzc2FnZXNEb20gPSB0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tKCksXG5cdFx0XHRzZWxlY3RlZE1lc3NhZ2UgPSB0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkKCksXG5cdFx0XHRtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cblx0XHRpZiAoXG5cdFx0XHRkYXRhICYmXG5cdFx0XHRtZXNzYWdlICYmXG5cdFx0XHRkYXRhLlJlc3VsdCAmJlxuXHRcdFx0J09iamVjdC9NZXNzYWdlJyA9PT0gZGF0YS5SZXN1bHRbJ0BPYmplY3QnXSAmJlxuXHRcdFx0bWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyA9PT0gZGF0YS5SZXN1bHQuRm9sZGVyXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB0aHJlYWRzID0gbWVzc2FnZS50aHJlYWRzKCk7XG5cdFx0XHRpZiAobWVzc2FnZS51aWQgIT09IGRhdGEuUmVzdWx0LlVpZCAmJiAxIDwgdGhyZWFkcy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGRhdGEuUmVzdWx0LlVpZCwgdGhyZWFkcykpIHtcblx0XHRcdFx0bWVzc2FnZSA9IE1lc3NhZ2VNb2RlbC5uZXdJbnN0YW5jZUZyb21Kc29uKGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0XHRtZXNzYWdlLnRocmVhZHModGhyZWFkcyk7XG5cdFx0XHRcdFx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlKTtcblxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSh0aGlzLnN0YXRpY01lc3NhZ2UucG9wdWxhdGVCeU1lc3NhZ2VMaXN0SXRlbShtZXNzYWdlKSk7XG5cdFx0XHRcdFx0bWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXG5cdFx0XHRcdFx0aXNOZXcgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UudWlkID09PSBkYXRhLlJlc3VsdC5VaWQpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlRXJyb3IoJycpO1xuXG5cdFx0XHRcdG1lc3NhZ2UuaW5pdFVwZGF0ZUJ5TWVzc2FnZUpzb24oZGF0YS5SZXN1bHQpO1xuXHRcdFx0XHRhZGRSZXF1ZXN0ZWRNZXNzYWdlKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIG1lc3NhZ2UudWlkKTtcblxuXHRcdFx0XHRpZiAoIWNhY2hlZCkge1xuXHRcdFx0XHRcdG1lc3NhZ2UuaW5pdEZsYWdzQnlKc29uKGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1lc3NhZ2VzRG9tID0gbWVzc2FnZXNEb20gJiYgbWVzc2FnZXNEb21bMF0gPyBtZXNzYWdlc0RvbSA6IG51bGw7XG5cdFx0XHRcdGlmIChtZXNzYWdlc0RvbSkge1xuXHRcdFx0XHRcdGlkID0gJ3JsLW1ncy0nICsgbWVzc2FnZS5oYXNoLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnJyk7XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0Qm9keSA9IG1lc3NhZ2VzRG9tLmZpbmQoJyMnICsgaWQpO1xuXHRcdFx0XHRcdGlmICghdGV4dEJvZHkgfHwgIXRleHRCb2R5WzBdKSB7XG5cdFx0XHRcdFx0XHRsZXQgaXNIdG1sID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAoaXNOb3JtYWwoZGF0YS5SZXN1bHQuSHRtbCkgJiYgJycgIT09IGRhdGEuUmVzdWx0Lkh0bWwpIHtcblx0XHRcdFx0XHRcdFx0aXNIdG1sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9IGRhdGEuUmVzdWx0Lkh0bWwudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNOb3JtYWwoZGF0YS5SZXN1bHQuUGxhaW4pICYmICcnICE9PSBkYXRhLlJlc3VsdC5QbGFpbikge1xuXHRcdFx0XHRcdFx0XHRpc0h0bWwgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9IHBsYWluVG9IdG1sKGRhdGEuUmVzdWx0LlBsYWluLnRvU3RyaW5nKCksIGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoKG1lc3NhZ2UuaXNQZ3BTaWduZWQoKSB8fCBtZXNzYWdlLmlzUGdwRW5jcnlwdGVkKCkpICYmIFBncFN0b3JlLmNhcGFPcGVuUEdQKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRwbGFpbiA9IHBTdHJpbmcoZGF0YS5SZXN1bHQuUGxhaW4pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNQZ3BFbmNyeXB0ZWQgPSAvLS0tQkVHSU4gUEdQIE1FU1NBR0UtLS0vLnRlc3QocGxhaW4pO1xuXHRcdFx0XHRcdFx0XHRcdGlmICghaXNQZ3BFbmNyeXB0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBncFNpZ25lZCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8tLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tLy50ZXN0KHBsYWluKSAmJiAvLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0vLnRlc3QocGxhaW4pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdCRkaXYuZW1wdHkoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocGdwU2lnbmVkICYmIG1lc3NhZ2UuaXNQZ3BTaWduZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9ICRkaXYuYXBwZW5kKCQoJzxwcmUgY2xhc3M9XCJiLXBsYWluLW9wZW5wZ3Agc2lnbmVkXCI+PC9wcmU+JykudGV4dChwbGFpbikpLmh0bWwoKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzUGdwRW5jcnlwdGVkICYmIG1lc3NhZ2UuaXNQZ3BFbmNyeXB0ZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9ICRkaXYuYXBwZW5kKCQoJzxwcmUgY2xhc3M9XCJiLXBsYWluLW9wZW5wZ3AgZW5jcnlwdGVkXCI+PC9wcmU+JykudGV4dChwbGFpbikpLmh0bWwoKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9ICc8cHJlPicgKyByZXN1bHRIdG1sICsgJzwvcHJlPic7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0JGRpdi5lbXB0eSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZS5pc1BncFNpZ25lZChwZ3BTaWduZWQpO1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UuaXNQZ3BFbmNyeXB0ZWQoaXNQZ3BFbmNyeXB0ZWQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSAnPHByZT4nICsgcmVzdWx0SHRtbCArICc8L3ByZT4nO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpc0h0bWwgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9ICc8cHJlPicgKyByZXN1bHRIdG1sICsgJzwvcHJlPic7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlNZXNzYWdlQm9keUNhY2hlQ291bnQgKz0gMTtcblxuXHRcdFx0XHRcdFx0Ym9keSA9ICQoJzxkaXYgaWQ9XCInICsgaWQgKyAnXCIgPjwvZGl2PicpXG5cdFx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKCdybC1jYWNoZS1jbGFzcycpO1xuXHRcdFx0XHRcdFx0Ym9keS5kYXRhKCdybC1jYWNoZS1jb3VudCcsIEdsb2JhbHNEYXRhLmlNZXNzYWdlQm9keUNhY2hlQ291bnQpO1xuXG5cdFx0XHRcdFx0XHRib2R5Lmh0bWwoZmluZEVtYWlsQW5kTGlua3MocmVzdWx0SHRtbCkpLmFkZENsYXNzKCdiLXRleHQtcGFydCAnICsgKGlzSHRtbCA/ICdodG1sJyA6ICdwbGFpbicpKTtcblxuXHRcdFx0XHRcdFx0bWVzc2FnZS5pc0h0bWwoISFpc0h0bWwpO1xuXHRcdFx0XHRcdFx0bWVzc2FnZS5oYXNJbWFnZXMoISFkYXRhLlJlc3VsdC5IYXNFeHRlcm5hbHMpO1xuXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmJvZHkgPSBib2R5O1xuXHRcdFx0XHRcdFx0aWYgKG1lc3NhZ2UuYm9keSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlc0RvbS5hcHBlbmQobWVzc2FnZS5ib2R5KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bWVzc2FnZS5zdG9yZURhdGFJbkRvbSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQuSGFzSW50ZXJuYWxzKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2hvd0ludGVybmFsSW1hZ2VzKHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAobWVzc2FnZS5oYXNJbWFnZXMoKSAmJiBTZXR0aW5nc1N0b3JlLnNob3dJbWFnZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLnNob3dFeHRlcm5hbEltYWdlcyh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5wdXJnZU1lc3NhZ2VCb2R5Q2FjaGVUaHJvdHRsZSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLmJvZHkgPSB0ZXh0Qm9keTtcblx0XHRcdFx0XHRcdGlmIChtZXNzYWdlLmJvZHkpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCArPSAxO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmJvZHkuZGF0YSgncmwtY2FjaGUtY291bnQnLCBHbG9iYWxzRGF0YS5pTWVzc2FnZUJvZHlDYWNoZUNvdW50KTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5mZXRjaERhdGFGcm9tRG9tKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlQWN0aXZlRG9tKG1lc3NhZ2UuYm9keSk7XG5cblx0XHRcdFx0XHR0aGlzLmhpZGVNZXNzYWdlQm9kaWVzKCk7XG5cblx0XHRcdFx0XHRpZiAoYm9keSkge1xuXHRcdFx0XHRcdFx0dGhpcy5pbml0T3BlblBncENvbnRyb2xzKGJvZHksIG1lc3NhZ2UpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmluaXRCbG9ja3F1b3RlU3dpdGNoZXIoYm9keSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVzc2FnZS5ib2R5LnNob3coKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlLnVuc2VlbigpIHx8IG1lc3NhZ2UuaGFzVW5zZWVuU3ViTWVzc2FnZSgpKSB7XG5cdFx0XHRcdFx0Z2V0QXBwKCkubWVzc2FnZUxpc3RBY3Rpb24obWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgTWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuLCBbbWVzc2FnZV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzTmV3KSB7XG5cdFx0XHRcdFx0bWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRNZXNzYWdlICYmXG5cdFx0XHRcdFx0XHRtZXNzYWdlICYmXG5cdFx0XHRcdFx0XHQobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyAhPT0gc2VsZWN0ZWRNZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3IHx8IG1lc3NhZ2UudWlkICE9PSBzZWxlY3RlZE1lc3NhZ2UudWlkKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZChudWxsKTtcblx0XHRcdFx0XHRcdGlmICgxID09PSB0aGlzLm1lc3NhZ2VMaXN0KCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZChudWxsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFzZWxlY3RlZE1lc3NhZ2UgJiYgbWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRNZXNzYWdlID0gXy5maW5kKFxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0KCksXG5cdFx0XHRcdFx0XHRcdChzdWJNZXNzYWdlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdHN1Yk1lc3NhZ2UgJiZcblx0XHRcdFx0XHRcdFx0XHRzdWJNZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3ID09PSBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3ICYmXG5cdFx0XHRcdFx0XHRcdFx0c3ViTWVzc2FnZS51aWQgPT09IG1lc3NhZ2UudWlkXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0ZWRNZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQoc2VsZWN0ZWRNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkKHNlbGVjdGVkTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2VsZWN0TWVzc2FnZShvTWVzc2FnZSkge1xuXHRcdGlmIChvTWVzc2FnZSkge1xuXHRcdFx0dGhpcy5tZXNzYWdlKHRoaXMuc3RhdGljTWVzc2FnZS5wb3B1bGF0ZUJ5TWVzc2FnZUxpc3RJdGVtKG9NZXNzYWdlKSk7XG5cdFx0XHR0aGlzLnBvcHVsYXRlTWVzc2FnZUJvZHkodGhpcy5tZXNzYWdlKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0c2VsZWN0TWVzc2FnZUJ5Rm9sZGVyQW5kVWlkKHNGb2xkZXIsIHNVaWQpIHtcblx0XHRpZiAoc0ZvbGRlciAmJiBzVWlkKSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2UodGhpcy5zdGF0aWNNZXNzYWdlLnBvcHVsYXRlQnlNZXNzYWdlTGlzdEl0ZW0obnVsbCkpO1xuXHRcdFx0dGhpcy5tZXNzYWdlKCkuZm9sZGVyRnVsbE5hbWVSYXcgPSBzRm9sZGVyO1xuXHRcdFx0dGhpcy5tZXNzYWdlKCkudWlkID0gc1VpZDtcblxuXHRcdFx0dGhpcy5wb3B1bGF0ZU1lc3NhZ2VCb2R5KHRoaXMubWVzc2FnZSgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdHBvcHVsYXRlTWVzc2FnZUJvZHkob01lc3NhZ2UpIHtcblx0XHRpZiAob01lc3NhZ2UpIHtcblx0XHRcdGlmIChSZW1vdGUubWVzc2FnZSh0aGlzLm9uTWVzc2FnZVJlc3BvbnNlLCBvTWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgb01lc3NhZ2UudWlkKSkge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VDdXJyZW50TG9hZGluZyh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXN1bHRcblx0ICogQHBhcmFtIHtBamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqL1xuXHRvbk1lc3NhZ2VSZXNwb25zZShzUmVzdWx0LCBvRGF0YSwgYkNhY2hlZCkge1xuXHRcdHRoaXMuaGlkZU1lc3NhZ2VCb2RpZXMoKTtcblxuXHRcdHRoaXMubWVzc2FnZUN1cnJlbnRMb2FkaW5nKGZhbHNlKTtcblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlKG9EYXRhLCBiQ2FjaGVkKTtcblx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZCA9PT0gc1Jlc3VsdCkge1xuXHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdFx0dGhpcy5tZXNzYWdlRXJyb3IoJycpO1xuXHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuQWJvcnQgIT09IHNSZXN1bHQpIHtcblx0XHRcdHRoaXMubWVzc2FnZShudWxsKTtcblx0XHRcdHRoaXMubWVzc2FnZUVycm9yKFxuXHRcdFx0XHRvRGF0YSAmJiBvRGF0YS5FcnJvckNvZGUgPyBnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSA6IGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gbGlzdFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Y2FsY3VsYXRlTWVzc2FnZUxpc3RIYXNoKGxpc3QpIHtcblx0XHRyZXR1cm4gXy5tYXAobGlzdCwgKG1lc3NhZ2UpID0+ICcnICsgbWVzc2FnZS5oYXNoICsgJ18nICsgbWVzc2FnZS50aHJlYWRzTGVuKCkgKyAnXycgKyBtZXNzYWdlLmZsYWdIYXNoKCkpLmpvaW4oXG5cdFx0XHQnfCdcblx0XHQpO1xuXHR9XG5cblx0c2V0TWVzc2FnZUxpc3QoZGF0YSwgY2FjaGVkKSB7XG5cdFx0aWYgKFxuXHRcdFx0ZGF0YSAmJlxuXHRcdFx0ZGF0YS5SZXN1bHQgJiZcblx0XHRcdCdDb2xsZWN0aW9uL01lc3NhZ2VDb2xsZWN0aW9uJyA9PT0gZGF0YS5SZXN1bHRbJ0BPYmplY3QnXSAmJlxuXHRcdFx0ZGF0YS5SZXN1bHRbJ0BDb2xsZWN0aW9uJ10gJiZcblx0XHRcdGlzQXJyYXkoZGF0YS5SZXN1bHRbJ0BDb2xsZWN0aW9uJ10pXG5cdFx0KSB7XG5cdFx0XHRsZXQgbmV3Q291bnQgPSAwLFxuXHRcdFx0XHR1bnJlYWRDb3VudENoYW5nZSA9IGZhbHNlO1xuXG5cdFx0XHRjb25zdCBsaXN0ID0gW10sXG5cdFx0XHRcdHV0YyA9IG1vbWVudE5vd1VuaXgoKSxcblx0XHRcdFx0aUNvdW50ID0gcEludChkYXRhLlJlc3VsdC5NZXNzYWdlUmVzdWx0Q291bnQpLFxuXHRcdFx0XHRpT2Zmc2V0ID0gcEludChkYXRhLlJlc3VsdC5PZmZzZXQpO1xuXG5cdFx0XHRjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGlzTm9ybWFsKGRhdGEuUmVzdWx0LkZvbGRlcikgPyBkYXRhLlJlc3VsdC5Gb2xkZXIgOiAnJyk7XG5cblx0XHRcdGlmIChmb2xkZXIgJiYgIWNhY2hlZCkge1xuXHRcdFx0XHRmb2xkZXIuaW50ZXJ2YWwgPSB1dGM7XG5cblx0XHRcdFx0c2V0Rm9sZGVySGFzaChkYXRhLlJlc3VsdC5Gb2xkZXIsIGRhdGEuUmVzdWx0LkZvbGRlckhhc2gpO1xuXG5cdFx0XHRcdGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5NZXNzYWdlQ291bnQpKSB7XG5cdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudEFsbChkYXRhLlJlc3VsdC5NZXNzYWdlQ291bnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzTm9ybWFsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRpZiAocEludChmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkpICE9PSBwSW50KGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdHVucmVhZENvdW50Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmluaXRVaWROZXh0QW5kTmV3TWVzc2FnZXMoZm9sZGVyLmZ1bGxOYW1lUmF3LCBkYXRhLlJlc3VsdC5VaWROZXh0LCBkYXRhLlJlc3VsdC5OZXdNZXNzYWdlcyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh1bnJlYWRDb3VudENoYW5nZSAmJiBmb2xkZXIpIHtcblx0XHRcdFx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcihmb2xkZXIuZnVsbE5hbWVSYXcpO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmVhY2goZGF0YS5SZXN1bHRbJ0BDb2xsZWN0aW9uJ10sIChqc29uTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRpZiAoanNvbk1lc3NhZ2UgJiYgJ09iamVjdC9NZXNzYWdlJyA9PT0ganNvbk1lc3NhZ2VbJ0BPYmplY3QnXSkge1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlTW9kZWwubmV3SW5zdGFuY2VGcm9tSnNvbihqc29uTWVzc2FnZSk7XG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdGlmIChoYXNOZXdNZXNzYWdlQW5kUmVtb3ZlRnJvbUNhY2hlKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIG1lc3NhZ2UudWlkKSAmJiA1ID49IG5ld0NvdW50KSB7XG5cdFx0XHRcdFx0XHRcdG5ld0NvdW50ICs9IDE7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UubmV3Rm9yQW5pbWF0aW9uKHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmRlbGV0ZWQoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY2FjaGVkKSB7XG5cdFx0XHRcdFx0XHRcdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGUobWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxpc3QucHVzaChtZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0Q291bnQoaUNvdW50KTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2goaXNOb3JtYWwoZGF0YS5SZXN1bHQuU2VhcmNoKSA/IGRhdGEuUmVzdWx0LlNlYXJjaCA6ICcnKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlKHdpbmRvdy5NYXRoLmNlaWwoaU9mZnNldCAvIFNldHRpbmdzU3RvcmUubWVzc2FnZXNQZXJQYWdlKCkgKyAxKSk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKGlzTm9ybWFsKGRhdGEuUmVzdWx0LlRocmVhZFVpZCkgPyBwU3RyaW5nKGRhdGEuUmVzdWx0LlRocmVhZFVpZCkgOiAnJyk7XG5cblx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIoaXNOb3JtYWwoZGF0YS5SZXN1bHQuRm9sZGVyKSA/IGRhdGEuUmVzdWx0LkZvbGRlciA6ICcnKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRTZWFyY2godGhpcy5tZXNzYWdlTGlzdFNlYXJjaCgpKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQodGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRQYWdlKHRoaXMubWVzc2FnZUxpc3RQYWdlKCkpO1xuXG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RGlzYWJsZUF1dG9TZWxlY3QodHJ1ZSk7XG5cblx0XHRcdHRoaXMubWVzc2FnZUxpc3QobGlzdCk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0SXNOb3RDb21wbGV0ZWQoZmFsc2UpO1xuXG5cdFx0XHRjbGVhck5ld01lc3NhZ2VDYWNoZSgpO1xuXG5cdFx0XHRpZiAoZm9sZGVyICYmIChjYWNoZWQgfHwgdW5yZWFkQ291bnRDaGFuZ2UgfHwgU2V0dGluZ3NTdG9yZS51c2VUaHJlYWRzKCkpKSB7XG5cdFx0XHRcdGdldEFwcCgpLmZvbGRlckluZm9ybWF0aW9uKGZvbGRlci5mdWxsTmFtZVJhdywgbGlzdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RDb3VudCgwKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3QoW10pO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhICYmIGRhdGEuRXJyb3JDb2RlID8gZGF0YS5FcnJvckNvZGUgOiBOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2VMaXN0KSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNZXNzYWdlVXNlclN0b3JlKCk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IENhcGEsIE1lc3NhZ2VTZXRBY3Rpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgcEludCwgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBMaW5rcyBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmxldCBGT0xERVJTX0NBQ0hFID0ge30sXG5cdEZPTERFUlNfTkFNRV9DQUNIRSA9IHt9LFxuXHRGT0xERVJTX0hBU0hfQ0FDSEUgPSB7fSxcblx0Rk9MREVSU19VSURfTkVYVF9DQUNIRSA9IHt9LFxuXHRNRVNTQUdFX0ZMQUdTX0NBQ0hFID0ge30sXG5cdE5FV19NRVNTQUdFX0NBQ0hFID0ge30sXG5cdGluYm94Rm9sZGVyTmFtZSA9ICcnO1xuXG5jb25zdCBSRVFVRVNURURfTUVTU0FHRV9DQUNIRSA9IHt9LFxuXHRjYXBhR3JhdmF0YXIgPSBTZXR0aW5ncy5jYXBhKENhcGEuR3JhdmF0YXIpO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoKSB7XG5cdEZPTERFUlNfQ0FDSEUgPSB7fTtcblx0Rk9MREVSU19OQU1FX0NBQ0hFID0ge307XG5cdEZPTERFUlNfSEFTSF9DQUNIRSA9IHt9O1xuXHRGT0xERVJTX1VJRF9ORVhUX0NBQ0hFID0ge307XG5cdE1FU1NBR0VfRkxBR1NfQ0FDSEUgPSB7fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlclBpYyhlbWFpbCwgY2FsbGJhY2spIHtcblx0ZW1haWwgPSB0cmltKGVtYWlsKTtcblx0Y2FsbGJhY2soY2FwYUdyYXZhdGFyICYmICcnICE9PSBlbWFpbCA/IExpbmtzLmF2YXRhckxpbmsoZW1haWwpIDogJycsIGVtYWlsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlS2V5KGZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpIHtcblx0cmV0dXJuIGAke2ZvbGRlckZ1bGxOYW1lUmF3fSMke3VpZH1gO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlcXVlc3RlZE1lc3NhZ2UoZm9sZGVyLCB1aWQpIHtcblx0UkVRVUVTVEVEX01FU1NBR0VfQ0FDSEVbZ2V0TWVzc2FnZUtleShmb2xkZXIsIHVpZCldID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlcXVlc3RlZE1lc3NhZ2UoZm9sZGVyLCB1aWQpIHtcblx0cmV0dXJuIHRydWUgPT09IFJFUVVFU1RFRF9NRVNTQUdFX0NBQ0hFW2dldE1lc3NhZ2VLZXkoZm9sZGVyLCB1aWQpXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE5ld01lc3NhZ2VDYWNoZShmb2xkZXJGdWxsTmFtZVJhdywgdWlkKSB7XG5cdE5FV19NRVNTQUdFX0NBQ0hFW2dldE1lc3NhZ2VLZXkoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCldID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc05ld01lc3NhZ2VBbmRSZW1vdmVGcm9tQ2FjaGUoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCkge1xuXHRpZiAoTkVXX01FU1NBR0VfQ0FDSEVbZ2V0TWVzc2FnZUtleShmb2xkZXJGdWxsTmFtZVJhdywgdWlkKV0pIHtcblx0XHRORVdfTUVTU0FHRV9DQUNIRVtnZXRNZXNzYWdlS2V5KGZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpXSA9IG51bGw7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJOZXdNZXNzYWdlQ2FjaGUoKSB7XG5cdE5FV19NRVNTQUdFX0NBQ0hFID0ge307XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlckluYm94TmFtZSgpIHtcblx0cmV0dXJuICcnID09PSBpbmJveEZvbGRlck5hbWUgPyAnSU5CT1gnIDogaW5ib3hGb2xkZXJOYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJIYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVyRnVsbE5hbWVSYXcoZm9sZGVySGFzaCkge1xuXHRyZXR1cm4gJycgIT09IGZvbGRlckhhc2ggJiYgRk9MREVSU19OQU1FX0NBQ0hFW2ZvbGRlckhhc2hdID8gRk9MREVSU19OQU1FX0NBQ0hFW2ZvbGRlckhhc2hdIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9sZGVyRnVsbE5hbWVSYXcoZm9sZGVySGFzaCwgZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0Rk9MREVSU19OQU1FX0NBQ0hFW2ZvbGRlckhhc2hdID0gZm9sZGVyRnVsbE5hbWVSYXc7XG5cdGlmICgnSU5CT1gnID09PSBmb2xkZXJGdWxsTmFtZVJhdyB8fCAnJyA9PT0gaW5ib3hGb2xkZXJOYW1lKSB7XG5cdFx0aW5ib3hGb2xkZXJOYW1lID0gZm9sZGVyRnVsbE5hbWVSYXc7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJIYXNoKGZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdHJldHVybiAnJyAhPT0gZm9sZGVyRnVsbE5hbWVSYXcgJiYgRk9MREVSU19IQVNIX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA/IEZPTERFUlNfSEFTSF9DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJIYXNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb2xkZXJIYXNoKGZvbGRlckZ1bGxOYW1lUmF3LCBmb2xkZXJIYXNoKSB7XG5cdGlmICgnJyAhPT0gZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHRGT0xERVJTX0hBU0hfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddID0gZm9sZGVySGFzaDtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlclVpZE5leHQoZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0cmV0dXJuICcnICE9PSBmb2xkZXJGdWxsTmFtZVJhdyAmJiBGT0xERVJTX1VJRF9ORVhUX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XVxuXHRcdD8gRk9MREVSU19VSURfTkVYVF9DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd11cblx0XHQ6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHBhcmFtIHtzdHJpbmd9IHVpZE5leHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZvbGRlclVpZE5leHQoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZE5leHQpIHtcblx0Rk9MREVSU19VSURfTkVYVF9DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gPSB1aWROZXh0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHJldHVybnMgez9Gb2xkZXJNb2RlbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlckZyb21DYWNoZUxpc3QoZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0cmV0dXJuICcnICE9PSBmb2xkZXJGdWxsTmFtZVJhdyAmJiBGT0xERVJTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA/IEZPTERFUlNfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEBwYXJhbSB7P0ZvbGRlck1vZGVsfSBmb2xkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZvbGRlclRvQ2FjaGVMaXN0KGZvbGRlckZ1bGxOYW1lUmF3LCBmb2xkZXIpIHtcblx0Rk9MREVSU19DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gPSBmb2xkZXI7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdHNldEZvbGRlclRvQ2FjaGVMaXN0KGZvbGRlckZ1bGxOYW1lUmF3LCBudWxsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUoZm9sZGVyRnVsbE5hbWUsIHVpZCkge1xuXHRyZXR1cm4gTUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV0gJiYgTUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV1bdWlkXVxuXHRcdD8gTUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV1bdWlkXVxuXHRcdDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqIEBwYXJhbSB7QXJyYXl9IGZsYWdzQ2FjaGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUoZm9sZGVyRnVsbE5hbWUsIHVpZCwgZmxhZ3NDYWNoZSkge1xuXHRpZiAoIU1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdKSB7XG5cdFx0TUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV0gPSB7fTtcblx0fVxuXG5cdE1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdW3VpZF0gPSBmbGFnc0NhY2hlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcihmb2xkZXJGdWxsTmFtZSkge1xuXHRNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXSA9IHt9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7KE1lc3NhZ2VNb2RlbHxudWxsKX0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlKSB7XG5cdGlmIChtZXNzYWdlKSB7XG5cdFx0Y29uc3QgdWlkID0gbWVzc2FnZS51aWQsXG5cdFx0XHRmbGFncyA9IGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpO1xuXG5cdFx0aWYgKGZsYWdzICYmIDAgPCBmbGFncy5sZW5ndGgpIHtcblx0XHRcdG1lc3NhZ2UuZmxhZ2dlZCghIWZsYWdzWzFdKTtcblxuXHRcdFx0aWYgKCFtZXNzYWdlLmlzU2ltcGxlTWVzc2FnZSkge1xuXHRcdFx0XHRtZXNzYWdlLnVuc2VlbighIWZsYWdzWzBdKTtcblx0XHRcdFx0bWVzc2FnZS5hbnN3ZXJlZCghIWZsYWdzWzJdKTtcblx0XHRcdFx0bWVzc2FnZS5mb3J3YXJkZWQoISFmbGFnc1szXSk7XG5cdFx0XHRcdG1lc3NhZ2UuaXNSZWFkUmVjZWlwdCghIWZsYWdzWzRdKTtcblx0XHRcdFx0bWVzc2FnZS5kZWxldGVkTWFyayghIWZsYWdzWzVdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoMCA8IG1lc3NhZ2UudGhyZWFkcygpLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdW5zZWVuU3ViVWlkID0gXy5maW5kKG1lc3NhZ2UudGhyZWFkcygpLCAoc1N1YlVpZCkgPT4ge1xuXHRcdFx0XHRpZiAodWlkICE9PSBzU3ViVWlkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViRmxhZ3MgPSBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YkZsYWdzICYmIDAgPCBzdWJGbGFncy5sZW5ndGggJiYgISFzdWJGbGFnc1swXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgZmxhZ2dlZFN1YlVpZCA9IF8uZmluZChtZXNzYWdlLnRocmVhZHMoKSwgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0aWYgKHVpZCAhPT0gc1N1YlVpZCkge1xuXHRcdFx0XHRcdGNvbnN0IHN1YkZsYWdzID0gZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIHNTdWJVaWQpO1xuXHRcdFx0XHRcdHJldHVybiBzdWJGbGFncyAmJiAwIDwgc3ViRmxhZ3MubGVuZ3RoICYmICEhc3ViRmxhZ3NbMV07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdG1lc3NhZ2UuaGFzVW5zZWVuU3ViTWVzc2FnZSh1bnNlZW5TdWJVaWQgJiYgMCA8IHBJbnQodW5zZWVuU3ViVWlkKSk7XG5cdFx0XHRtZXNzYWdlLmhhc0ZsYWdnZWRTdWJNZXNzYWdlKGZsYWdnZWRTdWJVaWQgJiYgMCA8IHBJbnQoZmxhZ2dlZFN1YlVpZCkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KE1lc3NhZ2VNb2RlbHxudWxsKX0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlKG1lc3NhZ2UpIHtcblx0aWYgKG1lc3NhZ2UpIHtcblx0XHRzZXRNZXNzYWdlRmxhZ3NUb0NhY2hlKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIG1lc3NhZ2UudWlkLCBbXG5cdFx0XHRtZXNzYWdlLnVuc2VlbigpLFxuXHRcdFx0bWVzc2FnZS5mbGFnZ2VkKCksXG5cdFx0XHRtZXNzYWdlLmFuc3dlcmVkKCksXG5cdFx0XHRtZXNzYWdlLmZvcndhcmRlZCgpLFxuXHRcdFx0bWVzc2FnZS5pc1JlYWRSZWNlaXB0KCksXG5cdFx0XHRtZXNzYWdlLmRlbGV0ZWRNYXJrKClcblx0XHRdKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqIEBwYXJhbSB7QXJyYXl9IGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeUZvbGRlckFuZFVpZChmb2xkZXIsIHVpZCwgZmxhZ3MpIHtcblx0aWYgKGlzQXJyYXkoZmxhZ3MpICYmIDAgPCBmbGFncy5sZW5ndGgpIHtcblx0XHRzZXRNZXNzYWdlRmxhZ3NUb0NhY2hlKGZvbGRlciwgdWlkLCBmbGFncyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKiBAcGFyYW0ge251bWJlcn0gc2V0QWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeVNldEFjdGlvbihmb2xkZXIsIHVpZCwgc2V0QWN0aW9uKSB7XG5cdGxldCB1bnJlYWQgPSAwO1xuXHRjb25zdCBmbGFncyA9IGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShmb2xkZXIsIHVpZCk7XG5cblx0aWYgKGlzQXJyYXkoZmxhZ3MpICYmIDAgPCBmbGFncy5sZW5ndGgpIHtcblx0XHRpZiAoZmxhZ3NbMF0pIHtcblx0XHRcdHVucmVhZCA9IDE7XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChzZXRBY3Rpb24pIHtcblx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuOlxuXHRcdFx0XHRmbGFnc1swXSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5VbnNldFNlZW46XG5cdFx0XHRcdGZsYWdzWzBdID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uU2V0RmxhZzpcblx0XHRcdFx0ZmxhZ3NbMV0gPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWc6XG5cdFx0XHRcdGZsYWdzWzFdID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblxuXHRcdHNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUoZm9sZGVyLCB1aWQsIGZsYWdzKTtcblx0fVxuXG5cdHJldHVybiB1bnJlYWQ7XG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBwU3RyaW5nLCBwSW50LCBpc1VuZCwgaXNOb3JtYWwsIHRyaW0sIGVuY29kZVVSSUNvbXBvbmVudCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY29uc3QgUk9PVCA9ICcuLycsXG5cdEhBU0hfUFJFRklYID0gJyMvJyxcblx0U0VSVkVSX1BSRUZJWCA9ICcuLz8nLFxuXHRTVUJfUVVFUllfUFJFRklYID0gJyZxW109Jyxcblx0VkVSU0lPTiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJyksXG5cdFdFQl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViUGF0aCcpIHx8ICcnLFxuXHRWRVJTSU9OX1BSRUZJWCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd3ZWJWZXJzaW9uUGF0aCcpIHx8ICdyYWlubG9vcC92LycgKyBWRVJTSU9OICsgJy8nLFxuXHRTVEFUSUNfUFJFRklYID0gVkVSU0lPTl9QUkVGSVggKyAnc3RhdGljLycsXG5cdEFETUlOX0hPU1RfVVNFID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWRtaW5Ib3N0VXNlJyksXG5cdEFETUlOX1BBVEggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWRtaW5QYXRoJykgfHwgJ2FkbWluJztcblxubGV0IEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlQXV0aFN1ZmZpeCgpIHtcblx0QVVUSF9QUkVGSVggPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXV0aEFjY291bnRIYXNoJykgfHwgJzAnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJRdWVyeVByZWZpeCgpIHtcblx0cmV0dXJuIFNVQl9RVUVSWV9QUkVGSVg7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmc9fSBzdGFydHVwVXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdChzdGFydHVwVXJsID0gJycpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgcFN0cmluZyhzdGFydHVwVXJsKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdEFkbWluKCkge1xuXHRyZXR1cm4gQURNSU5fSE9TVF9VU0UgPyBST09UIDogU0VSVkVSX1BSRUZJWCArIEFETUlOX1BBVEg7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RVc2VyKCkge1xuXHRyZXR1cm4gUk9PVDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UmF3KHR5cGUsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdGN1c3RvbVNwZWNTdWZmaXggPSBpc1VuZChjdXN0b21TcGVjU3VmZml4KSA/IEFVVEhfUFJFRklYIDogY3VzdG9tU3BlY1N1ZmZpeDtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICtcblx0XHQnL1Jhdy8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdGN1c3RvbVNwZWNTdWZmaXggK1xuXHRcdCcvJyArXG5cdFx0dHlwZSArXG5cdFx0Jy8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdGRvd25sb2FkXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50RG93bmxvYWQoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ0Rvd25sb2FkJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXcnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyhkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnVmlld1RodW1ibmFpbCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbihkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnVmlld0FzUGxhaW4nLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50RnJhbWVkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdGcmFtZWRWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmVyUmVxdWVzdCh0eXBlKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy8nICsgdHlwZSArICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnVXBsb2FkJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZENvbnRhY3RzKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnVXBsb2FkQ29udGFjdHMnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkQmFja2dyb3VuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZEJhY2tncm91bmQnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQXBwZW5kJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlKGVtYWlsKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdDaGFuZ2UnKSArIGVuY29kZVVSSUNvbXBvbmVudChlbWFpbCkgKyAnLyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFqYXgoYWRkKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdBamF4JykgKyBhZGQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RIYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVzc2FnZVZpZXdMaW5rKHJlcXVlc3RIYXNoKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRBVVRIX1BSRUZJWCArXG5cdFx0Jy9WaWV3QXNQbGFpbi8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdHJlcXVlc3RIYXNoXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RIYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVzc2FnZURvd25sb2FkTGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Eb3dubG9hZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIHJlcXVlc3RIYXNoXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXZhdGFyTGluayhlbWFpbCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvQXZhdGFyLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljTGluayhoYXNoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvMC9QdWJsaWMvJyArIGhhc2ggKyAnLyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VyQmFja2dyb3VuZChoYXNoKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL1VzZXJCYWNrZ3JvdW5kLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgaGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaHBJbmZvKCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvSW5mbyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBZG1pblxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhbmdMaW5rKGxhbmcsIGlzQWRtaW4pIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0xhbmcvMC8nICsgKGlzQWRtaW4gPyAnQWRtaW4nIDogJ0FwcCcpICsgJy8nICsgd2luZG93LmVuY29kZVVSSShsYW5nKSArICcvJyArIFZFUlNJT04gKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENvbnRhY3RzVmNmKCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL0NvbnRhY3RzVmNmLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENvbnRhY3RzQ3N2KCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL0NvbnRhY3RzQ3N2Lyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB4YXV0aCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsR29vZ2xlKHhhdXRoID0gZmFsc2UpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICtcblx0XHQnU29jaWFsR29vZ2xlJyArXG5cdFx0KCcnICE9PSBBVVRIX1BSRUZJWCA/ICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJyA6ICcnKSArXG5cdFx0KHhhdXRoID8gJyZ4YXV0aD0xJyA6ICcnKVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxUd2l0dGVyKCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICdTb2NpYWxUd2l0dGVyJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEZhY2Vib29rKCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnU29jaWFsRmFjZWJvb2snICsgKCcnICE9PSBBVVRIX1BSRUZJWCA/ICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJyA6ICcnKVxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhdGljUHJlZml4KHBhdGgpIHtcblx0cmV0dXJuIFNUQVRJQ19QUkVGSVggKyBwYXRoO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUNvbnRhY3RQaWMoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2Nzcy9pbWFnZXMvZW1wdHktY29udGFjdC5wbmcnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3VuZChmaWxlTmFtZSkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdzb3VuZHMvJyArIGZpbGVOYW1lKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90aWZpY2F0aW9uTWFpbEljb24oKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2Nzcy9pbWFnZXMvaWNvbS1tZXNzYWdlLW5vdGlmaWNhdGlvbi5wbmcnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlblBncEpzKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdqcy9taW4vb3BlbnBncC5taW4uanMnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlblBncFdvcmtlckpzKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdqcy9taW4vb3BlbnBncC53b3JrZXIubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJQYXRoKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdqcy9taW4vJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWVQcmV2aWV3TGluayh0aGVtZSkge1xuXHRsZXQgcHJlZml4ID0gVkVSU0lPTl9QUkVGSVg7XG5cdGlmICgnQGN1c3RvbScgPT09IHRoZW1lLnN1YnN0cigtNykpIHtcblx0XHR0aGVtZSA9IHRyaW0odGhlbWUuc3Vic3RyaW5nKDAsIHRoZW1lLmxlbmd0aCAtIDcpKTtcblx0XHRwcmVmaXggPSBXRUJfUFJFRklYO1xuXHR9XG5cblx0cmV0dXJuIHByZWZpeCArICd0aGVtZXMvJyArIHdpbmRvdy5lbmNvZGVVUkkodGhlbWUpICsgJy9pbWFnZXMvcHJldmlldy5wbmcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmJveEZvbGRlck5hbWUgPSAnSU5CT1gnXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5ib3goaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnbWFpbGJveC8nICsgaW5ib3hGb2xkZXJOYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2NyZWVuTmFtZSA9ICcnXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3Moc2NyZWVuTmFtZSA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArICdzZXR0aW5ncycgKyAoc2NyZWVuTmFtZSA/ICcvJyArIHNjcmVlbk5hbWUgOiAnJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFib3V0KCkge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnYWJvdXQnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW5OYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRtaW4oc2NyZWVuTmFtZSkge1xuXHRsZXQgcmVzdWx0ID0gSEFTSF9QUkVGSVg7XG5cdHN3aXRjaCAoc2NyZWVuTmFtZSkge1xuXHRcdGNhc2UgJ0FkbWluRG9tYWlucyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2RvbWFpbnMnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnQWRtaW5TZWN1cml0eSc6XG5cdFx0XHRyZXN1bHQgKz0gJ3NlY3VyaXR5Jztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluTGljZW5zaW5nJzpcblx0XHRcdHJlc3VsdCArPSAnbGljZW5zaW5nJztcblx0XHRcdGJyZWFrO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuICogQHBhcmFtIHtudW1iZXI9fSBwYWdlID0gMVxuICogQHBhcmFtIHtzdHJpbmc9fSBzZWFyY2ggPSAnJ1xuICogQHBhcmFtIHtzdHJpbmc9fSB0aHJlYWRVaWQgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxCb3goZm9sZGVyLCBwYWdlID0gMSwgc2VhcmNoID0gJycsIHRocmVhZFVpZCA9ICcnKSB7XG5cdHBhZ2UgPSBpc05vcm1hbChwYWdlKSA/IHBJbnQocGFnZSkgOiAxO1xuXHRzZWFyY2ggPSBwU3RyaW5nKHNlYXJjaCk7XG5cblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYICsgJ21haWxib3gvJztcblxuXHRpZiAoJycgIT09IGZvbGRlcikge1xuXHRcdGNvbnN0IHJlc3VsdFRocmVhZFVpZCA9IHBJbnQodGhyZWFkVWlkKTtcblx0XHRyZXN1bHQgKz0gd2luZG93LmVuY29kZVVSSShmb2xkZXIpICsgKDAgPCByZXN1bHRUaHJlYWRVaWQgPyAnficgKyByZXN1bHRUaHJlYWRVaWQgOiAnJyk7XG5cdH1cblxuXHRpZiAoMSA8IHBhZ2UpIHtcblx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWy9dKyQvLCAnJyk7XG5cdFx0cmVzdWx0ICs9ICcvcCcgKyBwYWdlO1xuXHR9XG5cblx0aWYgKCcnICE9PSBzZWFyY2gpIHtcblx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWy9dKyQvLCAnJyk7XG5cdFx0cmVzdWx0ICs9ICcvJyArIHdpbmRvdy5lbmNvZGVVUkkoc2VhcmNoKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcblxuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNBcnJheSwgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7XG5cdENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VULFxuXHRERUZBVUxUX0FKQVhfVElNRU9VVCxcblx0U0VBUkNIX0FKQVhfVElNRU9VVCxcblx0U0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCxcblx0U0VORF9NRVNTQUdFX0FKQVhfVElNRU9VVFxufSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuaW1wb3J0IHtcblx0Z2V0Rm9sZGVySGFzaCxcblx0Z2V0Rm9sZGVySW5ib3hOYW1lLFxuXHRnZXRGb2xkZXJVaWROZXh0LFxuXHRnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0LFxuXHRnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVcbn0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IHsgc3ViUXVlcnlQcmVmaXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0ICogYXMgQmFzZTY0IGZyb20gJ0NvbW1vbi9CYXNlNjQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgQWJzdHJhY3RBamF4UmVtb3RlIH0gZnJvbSAnUmVtb3RlL0Fic3RyYWN0QWpheCc7XG5cbmNsYXNzIFJlbW90ZVVzZXJBamF4IGV4dGVuZHMgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGZvbGRlcnMoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdGb2xkZXJzJyxcblx0XHRcdHtcblx0XHRcdFx0J1NlbnRGb2xkZXInOiBTZXR0aW5ncy5zZXR0aW5nc0dldCgnU2VudEZvbGRlcicpLFxuXHRcdFx0XHQnRHJhZnRGb2xkZXInOiBTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJhZnRGb2xkZXInKSxcblx0XHRcdFx0J1NwYW1Gb2xkZXInOiBTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3BhbUZvbGRlcicpLFxuXHRcdFx0XHQnVHJhc2hGb2xkZXInOiBTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHJhc2hGb2xkZXInKSxcblx0XHRcdFx0J0FyY2hpdmVGb2xkZXInOiBTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXJjaGl2ZUZvbGRlcicpXG5cdFx0XHR9LFxuXHRcdFx0bnVsbCxcblx0XHRcdCcnLFxuXHRcdFx0WydGb2xkZXJzJ11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbWFpbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0xvZ2luXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICogQHBhcmFtIHtib29sZWFufSBiU2lnbk1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0xhbmd1YWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0FkZGl0aW9uYWxDb2RlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJBZGRpdGlvbmFsQ29kZVNpZ25NZVxuXHQgKi9cblx0bG9naW4oZkNhbGxiYWNrLCBzRW1haWwsIHNMb2dpbiwgc1Bhc3N3b3JkLCBiU2lnbk1lLCBzTGFuZ3VhZ2UsIHNBZGRpdGlvbmFsQ29kZSwgYkFkZGl0aW9uYWxDb2RlU2lnbk1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdMb2dpbicsIHtcblx0XHRcdCdFbWFpbCc6IHNFbWFpbCxcblx0XHRcdCdMb2dpbic6IHNMb2dpbixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZCxcblx0XHRcdCdMYW5ndWFnZSc6IHNMYW5ndWFnZSB8fCAnJyxcblx0XHRcdCdBZGRpdGlvbmFsQ29kZSc6IHNBZGRpdGlvbmFsQ29kZSB8fCAnJyxcblx0XHRcdCdBZGRpdGlvbmFsQ29kZVNpZ25NZSc6IGJBZGRpdGlvbmFsQ29kZVNpZ25NZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWduTWUnOiBiU2lnbk1lID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Z2V0VHdvRmFjdG9yKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnR2V0VHdvRmFjdG9ySW5mbycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGNyZWF0ZVR3b0ZhY3RvcihmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NyZWF0ZVR3b0ZhY3RvclNlY3JldCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGNsZWFyVHdvRmFjdG9yKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ2xlYXJUd29GYWN0b3JJbmZvJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0c2hvd1R3b0ZhY3RvclNlY3JldChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1Nob3dUd29GYWN0b3JTZWNyZXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ29kZVxuXHQgKi9cblx0dGVzdFR3b0ZhY3RvcihmQ2FsbGJhY2ssIHNDb2RlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdUZXN0VHdvRmFjdG9ySW5mbycsIHtcblx0XHRcdCdDb2RlJzogc0NvZGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkVuYWJsZVxuXHQgKi9cblx0ZW5hYmxlVHdvRmFjdG9yKGZDYWxsYmFjaywgYkVuYWJsZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRW5hYmxlVHdvRmFjdG9yJywge1xuXHRcdFx0J0VuYWJsZSc6IGJFbmFibGUgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjbGVhclR3b0ZhY3RvckluZm8oZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDbGVhclR3b0ZhY3RvckluZm8nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjb250YWN0c1N5bmMoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDb250YWN0c1N5bmMnLCBudWxsLCBDT05UQUNUU19TWU5DX0FKQVhfVElNRU9VVCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJFbmFibGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVcmxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVc2VyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICovXG5cdHNhdmVDb250YWN0c1N5bmNEYXRhKGZDYWxsYmFjaywgYkVuYWJsZSwgc1VybCwgc1VzZXIsIHNQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU2F2ZUNvbnRhY3RzU3luY0RhdGEnLCB7XG5cdFx0XHQnRW5hYmxlJzogYkVuYWJsZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdVcmwnOiBzVXJsLFxuXHRcdFx0J1VzZXInOiBzVXNlcixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbWFpbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Bhc3N3b3JkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJOZXdcblx0ICovXG5cdGFjY291bnRTZXR1cChmQ2FsbGJhY2ssIHNFbWFpbCwgc1Bhc3N3b3JkLCBiTmV3ID0gdHJ1ZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWNjb3VudFNldHVwJywge1xuXHRcdFx0J0VtYWlsJzogc0VtYWlsLFxuXHRcdFx0J1Bhc3N3b3JkJzogc1Bhc3N3b3JkLFxuXHRcdFx0J05ldyc6IGJOZXcgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRW1haWxUb0RlbGV0ZVxuXHQgKi9cblx0YWNjb3VudERlbGV0ZShmQ2FsbGJhY2ssIHNFbWFpbFRvRGVsZXRlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBY2NvdW50RGVsZXRlJywge1xuXHRcdFx0J0VtYWlsVG9EZWxldGUnOiBzRW1haWxUb0RlbGV0ZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtBcnJheX0gYUFjY291bnRzXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFJZGVudGl0aWVzXG5cdCAqL1xuXHRhY2NvdW50c0FuZElkZW50aXRpZXNTb3J0T3JkZXIoZkNhbGxiYWNrLCBhQWNjb3VudHMsIGFJZGVudGl0aWVzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBY2NvdW50c0FuZElkZW50aXRpZXNTb3J0T3JkZXInLCB7XG5cdFx0XHQnQWNjb3VudHMnOiBhQWNjb3VudHMsXG5cdFx0XHQnSWRlbnRpdGllcyc6IGFJZGVudGl0aWVzXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRW1haWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVwbHlUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0JjY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1NpZ25hdHVyZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTaWduYXR1cmVJbnNlcnRCZWZvcmVcblx0ICovXG5cdGlkZW50aXR5VXBkYXRlKGZDYWxsYmFjaywgc0lkLCBzRW1haWwsIHNOYW1lLCBzUmVwbHlUbywgc0JjYywgc1NpZ25hdHVyZSwgYlNpZ25hdHVyZUluc2VydEJlZm9yZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnSWRlbnRpdHlVcGRhdGUnLCB7XG5cdFx0XHQnSWQnOiBzSWQsXG5cdFx0XHQnRW1haWwnOiBzRW1haWwsXG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J1JlcGx5VG8nOiBzUmVwbHlUbyxcblx0XHRcdCdCY2MnOiBzQmNjLFxuXHRcdFx0J1NpZ25hdHVyZSc6IHNTaWduYXR1cmUsXG5cdFx0XHQnU2lnbmF0dXJlSW5zZXJ0QmVmb3JlJzogYlNpZ25hdHVyZUluc2VydEJlZm9yZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJZFRvRGVsZXRlXG5cdCAqL1xuXHRpZGVudGl0eURlbGV0ZShmQ2FsbGJhY2ssIHNJZFRvRGVsZXRlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdJZGVudGl0eURlbGV0ZScsIHtcblx0XHRcdCdJZFRvRGVsZXRlJzogc0lkVG9EZWxldGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRhY2NvdW50c0FuZElkZW50aXRpZXMoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBY2NvdW50c0FuZElkZW50aXRpZXMnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRhY2NvdW50c0NvdW50cyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FjY291bnRzQ291bnRzJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge0FycmF5fSBmaWx0ZXJzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSByYXdcblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jhd0lzQWN0aXZlXG5cdCAqL1xuXHRmaWx0ZXJzU2F2ZShmQ2FsbGJhY2ssIGZpbHRlcnMsIHJhdywgaXNSYXdJc0FjdGl2ZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRmlsdGVyc1NhdmUnLCB7XG5cdFx0XHQnUmF3JzogcmF3LFxuXHRcdFx0J1Jhd0lzQWN0aXZlJzogYm9vbFRvQWpheChpc1Jhd0lzQWN0aXZlKSxcblx0XHRcdCdGaWx0ZXJzJzogXy5tYXAoZmlsdGVycywgKGl0ZW0pID0+IGl0ZW0udG9Kc29uKCkpXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0ZmlsdGVyc0dldChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZpbHRlcnMnLCB7fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0dGVtcGxhdGVzKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVGVtcGxhdGVzJywge30pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lEXG5cdCAqL1xuXHR0ZW1wbGF0ZUdldEJ5SWQoZkNhbGxiYWNrLCBzSUQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1RlbXBsYXRlR2V0QnlJRCcsIHtcblx0XHRcdCdJRCc6IHNJRFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lEXG5cdCAqL1xuXHR0ZW1wbGF0ZURlbGV0ZShmQ2FsbGJhY2ssIHNJRCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVGVtcGxhdGVEZWxldGUnLCB7XG5cdFx0XHQnSWRUb0RlbGV0ZSc6IHNJRFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lEXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0JvZHlcblx0ICovXG5cdHRlbXBsYXRlU2V0dXAoZkNhbGxiYWNrLCBzSUQsIHNOYW1lLCBzQm9keSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVGVtcGxhdGVTZXR1cCcsIHtcblx0XHRcdCdJRCc6IHNJRCxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cdFx0XHQnQm9keSc6IHNCb2R5XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtudW1iZXI9fSBpT2Zmc2V0ID0gMFxuXHQgKiBAcGFyYW0ge251bWJlcj19IGlMaW1pdCA9IDIwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc1NlYXJjaCA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc1RocmVhZFVpZCA9ICcnXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJTaWxlbnQgPSBmYWxzZVxuXHQgKi9cblx0bWVzc2FnZUxpc3QoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGlPZmZzZXQgPSAwLCBpTGltaXQgPSAyMCwgc1NlYXJjaCA9ICcnLCBzVGhyZWFkVWlkID0gJycsIGJTaWxlbnQgPSBmYWxzZSkge1xuXHRcdHNGb2xkZXJGdWxsTmFtZVJhdyA9IHBTdHJpbmcoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblxuXHRcdGNvbnN0IGZvbGRlckhhc2ggPSBnZXRGb2xkZXJIYXNoKHNGb2xkZXJGdWxsTmFtZVJhdyksXG5cdFx0XHR1c2VUaHJlYWRzID0gQXBwU3RvcmUudGhyZWFkc0FsbG93ZWQoKSAmJiBTZXR0aW5nc1N0b3JlLnVzZVRocmVhZHMoKSxcblx0XHRcdGluYm94VWlkTmV4dCA9IGdldEZvbGRlckluYm94TmFtZSgpID09PSBzRm9sZGVyRnVsbE5hbWVSYXcgPyBnZXRGb2xkZXJVaWROZXh0KHNGb2xkZXJGdWxsTmFtZVJhdykgOiAnJztcblxuXHRcdGlmICgnJyAhPT0gZm9sZGVySGFzaCAmJiAoJycgPT09IHNTZWFyY2ggfHwgLTEgPT09IHNTZWFyY2guaW5kZXhPZignaXM6JykpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0XHQnTWVzc2FnZUxpc3QnLFxuXHRcdFx0XHR7fSxcblx0XHRcdFx0JycgPT09IHNTZWFyY2ggPyBERUZBVUxUX0FKQVhfVElNRU9VVCA6IFNFQVJDSF9BSkFYX1RJTUVPVVQsXG5cdFx0XHRcdCdNZXNzYWdlTGlzdC8nICtcblx0XHRcdFx0XHRzdWJRdWVyeVByZWZpeCgpICtcblx0XHRcdFx0XHQnLycgK1xuXHRcdFx0XHRcdEJhc2U2NC51cmxzYWZlX2VuY29kZShcblx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0c0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0XHRpT2Zmc2V0LFxuXHRcdFx0XHRcdFx0XHRpTGltaXQsXG5cdFx0XHRcdFx0XHRcdHNTZWFyY2gsXG5cdFx0XHRcdFx0XHRcdEFwcFN0b3JlLnByb2plY3RIYXNoKCksXG5cdFx0XHRcdFx0XHRcdGZvbGRlckhhc2gsXG5cdFx0XHRcdFx0XHRcdGluYm94VWlkTmV4dCxcblx0XHRcdFx0XHRcdFx0dXNlVGhyZWFkcyA/ICcxJyA6ICcwJyxcblx0XHRcdFx0XHRcdFx0dXNlVGhyZWFkcyA/IHNUaHJlYWRVaWQgOiAnJ1xuXHRcdFx0XHRcdFx0XS5qb2luKFN0cmluZy5mcm9tQ2hhckNvZGUoMCkpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0YlNpbGVudCA/IFtdIDogWydNZXNzYWdlTGlzdCddXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J01lc3NhZ2VMaXN0Jyxcblx0XHRcdHtcblx0XHRcdFx0Rm9sZGVyOiBzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdE9mZnNldDogaU9mZnNldCxcblx0XHRcdFx0TGltaXQ6IGlMaW1pdCxcblx0XHRcdFx0U2VhcmNoOiBzU2VhcmNoLFxuXHRcdFx0XHRVaWROZXh0OiBpbmJveFVpZE5leHQsXG5cdFx0XHRcdFVzZVRocmVhZHM6IHVzZVRocmVhZHMgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFRocmVhZFVpZDogdXNlVGhyZWFkcyA/IHNUaHJlYWRVaWQgOiAnJ1xuXHRcdFx0fSxcblx0XHRcdCcnID09PSBzU2VhcmNoID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBTRUFSQ0hfQUpBWF9USU1FT1VULFxuXHRcdFx0JycsXG5cdFx0XHRiU2lsZW50ID8gW10gOiBbJ01lc3NhZ2VMaXN0J11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtBcnJheX0gYURvd25sb2Fkc1xuXHQgKi9cblx0bWVzc2FnZVVwbG9hZEF0dGFjaG1lbnRzKGZDYWxsYmFjaywgYURvd25sb2Fkcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnTWVzc2FnZVVwbG9hZEF0dGFjaG1lbnRzJyxcblx0XHRcdHtcblx0XHRcdFx0J0F0dGFjaG1lbnRzJzogYURvd25sb2Fkc1xuXHRcdFx0fSxcblx0XHRcdDk5OTAwMFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpVWlkXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0bWVzc2FnZShmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgaVVpZCkge1xuXHRcdHNGb2xkZXJGdWxsTmFtZVJhdyA9IHBTdHJpbmcoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRpVWlkID0gcEludChpVWlkKTtcblxuXHRcdGlmIChnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdykgJiYgMCA8IGlVaWQpIHtcblx0XHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRcdGZDYWxsYmFjayxcblx0XHRcdFx0J01lc3NhZ2UnLFxuXHRcdFx0XHR7fSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0J01lc3NhZ2UvJyArXG5cdFx0XHRcdFx0c3ViUXVlcnlQcmVmaXgoKSArXG5cdFx0XHRcdFx0Jy8nICtcblx0XHRcdFx0XHRCYXNlNjQudXJsc2FmZV9lbmNvZGUoXG5cdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdFx0aVVpZCxcblx0XHRcdFx0XHRcdFx0QXBwU3RvcmUucHJvamVjdEhhc2goKSxcblx0XHRcdFx0XHRcdFx0QXBwU3RvcmUudGhyZWFkc0FsbG93ZWQoKSAmJiBTZXR0aW5nc1N0b3JlLnVzZVRocmVhZHMoKSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRcdFx0XS5qb2luKFN0cmluZy5mcm9tQ2hhckNvZGUoMCkpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0WydNZXNzYWdlJ11cblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFFeHRlcm5hbHNcblx0ICovXG5cdGNvbXBvc2VVcGxvYWRFeHRlcm5hbHMoZkNhbGxiYWNrLCBhRXh0ZXJuYWxzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdDb21wb3NlVXBsb2FkRXh0ZXJuYWxzJyxcblx0XHRcdHtcblx0XHRcdFx0J0V4dGVybmFscyc6IGFFeHRlcm5hbHNcblx0XHRcdH0sXG5cdFx0XHQ5OTkwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVcmxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBY2Nlc3NUb2tlblxuXHQgKi9cblx0Y29tcG9zZVVwbG9hZERyaXZlKGZDYWxsYmFjaywgc1VybCwgc0FjY2Vzc1Rva2VuKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdDb21wb3NlVXBsb2FkRHJpdmUnLFxuXHRcdFx0e1xuXHRcdFx0XHQnQWNjZXNzVG9rZW4nOiBzQWNjZXNzVG9rZW4sXG5cdFx0XHRcdCdVcmwnOiBzVXJsXG5cdFx0XHR9LFxuXHRcdFx0OTk5MDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcblx0ICogQHBhcmFtIHtBcnJheT19IGxpc3QgPSBbXVxuXHQgKi9cblx0Zm9sZGVySW5mb3JtYXRpb24oZkNhbGxiYWNrLCBmb2xkZXIsIGxpc3QgPSBbXSkge1xuXHRcdGxldCByZXF1ZXN0ID0gdHJ1ZTtcblx0XHRjb25zdCB1aWRzID0gW107XG5cblx0XHRpZiAoaXNBcnJheShsaXN0KSAmJiAwIDwgbGlzdC5sZW5ndGgpIHtcblx0XHRcdHJlcXVlc3QgPSBmYWxzZTtcblx0XHRcdF8uZWFjaChsaXN0LCAobWVzc2FnZUxpc3RJdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2VMaXN0SXRlbS5mb2xkZXJGdWxsTmFtZVJhdywgbWVzc2FnZUxpc3RJdGVtLnVpZCkpIHtcblx0XHRcdFx0XHR1aWRzLnB1c2gobWVzc2FnZUxpc3RJdGVtLnVpZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoMCA8IG1lc3NhZ2VMaXN0SXRlbS50aHJlYWRzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKG1lc3NhZ2VMaXN0SXRlbS50aHJlYWRzKCksICh1aWQpID0+IHtcblx0XHRcdFx0XHRcdGlmICghZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2VMaXN0SXRlbS5mb2xkZXJGdWxsTmFtZVJhdywgdWlkKSkge1xuXHRcdFx0XHRcdFx0XHR1aWRzLnB1c2godWlkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmICgwIDwgdWlkcy5sZW5ndGgpIHtcblx0XHRcdFx0cmVxdWVzdCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3QpIHtcblx0XHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRm9sZGVySW5mb3JtYXRpb24nLCB7XG5cdFx0XHRcdCdGb2xkZXInOiBmb2xkZXIsXG5cdFx0XHRcdCdGbGFnc1VpZHMnOiBpc0FycmF5KHVpZHMpID8gdWlkcy5qb2luKCcsJykgOiAnJyxcblx0XHRcdFx0J1VpZE5leHQnOiBnZXRGb2xkZXJJbmJveE5hbWUoKSA9PT0gZm9sZGVyID8gZ2V0Rm9sZGVyVWlkTmV4dChmb2xkZXIpIDogJydcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoU2V0dGluZ3NTdG9yZS51c2VUaHJlYWRzKCkpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZEZsYWdzQ3VycmVudE1lc3NhZ2VMaXN0QW5kTWVzc2FnZUZyb21DYWNoZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFGb2xkZXJzXG5cdCAqL1xuXHRmb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KGZDYWxsYmFjaywgYUZvbGRlcnMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZvbGRlckluZm9ybWF0aW9uTXVsdGlwbHknLCB7XG5cdFx0XHQnRm9sZGVycyc6IGFGb2xkZXJzXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0bG9nb3V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTG9nb3V0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlNldEZsYWdnZWRcblx0ICovXG5cdG1lc3NhZ2VTZXRGbGFnZ2VkKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkcywgYlNldEZsYWdnZWQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ01lc3NhZ2VTZXRGbGFnZ2VkJywge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdCdVaWRzJzogYVVpZHMuam9pbignLCcpLFxuXHRcdFx0J1NldEFjdGlvbic6IGJTZXRGbGFnZ2VkID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlNldFNlZW5cblx0ICovXG5cdG1lc3NhZ2VTZXRTZWVuKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkcywgYlNldFNlZW4pIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ01lc3NhZ2VTZXRTZWVuJywge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdCdVaWRzJzogYVVpZHMuam9pbignLCcpLFxuXHRcdFx0J1NldEFjdGlvbic6IGJTZXRTZWVuID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlNldFNlZW5cblx0ICogQHBhcmFtIHtBcnJheX0gYVRocmVhZFVpZHMgPSBudWxsXG5cdCAqL1xuXHRtZXNzYWdlU2V0U2VlblRvQWxsKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBiU2V0U2VlbiwgYVRocmVhZFVpZHMgPSBudWxsKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdNZXNzYWdlU2V0U2VlblRvQWxsJywge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdCdTZXRBY3Rpb24nOiBiU2V0U2VlbiA/ICcxJyA6ICcwJyxcblx0XHRcdCdUaHJlYWRVaWRzJzogYVRocmVhZFVpZHMgPyBhVGhyZWFkVWlkcy5qb2luKCcsJykgOiAnJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJZGVudGl0eUlEXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZUZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lc3NhZ2VVaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNEcmFmdEZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ2Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHNCY2Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXBseVRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU3ViamVjdFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJUZXh0SXNIdG1sXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGV4dFxuXHQgKiBAcGFyYW0ge0FycmF5fSBhQXR0YWNobWVudHNcblx0ICogQHBhcmFtIHsoQXJyYXl8bnVsbCl9IGFEcmFmdEluZm9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJblJlcGx5VG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZWZlcmVuY2VzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYk1hcmtBc0ltcG9ydGFudFxuXHQgKi9cblx0c2F2ZU1lc3NhZ2UoXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdHNJZGVudGl0eUlELFxuXHRcdHNNZXNzYWdlRm9sZGVyLFxuXHRcdHNNZXNzYWdlVWlkLFxuXHRcdHNEcmFmdEZvbGRlcixcblx0XHRzVG8sXG5cdFx0c0NjLFxuXHRcdHNCY2MsXG5cdFx0c1JlcGx5VG8sXG5cdFx0c1N1YmplY3QsXG5cdFx0YlRleHRJc0h0bWwsXG5cdFx0c1RleHQsXG5cdFx0YUF0dGFjaG1lbnRzLFxuXHRcdGFEcmFmdEluZm8sXG5cdFx0c0luUmVwbHlUbyxcblx0XHRzUmVmZXJlbmNlcyxcblx0XHRiTWFya0FzSW1wb3J0YW50XG5cdCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnU2F2ZU1lc3NhZ2UnLFxuXHRcdFx0e1xuXHRcdFx0XHQnSWRlbnRpdHlJRCc6IHNJZGVudGl0eUlELFxuXHRcdFx0XHQnTWVzc2FnZUZvbGRlcic6IHNNZXNzYWdlRm9sZGVyLFxuXHRcdFx0XHQnTWVzc2FnZVVpZCc6IHNNZXNzYWdlVWlkLFxuXHRcdFx0XHQnRHJhZnRGb2xkZXInOiBzRHJhZnRGb2xkZXIsXG5cdFx0XHRcdCdUbyc6IHNUbyxcblx0XHRcdFx0J0NjJzogc0NjLFxuXHRcdFx0XHQnQmNjJzogc0JjYyxcblx0XHRcdFx0J1JlcGx5VG8nOiBzUmVwbHlUbyxcblx0XHRcdFx0J1N1YmplY3QnOiBzU3ViamVjdCxcblx0XHRcdFx0J1RleHRJc0h0bWwnOiBiVGV4dElzSHRtbCA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J1RleHQnOiBzVGV4dCxcblx0XHRcdFx0J0RyYWZ0SW5mbyc6IGFEcmFmdEluZm8sXG5cdFx0XHRcdCdJblJlcGx5VG8nOiBzSW5SZXBseVRvLFxuXHRcdFx0XHQnUmVmZXJlbmNlcyc6IHNSZWZlcmVuY2VzLFxuXHRcdFx0XHQnTWFya0FzSW1wb3J0YW50JzogYk1hcmtBc0ltcG9ydGFudCA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J0F0dGFjaG1lbnRzJzogYUF0dGFjaG1lbnRzXG5cdFx0XHR9LFxuXHRcdFx0U0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lc3NhZ2VGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNNZXNzYWdlVWlkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVhZFJlY2VpcHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTdWJqZWN0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGV4dFxuXHQgKi9cblx0c2VuZFJlYWRSZWNlaXB0TWVzc2FnZShmQ2FsbGJhY2ssIHNNZXNzYWdlRm9sZGVyLCBzTWVzc2FnZVVpZCwgc1JlYWRSZWNlaXB0LCBzU3ViamVjdCwgc1RleHQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NlbmRSZWFkUmVjZWlwdE1lc3NhZ2UnLCB7XG5cdFx0XHQnTWVzc2FnZUZvbGRlcic6IHNNZXNzYWdlRm9sZGVyLFxuXHRcdFx0J01lc3NhZ2VVaWQnOiBzTWVzc2FnZVVpZCxcblx0XHRcdCdSZWFkUmVjZWlwdCc6IHNSZWFkUmVjZWlwdCxcblx0XHRcdCdTdWJqZWN0Jzogc1N1YmplY3QsXG5cdFx0XHQnVGV4dCc6IHNUZXh0XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lkZW50aXR5SURcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNNZXNzYWdlRm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZVVpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1NlbnRGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0NjXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQmNjXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVwbHlUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1N1YmplY3Rcblx0ICogQHBhcmFtIHtib29sZWFufSBiVGV4dElzSHRtbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RleHRcblx0ICogQHBhcmFtIHtBcnJheX0gYUF0dGFjaG1lbnRzXG5cdCAqIEBwYXJhbSB7KEFycmF5fG51bGwpfSBhRHJhZnRJbmZvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSW5SZXBseVRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVmZXJlbmNlc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJSZXF1ZXN0RHNuXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlJlcXVlc3RSZWFkUmVjZWlwdFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJNYXJrQXNJbXBvcnRhbnRcblx0ICovXG5cdHNlbmRNZXNzYWdlKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzSWRlbnRpdHlJRCxcblx0XHRzTWVzc2FnZUZvbGRlcixcblx0XHRzTWVzc2FnZVVpZCxcblx0XHRzU2VudEZvbGRlcixcblx0XHRzVG8sXG5cdFx0c0NjLFxuXHRcdHNCY2MsXG5cdFx0c1JlcGx5VG8sXG5cdFx0c1N1YmplY3QsXG5cdFx0YlRleHRJc0h0bWwsXG5cdFx0c1RleHQsXG5cdFx0YUF0dGFjaG1lbnRzLFxuXHRcdGFEcmFmdEluZm8sXG5cdFx0c0luUmVwbHlUbyxcblx0XHRzUmVmZXJlbmNlcyxcblx0XHRiUmVxdWVzdERzbixcblx0XHRiUmVxdWVzdFJlYWRSZWNlaXB0LFxuXHRcdGJNYXJrQXNJbXBvcnRhbnRcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdTZW5kTWVzc2FnZScsXG5cdFx0XHR7XG5cdFx0XHRcdCdJZGVudGl0eUlEJzogc0lkZW50aXR5SUQsXG5cdFx0XHRcdCdNZXNzYWdlRm9sZGVyJzogc01lc3NhZ2VGb2xkZXIsXG5cdFx0XHRcdCdNZXNzYWdlVWlkJzogc01lc3NhZ2VVaWQsXG5cdFx0XHRcdCdTZW50Rm9sZGVyJzogc1NlbnRGb2xkZXIsXG5cdFx0XHRcdCdUbyc6IHNUbyxcblx0XHRcdFx0J0NjJzogc0NjLFxuXHRcdFx0XHQnQmNjJzogc0JjYyxcblx0XHRcdFx0J1JlcGx5VG8nOiBzUmVwbHlUbyxcblx0XHRcdFx0J1N1YmplY3QnOiBzU3ViamVjdCxcblx0XHRcdFx0J1RleHRJc0h0bWwnOiBiVGV4dElzSHRtbCA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J1RleHQnOiBzVGV4dCxcblx0XHRcdFx0J0RyYWZ0SW5mbyc6IGFEcmFmdEluZm8sXG5cdFx0XHRcdCdJblJlcGx5VG8nOiBzSW5SZXBseVRvLFxuXHRcdFx0XHQnUmVmZXJlbmNlcyc6IHNSZWZlcmVuY2VzLFxuXHRcdFx0XHQnRHNuJzogYlJlcXVlc3REc24gPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdSZWFkUmVjZWlwdFJlcXVlc3QnOiBiUmVxdWVzdFJlYWRSZWNlaXB0ID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnTWFya0FzSW1wb3J0YW50JzogYk1hcmtBc0ltcG9ydGFudCA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J0F0dGFjaG1lbnRzJzogYUF0dGFjaG1lbnRzXG5cdFx0XHR9LFxuXHRcdFx0U0VORF9NRVNTQUdFX0FKQVhfVElNRU9VVFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb0RhdGFcblx0ICovXG5cdHNhdmVTeXN0ZW1Gb2xkZXJzKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1N5c3RlbUZvbGRlcnNVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb0RhdGFcblx0ICovXG5cdHNhdmVTZXR0aW5ncyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTZXR0aW5nc1VwZGF0ZScsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSB2YWx1ZUZuXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmblxuXHQgKi9cblx0c2F2ZVNldHRpbmdzSGVscGVyKGtleSwgdmFsdWVGbiwgZm4pIHtcblx0XHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLnNhdmVTZXR0aW5ncyhmbiB8fCBudWxsLCB7XG5cdFx0XHRcdFtrZXldOiB2YWx1ZUZuID8gdmFsdWVGbih2YWx1ZSkgOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmV2UGFzc3dvcmRcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1Bhc3N3b3JkXG5cdCAqL1xuXHRjaGFuZ2VQYXNzd29yZChmQ2FsbGJhY2ssIHByZXZQYXNzd29yZCwgbmV3UGFzc3dvcmQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NoYW5nZVBhc3N3b3JkJywge1xuXHRcdFx0J1ByZXZQYXNzd29yZCc6IHByZXZQYXNzd29yZCxcblx0XHRcdCdOZXdQYXNzd29yZCc6IG5ld1Bhc3N3b3JkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqL1xuXHRmb2xkZXJDbGVhcihmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRm9sZGVyQ2xlYXInLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlN1YnNjcmliZVxuXHQgKi9cblx0Zm9sZGVyU2V0U3Vic2NyaWJlKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBiU3Vic2NyaWJlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGb2xkZXJTdWJzY3JpYmUnLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0J1N1YnNjcmliZSc6IGJTdWJzY3JpYmUgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2hlY2thYmxlXG5cdCAqL1xuXHRmb2xkZXJTZXRDaGVja2FibGUoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGJDaGVja2FibGUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZvbGRlckNoZWNrYWJsZScsIHtcblx0XHRcdCdGb2xkZXInOiBzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnQ2hlY2thYmxlJzogYkNoZWNrYWJsZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb0ZvbGRlclxuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkc1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNMZWFybmluZ1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiTWFya0FzUmVhZFxuXHQgKi9cblx0bWVzc2FnZXNNb3ZlKGZDYWxsYmFjaywgc0ZvbGRlciwgc1RvRm9sZGVyLCBhVWlkcywgc0xlYXJuaW5nLCBiTWFya0FzUmVhZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnTWVzc2FnZU1vdmUnLFxuXHRcdFx0e1xuXHRcdFx0XHQnRnJvbUZvbGRlcic6IHNGb2xkZXIsXG5cdFx0XHRcdCdUb0ZvbGRlcic6IHNUb0ZvbGRlcixcblx0XHRcdFx0J1VpZHMnOiBhVWlkcy5qb2luKCcsJyksXG5cdFx0XHRcdCdNYXJrQXNSZWFkJzogYk1hcmtBc1JlYWQgPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdMZWFybmluZyc6IHNMZWFybmluZyB8fCAnJ1xuXHRcdFx0fSxcblx0XHRcdG51bGwsXG5cdFx0XHQnJyxcblx0XHRcdFsnTWVzc2FnZUxpc3QnXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RvRm9sZGVyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRzXG5cdCAqL1xuXHRtZXNzYWdlc0NvcHkoZkNhbGxiYWNrLCBzRm9sZGVyLCBzVG9Gb2xkZXIsIGFVaWRzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdNZXNzYWdlQ29weScsIHtcblx0XHRcdCdGcm9tRm9sZGVyJzogc0ZvbGRlcixcblx0XHRcdCdUb0ZvbGRlcic6IHNUb0ZvbGRlcixcblx0XHRcdCdVaWRzJzogYVVpZHMuam9pbignLCcpXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlclxuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkc1xuXHQgKi9cblx0bWVzc2FnZXNEZWxldGUoZkNhbGxiYWNrLCBzRm9sZGVyLCBhVWlkcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnTWVzc2FnZURlbGV0ZScsXG5cdFx0XHR7XG5cdFx0XHRcdCdGb2xkZXInOiBzRm9sZGVyLFxuXHRcdFx0XHQnVWlkcyc6IGFVaWRzLmpvaW4oJywnKVxuXHRcdFx0fSxcblx0XHRcdG51bGwsXG5cdFx0XHQnJyxcblx0XHRcdFsnTWVzc2FnZUxpc3QnXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YXBwRGVsYXlTdGFydChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FwcERlbGF5U3RhcnQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRxdW90YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1F1b3RhJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge251bWJlcn0gaU9mZnNldFxuXHQgKiBAcGFyYW0ge251bWJlcn0gaUxpbWl0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2VhcmNoXG5cdCAqL1xuXHRjb250YWN0cyhmQ2FsbGJhY2ssIGlPZmZzZXQsIGlMaW1pdCwgc1NlYXJjaCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnQ29udGFjdHMnLFxuXHRcdFx0e1xuXHRcdFx0XHQnT2Zmc2V0JzogaU9mZnNldCxcblx0XHRcdFx0J0xpbWl0JzogaUxpbWl0LFxuXHRcdFx0XHQnU2VhcmNoJzogc1NlYXJjaFxuXHRcdFx0fSxcblx0XHRcdG51bGwsXG5cdFx0XHQnJyxcblx0XHRcdFsnQ29udGFjdHMnXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcXVlc3RVaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVaWRcblx0ICogQHBhcmFtIHtBcnJheX0gYVByb3BlcnRpZXNcblx0ICovXG5cdGNvbnRhY3RTYXZlKGZDYWxsYmFjaywgc1JlcXVlc3RVaWQsIHNVaWQsIGFQcm9wZXJ0aWVzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDb250YWN0U2F2ZScsIHtcblx0XHRcdCdSZXF1ZXN0VWlkJzogc1JlcXVlc3RVaWQsXG5cdFx0XHQnVWlkJzogdHJpbShzVWlkKSxcblx0XHRcdCdQcm9wZXJ0aWVzJzogYVByb3BlcnRpZXNcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRzXG5cdCAqL1xuXHRjb250YWN0c0RlbGV0ZShmQ2FsbGJhY2ssIGFVaWRzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDb250YWN0c0RlbGV0ZScsIHtcblx0XHRcdCdVaWRzJzogYVVpZHMuam9pbignLCcpXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1F1ZXJ5XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpUGFnZVxuXHQgKi9cblx0c3VnZ2VzdGlvbnMoZkNhbGxiYWNrLCBzUXVlcnksIGlQYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdTdWdnZXN0aW9ucycsXG5cdFx0XHR7XG5cdFx0XHRcdCdRdWVyeSc6IHNRdWVyeSxcblx0XHRcdFx0J1BhZ2UnOiBpUGFnZVxuXHRcdFx0fSxcblx0XHRcdG51bGwsXG5cdFx0XHQnJyxcblx0XHRcdFsnU3VnZ2VzdGlvbnMnXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y2xlYXJVc2VyQmFja2dyb3VuZChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NsZWFyVXNlckJhY2tncm91bmQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRmYWNlYm9va1VzZXIoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxGYWNlYm9va1VzZXJJbmZvcm1hdGlvbicpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGZhY2Vib29rRGlzY29ubmVjdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbEZhY2Vib29rRGlzY29ubmVjdCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHR3aXR0ZXJVc2VyKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsVHdpdHRlclVzZXJJbmZvcm1hdGlvbicpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHR3aXR0ZXJEaXNjb25uZWN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsVHdpdHRlckRpc2Nvbm5lY3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRnb29nbGVVc2VyKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsR29vZ2xlVXNlckluZm9ybWF0aW9uJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Z29vZ2xlRGlzY29ubmVjdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbEdvb2dsZURpc2Nvbm5lY3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRzb2NpYWxVc2VycyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbFVzZXJzJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFJlbW90ZVVzZXJBamF4KCk7XG4iLCJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL3NsaWNlXCI7XG5pbXBvcnQgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL3JldmVyc2VcIjtcbmltcG9ydCBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2VcIjtcbmltcG9ydCBfT2JqZWN0JGtleXMgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2tleXNcIjtcbmltcG9ydCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvaW5zdGFuY2UvZm9yLWVhY2hcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eSwgZGVjb3JhdG9ycywgZGVzY3JpcHRvciwgY29udGV4dCkge1xuICB2YXIgX2NvbnRleHQsIF9jb250ZXh0MiwgX2NvbnRleHQzO1xuXG4gIHZhciBkZXNjID0ge307XG5cbiAgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRrZXlzKGRlc2NyaXB0b3IpKS5jYWxsKF9jb250ZXh0LCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVzY1trZXldID0gZGVzY3JpcHRvcltrZXldO1xuICB9KTtcblxuICBkZXNjLmVudW1lcmFibGUgPSAhIWRlc2MuZW51bWVyYWJsZTtcbiAgZGVzYy5jb25maWd1cmFibGUgPSAhIWRlc2MuY29uZmlndXJhYmxlO1xuXG4gIGlmICgndmFsdWUnIGluIGRlc2MgfHwgZGVzYy5pbml0aWFsaXplcikge1xuICAgIGRlc2Mud3JpdGFibGUgPSB0cnVlO1xuICB9XG5cbiAgZGVzYyA9IF9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MiA9IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KGRlY29yYXRvcnMpLmNhbGwoZGVjb3JhdG9ycykpLmNhbGwoX2NvbnRleHQzKSkuY2FsbChfY29udGV4dDIsIGZ1bmN0aW9uIChkZXNjLCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHksIGRlc2MpIHx8IGRlc2M7XG4gIH0sIGRlc2MpO1xuXG4gIGlmIChjb250ZXh0ICYmIGRlc2MuaW5pdGlhbGl6ZXIgIT09IHZvaWQgMCkge1xuICAgIGRlc2MudmFsdWUgPSBkZXNjLmluaXRpYWxpemVyID8gZGVzYy5pbml0aWFsaXplci5jYWxsKGNvbnRleHQpIDogdm9pZCAwO1xuICAgIGRlc2MuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoZGVzYy5pbml0aWFsaXplciA9PT0gdm9pZCAwKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBkZXNjKTtcblxuICAgIGRlc2MgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRlc2M7XG59IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cua2V5OyIsIi8qKlxuICogQHJldHVybnMge0FwcFVzZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHAoKSB7XG5cdHJldHVybiByZXF1aXJlKCdBcHAvVXNlcicpLmRlZmF1bHQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBQbHVnaW5zIGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuY29uc3QgU1VCUyA9IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICogQHBhcmFtIHtPYmplY3Q9fSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWIobmFtZSwgZnVuYywgY29udGV4dCkge1xuXHRpZiAoaXNPYmplY3QobmFtZSkpIHtcblx0XHRjb250ZXh0ID0gZnVuYyB8fCBudWxsO1xuXHRcdGZ1bmMgPSBudWxsO1xuXG5cdFx0Xy5lYWNoKG5hbWUsIChzdWJGdW5jLCBzdWJOYW1lKSA9PiB7XG5cdFx0XHRzdWIoc3ViTmFtZSwgc3ViRnVuYywgY29udGV4dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGlzVW5kKFNVQlNbbmFtZV0pKSB7XG5cdFx0XHRTVUJTW25hbWVdID0gW107XG5cdFx0fVxuXG5cdFx0U1VCU1tuYW1lXS5wdXNoKFtmdW5jLCBjb250ZXh0XSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtBcnJheT19IGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YihuYW1lLCBhcmdzKSB7XG5cdFBsdWdpbnMucnVuSG9vaygncmwtcHViJywgW25hbWUsIGFyZ3NdKTtcblxuXHRpZiAoIWlzVW5kKFNVQlNbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNVQlNbbmFtZV0sIChpdGVtcykgPT4ge1xuXHRcdFx0aWYgKGl0ZW1zWzBdKSB7XG5cdFx0XHRcdGl0ZW1zWzBdLmFwcGx5KGl0ZW1zWzFdIHx8IG51bGwsIGFyZ3MgfHwgW10pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCJleHBvcnQgY29uc3QgTUVTU0FHRVNfUEVSX1BBR0UgPSAyMDtcblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyA9IFsxMCwgMjAsIDMwLCA1MCwgMTAwXTtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1BFUl9QQUdFID0gNTA7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FKQVhfVElNRU9VVCA9IDMwMDAwO1xuXG5leHBvcnQgY29uc3QgU0VBUkNIX0FKQVhfVElNRU9VVCA9IDMwMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFTkRfTUVTU0FHRV9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTQVZFX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgQ09OVEFDVFNfU1lOQ19BSkFYX1RJTUVPVVQgPSAyMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBVTlVTRURfT1BUSU9OX1ZBTFVFID0gJ19fVU5VU0VfXyc7XG5cbmV4cG9ydCBjb25zdCBDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUgPSAncmxjc2MnO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1BPUlQgPSAxNDM7XG5cbmV4cG9ydCBjb25zdCBJTUFQX0RFRkFVTFRfU0VDVVJFX1BPUlQgPSA5OTM7XG5cbmV4cG9ydCBjb25zdCBTTVRQX0RFRkFVTFRfUE9SVCA9IDI1O1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gNDY1O1xuXG5leHBvcnQgY29uc3QgU0lFVkVfREVGQVVMVF9QT1JUID0gNDE5MDtcblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQk9EWV9DQUNIRV9MSU1JVCA9IDE1O1xuXG5leHBvcnQgY29uc3QgQUpBWF9FUlJPUl9MSU1JVCA9IDc7XG5cbmV4cG9ydCBjb25zdCBUT0tFTl9FUlJPUl9MSU1JVCA9IDEwO1xuXG5leHBvcnQgY29uc3QgUkFJTkxPT1BfVFJJQUxfS0VZID0gJ1JBSU5MT09QLVRSSUFMLUtFWSc7XG5cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMgPVxuXHQnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDNEFBQUF1Q0FZQUFBQlh1U3MzQUFBSEhrbEVRVlJvUTdWWlcwOGJWeENlWFJ1d0liVEdYSXdOdEJCYXFqd2dWVWlSOGxEbGJ6YTlxZTFEcFZaOWFOUS8wS3BQZWFKSzA3U3BjdUVlQ0VtVUFPYm0yMWJmckw5bE9OamV4U1lyV2ZidW5qMzd6WGRtdnBrejlvSWdDS1REMFdnMHhQZDk0VERQODNRMHp2V2E1MHZ6a2xTcmRhblZhbnFmNC9EODRHQkdyK0YrT3AzUzhmcW9KeExPZG5aZ1R2c08vblloZW5IQStVQzdDV0YxdVh3a2I5KytsZFBUVXdWZXJWYlZxRlFxcFI4WVBqUTBKQ01qSTVMTkRpam9SZ1AzUFFWdTUrNUVvcjJYR0xnN0lWNEdrSWRISi9MbXpSczVPRGlJd05icmRSME8wR0NjcTRYejRlRmhtWnljbFA3K3REUWFJaWsvQkc1WEtRbjRTd0czekpUTFpYbjkrclVjbEk4VUhENVlWb0RETjhiU3pYaE9Od0w0OGZGeEdSNGVpbHpGWlQxdUZSSUI1eVQ4QnFDZG5SM1ozZDBWUDlVbjZYUmF3WUpwZ2dWclpCdjM4TUU0WEt0VUtuTHQyalVwbFVveTFQUi9sM1U3VDZzVlNBUWNnTUFrajhQRFE5bmUzcGFqb3lNUkw3emVLc1laV0hnV1lER212NzgvbW1kd2NGQSttSmxTZ3ppSERXckVScnNqRVhEWGVnVGkxdFpXK0RMeEkyYnhJcnFGTllUWHlEeUNGd2VNQUhDd2I4ZTRSblROdU9zcWUzdDdzcmEyMXBURDBLY3Q2NjZFOFhsY1p5enc5L1JVVVhLNW5LNW9VaW5VUUk2VFEzY3luTy92Nzh2cTZxcktYQ053bFRpSkpweU5HYzNuWkhwNnVxVjJkd3JRV09DdFpCREFWMVpXd3NRazdmMHdpUW41a2ZmYkF1LzAvS1dCWXpJQzErWHVrZkd4MFJHWm1wcEtsQzJ0SVYwQmg0YURjWlc3SGhrZkg4dXJMTFpMN1QycGlodmxrTU5uejU2RmlhZEh4aWNMNDFJc0ZwTjQxYmt4c1l4YlJkRm85andCOEtkUG4xNEo4S25TcEJRS2hRczYzblBtYkNWUmNCVUFSMkxxMVZWbXBrc3lNVEZ4QVhqY0VzUXliaWVnRVNpb25qeDVvc0NaT2VOZTFPNCtFaENBWDdiUVNnUWN4UkhUTWdBZ2N6NSsvRGlzL2hMNHVIVTMvQjRZR05BU0dISUt4dUVxbDBrK2wwNUFlSUFGMXZQbno1VnhGRm1kRGxhSnJNdFpJVEplU3NYQ09UbE11bkt4akx0TVlPS05qUTE1OGVKRnVBdUtrVU9iNXNFd2dmZjE5U2tKVUJWa1RoWlViblhacnRDS0JRNmdibldJa2pacHluZTNlakFXb0duQTdJY3o2aXJ2QkxnYk9NaWNDTTZUa3hQeC9MQWtiWGZnV2NzYXp1RTJrRlJzS0Q1WitDaXFEdW1LbmNwWnZpZVdjUzZkRFZEOHhpWUNOZmxwSmR3Y2R3Sk9mOWFpckxtVlE3RFB6TXhJWVdMc1hHWG9WcUx0NWswTTNLM0pVVlBEWmRiV056c0NwNDhUUEZkdmRuWldVejMybkRoYTdiSjYza2dBSlB6U2RSa3M5L0tmOXhNSkFRMWdxMk5wYVVteTJZejR6YXI0blFDM3hiOTlBUXdDY0d6TEFBd3VoRzhZaVd2Y09LdHMrcjRHT2U1bk1obTVlZk9tOWxVQTNFM3ZTWkpSckt2RTBmblB2Ly9KeTVjdm81Y1RISVBRYlNqaE9vcXE2OWV2UzE5ZjZseERLSzQrc1ZoaWdaUHRLSnFiclFlcXhkNStXUjQrZktncWdUMGsyWFgzbmhpUGdFVFdYRmhZa0Z6dVBaMnlWcTFHVFNPWHBFNDcvVmpnTm5ENG00R0c3L0xoc1R4NjlFaXdENFZyMk13SUl4Z2JBSDE4Zkt4MXlmejh2RW9nTnZHdFduQ3VoTFphOVVUQXJlVldGc0h5L2IvK1ZyYmRsN0U1UkVNUUQyakRvVWJCeXR5Ky9ablU2NEdrVTJIenlKTGhrdFUxY0x2OG5BUmdrWVMyZDNhakFnd0c4cVUyb0xtRFo5MkNNYU9qbzdLNHVDaVpnYkRXYVJXZ25aaFB4TGhyTVVDdnI2OXJpd0taazFMSEY3WHFyV0FPOWhKeEg2b3pOemNuQ3gvUHF6dFpnOW1mNlNRTXNjQ3RtMkM1a2U0QkdNbEhXVFVwMzYwMzZBSmFqRFZyRk16QnJoaFdzbFFzU3JGWWlPcVZwTXJpTllJZ3FGUnEyajNGQWIvemZmVDZ6dXhGWHhzTnpzM05UWG4xNmxXNGdZaVc5NncxRnllZEYrODN4Ry8yRk5HQ1JwVTROamFtTXNuK09aOXhFNVJYcWRhRGRQcGliNlJXQ3p1d0tGOVJ4cUkyQVZOUUJ3UVlKb0swd2RCZWpucXRFaWtQM3BmUDUxWGpVVEVTbDEyRnFKRUt4c0VvckFSWURENDRPTlRlSUQ3WXBzRW5yUnZRZldBSTJlOFdmRGFUVVNJd0owaUJDbUZPdE9VQUh2Vk1QcC9UUHd2WUZWWUZJdVA4bCtEQmd3ZGFhMk1pcXdhMEdnWXdmZU1sdG92YkRmaDZjMXZJZ01ZY2xpU3NLdjRJV0ZyNlZESHh2bGR2QkFIKzFzQStjbmw1V1lPUG1tcjlpcisxbDlJMENnejB5amhYamZKSjBKUk9ubWV6V2JsMTY1YXlyLzVmcXdjQk5yN0lmaGpNcUtjdkVTU000ZVJjQ2FzUTNiRE5PYm1LUExkR1VHcFpzTjI0Y1VOTEJtOXphenU0ZCsrZTZxcE5CRmFUdVVTMjZVNWRwdVIxQ3h5QTdKOWRkck1ScWx6NHB3TExZYXd5bVBkKysvMlBBRHQydWdjR3dxOWdDQ2RoUTk2QzZ4V3dhNmoxY2V1cStJMEVoVzBpOE1BSVZKZmVMM2QvRFZEOEVLaTEyUDYvMlMyalYvRWNjVkI1NE8vZWp6LzlIR0Nwb0JCTXRhNXJYTVhMdTUzRDFYQXdqaFh3dnZ2K2g0QkFYVmU0Yk91M08zQ2h4RjA4TGlaRkczZmVsMTk5RzlDSDNmTHlxdjI0TmNCNDRNUmhwZEs3ODhVM0NweUt3c0N3NTkweG1mU3B6c0J0MEZxYzN1ZDN2dFppZ3hXY1ZaQ2tsVnBTaU4wdzNxNUUvaDlUR01JVXVBMytFUUFBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX1RSQU5TUF9QSUMgPVxuXHQnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFJVzJOa0FBSUFBQW9BQWdnQTlHa0FBQUFBU1VWT1JLNUNZSUk9JztcblxuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMgPVxuXHQnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQUpjRWhaY3dBQURzUUFBQTdFQVpVckRoc0FBQUFOU1VSQlZCaFhZemg4K1BCL0FBZmZBMG5OUHVDTEFBQUFBRWxGVGtTdVFtQ0MnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgaW5Gb2N1cyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBLZXlTdGF0ZSwgRXZlbnRLZXlDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7ICR3aW4sIGtleVNjb3BlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGJEaXNhYmVDbG9zZU9uRXNjID0gZmFsc2U7XG5cdHNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Ob25lO1xuXHRzQ3VycmVudEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblxuXHR2aWV3TW9kZWxWaXNpYmlsaXR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdG1vZGFsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHR2aWV3TW9kZWxOYW1lID0gJyc7XG5cdHZpZXdNb2RlbE5hbWVzID0gW107XG5cdHZpZXdNb2RlbERvbSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0c3RvcmVBbmRTZXRLZXlTY29wZSgpIHtcblx0XHR0aGlzLnNDdXJyZW50S2V5U2NvcGUgPSBrZXlTY29wZSgpO1xuXHRcdGtleVNjb3BlKHRoaXMuc0RlZmF1bHRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZXN0b3JlS2V5U2NvcGUoKSB7XG5cdFx0a2V5U2NvcGUodGhpcy5zQ3VycmVudEtleVNjb3BlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHJlZ2lzdGVyUG9wdXBLZXlEb3duKCkge1xuXHRcdCR3aW4ub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdGlmICghdGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyAmJiBFdmVudEtleUNvZGUuRXNjID09PSBldmVudC5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkJhY2tzcGFjZSA9PT0gZXZlbnQua2V5Q29kZSAmJiAhaW5Gb2N1cygpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHR9XG5cblx0Y2FuY2VsQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblx0Y2xvc2VDb21tYW5kKCkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxufVxuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFNvY2lhbFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5nb29nbGUgPSB7fTtcblx0XHR0aGlzLnR3aXR0ZXIgPSB7fTtcblx0XHR0aGlzLmZhY2Vib29rID0ge307XG5cdFx0dGhpcy5kcm9wYm94ID0ge307XG5cblx0XHQvLyBHb29nbGVcblx0XHR0aGlzLmdvb2dsZS5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZ29vZ2xlLmNsaWVudFNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZ29vZ2xlLmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmdvb2dsZS5sb2dnaW5lZCA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLmdvb2dsZS51c2VyTmFtZSgpKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmNhcGEgPSB7fTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZ29vZ2xlLnJlcXVpcmUgPSB7fTtcblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHR0aGlzLmdvb2dsZS5lbmFibGVkKCkgJiYgKHRoaXMuZ29vZ2xlLmNhcGEuYXV0aCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCkgfHwgdGhpcy5nb29nbGUuY2FwYS5kcml2ZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlLmFwaUtleVNldHRpbmdzID0ga28uY29tcHV0ZWQoKCkgPT4gdGhpcy5nb29nbGUuZW5hYmxlZCgpICYmIHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSk7XG5cblx0XHQvLyBGYWNlYm9va1xuXHRcdHRoaXMuZmFjZWJvb2suZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwSUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZmFjZWJvb2subG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmFjZWJvb2sudXNlck5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLnN1cHBvcnRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5sb2dnaW5lZCA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLmZhY2Vib29rLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gVHdpdHRlclxuXHRcdHRoaXMudHdpdHRlci5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyS2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyU2VjcmV0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d2l0dGVyLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3aXR0ZXIudXNlck5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudHdpdHRlci5sb2dnaW5lZCA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnR3aXR0ZXIudXNlck5hbWUoKSk7XG5cblx0XHQvLyBEcm9wYm94XG5cdFx0dGhpcy5kcm9wYm94LmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRyb3Bib3guYXBpS2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmdvb2dsZS5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNsaWVudElEKFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUNsaWVudFNlY3JldCcpKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUFwaUtleScpKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGgnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoR21haWwnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5kcml2ZSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbERyaXZlJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEucHJldmlldyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKSk7XG5cblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dGYWNlYm9va1NvY2lhbCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEKFNldHRpbmdzLnNldHRpbmdzR2V0KCdGYWNlYm9va0FwcElEJykpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwU2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdGYWNlYm9va0FwcFNlY3JldCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLnN1cHBvcnRlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdTdXBwb3J0ZWRGYWNlYm9va1NvY2lhbCcpKTtcblxuXHRcdHRoaXMudHdpdHRlci5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKSk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyS2V5ID0ga28ub2JzZXJ2YWJsZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHdpdHRlckNvbnN1bWVyS2V5JykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lclNlY3JldCcpKTtcblxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RHJvcGJveFNvY2lhbCcpKTtcblx0XHR0aGlzLmRyb3Bib3guYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdEcm9wYm94QXBpS2V5JykpO1xuXHR9XG5cblx0YXBwZW5kRHJvcGJveCgpIHtcblx0XHRpZiAoIXdpbmRvdy5Ecm9wYm94ICYmIHRoaXMuZHJvcGJveC5lbmFibGVkKCkgJiYgdGhpcy5kcm9wYm94LmFwaUtleSgpKSB7XG5cdFx0XHRpZiAoIXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJvcGJveGpzJykpIHtcblx0XHRcdFx0Y29uc3Qgc2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdFx0XHRzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuXHRcdFx0XHRzY3JpcHQuc3JjID0gJ2h0dHBzOi8vd3d3LmRyb3Bib3guY29tL3N0YXRpYy9hcGkvMi9kcm9waW5zLmpzJztcblx0XHRcdFx0JChzY3JpcHQpXG5cdFx0XHRcdFx0LmF0dHIoJ2lkJywgJ2Ryb3Bib3hqcycpXG5cdFx0XHRcdFx0LmF0dHIoJ2RhdGEtYXBwLWtleScsIHRoaXMuZHJvcGJveC5hcGlLZXkoKSk7XG5cblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFNvY2lhbFN0b3JlKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBGb2N1c2VkLCBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IGtleVNjb3BlLCBsZWZ0UGFuZWxEaXNhYmxlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlIH0gZnJvbSAnU3RvcmVzL0Fic3RyYWN0QXBwJztcblxuY2xhc3MgQXBwVXNlclN0b3JlIGV4dGVuZHMgQWJzdHJhY3RBcHBTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmN1cnJlbnRBdWRpbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5mb2N1c2VkU3RhdGUgPSBrby5vYnNlcnZhYmxlKEZvY3VzZWQuTm9uZSk7XG5cblx0XHRjb25zdCBpc01vYmlsZSA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKTtcblxuXHRcdHRoaXMuZm9jdXNlZFN0YXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHN3aXRjaCAodmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBGb2N1c2VkLk1lc3NhZ2VMaXN0OlxuXHRcdFx0XHRcdGtleVNjb3BlKEtleVN0YXRlLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0XHRpZiAoaXNNb2JpbGUpIHtcblx0XHRcdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGb2N1c2VkLk1lc3NhZ2VWaWV3OlxuXHRcdFx0XHRcdGtleVNjb3BlKEtleVN0YXRlLk1lc3NhZ2VWaWV3KTtcblx0XHRcdFx0XHRpZiAoaXNNb2JpbGUpIHtcblx0XHRcdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGb2N1c2VkLkZvbGRlckxpc3Q6XG5cdFx0XHRcdFx0a2V5U2NvcGUoS2V5U3RhdGUuRm9sZGVyTGlzdCk7XG5cdFx0XHRcdFx0aWYgKGlzTW9iaWxlKSB7XG5cdFx0XHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5wcm9qZWN0SGFzaCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGhyZWFkc0FsbG93ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29tcG9zZUluRWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29udGFjdHNJc0FsbG93ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNBY3Rpb25zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuZGV2RW1haWwgPSAnJztcblx0XHR0aGlzLmRldlBhc3N3b3JkID0gJyc7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRzdXBlci5wb3B1bGF0ZSgpO1xuXG5cdFx0dGhpcy5wcm9qZWN0SGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnUHJvamVjdEhhc2gnKSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzQXV0b3NhdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNBdXRvc2F2ZScpKTtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMnKSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzSXNBbGxvd2VkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzSXNBbGxvd2VkJykpO1xuXG5cdFx0Y29uc3QgYXR0YWNobWVudHNBY3Rpb25zID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2F0dGFjaG1lbnRzQWN0aW9ucycpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKGlzTm9uRW1wdHlBcnJheShhdHRhY2htZW50c0FjdGlvbnMpID8gYXR0YWNobWVudHNBY3Rpb25zIDogW10pO1xuXG5cdFx0dGhpcy5kZXZFbWFpbCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdEZXZFbWFpbCcpO1xuXHRcdHRoaXMuZGV2UGFzc3dvcmQgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnRGV2UGFzc3dvcmQnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXBwVXNlclN0b3JlKCk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG5Ub05vZGVzIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5jbGFzcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdGRpc3Bvc2FibGUgPSBbXTtcblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcG9zYWJsZS5mb3JFYWNoKChmdW5jVG9EaXNwb3NlKSA9PiB7XG5cdFx0XHRpZiAoZnVuY1RvRGlzcG9zZSAmJiBmdW5jVG9EaXNwb3NlLmRpc3Bvc2UpIHtcblx0XHRcdFx0ZnVuY1RvRGlzcG9zZS5kaXNwb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IENsYXNzT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVJRCA9ICcnXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCBjb21wb25lbnRFeHBvcnRIZWxwZXIgPSAoQ2xhc3NPYmplY3QsIHRlbXBsYXRlSUQgPSAnJykgPT4gKHtcblx0dGVtcGxhdGU6IHRlbXBsYXRlSUQgPyB7IGVsZW1lbnQ6IHRlbXBsYXRlSUQgfSA6ICc8Yj48L2I+Jyxcblx0dmlld01vZGVsOiB7XG5cdFx0Y3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG5cdFx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0XHRwYXJhbXMuZWxlbWVudCA9IG51bGw7XG5cblx0XHRcdGlmIChjb21wb25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uZWxlbWVudCkge1xuXHRcdFx0XHRwYXJhbXMuY29tcG9uZW50ID0gY29tcG9uZW50SW5mbztcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQgPSAkKGNvbXBvbmVudEluZm8uZWxlbWVudCk7XG5cblx0XHRcdFx0aTE4blRvTm9kZXMocGFyYW1zLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGlmICghaXNVbmQocGFyYW1zLmlubGluZSkgJiYga28udW53cmFwKHBhcmFtcy5pbmxpbmUpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgQ2xhc3NPYmplY3QocGFyYW1zKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1FU1NBR0VTX1BFUl9QQUdFLCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IExheW91dCwgRWRpdG9yRGVmYXVsdFR5cGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkaHRtbCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgU2V0dGluZ3NVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmlBdXRvTG9nb3V0VGltZXIgPSAwO1xuXG5cdFx0dGhpcy5sYXlvdXQgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoTGF5b3V0LlNpZGVQcmV2aWV3KVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiBbTGF5b3V0LlNpZGVQcmV2aWV3LCBMYXlvdXQuQm90dG9tUHJldmlldywgTGF5b3V0Lk5vUHJldmlld10gfSk7XG5cblx0XHR0aGlzLmVkaXRvckRlZmF1bHRUeXBlID0ga28ub2JzZXJ2YWJsZShFZGl0b3JEZWZhdWx0VHlwZS5IdG1sKS5leHRlbmQoe1xuXHRcdFx0bGltaXRlZExpc3Q6IFtcblx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuSHRtbCxcblx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuUGxhaW4sXG5cdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWxGb3JjZWQsXG5cdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLlBsYWluRm9yY2VkXG5cdFx0XHRdXG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VzUGVyUGFnZSA9IGtvLm9ic2VydmFibGUoTUVTU0FHRVNfUEVSX1BBR0UpLmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgfSk7XG5cblx0XHR0aGlzLnNob3dJbWFnZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuYWxsb3dEcmFmdEF1dG9zYXZlID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnVzZVRocmVhZHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnJlcGx5U2FtZUZvbGRlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hdXRvTG9nb3V0ID0ga28ub2JzZXJ2YWJsZShNYWdpY3MuVGltZTMwbUluTWluKTtcblxuXHRcdHRoaXMuY29tcHV0ZXJzKCk7XG5cdFx0dGhpcy5zdWJzY3JpYmVycygpO1xuXHR9XG5cblx0Y29tcHV0ZXJzKCkge1xuXHRcdHRoaXMudXNlUHJldmlld1BhbmUgPSBrby5jb21wdXRlZCgoKSA9PiBMYXlvdXQuTm9QcmV2aWV3ICE9PSB0aGlzLmxheW91dCgpKTtcblx0fVxuXG5cdHN1YnNjcmliZXJzKCkge1xuXHRcdHRoaXMubGF5b3V0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1uby1wcmV2aWV3LXBhbmUnLCBMYXlvdXQuTm9QcmV2aWV3ID09PSB2YWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtc2lkZS1wcmV2aWV3LXBhbmUnLCBMYXlvdXQuU2lkZVByZXZpZXcgPT09IHZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1ib3R0b20tcHJldmlldy1wYW5lJywgTGF5b3V0LkJvdHRvbVByZXZpZXcgPT09IHZhbHVlKTtcblx0XHRcdEV2ZW50cy5wdWIoJ2xheW91dCcsIFt2YWx1ZV0pO1xuXHRcdH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5sYXlvdXQocEludChTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGF5b3V0JykpKTtcblx0XHR0aGlzLmVkaXRvckRlZmF1bHRUeXBlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdFZGl0b3JEZWZhdWx0VHlwZScpKTtcblxuXHRcdHRoaXMuYXV0b0xvZ291dChwSW50KFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRvTG9nb3V0JykpKTtcblx0XHR0aGlzLm1lc3NhZ2VzUGVyUGFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTVBQJykpO1xuXG5cdFx0dGhpcy5zaG93SW1hZ2VzKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1Nob3dJbWFnZXMnKSk7XG5cdFx0dGhpcy51c2VDaGVja2JveGVzSW5MaXN0KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZUNoZWNrYm94ZXNJbkxpc3QnKSk7XG5cdFx0dGhpcy5hbGxvd0RyYWZ0QXV0b3NhdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dEcmFmdEF1dG9zYXZlJykpO1xuXHRcdHRoaXMudXNlVGhyZWFkcyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VUaHJlYWRzJykpO1xuXHRcdHRoaXMucmVwbHlTYW1lRm9sZGVyKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1JlcGx5U2FtZUZvbGRlcicpKTtcblxuXHRcdEV2ZW50cy5zdWIoJ3JsLmF1dG8tbG9nb3V0LXJlZnJlc2gnLCAoKSA9PiB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaUF1dG9Mb2dvdXRUaW1lcik7XG5cdFx0XHRpZiAoMCA8IHRoaXMuYXV0b0xvZ291dCgpICYmICFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWNjb3VudFNpZ25NZScpKSB7XG5cdFx0XHRcdHRoaXMuaUF1dG9Mb2dvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dCcpO1xuXHRcdFx0XHR9LCB0aGlzLmF1dG9Mb2dvdXQoKSAqIE1hZ2ljcy5UaW1lMW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYXV0by1sb2dvdXQtcmVmcmVzaCcpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTZXR0aW5nc1VzZXJTdG9yZSgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc0Z1bmMsIGlzQXJyYXksIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY29uc3QgU0lNUExFX0hPT0tTID0ge30sXG5cdFVTRVJfVklFV19NT0RFTFNfSE9PS1MgPSBbXSxcblx0QURNSU5fVklFV19NT0RFTFNfSE9PS1MgPSBbXTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEhvb2sobmFtZSwgY2FsbGJhY2spIHtcblx0aWYgKGlzRnVuYyhjYWxsYmFjaykpIHtcblx0XHRpZiAoIWlzQXJyYXkoU0lNUExFX0hPT0tTW25hbWVdKSkge1xuXHRcdFx0U0lNUExFX0hPT0tTW25hbWVdID0gW107XG5cdFx0fVxuXG5cdFx0U0lNUExFX0hPT0tTW25hbWVdLnB1c2goY2FsbGJhY2spO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzID0gW11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkhvb2sobmFtZSwgYXJncyA9IFtdKSB7XG5cdGlmIChpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRfLmVhY2goU0lNUExFX0hPT0tTW25hbWVdLCAoY2FsbGJhY2spID0+IHtcblx0XHRcdGNhbGxiYWNrKC4uLmFyZ3MpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHs/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpblNldHRpbmdzR2V0KG5hbWUpIHtcblx0cmV0dXJuIFNldHRpbmdzLnNldHRpbmdzR2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdD19IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7P251bWJlcj19IHRpbWVvdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW90ZVJlcXVlc3QoY2FsbGJhY2ssIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCkge1xuXHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXykge1xuXHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ucmVtb3RlKCkuZGVmYXVsdFJlcXVlc3QoY2FsbGJhY2ssICdQbHVnaW4nICsgYWN0aW9uLCBwYXJhbWV0ZXJzLCB0aW1lb3V0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZSkge1xuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4oU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0QURNSU5fVklFV19NT0RFTFNfSE9PS1MucHVzaChbU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGVdKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzKGFkbWluKSB7XG5cdGNvbnN0IEtub2luID0gcmVxdWlyZSgnS25vaW4vS25vaW4nKTtcblx0Xy5lYWNoKGFkbWluID8gQURNSU5fVklFV19NT0RFTFNfSE9PS1MgOiBVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTLCAodmlldykgPT4ge1xuXHRcdEtub2luLmFkZFNldHRpbmdzVmlld01vZGVsKHZpZXdbMF0sIHZpZXdbMV0sIHZpZXdbMl0sIHZpZXdbM10pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luU2VjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHs/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NHZXQocGx1Z2luU2VjdGlvbiwgbmFtZSkge1xuXHRsZXQgcGx1Z2lucyA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdQbHVnaW5zJyk7XG5cdHBsdWdpbnMgPSBwbHVnaW5zICYmICFpc1VuZChwbHVnaW5zW3BsdWdpblNlY3Rpb25dKSA/IHBsdWdpbnNbcGx1Z2luU2VjdGlvbl0gOiBudWxsO1xuXHRyZXR1cm4gcGx1Z2lucyA/IChpc1VuZChwbHVnaW5zW25hbWVdKSA/IG51bGwgOiBwbHVnaW5zW25hbWVdKSA6IG51bGw7XG59XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGxvZywgaXNBcnJheSwgaXNOb25FbXB0eUFycmF5LCBwU3RyaW5nLCBpc1VuZCwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgUGdwVXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jYXBhT3BlblBHUCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5vcGVucGdwID0gbnVsbDtcblxuXHRcdHRoaXMub3BlbnBncGtleXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMub3BlbnBncEtleXJpbmcgPSBudWxsO1xuXG5cdFx0dGhpcy5vcGVucGdwa2V5c1B1YmxpYyA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMub3BlbnBncGtleXMoKSwgKGl0ZW0pID0+ICEhKGl0ZW0gJiYgIWl0ZW0uaXNQcml2YXRlKSkpO1xuXHRcdHRoaXMub3BlbnBncGtleXNQcml2YXRlID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5vcGVucGdwa2V5cygpLCAoaXRlbSkgPT4gISEoaXRlbSAmJiBpdGVtLmlzUHJpdmF0ZSkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAhIXRoaXMub3BlbnBncDtcblx0fVxuXG5cdGZpbmRLZXlCeUhleChrZXlzLCBoYXNoKSB7XG5cdFx0cmV0dXJuIF8uZmluZChrZXlzLCAoaXRlbSkgPT4gaGFzaCAmJiBpdGVtICYmIChoYXNoID09PSBpdGVtLmlkIHx8IC0xIDwgaXRlbS5pZHMuaW5kZXhPZihoYXNoKSkpO1xuXHR9XG5cblx0ZmluZFB1YmxpY0tleUJ5SGV4KGhhc2gpIHtcblx0XHRyZXR1cm4gdGhpcy5maW5kS2V5QnlIZXgodGhpcy5vcGVucGdwa2V5c1B1YmxpYygpLCBoYXNoKTtcblx0fVxuXG5cdGZpbmRQcml2YXRlS2V5QnlIZXgoaGFzaCkge1xuXHRcdHJldHVybiB0aGlzLmZpbmRLZXlCeUhleCh0aGlzLm9wZW5wZ3BrZXlzUHJpdmF0ZSgpLCBoYXNoKTtcblx0fVxuXG5cdGZpbmRQdWJsaWNLZXlzQnlFbWFpbChlbWFpbCkge1xuXHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdF8ubWFwKHRoaXMub3BlbnBncGtleXNQdWJsaWMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBpdGVtICYmIC0xIDwgaXRlbS5lbWFpbHMuaW5kZXhPZihlbWFpbCkgPyBpdGVtIDogbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4ga2V5ID8ga2V5LmdldE5hdGl2ZUtleXMoKSA6IFtudWxsXTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0ZmluZFB1YmxpY0tleXNCeVNpZ25pbmdLZXlJZHMoc2lnbmluZ0tleUlkcykge1xuXHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdF8ubWFwKHNpZ25pbmdLZXlJZHMsIChpZCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGtleSA9IGlkICYmIGlkLnRvSGV4ID8gdGhpcy5maW5kUHVibGljS2V5QnlIZXgoaWQudG9IZXgoKSkgOiBudWxsO1xuXHRcdFx0XHRcdHJldHVybiBrZXkgPyBrZXkuZ2V0TmF0aXZlS2V5cygpIDogW251bGxdO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHRmaW5kUHJpdmF0ZUtleXNCeUVuY3J5cHRpb25LZXlJZHMoZW5jcnlwdGlvbktleUlkcywgcmVjaXBpZW50cywgcmV0dXJuV3JhcEtleXMpIHtcblx0XHRsZXQgcmVzdWx0ID0gaXNBcnJheShlbmNyeXB0aW9uS2V5SWRzKVxuXHRcdFx0PyBfLmNvbXBhY3QoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoZW5jcnlwdGlvbktleUlkcywgKGlkKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGlkICYmIGlkLnRvSGV4ID8gdGhpcy5maW5kUHJpdmF0ZUtleUJ5SGV4KGlkLnRvSGV4KCkpIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleSA/IChyZXR1cm5XcmFwS2V5cyA/IFtrZXldIDoga2V5LmdldE5hdGl2ZUtleXMoKSkgOiBbbnVsbF07XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQgIClcblx0XHRcdDogW107XG5cblx0XHRpZiAoMCA9PT0gcmVzdWx0Lmxlbmd0aCAmJiBpc05vbkVtcHR5QXJyYXkocmVjaXBpZW50cykpIHtcblx0XHRcdHJlc3VsdCA9IF8udW5pcShcblx0XHRcdFx0Xy5jb21wYWN0KFxuXHRcdFx0XHRcdF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdF8ubWFwKHJlY2lwaWVudHMsIChzRW1haWwpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IHNFbWFpbCA/IHRoaXMuZmluZEFsbFByaXZhdGVLZXlzQnlFbWFpbE5vdE5hdGl2ZShzRW1haWwpIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleXNcblx0XHRcdFx0XHRcdFx0XHQ/IHJldHVybldyYXBLZXlzXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGtleXNcblx0XHRcdFx0XHRcdFx0XHRcdDogXy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF8ubWFwKGtleXMsIChrZXkpID0+IGtleS5nZXROYXRpdmVLZXlzKCkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdDogW251bGxdO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHQoa2V5KSA9PiBrZXkuaWRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kUHVibGljS2V5QnlFbWFpbE5vdE5hdGl2ZShlbWFpbCkge1xuXHRcdHJldHVybiBfLmZpbmQodGhpcy5vcGVucGdwa2V5c1B1YmxpYygpLCAoaXRlbSkgPT4gaXRlbSAmJiAtMSA8IGl0ZW0uZW1haWxzLmluZGV4T2YoZW1haWwpKSB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuXHQgKiBAcmV0dXJucyB7P31cblx0ICovXG5cdGZpbmRQcml2YXRlS2V5QnlFbWFpbE5vdE5hdGl2ZShlbWFpbCkge1xuXHRcdHJldHVybiBfLmZpbmQodGhpcy5vcGVucGdwa2V5c1ByaXZhdGUoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpdGVtLmVtYWlscy5pbmRleE9mKGVtYWlsKSkgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kQWxsUHVibGljS2V5c0J5RW1haWxOb3ROYXRpdmUoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5maWx0ZXIodGhpcy5vcGVucGdwa2V5c1B1YmxpYygpLCAoaXRlbSkgPT4gaXRlbSAmJiAtMSA8IGl0ZW0uZW1haWxzLmluZGV4T2YoZW1haWwpKSB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuXHQgKiBAcmV0dXJucyB7P31cblx0ICovXG5cdGZpbmRBbGxQcml2YXRlS2V5c0J5RW1haWxOb3ROYXRpdmUoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5maWx0ZXIodGhpcy5vcGVucGdwa2V5c1ByaXZhdGUoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpdGVtLmVtYWlscy5pbmRleE9mKGVtYWlsKSkgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBwYXNzd29yZFxuXHQgKiBAcmV0dXJucyB7P31cblx0ICovXG5cdGZpbmRQcml2YXRlS2V5QnlFbWFpbChlbWFpbCwgcGFzc3dvcmQpIHtcblx0XHRsZXQgcHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0Y29uc3Qga2V5ID0gXy5maW5kKHRoaXMub3BlbnBncGtleXNQcml2YXRlKCksIChpdGVtKSA9PiBpdGVtICYmIC0xIDwgaXRlbS5lbWFpbHMuaW5kZXhPZihlbWFpbCkpO1xuXG5cdFx0aWYgKGtleSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cHJpdmF0ZUtleSA9IGtleS5nZXROYXRpdmVLZXlzKClbMF0gfHwgbnVsbDtcblx0XHRcdFx0aWYgKHByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRwcml2YXRlS2V5LmRlY3J5cHQocFN0cmluZyhwYXNzd29yZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBwcml2YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gcGFzc3dvcmRcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kU2VsZlByaXZhdGVLZXkocGFzc3dvcmQpIHtcblx0XHRyZXR1cm4gdGhpcy5maW5kUHJpdmF0ZUtleUJ5RW1haWwoQWNjb3VudFN0b3JlLmVtYWlsKCksIHBhc3N3b3JkKTtcblx0fVxuXG5cdGRlY3J5cHRNZXNzYWdlKG1lc3NhZ2UsIHJlY2lwaWVudHMsIGZDYWxsYmFjaykge1xuXHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZ2V0RW5jcnlwdGlvbktleUlkcykge1xuXHRcdFx0Y29uc3QgcHJpdmF0ZUtleXMgPSB0aGlzLmZpbmRQcml2YXRlS2V5c0J5RW5jcnlwdGlvbktleUlkcyhtZXNzYWdlLmdldEVuY3J5cHRpb25LZXlJZHMoKSwgcmVjaXBpZW50cywgdHJ1ZSk7XG5cdFx0XHRpZiAocHJpdmF0ZUtleXMgJiYgMCA8IHByaXZhdGVLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9NZXNzYWdlT3BlblBncCcpLCBbXG5cdFx0XHRcdFx0KGRlY3J5cHRlZEtleSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRlY3J5cHRlZEtleSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmRlY3J5cHQoZGVjcnlwdGVkS2V5KS50aGVuKFxuXHRcdFx0XHRcdFx0XHRcdChkZWNyeXB0ZWRNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGVjcnlwdGVkTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5ID0gdGhpcy5maW5kUHJpdmF0ZUtleUJ5SGV4KGRlY3J5cHRlZEtleS5wcmltYXJ5S2V5LmtleWlkLnRvSGV4KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudmVyaWZ5TWVzc2FnZShkZWNyeXB0ZWRNZXNzYWdlLCAob1ZhbGlkS2V5LCBhU2lnbmluZ0tleUlkcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZkNhbGxiYWNrKHByaXZhdGVLZXksIGRlY3J5cHRlZE1lc3NhZ2UsIG9WYWxpZEtleSB8fCBudWxsLCBhU2lnbmluZ0tleUlkcyB8fCBudWxsKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmQ2FsbGJhY2socHJpdmF0ZUtleSwgZGVjcnlwdGVkTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZDYWxsYmFjayhwcml2YXRlS2V5LCBkZWNyeXB0ZWRNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGZDYWxsYmFjayhudWxsLCBudWxsKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmQ2FsbGJhY2sobnVsbCwgbnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRwcml2YXRlS2V5c1xuXHRcdFx0XHRdKTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZkNhbGxiYWNrKG51bGwsIG51bGwpO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dmVyaWZ5TWVzc2FnZShtZXNzYWdlLCBmQ2FsbGJhY2spIHtcblx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmdldFNpZ25pbmdLZXlJZHMpIHtcblx0XHRcdGNvbnN0IHNpZ25pbmdLZXlJZHMgPSBtZXNzYWdlLmdldFNpZ25pbmdLZXlJZHMoKTtcblx0XHRcdGlmIChzaWduaW5nS2V5SWRzICYmIDAgPCBzaWduaW5nS2V5SWRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBwdWJsaWNLZXlzID0gdGhpcy5maW5kUHVibGljS2V5c0J5U2lnbmluZ0tleUlkcyhzaWduaW5nS2V5SWRzKTtcblx0XHRcdFx0aWYgKHB1YmxpY0tleXMgJiYgMCA8IHB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG1lc3NhZ2UudmVyaWZ5KHB1YmxpY0tleXMpLFxuXHRcdFx0XHRcdFx0XHR2YWxpZCA9IF8uZmluZChfLmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtdLCAoaXRlbSkgPT4gaXRlbSAmJiBpdGVtLnZhbGlkICYmIGl0ZW0ua2V5aWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAodmFsaWQgJiYgdmFsaWQua2V5aWQgJiYgdmFsaWQua2V5aWQgJiYgdmFsaWQua2V5aWQudG9IZXgpIHtcblx0XHRcdFx0XHRcdFx0ZkNhbGxiYWNrKHRoaXMuZmluZFB1YmxpY0tleUJ5SGV4KHZhbGlkLmtleWlkLnRvSGV4KCkpKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0bG9nKGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZDYWxsYmFjayhudWxsLCBzaWduaW5nS2V5SWRzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZDYWxsYmFjayhudWxsKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb250cm9sc0hlbHBlcihkb20sIHZlckNvbnRyb2wsIHN1Y2Nlc3MsIHRpdGxlLCB0ZXh0KSB7XG5cdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdGRvbVxuXHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2Vycm9yJylcblx0XHRcdFx0LmFkZENsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgdGl0bGUpO1xuXHRcdFx0dmVyQ29udHJvbFxuXHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2Vycm9yJylcblx0XHRcdFx0LmFkZENsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgdGl0bGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkb21cblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmFkZENsYXNzKCdlcnJvcicpXG5cdFx0XHRcdC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcblx0XHRcdHZlckNvbnRyb2xcblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmFkZENsYXNzKCdlcnJvcicpXG5cdFx0XHRcdC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzVW5kKHRleHQpKSB7XG5cdFx0XHRkb20udGV4dCh0cmltKHRleHQpKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZG9tQ29udHJvbEVuY3J5cHRlZENsaWNrSGVscGVyKHN0b3JlLCBkb20sIGFybW9yZWRNZXNzYWdlLCByZWNpcGllbnRzKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0bGV0IG1lc3NhZ2UgPSBudWxsO1xuXHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRpZiAoJHRoaXMuaGFzQ2xhc3MoJ3N1Y2Nlc3MnKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBzdG9yZS5vcGVucGdwLm1lc3NhZ2UucmVhZEFybW9yZWQoYXJtb3JlZE1lc3NhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRsb2coZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZ2V0VGV4dCAmJiBtZXNzYWdlLnZlcmlmeSAmJiBtZXNzYWdlLmRlY3J5cHQpIHtcblx0XHRcdFx0c3RvcmUuZGVjcnlwdE1lc3NhZ2UoXG5cdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRyZWNpcGllbnRzLFxuXHRcdFx0XHRcdCh2YWxpZFByaXZhdGVLZXksIGRlY3J5cHRlZE1lc3NhZ2UsIHZhbGlkUHVibGljS2V5LCBzaWduaW5nS2V5SWRzKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZGVjcnlwdGVkTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodmFsaWRQdWJsaWNLZXkpIHtcblx0XHRcdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihcblx0XHRcdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL0dPT0RfU0lHTkFUVVJFJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQnVVNFUic6IHZhbGlkUHVibGljS2V5LnVzZXIgKyAnICgnICsgdmFsaWRQdWJsaWNLZXkuaWQgKyAnKSdcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjcnlwdGVkTWVzc2FnZS5nZXRUZXh0KClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbGlkUHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGtleUlkcyA9IGlzTm9uRW1wdHlBcnJheShzaWduaW5nS2V5SWRzKSA/IHNpZ25pbmdLZXlJZHMgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0YWRkaXRpb25hbCA9IGtleUlkc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IF8uY29tcGFjdChfLm1hcChrZXlJZHMsIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtLnRvSGV4ID8gaXRlbS50b0hleCgpIDogbnVsbCkpKS5qb2luKCcsICcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogJyc7XG5cblx0XHRcdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihcblx0XHRcdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9VTlZFUklGSVJFRF9TSUdOQVRVUkUnKSArIChhZGRpdGlvbmFsID8gJyAoJyArIGFkZGl0aW9uYWwgKyAnKScgOiAnJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWNyeXB0ZWRNZXNzYWdlLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoZG9tLCAkdGhpcywgZmFsc2UsIGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL0RFQ1JZUFRJT05fRVJST1InKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdH1cblxuXHRzdGF0aWMgZG9tQ29udHJvbFNpZ25lZENsaWNrSGVscGVyKHN0b3JlLCBkb20sIGFybW9yZWRNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0bGV0IG1lc3NhZ2UgPSBudWxsO1xuXHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRpZiAoJHRoaXMuaGFzQ2xhc3MoJ3N1Y2Nlc3MnKSB8fCAkdGhpcy5oYXNDbGFzcygnZXJyb3InKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBzdG9yZS5vcGVucGdwLmNsZWFydGV4dC5yZWFkQXJtb3JlZChhcm1vcmVkTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGxvZyhlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5nZXRUZXh0ICYmIG1lc3NhZ2UudmVyaWZ5KSB7XG5cdFx0XHRcdHN0b3JlLnZlcmlmeU1lc3NhZ2UobWVzc2FnZSwgKHZhbGlkS2V5LCBzaWduaW5nS2V5SWRzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbGlkS2V5KSB7XG5cdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihcblx0XHRcdFx0XHRcdFx0ZG9tLFxuXHRcdFx0XHRcdFx0XHQkdGhpcyxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvR09PRF9TSUdOQVRVUkUnLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1VTRVInOiB2YWxpZEtleS51c2VyICsgJyAoJyArIHZhbGlkS2V5LmlkICsgJyknXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5SWRzID0gaXNOb25FbXB0eUFycmF5KHNpZ25pbmdLZXlJZHMpID8gc2lnbmluZ0tleUlkcyA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWwgPSBrZXlJZHNcblx0XHRcdFx0XHRcdFx0XHQ/IF8uY29tcGFjdChfLm1hcChrZXlJZHMsIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtLnRvSGV4ID8gaXRlbS50b0hleCgpIDogbnVsbCkpKS5qb2luKCcsICcpXG5cdFx0XHRcdFx0XHRcdFx0OiAnJztcblxuXHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoXG5cdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0JHRoaXMsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9VTlZFUklGSVJFRF9TSUdOQVRVUkUnKSArIChhZGRpdGlvbmFsID8gJyAoJyArIGFkZGl0aW9uYWwgKyAnKScgOiAnJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHsqfSBkb21cblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IHJhaW5Mb29wTWVzc2FnZVxuXHQgKi9cblx0aW5pdE1lc3NhZ2VCb2R5Q29udHJvbHMoZG9tLCByYWluTG9vcE1lc3NhZ2UpIHtcblx0XHRpZiAoZG9tICYmICFkb20uaGFzQ2xhc3MoJ2luaXRlZCcpKSB7XG5cdFx0XHRkb20uYWRkQ2xhc3MoJ2luaXRlZCcpO1xuXG5cdFx0XHRjb25zdCBlbmNyeXB0ZWQgPSBkb20uaGFzQ2xhc3MoJ2VuY3J5cHRlZCcpLFxuXHRcdFx0XHRzaWduZWQgPSBkb20uaGFzQ2xhc3MoJ3NpZ25lZCcpLFxuXHRcdFx0XHRyZWNpcGllbnRzID0gcmFpbkxvb3BNZXNzYWdlID8gcmFpbkxvb3BNZXNzYWdlLmdldEVtYWlscyhbJ2Zyb20nLCAndG8nLCAnY2MnXSkgOiBbXTtcblxuXHRcdFx0bGV0IHZlckNvbnRyb2wgPSBudWxsO1xuXG5cdFx0XHRpZiAoZW5jcnlwdGVkIHx8IHNpZ25lZCkge1xuXHRcdFx0XHRjb25zdCBkb21UZXh0ID0gZG9tLnRleHQoKTtcblx0XHRcdFx0ZG9tLmRhdGEoJ29wZW5wZ3Atb3JpZ2luYWwnLCBkb21UZXh0KTtcblxuXHRcdFx0XHRpZiAoZW5jcnlwdGVkKSB7XG5cdFx0XHRcdFx0dmVyQ29udHJvbCA9ICQoJzxkaXYgY2xhc3M9XCJiLW9wZW5wZ3AtY29udHJvbFwiPjxpIGNsYXNzPVwiaWNvbi1sb2NrXCI+PC9pPjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYXR0cigndGl0bGUnLCBpMThuKCdNRVNTQUdFL1BHUF9FTkNSWVBURURfTUVTU0FHRV9ERVNDJykpXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgUGdwVXNlclN0b3JlLmRvbUNvbnRyb2xFbmNyeXB0ZWRDbGlja0hlbHBlcih0aGlzLCBkb20sIGRvbVRleHQsIHJlY2lwaWVudHMpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzaWduZWQpIHtcblx0XHRcdFx0XHR2ZXJDb250cm9sID0gJCgnPGRpdiBjbGFzcz1cImItb3BlbnBncC1jb250cm9sXCI+PGkgY2xhc3M9XCJpY29uLWxvY2tcIj48L2k+PC9kaXY+Jylcblx0XHRcdFx0XHRcdC5hdHRyKCd0aXRsZScsIGkxOG4oJ01FU1NBR0UvUEdQX1NJR05FRF9NRVNTQUdFX0RFU0MnKSlcblx0XHRcdFx0XHRcdC5vbignY2xpY2snLCBQZ3BVc2VyU3RvcmUuZG9tQ29udHJvbFNpZ25lZENsaWNrSGVscGVyKHRoaXMsIGRvbSwgZG9tVGV4dCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZlckNvbnRyb2wpIHtcblx0XHRcdFx0XHRkb20uYmVmb3JlKHZlckNvbnRyb2wpLmJlZm9yZSgnPGRpdj48L2Rpdj4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGdwVXNlclN0b3JlKCk7XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2JpbmQtY29udGV4dCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiKTtcbiAgICAgIH0gcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiLCBjKTtcbiAgICB9IHJldHVybiBOYXRpdmVDb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLm5vVGFyZ2V0R2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIFBST1RPID0gb3B0aW9ucy5wcm90bztcblxuICB2YXIgbmF0aXZlU291cmNlID0gR0xPQkFMID8gZ2xvYmFsIDogU1RBVElDID8gZ2xvYmFsW1RBUkdFVF0gOiAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcblxuICB2YXIgdGFyZ2V0ID0gR0xPQkFMID8gcGF0aCA6IHBhdGhbVEFSR0VUXSB8fCAocGF0aFtUQVJHRVRdID0ge30pO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMubm9UYXJnZXRHZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09PSB0eXBlb2Ygc291cmNlUHJvcGVydHkpIGNvbnRpbnVlO1xuXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgdHlwZW9mIHNvdXJjZVByb3BlcnR5ID09ICdmdW5jdGlvbicpIHJlc3VsdFByb3BlcnR5ID0gYmluZChGdW5jdGlvbi5jYWxsLCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gZGVmYXVsdCBjYXNlXG4gICAgZWxzZSByZXN1bHRQcm9wZXJ0eSA9IHNvdXJjZVByb3BlcnR5O1xuXG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHNvdXJjZVByb3BlcnR5ICYmIHNvdXJjZVByb3BlcnR5LnNoYW0pIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgaGlkZShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0YXJnZXRba2V5XSA9IHJlc3VsdFByb3BlcnR5O1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXMocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSBoaWRlKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgcGF0aFtWSVJUVUFMX1BST1RPVFlQRV1ba2V5XSA9IHNvdXJjZVByb3BlcnR5O1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmICF0YXJnZXRQcm90b3R5cGVba2V5XSkgaGlkZSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQWNjb3VudFVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhcmVudEVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNpZ25hdHVyZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5hY2NvdW50cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5hY2NvdW50cy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMTAwbXMgfSk7XG5cblx0XHR0aGlzLmNvbXB1dGVycygpO1xuXHR9XG5cblx0Y29tcHV0ZXJzKCkge1xuXHRcdHRoaXMuYWNjb3VudHNFbWFpbHMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmNvbXBhY3QoXy5tYXAodGhpcy5hY2NvdW50cygpLCAoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLmVtYWlsIDogbnVsbCkpKSk7XG5cblx0XHR0aGlzLmFjY291bnRzVW5yZWFkQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiAwKTtcblx0XHQvLyB0aGlzLmFjY291bnRzVW5yZWFkQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0Ly8gXHRsZXQgcmVzdWx0ID0gMDtcblx0XHQvLyBcdF8uZWFjaCh0aGlzLmFjY291bnRzKCksIChpdGVtKSA9PiB7XG5cdFx0Ly8gXHRcdGlmIChpdGVtKVxuXHRcdC8vIFx0XHR7XG5cdFx0Ly8gXHRcdFx0cmVzdWx0ICs9IGl0ZW0uY291bnQoKTtcblx0XHQvLyBcdFx0fVxuXHRcdC8vIFx0fSk7XG5cdFx0Ly8gXHRyZXR1cm4gcmVzdWx0O1xuXHRcdC8vIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5lbWFpbChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRW1haWwnKSk7XG5cdFx0dGhpcy5wYXJlbnRFbWFpbChTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGFyZW50RW1haWwnKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1Jvb3RBY2NvdW50KCkge1xuXHRcdHJldHVybiAnJyA9PT0gdGhpcy5wYXJlbnRFbWFpbCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBY2NvdW50VXNlclN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLWluc3RhbmNlcy1uYW1lXG5pZiAoREVTQ1JJUFRPUlMgJiYgIShOQU1FIGluIEZ1bmN0aW9uUHJvdG90eXBlKSkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTkFNRSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nLmNhbGwodGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJyAmJiAhaGFzKHZhbHVlLCAnbmFtZScpKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywga2V5KTtcbiAgICBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSkuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sIGtleSwgdmFsdWUpO1xuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSk7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKFJFUExBQ0UsIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSwgcmVhc29uKSB7XG4gIHZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IHJlYXNvbi5SRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTtcbiAgdmFyIFJFUExBQ0VfS0VFUFNfJDAgPSByZWFzb24uUkVQTEFDRV9LRUVQU18kMDtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSAmJiBSRVBMQUNFX0tFRVBTXyQwKSB8fFxuICAgICAgICAodHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZVJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgQ29va2llRHJpdmVyIH0gZnJvbSAnQ29tbW9uL0NsaWVudFN0b3JhZ2VEcml2ZXIvQ29va2llJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZURyaXZlciB9IGZyb20gJ0NvbW1vbi9DbGllbnRTdG9yYWdlRHJpdmVyL0xvY2FsU3RvcmFnZSc7XG5cbmNvbnN0IFN1cHBvcnRlZFN0b3JhZ2VEcml2ZXIgPSBfLmZpbmQoXG5cdFtMb2NhbFN0b3JhZ2VEcml2ZXIsIENvb2tpZURyaXZlcl0sXG5cdChTdG9yYWdlRHJpdmVyKSA9PiBTdG9yYWdlRHJpdmVyICYmIFN0b3JhZ2VEcml2ZXIuc3VwcG9ydGVkKClcbik7XG5cbmNvbnN0IGRyaXZlciA9IFN1cHBvcnRlZFN0b3JhZ2VEcml2ZXIgPyBuZXcgU3VwcG9ydGVkU3RvcmFnZURyaXZlcigpIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0ga2V5XG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0KGtleSwgZGF0YSkge1xuXHRyZXR1cm4gZHJpdmVyID8gZHJpdmVyLnNldCgncCcgKyBrZXksIGRhdGEpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGtleVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQoa2V5KSB7XG5cdHJldHVybiBkcml2ZXIgPyBkcml2ZXIuZ2V0KCdwJyArIGtleSkgOiBudWxsO1xufVxuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5sZXQgX21vbWVudCA9IG51bGw7XG5sZXQgX21vbWVudE5vdyA9IDA7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vdyA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50ID0gbW9tZW50KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93VW5peCA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50Tm93ID0gbW9tZW50KCkudW5peCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbi8qKlxuICogQHJldHVybnMge21vbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vdygpIHtcblx0dXBkYXRlTW9tZW50Tm93KCk7XG5cdHJldHVybiBfbW9tZW50IHx8IG1vbWVudCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3dVbml4KCkge1xuXHR1cGRhdGVNb21lbnROb3dVbml4KCk7XG5cdHJldHVybiBfbW9tZW50Tm93IHx8IDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIoZGF0ZSkge1xuXHRyZXR1cm4gbW9tZW50Tm93KClcblx0XHQuY2xvbmUoKVxuXHRcdC5zdWJ0cmFjdChkYXRlLCAnZGF5cycpXG5cdFx0LmZvcm1hdCgnWVlZWS5NTS5ERCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBtXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21TaG9ydERhdGUobSkge1xuXHRjb25zdCBub3cgPSBtb21lbnROb3coKTtcblx0aWYgKG0gJiYgbm93KSB7XG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIDQgPj0gbm93LmRpZmYobSwgJ2hvdXJzJyk6XG5cdFx0XHRcdHJldHVybiBtLmZyb21Ob3coKTtcblx0XHRcdGNhc2Ugbm93LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1RPREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3dcblx0XHRcdFx0LmNsb25lKClcblx0XHRcdFx0LnN1YnRyYWN0KDEsICdkYXlzJylcblx0XHRcdFx0LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1lFU1RFUkRBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93LnllYXIoKSA9PT0gbS55ZWFyKCk6XG5cdFx0XHRcdHJldHVybiBtLmZvcm1hdCgnRCBNTU0uJyk7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG0gPyBtLmZvcm1hdCgnTEwnKSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU3RhbXBJblVUQ1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdCh0aW1lU3RhbXBJblVUQywgZm9ybWF0U3RyKSB7XG5cdGxldCBtID0gbnVsbCxcblx0XHRyZXN1bHQgPSAnJztcblxuXHRjb25zdCBub3cgPSBtb21lbnROb3dVbml4KCk7XG5cblx0dGltZVN0YW1wSW5VVEMgPSAwIDwgdGltZVN0YW1wSW5VVEMgPyB0aW1lU3RhbXBJblVUQyA6IDAgPT09IHRpbWVTdGFtcEluVVRDID8gbm93IDogMDtcblx0dGltZVN0YW1wSW5VVEMgPSBub3cgPCB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IHRpbWVTdGFtcEluVVRDO1xuXG5cdG0gPSAwIDwgdGltZVN0YW1wSW5VVEMgPyBtb21lbnQudW5peCh0aW1lU3RhbXBJblVUQykgOiBudWxsO1xuXG5cdGlmIChtICYmIDE5NzAgPT09IG0ueWVhcigpKSB7XG5cdFx0bSA9IG51bGw7XG5cdH1cblxuXHRpZiAobSkge1xuXHRcdHN3aXRjaCAoZm9ybWF0U3RyKSB7XG5cdFx0XHRjYXNlICdGUk9NTk9XJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mcm9tTm93KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnU0hPUlQnOlxuXHRcdFx0XHRyZXN1bHQgPSBmb3JtYXRDdXN0b21TaG9ydERhdGUobSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnRlVMTCc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KCdMTEwnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdChmb3JtYXRTdHIpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudFRvTm9kZShlbGVtZW50KSB7XG5cdGxldCBrZXkgPSAnJyxcblx0XHR0aW1lID0gMDtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHR0aW1lID0gJGVsLmRhdGEoJ21vbWVudC10aW1lJyk7XG5cdGlmICh0aW1lKSB7XG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwudGV4dChmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQtdGl0bGUnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwuYXR0cigndGl0bGUnLCBmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWQoKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJy5tb21lbnQnLCB3aW5kb3cuZG9jdW1lbnQpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRtb21lbnRUb05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuaGFzaGVyOyIsImltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgRW1haWxNb2RlbCB9IGZyb20gJ01vZGVsL0VtYWlsJztcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbWFpbE1vZGVsPn0gZW1haWxzXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBmcmllbmRseVZpZXcgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbEFycmF5VG9TdHJpbmcoZW1haWxzLCBmcmllbmRseVZpZXcgPSBmYWxzZSwgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0bGV0IGluZGV4ID0gMCxcblx0XHRsZW4gPSAwO1xuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRpZiAoaXNOb25FbXB0eUFycmF5KGVtYWlscykpIHtcblx0XHRmb3IgKGxlbiA9IGVtYWlscy5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0XHRyZXN1bHQucHVzaChlbWFpbHNbaW5kZXhdLnRvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluaykpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbWFpbE1vZGVsPn0gZW1haWxzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIoZW1haWxzKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMDtcblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblx0aWYgKGlzTm9uRW1wdHlBcnJheShlbWFpbHMpKSB7XG5cdFx0Zm9yIChsZW4gPSBlbWFpbHMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0aWYgKGVtYWlsc1tpbmRleF0gJiYgZW1haWxzW2luZGV4XS5lbWFpbCAmJiAnJyAhPT0gZW1haWxzW2luZGV4XS5uYW1lKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVtYWlsc1tpbmRleF0uZW1haWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez9BcnJheX0ganNvblxuICogQHJldHVybnMge0FycmF5LjxFbWFpbE1vZGVsPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsQXJyYXlGcm9tSnNvbihqc29uKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHRlbWFpbCA9IG51bGw7XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cdGlmIChpc05vbkVtcHR5QXJyYXkoanNvbikpIHtcblx0XHRmb3IgKGluZGV4ID0gMCwgbGVuID0ganNvbi5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0XHRlbWFpbCA9IEVtYWlsTW9kZWwubmV3SW5zdGFuY2VGcm9tSnNvbihqc29uW2luZGV4XSk7XG5cdFx0XHRpZiAoZW1haWwpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goZW1haWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheS48RW1haWxNb2RlbD59IGlucHV0RW1haWxzXG4gKiBAcGFyYW0ge09iamVjdH0gdW5pY1xuICogQHBhcmFtIHtBcnJheX0gbG9jYWxFbWFpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGx5SGVscGVyKGlucHV0RW1haWxzLCB1bmljLCBsb2NhbEVtYWlscykge1xuXHRpZiAoaW5wdXRFbWFpbHMgJiYgMCA8IGlucHV0RW1haWxzLmxlbmd0aCkge1xuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgbGVuID0gaW5wdXRFbWFpbHMubGVuZ3RoO1xuXG5cdFx0Zm9yICg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAoaXNVbmQodW5pY1tpbnB1dEVtYWlsc1tpbmRleF0uZW1haWxdKSkge1xuXHRcdFx0XHR1bmljW2lucHV0RW1haWxzW2luZGV4XS5lbWFpbF0gPSB0cnVlO1xuXHRcdFx0XHRsb2NhbEVtYWlscy5wdXNoKGlucHV0RW1haWxzW2luZGV4XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBkaXNwb3NlT2JqZWN0IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0TW9kZWwge1xuXHRzTW9kZWxOYW1lID0gJyc7XG5cdGRpc3Bvc2FibGVzID0gW107XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobW9kZWxOYW1lID0gJycpIHtcblx0XHR0aGlzLnNNb2RlbE5hbWUgPSBtb2RlbE5hbWUgfHwgJyc7XG5cdH1cblxuXHRyZWdEaXNwb3NhYmxlcyh2YWx1ZSkge1xuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHR0aGlzLmRpc3Bvc2FibGVzLnB1c2goaXRlbSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLmRpc3Bvc2FibGVzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uRGVzdHJveSgpIHtcblx0XHRkaXNwb3NlT2JqZWN0KHRoaXMpO1xuXHR9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgc3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIFN5bWJvbFtuYW1lXVxuICAgIHx8IChOQVRJVkVfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgTGFuZ3VhZ2VTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbiA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXNBZG1pbiB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdGNvbnN0IGFMYW5ndWFnZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzJyksXG5cdFx0XHRhTGFuZ3VhZ2VzQWRtaW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzQWRtaW4nKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VzKGlzQXJyYXkoYUxhbmd1YWdlcykgPyBhTGFuZ3VhZ2VzIDogW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4oaXNBcnJheShhTGFuZ3VhZ2VzQWRtaW4pID8gYUxhbmd1YWdlc0FkbWluIDogW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZUFkbWluJykpO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZScpKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2VBZG1pbicpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTGFuZ3VhZ2VTdG9yZSgpO1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IFtdLmpvaW47XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCJ2YXIgTyA9ICdvYmplY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gTyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09IE8gJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSBPICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gTyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgYWRkcmVzc3BhcnNlciBmcm9tICdlbWFpbGpzLWFkZHJlc3NwYXJzZXInO1xuaW1wb3J0IHsgdHJpbSwgZW5jb2RlSHRtbCwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgRW1haWxNb2RlbCB7XG5cdGVtYWlsID0gJyc7XG5cdG5hbWUgPSAnJztcblx0ZGtpbVN0YXR1cyA9ICcnO1xuXHRka2ltVmFsdWUgPSAnJztcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBlbWFpbCA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVN0YXR1cyA9ICdub25lJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGRraW1WYWx1ZSA9ICcnXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbWFpbCA9ICcnLCBuYW1lID0gJycsIGRraW1TdGF0dXMgPSAnbm9uZScsIGRraW1WYWx1ZSA9ICcnKSB7XG5cdFx0dGhpcy5lbWFpbCA9IGVtYWlsO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gZGtpbVN0YXR1cztcblx0XHR0aGlzLmRraW1WYWx1ZSA9IGRraW1WYWx1ZTtcblxuXHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uRW1haWx9IGpzb25cblx0ICogQHJldHVybnMgez9FbWFpbE1vZGVsfVxuXHQgKi9cblx0c3RhdGljIG5ld0luc3RhbmNlRnJvbUpzb24oanNvbikge1xuXHRcdGNvbnN0IGVtYWlsID0gbmV3IEVtYWlsTW9kZWwoKTtcblx0XHRyZXR1cm4gZW1haWwuaW5pdEJ5SnNvbihqc29uKSA/IGVtYWlsIDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZW1haWwgPSAnJztcblx0XHR0aGlzLm5hbWUgPSAnJztcblxuXHRcdHRoaXMuZGtpbVN0YXR1cyA9ICdub25lJztcblx0XHR0aGlzLmRraW1WYWx1ZSA9ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0dmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuICcnICE9PSB0aGlzLm5hbWUgfHwgJycgIT09IHRoaXMuZW1haWw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSB3aXRob3V0TmFtZSA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRoYXNoKHdpdGhvdXROYW1lID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gJyMnICsgKHdpdGhvdXROYW1lID8gJycgOiB0aGlzLm5hbWUpICsgJyMnICsgdGhpcy5lbWFpbCArICcjJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGNsZWFyRHVwbGljYXRlTmFtZSgpIHtcblx0XHRpZiAodGhpcy5uYW1lID09PSB0aGlzLmVtYWlsKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2VhcmNoKHF1ZXJ5KSB7XG5cdFx0cmV0dXJuIC0xIDwgKHRoaXMubmFtZSArICcgJyArIHRoaXMuZW1haWwpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uRW1haWx9IG9Kc29uRW1haWxcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpbml0QnlKc29uKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9FbWFpbCcgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gdHJpbShqc29uLk5hbWUpO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHRyaW0oanNvbi5FbWFpbCk7XG5cdFx0XHR0aGlzLmRraW1TdGF0dXMgPSB0cmltKGpzb24uRGtpbVN0YXR1cyB8fCAnJyk7XG5cdFx0XHR0aGlzLmRraW1WYWx1ZSA9IHRyaW0oanNvbi5Ea2ltVmFsdWUgfHwgJycpO1xuXG5cdFx0XHRyZXN1bHQgPSAnJyAhPT0gdGhpcy5lbWFpbDtcblx0XHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZyaWVuZGx5Vmlld1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwV2l0aExpbmsgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB1c2VFbmNvZGVIdG1sID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHRvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlLCB1c2VFbmNvZGVIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKCcnICE9PSB0aGlzLmVtYWlsKSB7XG5cdFx0XHRpZiAoZnJpZW5kbHlWaWV3ICYmICcnICE9PSB0aGlzLm5hbWUpIHtcblx0XHRcdFx0cmVzdWx0ID0gd3JhcFdpdGhMaW5rXG5cdFx0XHRcdFx0PyAnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdCAgJz90bz0nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHQgICdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKHRoaXMubmFtZSkgK1xuXHRcdFx0XHRcdCAgJzwvYT4nXG5cdFx0XHRcdFx0OiB1c2VFbmNvZGVIdG1sXG5cdFx0XHRcdFx0PyBlbmNvZGVIdG1sKHRoaXMubmFtZSlcblx0XHRcdFx0XHQ6IHRoaXMubmFtZTtcblx0XHRcdFx0Ly8gcmVzdWx0ID0gd3JhcFdpdGhMaW5rID8gJzxhIGhyZWY9XCJtYWlsdG86JyArIGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0Ly8gXHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgKyBlbmNvZGVIdG1sKHRoaXMubmFtZSkgKyAnPC9hPicgOiAodXNlRW5jb2RlSHRtbCA/IGVuY29kZUh0bWwodGhpcy5uYW1lKSA6IHRoaXMubmFtZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVtYWlsO1xuXHRcdFx0XHRpZiAoJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRcdGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JykgK1xuXHRcdFx0XHRcdFx0XHQnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHRcdCc/dG89JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdFx0Ly8gcmVzdWx0ID0gZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwocmVzdWx0KSArXG5cdFx0XHRcdFx0XHQvLyBcdCc8L2E+JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJz4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHJlc3VsdCArICc+Jztcblx0XHRcdFx0XHRcdGlmICh1c2VFbmNvZGVIdG1sKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGVuY29kZUh0bWwocmVzdWx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAod3JhcFdpdGhMaW5rKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHQnPC9hPic7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNwbGl0RW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0XHRsZXQgZXhpc3RzID0gZmFsc2U7XG5cdFx0XHRwYXJzZWRSZXN1bHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzID0gaXRlbS5hZGRyZXNzXG5cdFx0XHRcdFx0PyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJylcblx0XHRcdFx0XHQ6IG51bGw7XG5cblx0XHRcdFx0aWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5lbWFpbCkge1xuXHRcdFx0XHRcdGV4aXN0cyA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQucHVzaChhZGRyZXNzID8gYWRkcmVzcy50b0xpbmUoZmFsc2UpIDogaXRlbS5uYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gZXhpc3RzID8gcmVzdWx0IDogbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHN0YXRpYyBwYXJzZUVtYWlsTGluZShsaW5lKSB7XG5cdFx0Y29uc3QgcGFyc2VkUmVzdWx0ID0gYWRkcmVzc3BhcnNlcihsaW5lKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHBhcnNlZFJlc3VsdCkpIHtcblx0XHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRcdF8ubWFwKHBhcnNlZFJlc3VsdCwgKGl0ZW0pID0+XG5cdFx0XHRcdFx0aXRlbS5hZGRyZXNzID8gbmV3IEVtYWlsTW9kZWwoaXRlbS5hZGRyZXNzLnJlcGxhY2UoL15bPF0rKC4qKVs+XSskL2csICckMScpLCBpdGVtLm5hbWUgfHwgJycpIDogbnVsbFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxBZGRyZXNzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0cGFyc2UoZW1haWxBZGRyZXNzKSB7XG5cdFx0ZW1haWxBZGRyZXNzID0gdHJpbShlbWFpbEFkZHJlc3MpO1xuXHRcdGlmICgnJyA9PT0gZW1haWxBZGRyZXNzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gYWRkcmVzc3BhcnNlcihlbWFpbEFkZHJlc3MpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocmVzdWx0KSAmJiByZXN1bHRbMF0pIHtcblx0XHRcdHRoaXMubmFtZSA9IHJlc3VsdFswXS5uYW1lIHx8ICcnO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHJlc3VsdFswXS5hZGRyZXNzIHx8ICcnO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmV4cG9ydCB7IEVtYWlsTW9kZWwsIEVtYWlsTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSwgYlNhZmFyaSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIExpbmtzIGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgeyB0cmltIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgQXVkaW8ge1xuXHRub3RpZmljYXRvciA9IG51bGw7XG5cdHBsYXllciA9IG51bGw7XG5cblx0c3VwcG9ydGVkID0gZmFsc2U7XG5cdHN1cHBvcnRlZE1wMyA9IGZhbHNlO1xuXHRzdXBwb3J0ZWRPZ2cgPSBmYWxzZTtcblx0c3VwcG9ydGVkV2F2ID0gZmFsc2U7XG5cdHN1cHBvcnRlZE5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMucGxheWVyID0gdGhpcy5jcmVhdGVOZXdPYmplY3QoKTtcblxuXHRcdHRoaXMuc3VwcG9ydGVkID0gIWJNb2JpbGVEZXZpY2UgJiYgIWJTYWZhcmkgJiYgISF0aGlzLnBsYXllciAmJiAhIXRoaXMucGxheWVyLnBsYXk7XG5cdFx0aWYgKHRoaXMuc3VwcG9ydGVkICYmIHRoaXMucGxheWVyICYmIHRoaXMucGxheWVyLmNhblBsYXlUeXBlKSB7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZE1wMyA9ICcnICE9PSB0aGlzLnBsYXllci5jYW5QbGF5VHlwZSgnYXVkaW8vbXBlZzsnKS5yZXBsYWNlKC9uby8sICcnKTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkV2F2ID0gJycgIT09IHRoaXMucGxheWVyLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz1cIjFcIicpLnJlcGxhY2UoL25vLywgJycpO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWRPZ2cgPSAnJyAhPT0gdGhpcy5wbGF5ZXIuY2FuUGxheVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPVwidm9yYmlzXCInKS5yZXBsYWNlKC9uby8sICcnKTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkTm90aWZpY2F0aW9uID0gdGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRNcDM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLnBsYXllciB8fCAoIXRoaXMuc3VwcG9ydGVkTXAzICYmICF0aGlzLnN1cHBvcnRlZE9nZyAmJiAhdGhpcy5zdXBwb3J0ZWRXYXYpKSB7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWRNcDMgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkT2dnID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZFdhdiA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWROb3RpZmljYXRpb24gPSBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5wbGF5ZXIpIHtcblx0XHRcdGNvbnN0IHN0b3BGbiA9ICgpID0+IHRoaXMuc3RvcCgpO1xuXG5cdFx0XHR0aGlzLnBsYXllci5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIHN0b3BGbik7XG5cdFx0XHR0aGlzLnBsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHN0b3BGbik7XG5cblx0XHRcdEV2ZW50cy5zdWIoJ2F1ZGlvLmFwaS5zdG9wJywgc3RvcEZuKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVOZXdPYmplY3QoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBsYXllciA9IHdpbmRvdy5BdWRpbyA/IG5ldyB3aW5kb3cuQXVkaW8oKSA6IG51bGw7XG5cdFx0XHRpZiAocGxheWVyICYmIHBsYXllci5jYW5QbGF5VHlwZSAmJiBwbGF5ZXIucGF1c2UgJiYgcGxheWVyLnBsYXkpIHtcblx0XHRcdFx0cGxheWVyLnByZWxvYWQgPSAnbm9uZSc7XG5cdFx0XHRcdHBsYXllci5sb29wID0gZmFsc2U7XG5cdFx0XHRcdHBsYXllci5hdXRvcGxheSA9IGZhbHNlO1xuXHRcdFx0XHRwbGF5ZXIubXV0ZWQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBsYXllcjtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHBhdXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdXBwb3J0ZWQgPyAhIXRoaXMucGxheWVyLnBhdXNlZCA6IHRydWU7XG5cdH1cblxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnBsYXllci5wYXVzZSkge1xuXHRcdFx0dGhpcy5wbGF5ZXIucGF1c2UoKTtcblx0XHR9XG5cblx0XHRFdmVudHMucHViKCdhdWRpby5zdG9wJyk7XG5cdH1cblxuXHRwYXVzZSgpIHtcblx0XHR0aGlzLnN0b3AoKTtcblx0fVxuXG5cdGNsZWFyTmFtZShuYW1lID0gJycsIGV4dCA9ICcnKSB7XG5cdFx0bmFtZSA9IHRyaW0obmFtZSk7XG5cdFx0aWYgKGV4dCAmJiAnLicgKyBleHQgPT09IG5hbWUudG9Mb3dlckNhc2UoKS5zdWJzdHIoKGV4dC5sZW5ndGggKyAxKSAqIC0xKSkge1xuXHRcdFx0bmFtZSA9IHRyaW0obmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGggLSA0KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnID09PSBuYW1lID8gJ2F1ZGlvJyA6IG5hbWU7XG5cdH1cblxuXHRwbGF5TXAzKHVybCwgbmFtZSkge1xuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnN1cHBvcnRlZE1wMykge1xuXHRcdFx0dGhpcy5wbGF5ZXIuc3JjID0gdXJsO1xuXHRcdFx0dGhpcy5wbGF5ZXIucGxheSgpO1xuXG5cdFx0XHRFdmVudHMucHViKCdhdWRpby5zdGFydCcsIFt0aGlzLmNsZWFyTmFtZShuYW1lLCAnbXAzJyksICdtcDMnXSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheU9nZyh1cmwsIG5hbWUpIHtcblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRPZ2cpIHtcblx0XHRcdHRoaXMucGxheWVyLnNyYyA9IHVybDtcblx0XHRcdHRoaXMucGxheWVyLnBsYXkoKTtcblxuXHRcdFx0bmFtZSA9IHRoaXMuY2xlYXJOYW1lKG5hbWUsICdvZ2EnKTtcblx0XHRcdG5hbWUgPSB0aGlzLmNsZWFyTmFtZShuYW1lLCAnb2dnJyk7XG5cblx0XHRcdEV2ZW50cy5wdWIoJ2F1ZGlvLnN0YXJ0JywgW25hbWUsICdvZ2cnXSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheVdhdih1cmwsIG5hbWUpIHtcblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRXYXYpIHtcblx0XHRcdHRoaXMucGxheWVyLnNyYyA9IHVybDtcblx0XHRcdHRoaXMucGxheWVyLnBsYXkoKTtcblxuXHRcdFx0RXZlbnRzLnB1YignYXVkaW8uc3RhcnQnLCBbdGhpcy5jbGVhck5hbWUobmFtZSwgJ3dhdicpLCAnd2F2J10pO1xuXHRcdH1cblx0fVxuXG5cdHBsYXlOb3RpZmljYXRpb24oKSB7XG5cdFx0aWYgKHRoaXMuc3VwcG9ydGVkICYmIHRoaXMuc3VwcG9ydGVkTXAzKSB7XG5cdFx0XHRpZiAoIXRoaXMubm90aWZpY2F0b3IpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRvciA9IHRoaXMuY3JlYXRlTmV3T2JqZWN0KCk7XG5cdFx0XHRcdHRoaXMubm90aWZpY2F0b3Iuc3JjID0gTGlua3Muc291bmQoJ25ldy1tYWlsLm1wMycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5ub3RpZmljYXRvciAmJiB0aGlzLm5vdGlmaWNhdG9yLnBsYXkpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRvci5wbGF5KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBdWRpbygpO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQsIHRyaW0sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0SW5wdXQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSB8fCAnJztcblx0XHR0aGlzLnNpemUgPSBwYXJhbXMuc2l6ZSB8fCAwO1xuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5wcmVMYWJlbCA9IHBhcmFtcy5wcmVMYWJlbCB8fCAnJztcblx0XHR0aGlzLmVuYWJsZSA9IGlzVW5kKHBhcmFtcy5lbmFibGUpID8gdHJ1ZSA6IHBhcmFtcy5lbmFibGU7XG5cdFx0dGhpcy50cmlnZ2VyID0gcGFyYW1zLnRyaWdnZXIgJiYgcGFyYW1zLnRyaWdnZXIuc3Vic2NyaWJlID8gcGFyYW1zLnRyaWdnZXIgOiBudWxsO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgfHwgJyc7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLnByZUxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLnByZUxhYmVsKTtcblx0XHR0aGlzLnRyaWdnZXJlZCA9ICFpc1VuZChwYXJhbXMudHJpZ2dlcikgJiYgISF0aGlzLnRyaWdnZXI7XG5cblx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jbGFzc05hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzaXplID0ga28udW53cmFwKHRoaXMuc2l6ZSksXG5cdFx0XHRcdHN1ZmZpeFZhbHVlID0gdGhpcy50cmlnZ2VyID8gJyAnICsgdHJpbSgnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCAnICsgdGhpcy5jbGFzc0ZvclRyaWdnZXIoKSkgOiAnJztcblx0XHRcdHJldHVybiAoMCA8IHNpemUgPyAnc3BhbicgKyBzaXplIDogJycpICsgc3VmZml4VmFsdWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy53aWR0aCkgJiYgcGFyYW1zLmVsZW1lbnQpIHtcblx0XHRcdHBhcmFtcy5lbGVtZW50LmZpbmQoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScpLmNzcygnd2lkdGgnLCBwYXJhbXMud2lkdGgpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMuY2xhc3NOYW1lKTtcblxuXHRcdGlmICh0aGlzLnRyaWdnZXIpIHtcblx0XHRcdHRoaXMuc2V0VHJpZ2dlclN0YXRlKHRoaXMudHJpZ2dlcigpKTtcblxuXHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy50cmlnZ2VyLnN1YnNjcmliZSh0aGlzLnNldFRyaWdnZXJTdGF0ZSwgdGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHNldFRyaWdnZXJTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignc3VjY2VzcycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJ2Vycm9yJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJycpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RJbnB1dCwgQWJzdHJhY3RJbnB1dCBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuaW1wb3J0IFByb21pc2VzUG9wdWxhdG9yIGZyb20gJ1Byb21pc2VzL1VzZXIvUG9wdWxhdG9yJztcbmltcG9ydCB7IEFic3RyYWN0QWpheFByb21pc2VzIH0gZnJvbSAnUHJvbWlzZXMvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgVXNlckFqYXhVc2VyUHJvbWlzZXMgZXh0ZW5kcyBBYnN0cmFjdEFqYXhQcm9taXNlcyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZvbGRlcnNUaW1lb3V0ID0gMDtcblx0fVxuXG5cdGZvbGRlcnNSZWxvYWQoZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5hYm9ydCgnRm9sZGVycycpXG5cdFx0XHQucG9zdFJlcXVlc3QoJ0ZvbGRlcnMnLCBmVHJpZ2dlcilcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdFByb21pc2VzUG9wdWxhdG9yLmZvbGRlcnNMaXN0KGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0UHJvbWlzZXNQb3B1bGF0b3IuZm9sZGVyc0FkZGl0aW9uYWxQYXJhbWV0ZXJzKGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGZvbGRlcnNSZWxvYWRXaXRoVGltZW91dChmVHJpZ2dlcikge1xuXHRcdHRoaXMuc2V0VHJpZ2dlcihmVHJpZ2dlciwgdHJ1ZSk7XG5cblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuZm9sZGVyc1RpbWVvdXQpO1xuXHRcdHRoaXMuZm9sZGVyc1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvbGRlcnNSZWxvYWQoZlRyaWdnZXIpO1xuXHRcdH0sIDUwMCk7XG5cdH1cblxuXHRmb2xkZXJEZWxldGUoc0ZvbGRlckZ1bGxOYW1lUmF3LCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdGb2xkZXJEZWxldGUnLCBmVHJpZ2dlciwge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHRcdH0pO1xuXHR9XG5cblx0Zm9sZGVyQ3JlYXRlKHNOZXdGb2xkZXJOYW1lLCBzUGFyZW50TmFtZSwgZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5wb3N0UmVxdWVzdCgnRm9sZGVyQ3JlYXRlJywgZlRyaWdnZXIsIHtcblx0XHRcdCdGb2xkZXInOiBzTmV3Rm9sZGVyTmFtZSxcblx0XHRcdCdQYXJlbnQnOiBzUGFyZW50TmFtZVxuXHRcdH0pO1xuXHR9XG5cblx0Zm9sZGVyUmVuYW1lKHNQcmV2Rm9sZGVyRnVsbE5hbWVSYXcsIHNOZXdGb2xkZXJOYW1lLCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdGb2xkZXJSZW5hbWUnLCBmVHJpZ2dlciwge1xuXHRcdFx0J0ZvbGRlcic6IHNQcmV2Rm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnTmV3Rm9sZGVyTmFtZSc6IHNOZXdGb2xkZXJOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHRhdHRhY2htZW50c0FjdGlvbnMoc0FjdGlvbiwgYUhhc2hlcywgZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5wb3N0UmVxdWVzdCgnQXR0YWNobWVudHNBY3Rpb25zJywgZlRyaWdnZXIsIHtcblx0XHRcdCdEbyc6IHNBY3Rpb24sXG5cdFx0XHQnSGFzaGVzJzogYUhhc2hlc1xuXHRcdH0pO1xuXHR9XG5cblx0d2VsY29tZUNsb3NlKCkge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdXZWxjb21lQ2xvc2UnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVXNlckFqYXhVc2VyUHJvbWlzZXMoKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsLCBrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24udG9TdHJpbmc7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAodHlwZW9mIHN0b3JlLmluc3BlY3RTb3VyY2UgIT0gJ2Z1bmN0aW9uJykge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcuY2FsbChpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5tb21lbnQ7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cucHJvZ3Jlc3NKczsiLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIElkZW50aXR5VXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5pZGVudGl0aWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmlkZW50aXRpZXMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cblx0XHR0aGlzLmlkZW50aXRpZXNJRFMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmNvbXBhY3QoXy5tYXAodGhpcy5pZGVudGl0aWVzKCksIChpdGVtKSA9PiAoaXRlbSA/IGl0ZW0uaWQgOiBudWxsKSkpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgSWRlbnRpdHlVc2VyU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIENvbnRhY3RVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvbnRhY3RzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmNvbnRhY3RzLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblx0XHR0aGlzLmNvbnRhY3RzLmltcG9ydGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXHRcdHRoaXMuY29udGFjdHMuc3luY2luZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXHRcdHRoaXMuY29udGFjdHMuZXhwb3J0aW5nVmNmID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMjAwbXMgfSk7XG5cdFx0dGhpcy5jb250YWN0cy5leHBvcnRpbmdDc3YgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblxuXHRcdHRoaXMuYWxsb3dDb250YWN0c1N5bmMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzU3luYyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jVXJsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNQYXNzID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmFsbG93Q29udGFjdHNTeW5jKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luY0lzQWxsb3dlZCcpKTtcblx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzU3luYyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdFbmFibGVDb250YWN0c1N5bmMnKSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzU3luY1VybChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jVXJsJykpO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jVXNlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jVXNlcicpKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1Bhc3MoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luY1Bhc3N3b3JkJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb250YWN0VXNlclN0b3JlKCk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufTtcblxuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuLy8gbGV0IHJhaW5sb29wQ2FjaGVzID0gd2luZG93LmNhY2hlcyAmJiB3aW5kb3cuY2FjaGVzLm9wZW4gPyB3aW5kb3cuY2FjaGVzIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3NyY30gc3JjXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFzeW5jID0gZmFsc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gamFzc2woc3JjLCBhc3luYyA9IGZhbHNlKSB7XG5cdGlmICghd2luZG93LlByb21pc2UgfHwgIXdpbmRvdy5Qcm9taXNlLmFsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgYXJlIG5vdCBhdmFpbGFibGUgeW91ciBlbnZpcm9ubWVudC4nKTtcblx0fVxuXG5cdGlmICghc3JjKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdzcmMgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0fVxuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cblx0XHRlbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHJlc29sdmUoc3JjKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihzcmMpKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5hc3luYyA9IHRydWUgPT09IGFzeW5jO1xuXHRcdGVsZW1lbnQuc3JjID0gc3JjO1xuXG5cdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH0pIC8qIC50aGVuKChzKSA9PiB7XG5cblx0XHRjb25zdCBmb3VuZCA9IHMgJiYgcmFpbmxvb3BDYWNoZXMgPyBzLm1hdGNoKC9yYWlubG9vcFxcL3ZcXC8oW15cXC9dKylcXC9zdGF0aWNcXC8vKSA6IG51bGw7XG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kWzFdKVxuXHRcdHtcblx0XHRcdHJhaW5sb29wQ2FjaGVzLm9wZW4oJ3JhaW5sb29wLW9mZmxpbmUtJyArIGZvdW5kWzFdKS50aGVuKFxuXHRcdFx0XHQoY2FjaGUpID0+IGNhY2hlLmFkZChzKVxuXHRcdFx0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJhaW5sb29wQ2FjaGVzID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzO1xuXHR9KSovO1xufVxuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWSB8fCBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWTtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IHJlZ2V4cEZsYWdzLmNhbGwocmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCd5JywgJycpO1xuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gU3RyaW5nKHN0cikuc2xpY2UocmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIHN0cltyZS5sYXN0SW5kZXggLSAxXSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgVGhlbWVTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZE5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZEhhc2ggPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudGhlbWUgPSBrby5vYnNlcnZhYmxlKCcnKS5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy50aGVtZXMgfSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRjb25zdCB0aGVtZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndGhlbWVzJyk7XG5cblx0XHR0aGlzLnRoZW1lcyhpc0FycmF5KHRoZW1lcykgPyB0aGVtZXMgOiBbXSk7XG5cdFx0dGhpcy50aGVtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGhlbWUnKSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZE5hbWUnKSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZEhhc2gnKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lU3RvcmUoKTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IERlc2t0b3BOb3RpZmljYXRpb24sIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgQXVkaW8gZnJvbSAnQ29tbW9uL0F1ZGlvJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIE5vdGlmaWNhdGlvblVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZW5hYmxlU291bmROb3RpZmljYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNvdW5kTm90aWZpY2F0aW9uSXNTdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucyA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbigpO1xuXG5cdFx0XHRcdGxldCByZXN1bHQgPSBEZXNrdG9wTm90aWZpY2F0aW9uLk5vdFN1cHBvcnRlZDtcblxuXHRcdFx0XHRjb25zdCBOb3RpZmljYXRpb25DbGFzcyA9IHRoaXMubm90aWZpY2F0aW9uQ2xhc3MoKTtcblx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbkNsYXNzICYmIE5vdGlmaWNhdGlvbkNsYXNzLnBlcm1pc3Npb24pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKE5vdGlmaWNhdGlvbkNsYXNzLnBlcm1pc3Npb24udG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnZ3JhbnRlZCc6XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IERlc2t0b3BOb3RpZmljYXRpb24uQWxsb3dlZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdkZW5pZWQnOlxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBEZXNrdG9wTm90aWZpY2F0aW9uLkRlbmllZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdkZWZhdWx0Jzpcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RBbGxvd2VkO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAod2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMgJiYgd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMuY2hlY2tQZXJtaXNzaW9uKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMuY2hlY2tQZXJtaXNzaW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6ICgpID0+XG5cdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24oKSAmJiBEZXNrdG9wTm90aWZpY2F0aW9uLkFsbG93ZWQgPT09IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCksXG5cdFx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IE5vdGlmaWNhdGlvbkNsYXNzID0gdGhpcy5ub3RpZmljYXRpb25DbGFzcygpLFxuXHRcdFx0XHRcdFx0XHRwZXJtaXNzaW9uID0gdGhpcy5kZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKTtcblxuXHRcdFx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbkNsYXNzICYmIERlc2t0b3BOb3RpZmljYXRpb24uQWxsb3dlZCA9PT0gcGVybWlzc2lvbikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbih0cnVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uQ2xhc3MgJiYgRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RBbGxvd2VkID09PSBwZXJtaXNzaW9uKSB7XG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbkNsYXNzLnJlcXVlc3RQZXJtaXNzaW9uKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChEZXNrdG9wTm90aWZpY2F0aW9uLkFsbG93ZWQgPT09IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24odHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdGlmICghdGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24udmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMuY29tcHV0ZXJzKCk7XG5cblx0XHR0aGlzLmluaXROb3RpZmljYXRpb25QbGF5ZXIoKTtcblx0fVxuXG5cdGNvbXB1dGVycygpIHtcblx0XHR0aGlzLmlzRGVza3RvcE5vdGlmaWNhdGlvblN1cHBvcnRlZCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RTdXBwb3J0ZWQgIT09IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0Rlc2t0b3BOb3RpZmljYXRpb25EZW5pZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdERlc2t0b3BOb3RpZmljYXRpb24uTm90U3VwcG9ydGVkID09PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpIHx8XG5cdFx0XHRcdERlc2t0b3BOb3RpZmljYXRpb24uRGVuaWVkID09PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpXG5cdFx0KTtcblx0fVxuXG5cdGluaXROb3RpZmljYXRpb25QbGF5ZXIoKSB7XG5cdFx0aWYgKEF1ZGlvICYmIEF1ZGlvLnN1cHBvcnRlZE5vdGlmaWNhdGlvbikge1xuXHRcdFx0dGhpcy5zb3VuZE5vdGlmaWNhdGlvbklzU3VwcG9ydGVkKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uKGZhbHNlKTtcblx0XHRcdHRoaXMuc291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheVNvdW5kTm90aWZpY2F0aW9uKHNraXBTZXR0aW5nKSB7XG5cdFx0aWYgKEF1ZGlvICYmIEF1ZGlvLnN1cHBvcnRlZE5vdGlmaWNhdGlvbiAmJiAoc2tpcFNldHRpbmcgPyB0cnVlIDogdGhpcy5lbmFibGVTb3VuZE5vdGlmaWNhdGlvbigpKSkge1xuXHRcdFx0QXVkaW8ucGxheU5vdGlmaWNhdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdGRpc3BsYXlEZXNrdG9wTm90aWZpY2F0aW9uKGltYWdlU3JjLCB0aXRsZSwgdGV4dCwgbmVzc2FnZURhdGEpIHtcblx0XHRpZiAodGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uKCkpIHtcblx0XHRcdGNvbnN0IE5vdGlmaWNhdGlvbkNsYXNzID0gdGhpcy5ub3RpZmljYXRpb25DbGFzcygpLFxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25DbGFzc1xuXHRcdFx0XHRcdD8gbmV3IE5vdGlmaWNhdGlvbkNsYXNzKHRpdGxlLCB7XG5cdFx0XHRcdFx0XHRcdGJvZHk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdGljb246IGltYWdlU3JjXG5cdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0aWYgKG5vdGlmaWNhdGlvbikge1xuXHRcdFx0XHRpZiAobm90aWZpY2F0aW9uLnNob3cpIHtcblx0XHRcdFx0XHRub3RpZmljYXRpb24uc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG5lc3NhZ2VEYXRhKSB7XG5cdFx0XHRcdFx0bm90aWZpY2F0aW9uLm9uY2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuZm9jdXMoKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5lc3NhZ2VEYXRhLkZvbGRlciAmJiBuZXNzYWdlRGF0YS5VaWQpIHtcblx0XHRcdFx0XHRcdFx0RXZlbnRzLnB1YignbWFpbGJveC5tZXNzYWdlLnNob3cnLCBbbmVzc2FnZURhdGEuRm9sZGVyLCBuZXNzYWdlRGF0YS5VaWRdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoXG5cdFx0XHRcdFx0KGZ1bmN0aW9uKGxvY2FsTm90aWZpY2F0aW9ucykge1xuXHRcdFx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGxvY2FsTm90aWZpY2F0aW9ucy5jYW5jZWwpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbE5vdGlmaWNhdGlvbnMuY2FuY2VsKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAobG9jYWxOb3RpZmljYXRpb25zLmNsb3NlKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxOb3RpZmljYXRpb25zLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSkobm90aWZpY2F0aW9uKSxcblx0XHRcdFx0XHRNYWdpY3MuVGltZTdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5lbmFibGVTb3VuZE5vdGlmaWNhdGlvbighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdTb3VuZE5vdGlmaWNhdGlvbicpKTtcblx0XHR0aGlzLmVuYWJsZURlc2t0b3BOb3RpZmljYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnRGVza3RvcE5vdGlmaWNhdGlvbnMnKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgeyp8bnVsbH1cblx0ICovXG5cdG5vdGlmaWNhdGlvbkNsYXNzKCkge1xuXHRcdHJldHVybiB3aW5kb3cuTm90aWZpY2F0aW9uICYmIHdpbmRvdy5Ob3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24gPyB3aW5kb3cuTm90aWZpY2F0aW9uIDogbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTm90aWZpY2F0aW9uVXNlclN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyICRmZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSkge1xuICAgIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgIGlmIChWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gICAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIGlmICghSVNfTk9ERSAmJiB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ICE9ICdmdW5jdGlvbicpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFByb21pc2VDb25zdHJ1Y3RvcikpIHJldHVybiBmYWxzZTtcbiAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICByZXR1cm4gIShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlKTtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQocHJvbWlzZSwgc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgcHJvbWlzZSwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4ocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHByb21pc2UsIHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgd3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdChwcm9taXNlLCB7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB0aGlzLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHRoaXMsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHRoaXMsIHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHRoaXMsIHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2UucHJvdG90eXBlLnRoZW47XG5cbiAgICAvLyB3cmFwIG5hdGl2ZSBQcm9taXNlI3RoZW4gZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgLy8gd3JhcCBmZXRjaCByZXN1bHRcbiAgICBpZiAodHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShQcm9taXNlQ29uc3RydWN0b3IsICRmZXRjaC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgY2FwYWJpbGl0eS5yZWplY3QuY2FsbCh1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoSVNfUFVSRSAmJiB0aGlzID09PSBQcm9taXNlV3JhcHBlciA/IFByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgLy8gYFByb21pc2UuYWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgSnVhIGZyb20gJ0p1YSc7XG5cbmltcG9ydCB7XG5cdENhcGEsXG5cdE1hZ2ljcyxcblx0S2V5U3RhdGUsXG5cdENvbXBvc2VUeXBlLFxuXHRTdG9yYWdlUmVzdWx0VHlwZSxcblx0RWRpdG9yRGVmYXVsdFR5cGUsXG5cdE5vdGlmaWNhdGlvbixcblx0U2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbixcblx0VXBsb2FkRXJyb3JDb2RlXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7XG5cdHRyaW0sXG5cdGlzQXJyYXksXG5cdGlzTm9ybWFsLFxuXHRkZWxlZ2F0ZVJ1bixcblx0aXNOb25FbXB0eUFycmF5LFxuXHRjbGVhckJxU3dpdGNoZXIsXG5cdHJlcGx5U3ViamVjdEFkZCxcblx0ZW5jb2RlSHRtbCxcblx0bm9vcEZhbHNlLFxuXHRpbkZvY3VzLFxuXHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSxcblx0cEludCxcblx0aXNVbmRcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgVU5VU0VEX09QVElPTl9WQUxVRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdXBsb2FkIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGkxOG4sIGdldE5vdGlmaWNhdGlvbiwgZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZm9ybWF0IGFzIG1vbWVudG9yRm9ybWF0IH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSwgc2V0TWVzc2FnZUZsYWdzVG9DYWNoZSwgc2V0Rm9sZGVySGFzaCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IEh0bWxFZGl0b3IgfSBmcm9tICdDb21tb24vSHRtbEVkaXRvcic7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IElkZW50aXR5U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvSWRlbnRpdHknO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuaW1wb3J0IFNvY2lhbFN0b3JlIGZyb20gJ1N0b3Jlcy9Tb2NpYWwnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCB9IGZyb20gJ01vZGVsL0NvbXBvc2VBdHRhY2htZW50JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kLCBpc1BvcHVwVmlzaWJsZSwgc2hvd1NjcmVlblBvcHVwLCBoaWRlU2NyZWVuUG9wdXAsIHJvdXRlT24sIHJvdXRlT2ZmIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Db21wb3NlJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0NvbXBvc2UnXG59KVxuY2xhc3MgQ29tcG9zZVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Y29uc3QgZkVtYWlsT3V0SW5IZWxwZXIgPSAoY29udGV4dCwgaWRlbnRpdHksIG5hbWUsIGlzSW4pID0+IHtcblx0XHRcdGlmIChpZGVudGl0eSAmJiBjb250ZXh0ICYmIGlkZW50aXR5W25hbWVdKCkgJiYgKGlzSW4gPyB0cnVlIDogY29udGV4dFtuYW1lXSgpKSkge1xuXHRcdFx0XHRjb25zdCBpZGVudGl0eUVtYWlsID0gaWRlbnRpdHlbbmFtZV0oKTtcblx0XHRcdFx0bGV0IGxpc3QgPSB0cmltKGNvbnRleHRbbmFtZV0oKSkuc3BsaXQoL1ssXS8pO1xuXG5cdFx0XHRcdGxpc3QgPSBfLmZpbHRlcihsaXN0LCAoZW1haWwpID0+IHtcblx0XHRcdFx0XHRlbWFpbCA9IHRyaW0oZW1haWwpO1xuXHRcdFx0XHRcdHJldHVybiBlbWFpbCAmJiB0cmltKGlkZW50aXR5RW1haWwpICE9PSBlbWFpbDtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGlzSW4pIHtcblx0XHRcdFx0XHRsaXN0LnB1c2goaWRlbnRpdHlFbWFpbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb250ZXh0W25hbWVdKGxpc3Quam9pbignLCcpKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5vTGFzdE1lc3NhZ2UgPSBudWxsO1xuXHRcdHRoaXMub0VkaXRvciA9IG51bGw7XG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gbnVsbDtcblx0XHR0aGlzLnNJblJlcGx5VG8gPSAnJztcblx0XHR0aGlzLmJGcm9tRHJhZnQgPSBmYWxzZTtcblx0XHR0aGlzLnNSZWZlcmVuY2VzID0gJyc7XG5cblx0XHR0aGlzLnNMYXN0Rm9jdXNlZEZpZWxkID0gJ3RvJztcblxuXHRcdHRoaXMucmVzaXplclRyaWdnZXIgPSBfLmJpbmQodGhpcy5yZXNpemVyVHJpZ2dlciwgdGhpcyk7XG5cblx0XHR0aGlzLmFsbG93Q29udGFjdHMgPSAhIUFwcFN0b3JlLmNvbnRhY3RzSXNBbGxvd2VkKCk7XG5cdFx0dGhpcy5hbGxvd0ZvbGRlcnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKTtcblxuXHRcdHRoaXMuYlNraXBOZXh0SGlkZSA9IGZhbHNlO1xuXHRcdHRoaXMuY29tcG9zZUluRWRpdCA9IEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQ7XG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZSA9IFNldHRpbmdzU3RvcmUuZWRpdG9yRGVmYXVsdFR5cGU7XG5cblx0XHR0aGlzLmNhcGFPcGVuUEdQID0gUGdwU3RvcmUuY2FwYU9wZW5QR1A7XG5cblx0XHR0aGlzLmlkZW50aXRpZXNEcm9wZG93blRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudG8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jYy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5iY2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmJjYy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5yZXBseVRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZXBseVRvLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdC8vIHRoaXMudG8uc3Vic2NyaWJlKCh2KSA9PiBjb25zb2xlLmxvZyh2KSk7XG5cblx0XHRrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLnRvLmZvY3VzZWQoKTpcblx0XHRcdFx0XHR0aGlzLnNMYXN0Rm9jdXNlZEZpZWxkID0gJ3RvJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmNjLmZvY3VzZWQoKTpcblx0XHRcdFx0XHR0aGlzLnNMYXN0Rm9jdXNlZEZpZWxkID0gJ2NjJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmJjYy5mb2N1c2VkKCk6XG5cdFx0XHRcdFx0dGhpcy5zTGFzdEZvY3VzZWRGaWVsZCA9ICdiY2MnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSkuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMuc3ViamVjdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3ViamVjdC5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmlzSHRtbCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0RHNuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5yZXF1ZXN0UmVhZFJlY2VpcHQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm1hcmtBc0ltcG9ydGFudCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zZW5kRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlbmRTdWNjZXNzQnV0U2F2ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZlZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNlbmRCdXR0b25TdWNjZXNzID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2VuZEVycm9yKCkgJiYgIXRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3IoKSk7XG5cblx0XHR0aGlzLnNlbmRFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNhdmVkRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNlbmRFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VuZEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVkRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNhdmVkRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNhdmVkRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZWRUaW1lID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLnNhdmVkVGltZVRleHQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0MCA8IHRoaXMuc2F2ZWRUaW1lKCkgPyBpMThuKCdDT01QT1NFL1NBVkVEX1RJTUUnLCB7ICdUSU1FJzogbW9tZW50b3JGb3JtYXQodGhpcy5zYXZlZFRpbWUoKSAtIDEsICdMVCcpIH0pIDogJydcblx0XHQpO1xuXG5cdFx0dGhpcy5lbXB0eVRvRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVtcHR5VG9FcnJvclRvb2x0aXAgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5lbXB0eVRvRXJyb3IoKSA/IGkxOG4oJ0NPTVBPU0UvRU1QVFlfVE9fRVJST1JfREVTQycpIDogJycpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNFcnJvclRvb2x0aXAgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoKTpcblx0XHRcdFx0XHRyZXN1bHQgPSBpMThuKCdDT01QT1NFL0FUVEFDSE1FTlRTX1VQTE9BRF9FUlJPUl9ERVNDJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcigpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ0NPTVBPU0UvQVRUQUNITUVOVFNfRVJST1JfREVTQycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaG93Q2MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNob3dCY2MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNjLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChmYWxzZSA9PT0gdGhpcy5zaG93Q2MoKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0NjKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5iY2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKGZhbHNlID09PSB0aGlzLnNob3dCY2MoKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0JjYyh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMucmVwbHlUby5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHRoaXMuc2hvd1JlcGx5VG8oKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd1JlcGx5VG8odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRyYWZ0Rm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5kcmFmdFVpZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2VuZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbSAmJiAhaXRlbS5jb21wbGV0ZSgpKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50c0luUmVhZHkgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmIGl0ZW0uY29tcGxldGUoKSkpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbSAmJiAnJyAhPT0gaXRlbS5lcnJvcigpKSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvckNvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50c0luRXJyb3IoKS5sZW5ndGgpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NDb3VudCA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3MoKS5sZW5ndGgpO1xuXHRcdHRoaXMuaXNEcmFmdEZvbGRlck1lc3NhZ2UgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5kcmFmdEZvbGRlcigpICYmICcnICE9PSB0aGlzLmRyYWZ0VWlkKCkpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzUGxhY2Uuc3Vic2NyaWJlKHRoaXMucmVzaXplclRyaWdnZXIpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0luRXJyb3JDb3VudC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoMCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbXBvc2VVcGxvYWRlckJ1dHRvbiA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5jb21wb3NlVXBsb2FkZXJEcm9wUGxhY2UgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuZHJhZ0FuZERyb3BFbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMSB9KTtcblx0XHR0aGlzLmRyYWdBbmREcm9wVmlzaWJsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxIH0pO1xuXHRcdHRoaXMuYXR0YWNoZU11bHRpcGxlQWxsb3dlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRkQXR0YWNobWVudEVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29tcG9zZUVkaXRvckFyZWEgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5pZGVudGl0aWVzID0gSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzO1xuXHRcdHRoaXMuaWRlbnRpdGllc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAoSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzKCksIChpdGVtKSA9PiAoe1xuXHRcdFx0XHQnaXRlbSc6IGl0ZW0sXG5cdFx0XHRcdCdvcHRWYWx1ZSc6IGl0ZW0uaWQoKSxcblx0XHRcdFx0J29wdFRleHQnOiBpdGVtLmZvcm1hdHRlZE5hbWUoKVxuXHRcdFx0fSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuY3VycmVudElkZW50aXR5ID0ga28ub2JzZXJ2YWJsZSh0aGlzLmlkZW50aXRpZXMoKVswXSA/IHRoaXMuaWRlbnRpdGllcygpWzBdIDogbnVsbCk7XG5cblx0XHR0aGlzLmN1cnJlbnRJZGVudGl0eS5leHRlbmQoe1xuXHRcdFx0dG9nZ2xlU3Vic2NyaWJlOiBbXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdChpZGVudGl0eSkgPT4ge1xuXHRcdFx0XHRcdGZFbWFpbE91dEluSGVscGVyKHRoaXMsIGlkZW50aXR5LCAnYmNjJyk7XG5cdFx0XHRcdFx0ZkVtYWlsT3V0SW5IZWxwZXIodGhpcywgaWRlbnRpdHksICdyZXBseVRvJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdChpZGVudGl0eSkgPT4ge1xuXHRcdFx0XHRcdGZFbWFpbE91dEluSGVscGVyKHRoaXMsIGlkZW50aXR5LCAnYmNjJywgdHJ1ZSk7XG5cdFx0XHRcdFx0ZkVtYWlsT3V0SW5IZWxwZXIodGhpcywgaWRlbnRpdHksICdyZXBseVRvJywgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9KTtcblxuXHRcdHRoaXMuY3VycmVudElkZW50aXR5VmlldyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLmN1cnJlbnRJZGVudGl0eSgpO1xuXHRcdFx0cmV0dXJuIGl0ZW0gPyBpdGVtLmZvcm1hdHRlZE5hbWUoKSA6ICd1bmtub3duJztcblx0XHR9KTtcblxuXHRcdHRoaXMudG8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW1wdHlUb0Vycm9yKCkgJiYgMCA8IHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLmVtcHR5VG9FcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoKSAmJiBpc0FycmF5KHZhbHVlKSAmJiAwID09PSB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMucmVzaXplciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiA1MCB9KTtcblxuXHRcdHRoaXMucmVzaXplci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMub0VkaXRvcikge1xuXHRcdFx0XHR0aGlzLm9FZGl0b3IucmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlU2VudE9yU2F2ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5zZW5kaW5nKCkgJiYgIXRoaXMuc2F2aW5nKCkpO1xuXG5cdFx0dGhpcy5zZW5kTWVzc2FnZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMuc2VuZE1lc3NhZ2VSZXNwb25zZSwgdGhpcyk7XG5cdFx0dGhpcy5zYXZlTWVzc2FnZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMuc2F2ZU1lc3NhZ2VSZXNwb25zZSwgdGhpcyk7XG5cblx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4ybScsICgpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5tb2RhbFZpc2liaWxpdHkoKSAmJlxuXHRcdFx0XHQhRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXJOb3RFbmFibGVkKCkgJiZcblx0XHRcdFx0U2V0dGluZ3NTdG9yZS5hbGxvd0RyYWZ0QXV0b3NhdmUoKSAmJlxuXHRcdFx0XHQhdGhpcy5pc0VtcHR5Rm9ybShmYWxzZSkgJiZcblx0XHRcdFx0IXRoaXMuc2F2aW5nKCkgJiZcblx0XHRcdFx0IXRoaXMuc2VuZGluZygpICYmXG5cdFx0XHRcdCF0aGlzLnNhdmVkRXJyb3IoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2hvd0NjLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHR0aGlzLnNob3dCY2Muc3Vic2NyaWJlKHRoaXMucmVzaXplclRyaWdnZXIpO1xuXHRcdHRoaXMuc2hvd1JlcGx5VG8uc3Vic2NyaWJlKHRoaXMucmVzaXplclRyaWdnZXIpO1xuXG5cdFx0dGhpcy5kcm9wYm94RW5hYmxlZCA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdHRoaXMuZHJpdmVFbmFibGVkID0ga28ub2JzZXJ2YWJsZShcblx0XHRcdGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCAmJlxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmXG5cdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsRHJpdmUnKSAmJlxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpICYmXG5cdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUFwaUtleScpXG5cdFx0KTtcblxuXHRcdHRoaXMuZHJpdmVWaXNpYmxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRyaXZlQ2FsbGJhY2sgPSBfLmJpbmQodGhpcy5kcml2ZUNhbGxiYWNrLCB0aGlzKTtcblxuXHRcdHRoaXMub25NZXNzYWdlVXBsb2FkQXR0YWNobWVudHMgPSBfLmJpbmQodGhpcy5vbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cywgdGhpcyk7XG5cblx0XHR0aGlzLmJEaXNhYmVDbG9zZU9uRXNjID0gdHJ1ZTtcblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Db21wb3NlO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXG5cdFx0dGhpcy5lbWFpbHNTb3VyY2UgPSBfLmJpbmQodGhpcy5lbWFpbHNTb3VyY2UsIHRoaXMpO1xuXHRcdHRoaXMuYXV0b3NhdmVGdW5jdGlvbiA9IF8uYmluZCh0aGlzLmF1dG9zYXZlRnVuY3Rpb24sIHRoaXMpO1xuXG5cdFx0dGhpcy5pVGltZXIgPSAwO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTZW50T3JTYXZlZCgpKVxuXHRzZW5kQ29tbWFuZCgpIHtcblx0XHRjb25zdCBzVG8gPSB0cmltKHRoaXMudG8oKSksXG5cdFx0XHRzQ2MgPSB0cmltKHRoaXMuY2MoKSksXG5cdFx0XHRzQmNjID0gdHJpbSh0aGlzLmJjYygpKTtcblx0XHRsZXQgc1NlbnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuZW1wdHlUb0Vycm9yKGZhbHNlKTtcblxuXHRcdGlmICgwIDwgdGhpcy5hdHRhY2htZW50c0luUHJvY2VzcygpLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoMCA8IHRoaXMuYXR0YWNobWVudHNJbkVycm9yKCkubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvckVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICgnJyA9PT0gc1RvICYmICcnID09PSBzQ2MgJiYgJycgPT09IHNCY2MpIHtcblx0XHRcdHRoaXMuZW1wdHlUb0Vycm9yKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbXB0eVRvRXJyb3IoKSAmJiAhdGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcigpICYmICF0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoKSkge1xuXHRcdFx0aWYgKFNldHRpbmdzU3RvcmUucmVwbHlTYW1lRm9sZGVyKCkpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQXJyYXkodGhpcy5hRHJhZnRJbmZvKSAmJlxuXHRcdFx0XHRcdDMgPT09IHRoaXMuYURyYWZ0SW5mby5sZW5ndGggJiZcblx0XHRcdFx0XHRpc05vcm1hbCh0aGlzLmFEcmFmdEluZm9bMl0pICYmXG5cdFx0XHRcdFx0MCA8IHRoaXMuYURyYWZ0SW5mb1syXS5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c1NlbnRGb2xkZXIgPSB0aGlzLmFEcmFmdEluZm9bMl07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCF0aGlzLmFsbG93Rm9sZGVycykge1xuXHRcdFx0XHRzU2VudEZvbGRlciA9IFVOVVNFRF9PUFRJT05fVkFMVUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgnJyA9PT0gc1NlbnRGb2xkZXIpIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyksIFtTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLlNlbnRdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VuZEVycm9yKGZhbHNlKTtcblx0XHRcdFx0dGhpcy5zZW5kaW5nKHRydWUpO1xuXG5cdFx0XHRcdGlmIChpc0FycmF5KHRoaXMuYURyYWZ0SW5mbykgJiYgMyA9PT0gdGhpcy5hRHJhZnRJbmZvLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGZsYWdzQ2FjaGUgPSBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUodGhpcy5hRHJhZnRJbmZvWzJdLCB0aGlzLmFEcmFmdEluZm9bMV0pO1xuXHRcdFx0XHRcdGlmIChmbGFnc0NhY2hlKSB7XG5cdFx0XHRcdFx0XHRpZiAoJ2ZvcndhcmQnID09PSB0aGlzLmFEcmFmdEluZm9bMF0pIHtcblx0XHRcdFx0XHRcdFx0ZmxhZ3NDYWNoZVszXSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmbGFnc0NhY2hlWzJdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2V0TWVzc2FnZUZsYWdzVG9DYWNoZSh0aGlzLmFEcmFmdEluZm9bMl0sIHRoaXMuYURyYWZ0SW5mb1sxXSwgZmxhZ3NDYWNoZSk7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHRcdFx0XHRcdHNldEZvbGRlckhhc2godGhpcy5hRHJhZnRJbmZvWzJdLCAnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c1NlbnRGb2xkZXIgPSBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBzU2VudEZvbGRlciA/ICcnIDogc1NlbnRGb2xkZXI7XG5cblx0XHRcdFx0c2V0Rm9sZGVySGFzaCh0aGlzLmRyYWZ0Rm9sZGVyKCksICcnKTtcblx0XHRcdFx0c2V0Rm9sZGVySGFzaChzU2VudEZvbGRlciwgJycpO1xuXG5cdFx0XHRcdFJlbW90ZS5zZW5kTWVzc2FnZShcblx0XHRcdFx0XHR0aGlzLnNlbmRNZXNzYWdlUmVzcG9uc2UsXG5cdFx0XHRcdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkoKSA/IHRoaXMuY3VycmVudElkZW50aXR5KCkuaWQoKSA6ICcnLFxuXHRcdFx0XHRcdHRoaXMuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0XHR0aGlzLmRyYWZ0VWlkKCksXG5cdFx0XHRcdFx0c1NlbnRGb2xkZXIsXG5cdFx0XHRcdFx0c1RvLFxuXHRcdFx0XHRcdHRoaXMuY2MoKSxcblx0XHRcdFx0XHR0aGlzLmJjYygpLFxuXHRcdFx0XHRcdHRoaXMucmVwbHlUbygpLFxuXHRcdFx0XHRcdHRoaXMuc3ViamVjdCgpLFxuXHRcdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5pc0h0bWwoKSA6IGZhbHNlLFxuXHRcdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5nZXREYXRhKHRydWUpIDogJycsXG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyQXR0YWNobWVudHNGb3JTZW5kT3JTYXZlKCksXG5cdFx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvLFxuXHRcdFx0XHRcdHRoaXMuc0luUmVwbHlUbyxcblx0XHRcdFx0XHR0aGlzLnNSZWZlcmVuY2VzLFxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdERzbigpLFxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdFJlYWRSZWNlaXB0KCksXG5cdFx0XHRcdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2VudE9yU2F2ZWQoKSlcblx0c2F2ZUNvbW1hbmQoKSB7XG5cdFx0aWYgKCF0aGlzLmFsbG93Rm9sZGVycykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChGb2xkZXJTdG9yZS5kcmFmdEZvbGRlck5vdEVuYWJsZWQoKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyksIFtTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLkRyYWZ0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZWRFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnNhdmluZyh0cnVlKTtcblxuXHRcdFx0dGhpcy5hdXRvc2F2ZVN0YXJ0KCk7XG5cblx0XHRcdHNldEZvbGRlckhhc2goRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSwgJycpO1xuXG5cdFx0XHRSZW1vdGUuc2F2ZU1lc3NhZ2UoXG5cdFx0XHRcdHRoaXMuc2F2ZU1lc3NhZ2VSZXNwb25zZSxcblx0XHRcdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkoKSA/IHRoaXMuY3VycmVudElkZW50aXR5KCkuaWQoKSA6ICcnLFxuXHRcdFx0XHR0aGlzLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdHRoaXMuZHJhZnRVaWQoKSxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0dGhpcy50bygpLFxuXHRcdFx0XHR0aGlzLmNjKCksXG5cdFx0XHRcdHRoaXMuYmNjKCksXG5cdFx0XHRcdHRoaXMucmVwbHlUbygpLFxuXHRcdFx0XHR0aGlzLnN1YmplY3QoKSxcblx0XHRcdFx0dGhpcy5vRWRpdG9yID8gdGhpcy5vRWRpdG9yLmlzSHRtbCgpIDogZmFsc2UsXG5cdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5nZXREYXRhKHRydWUpIDogJycsXG5cdFx0XHRcdHRoaXMucHJlcGVhckF0dGFjaG1lbnRzRm9yU2VuZE9yU2F2ZSgpLFxuXHRcdFx0XHR0aGlzLmFEcmFmdEluZm8sXG5cdFx0XHRcdHRoaXMuc0luUmVwbHlUbyxcblx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyxcblx0XHRcdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQoKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmlzRHJhZnRGb2xkZXJNZXNzYWdlKCkpXG5cdGRlbGV0ZUNvbW1hbmQoKSB7XG5cdFx0Y29uc3QgUG9wdXBzQXNrVmlld01vZGVsID0gcmVxdWlyZSgnVmlldy9Qb3B1cC9Bc2snKTtcblx0XHRpZiAoIWlzUG9wdXBWaXNpYmxlKFBvcHVwc0Fza1ZpZXdNb2RlbCkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKFBvcHVwc0Fza1ZpZXdNb2RlbCwgW1xuXHRcdFx0XHRpMThuKCdQT1BVUFNfQVNLL0RFU0NfV0FOVF9ERUxFVEVfTUVTU0FHRVMnKSxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXJXaXRob3V0Q2hlY2sodGhpcy5kcmFmdEZvbGRlcigpLCBbdGhpcy5kcmFmdFVpZCgpXSk7XG5cdFx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoQ29tcG9zZVBvcHVwVmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVNlbnRPclNhdmVkKCkpXG5cdHNraXBDb21tYW5kKCkge1xuXHRcdHRoaXMuYlNraXBOZXh0SGlkZSA9IHRydWU7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLm1vZGFsVmlzaWJpbGl0eSgpICYmXG5cdFx0XHQhdGhpcy5zYXZpbmcoKSAmJlxuXHRcdFx0IXRoaXMuc2VuZGluZygpICYmXG5cdFx0XHQhRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXJOb3RFbmFibGVkKCkgJiZcblx0XHRcdFNldHRpbmdzU3RvcmUuYWxsb3dEcmFmdEF1dG9zYXZlKClcblx0XHQpIHtcblx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHR9XG5cblx0XHR0aGlzLnRyeVRvQ2xvc2VQb3B1cCgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuYWxsb3dDb250YWN0cylcblx0Y29udGFjdHNDb21tYW5kKCkge1xuXHRcdGlmICh0aGlzLmFsbG93Q29udGFjdHMpIHtcblx0XHRcdHRoaXMuc2tpcENvbW1hbmQoKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db250YWN0cycpLCBbdHJ1ZSwgdGhpcy5zTGFzdEZvY3VzZWRGaWVsZF0pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuZHJvcGJveEVuYWJsZWQoKSlcblx0ZHJvcGJveENvbW1hbmQoKSB7XG5cdFx0aWYgKHdpbmRvdy5Ecm9wYm94KSB7XG5cdFx0XHR3aW5kb3cuRHJvcGJveC5jaG9vc2Uoe1xuXHRcdFx0XHRzdWNjZXNzOiAoZmlsZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoZmlsZXMgJiYgZmlsZXNbMF0gJiYgZmlsZXNbMF0ubGluaykge1xuXHRcdFx0XHRcdFx0dGhpcy5hZGREcm9wYm94QXR0YWNobWVudChmaWxlc1swXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsaW5rVHlwZTogJ2RpcmVjdCcsXG5cdFx0XHRcdG11bHRpc2VsZWN0OiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuZHJpdmVFbmFibGVkKCkpXG5cdGRyaXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLmRyaXZlT3BlblBvcHVwKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRhdXRvc2F2ZUZ1bmN0aW9uKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiZcblx0XHRcdCFGb2xkZXJTdG9yZS5kcmFmdEZvbGRlck5vdEVuYWJsZWQoKSAmJlxuXHRcdFx0U2V0dGluZ3NTdG9yZS5hbGxvd0RyYWZ0QXV0b3NhdmUoKSAmJlxuXHRcdFx0IXRoaXMuaXNFbXB0eUZvcm0oZmFsc2UpICYmXG5cdFx0XHQhdGhpcy5zYXZpbmcoKSAmJlxuXHRcdFx0IXRoaXMuc2VuZGluZygpICYmXG5cdFx0XHQhdGhpcy5zYXZlZEVycm9yKClcblx0XHQpIHtcblx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHR9XG5cblx0XHR0aGlzLmF1dG9zYXZlU3RhcnQoKTtcblx0fVxuXG5cdGF1dG9zYXZlU3RhcnQoKSB7XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlUaW1lcik7XG5cdFx0dGhpcy5pVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmF1dG9zYXZlRnVuY3Rpb24sIE1hZ2ljcy5UaW1lMW0pO1xuXHR9XG5cblx0YXV0b3NhdmVTdG9wKCkge1xuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pVGltZXIpO1xuXHR9XG5cblx0ZW1haWxzU291cmNlKG9EYXRhLCBmUmVzcG9uc2UpIHtcblx0XHRnZXRBcHAoKS5nZXRBdXRvY29tcGxldGUob0RhdGEudGVybSwgKGFEYXRhKSA9PiB7XG5cdFx0XHRmUmVzcG9uc2UoXy5tYXAoYURhdGEsIChvRW1haWxJdGVtKSA9PiBvRW1haWxJdGVtLnRvTGluZShmYWxzZSkpKTtcblx0XHR9KTtcblx0fVxuXG5cdG9wZW5PcGVuUGdwUG9wdXAoKSB7XG5cdFx0aWYgKFBncFN0b3JlLmNhcGFPcGVuUEdQKCkgJiYgdGhpcy5vRWRpdG9yICYmICF0aGlzLm9FZGl0b3IuaXNIdG1sKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2VPcGVuUGdwJyksIFtcblx0XHRcdFx0KHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IHtcblx0XHRcdFx0XHRcdGVkaXRvci5zZXRQbGFpbihyZXN1bHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLm9FZGl0b3IuZ2V0RGF0YShmYWxzZSksXG5cdFx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KCksXG5cdFx0XHRcdHRoaXMudG8oKSxcblx0XHRcdFx0dGhpcy5jYygpLFxuXHRcdFx0XHR0aGlzLmJjYygpXG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHRyZWxvYWREcmFmdEZvbGRlcigpIHtcblx0XHRjb25zdCBkcmFmdEZvbGRlciA9IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCk7XG5cdFx0aWYgKCcnICE9PSBkcmFmdEZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSBkcmFmdEZvbGRlcikge1xuXHRcdFx0c2V0Rm9sZGVySGFzaChkcmFmdEZvbGRlciwgJycpO1xuXHRcdFx0aWYgKEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpID09PSBkcmFmdEZvbGRlcikge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCh0cnVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdldEFwcCgpLmZvbGRlckluZm9ybWF0aW9uKGRyYWZ0Rm9sZGVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmaW5kSWRlbnRpdHlCeU1lc3NhZ2UoY29tcG9zZVR5cGUsIG1lc3NhZ2UpIHtcblx0XHRsZXQgcmVzdWx0SW5kZXggPSAxMDAwLFxuXHRcdFx0cmVzdWx0SWRlbnRpdHkgPSBudWxsO1xuXHRcdGNvbnN0IGlkZW50aXRpZXMgPSBJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMoKSxcblx0XHRcdGlkZW50aXRpZXNDYWNoZSA9IHt9LFxuXHRcdFx0ZkVhY2hIZWxwZXIgPSAoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmVtYWlsICYmIGlkZW50aXRpZXNDYWNoZVtpdGVtLmVtYWlsXSkge1xuXHRcdFx0XHRcdGlmICghcmVzdWx0SWRlbnRpdHkgfHwgcmVzdWx0SW5kZXggPiBpZGVudGl0aWVzQ2FjaGVbaXRlbS5lbWFpbF1bMV0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdElkZW50aXR5ID0gaWRlbnRpdGllc0NhY2hlW2l0ZW0uZW1haWxdWzBdO1xuXHRcdFx0XHRcdFx0cmVzdWx0SW5kZXggPSBpZGVudGl0aWVzQ2FjaGVbaXRlbS5lbWFpbF1bMV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Xy5lYWNoKGlkZW50aXRpZXMsIChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0aWRlbnRpdGllc0NhY2hlW2l0ZW0uZW1haWwoKV0gPSBbaXRlbSwgaW5kZXhdO1xuXHRcdH0pO1xuXG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdHN3aXRjaCAoY29tcG9zZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5FbXB0eTpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseTpcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5Gb3J3YXJkOlxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQ6XG5cdFx0XHRcdFx0Xy5lYWNoKF8udW5pb24obWVzc2FnZS50bywgbWVzc2FnZS5jYywgbWVzc2FnZS5iY2MpLCBmRWFjaEhlbHBlcik7XG5cdFx0XHRcdFx0aWYgKCFyZXN1bHRJZGVudGl0eSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKG1lc3NhZ2UuZGVsaXZlcmVkVG8sIGZFYWNoSGVscGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRHJhZnQ6XG5cdFx0XHRcdFx0Xy5lYWNoKF8udW5pb24obWVzc2FnZS5mcm9tLCBtZXNzYWdlLnJlcGx5VG8pLCBmRWFjaEhlbHBlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0SWRlbnRpdHkgfHwgaWRlbnRpdGllc1swXSB8fCBudWxsO1xuXHR9XG5cblx0c2VsZWN0SWRlbnRpdHkoaWRlbnRpdHkpIHtcblx0XHRpZiAoaWRlbnRpdHkgJiYgaWRlbnRpdHkuaXRlbSkge1xuXHRcdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkoaWRlbnRpdHkuaXRlbSk7XG5cdFx0XHR0aGlzLnNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eS5pdGVtKTtcblx0XHR9XG5cdH1cblxuXHRzZW5kTWVzc2FnZVJlc3BvbnNlKHN0YXR1c1Jlc3VsdCwgZGF0YSkge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdG1lc3NhZ2UgPSAnJztcblxuXHRcdHRoaXMuc2VuZGluZyhmYWxzZSk7XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc3RhdHVzUmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2xvc2VDb21tYW5kJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiYgIXJlc3VsdCkge1xuXHRcdFx0aWYgKGRhdGEgJiYgTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSA9PT0gZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0dGhpcy5zZW5kU3VjY2Vzc0J1dFNhdmVFcnJvcih0cnVlKTtcblx0XHRcdFx0dGhpcy5zYXZlZEVycm9yRGVzYyh0cmltKGkxOG4oJ0NPTVBPU0UvU0FWRURfRVJST1JfT05fU0VORCcpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlID0gZ2V0Tm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdGRhdGEgJiYgZGF0YS5FcnJvckNvZGUgPyBkYXRhLkVycm9yQ29kZSA6IE5vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UsXG5cdFx0XHRcdFx0ZGF0YSAmJiBkYXRhLkVycm9yTWVzc2FnZSA/IGRhdGEuRXJyb3JNZXNzYWdlIDogJydcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLnNlbmRFcnJvcih0cnVlKTtcblx0XHRcdFx0dGhpcy5zZW5kRXJyb3JEZXNjKG1lc3NhZ2UgfHwgZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnJlbG9hZERyYWZ0Rm9sZGVyKCk7XG5cdH1cblxuXHRzYXZlTWVzc2FnZVJlc3BvbnNlKHN0YXR1c1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc3RhdHVzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0aWYgKG9EYXRhLlJlc3VsdC5OZXdGb2xkZXIgJiYgb0RhdGEuUmVzdWx0Lk5ld1VpZCkge1xuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmICh0aGlzLmJGcm9tRHJhZnQpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKTtcblx0XHRcdFx0XHRpZiAobWVzc2FnZSAmJiB0aGlzLmRyYWZ0Rm9sZGVyKCkgPT09IG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgJiYgdGhpcy5kcmFmdFVpZCgpID09PSBtZXNzYWdlLnVpZCkge1xuXHRcdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5kcmFmdEZvbGRlcihvRGF0YS5SZXN1bHQuTmV3Rm9sZGVyKTtcblx0XHRcdFx0dGhpcy5kcmFmdFVpZChvRGF0YS5SZXN1bHQuTmV3VWlkKTtcblxuXHRcdFx0XHR0aGlzLnNhdmVkVGltZSh3aW5kb3cuTWF0aC5yb3VuZChuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSk7XG5cblx0XHRcdFx0aWYgKHRoaXMuYkZyb21EcmFmdCkge1xuXHRcdFx0XHRcdHNldEZvbGRlckhhc2godGhpcy5kcmFmdEZvbGRlcigpLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0dGhpcy5zYXZlZEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5zYXZlZEVycm9yRGVzYyhnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVsb2FkRHJhZnRGb2xkZXIoKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmF1dG9zYXZlU3RvcCgpO1xuXG5cdFx0aWYgKCF0aGlzLmJTa2lwTmV4dEhpZGUpIHtcblx0XHRcdEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQoZmFsc2UpO1xuXHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdH1cblxuXHRcdHRoaXMuYlNraXBOZXh0SGlkZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy50by5mb2N1c2VkKGZhbHNlKTtcblxuXHRcdHJvdXRlT24oKTtcblx0fVxuXG5cdGVkaXRvcihmT25Jbml0KSB7XG5cdFx0aWYgKGZPbkluaXQpIHtcblx0XHRcdGlmICghdGhpcy5vRWRpdG9yICYmIHRoaXMuY29tcG9zZUVkaXRvckFyZWEoKSkge1xuXHRcdFx0XHQvLyBfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5vRWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoXG5cdFx0XHRcdFx0dGhpcy5jb21wb3NlRWRpdG9yQXJlYSgpLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0Zk9uSW5pdCh0aGlzLm9FZGl0b3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNpemVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0KGJIdG1sKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmlzSHRtbCghIWJIdG1sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vIH0sIDEwMDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm9FZGl0b3IpIHtcblx0XHRcdFx0Zk9uSW5pdCh0aGlzLm9FZGl0b3IpO1xuXHRcdFx0XHR0aGlzLnJlc2l6ZXJUcmlnZ2VyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y29udmVyU2lnbmF0dXJlKHNpZ25hdHVyZSkge1xuXHRcdGxldCBsaW1pdCA9IDEwLFxuXHRcdFx0ZnJvbUxpbmUgPSAnJztcblxuXHRcdGNvbnN0IG1vbWVudHMgPSBbXSxcblx0XHRcdG1vbWVudFJlZ3ggPSAve3tNT01FTlQ6KFtefV0rKX19L2c7XG5cblx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgvW1xccl0vZywgJycpO1xuXG5cdFx0ZnJvbUxpbmUgPSB0aGlzLm9MYXN0TWVzc2FnZSA/IHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcih0aGlzLm9MYXN0TWVzc2FnZS5mcm9tLCB0cnVlKSA6ICcnO1xuXHRcdGlmICgnJyAhPT0gZnJvbUxpbmUpIHtcblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST00tRlVMTH19L2csIGZyb21MaW5lKTtcblxuXHRcdFx0aWYgKC0xID09PSBmcm9tTGluZS5pbmRleE9mKCcgJykgJiYgMCA8IGZyb21MaW5lLmluZGV4T2YoJ0AnKSkge1xuXHRcdFx0XHRmcm9tTGluZSA9IGZyb21MaW5lLnJlcGxhY2UoL0BbXFxTXSsvLCAnJyk7XG5cdFx0XHR9XG5cblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST019fS9nLCBmcm9tTGluZSk7XG5cdFx0fVxuXG5cdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL1tcXHNdezEsMn17e0ZST019fS9nLCAne3tGUk9NfX0nKTtcblx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgvW1xcc117MSwyfXt7RlJPTS1GVUxMfX0vZywgJ3t7RlJPTS1GVUxMfX0nKTtcblxuXHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST019fS9nLCAnJyk7XG5cdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL3t7RlJPTS1GVUxMfX0vZywgJycpO1xuXG5cdFx0aWYgKC0xIDwgc2lnbmF0dXJlLmluZGV4T2YoJ3t7REFURX19JykpIHtcblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0RBVEV9fS9nLCBtb21lbnRvckZvcm1hdCgwLCAnbGxsbCcpKTtcblx0XHR9XG5cblx0XHRpZiAoLTEgPCBzaWduYXR1cmUuaW5kZXhPZigne3tUSU1FfX0nKSkge1xuXHRcdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL3t7VElNRX19L2csIG1vbWVudG9yRm9ybWF0KDAsICdMVCcpKTtcblx0XHR9XG5cdFx0aWYgKC0xIDwgc2lnbmF0dXJlLmluZGV4T2YoJ3t7TU9NRU5UOicpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgbWF0Y2ggPSBudWxsO1xuXHRcdFx0XHR3aGlsZSAobnVsbCAhPT0gKG1hdGNoID0gbW9tZW50UmVneC5leGVjKHNpZ25hdHVyZSkpKSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25kLWFzc2lnblxuXHRcdFx0XHRcdGlmIChtYXRjaCAmJiBtYXRjaFswXSAmJiBtYXRjaFsxXSkge1xuXHRcdFx0XHRcdFx0bW9tZW50cy5wdXNoKFttYXRjaFswXSwgbWF0Y2hbMV1dKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRsaW1pdCAtPSAxO1xuXHRcdFx0XHRcdGlmICgwID09PSBsaW1pdCkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG1vbWVudHMgJiYgMCA8IG1vbWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKG1vbWVudHMsIChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZShkYXRhWzBdLCBtb21lbnRvckZvcm1hdCgwLCBkYXRhWzFdKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgve3tNT01FTlQ6W159XSt9fS9nLCAnJyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNpZ25hdHVyZTtcblx0fVxuXG5cdHNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eSkge1xuXHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4ge1xuXHRcdFx0XHRsZXQgaXNIdG1sID0gZmFsc2UsXG5cdFx0XHRcdFx0c2lnbmF0dXJlID0gaWRlbnRpdHkuc2lnbmF0dXJlKCk7XG5cblx0XHRcdFx0aWYgKCcnICE9PSBzaWduYXR1cmUpIHtcblx0XHRcdFx0XHRpZiAoJzpIVE1MOicgPT09IHNpZ25hdHVyZS5zdWJzdHIoMCwgNikpIHtcblx0XHRcdFx0XHRcdGlzSHRtbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUuc3Vic3RyKDYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVkaXRvci5zZXRTaWduYXR1cmUodGhpcy5jb252ZXJTaWduYXR1cmUoc2lnbmF0dXJlKSwgaXNIdG1sLCAhIWlkZW50aXR5LnNpZ25hdHVyZUluc2VydEJlZm9yZSgpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHR5cGUgPSBDb21wb3NlVHlwZS5FbXB0eVxuXHQgKiBAcGFyYW0gez9NZXNzYWdlTW9kZWx8QXJyYXk9fSBvTWVzc2FnZU9yQXJyYXkgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhVG9FbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQ2NFbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQmNjRW1haWxzID0gbnVsbFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNDdXN0b21TdWJqZWN0ID0gbnVsbFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNDdXN0b21QbGFpblRleHQgPSBudWxsXG5cdCAqL1xuXHRvblNob3codHlwZSwgb01lc3NhZ2VPckFycmF5LCBhVG9FbWFpbHMsIGFDY0VtYWlscywgYUJjY0VtYWlscywgc0N1c3RvbVN1YmplY3QsIHNDdXN0b21QbGFpblRleHQpIHtcblx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0dGhpcy5hdXRvc2F2ZVN0YXJ0KCk7XG5cblx0XHRpZiAoQXBwU3RvcmUuY29tcG9zZUluRWRpdCgpKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBDb21wb3NlVHlwZS5FbXB0eTtcblx0XHRcdGlmIChDb21wb3NlVHlwZS5FbXB0eSAhPT0gdHlwZSkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Bc2snKSwgW1xuXHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRElTQ0FSRF9VTlNBVkVEX0RBVEEnKSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmluaXRPblNob3codHlwZSwgb01lc3NhZ2VPckFycmF5LCBhVG9FbWFpbHMsIGFDY0VtYWlscywgYUJjY0VtYWlscywgc0N1c3RvbVN1YmplY3QsIHNDdXN0b21QbGFpblRleHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFkZEVtYWlsc1RvKHRoaXMudG8sIGFUb0VtYWlscyk7XG5cdFx0XHRcdHRoaXMuYWRkRW1haWxzVG8odGhpcy5jYywgYUNjRW1haWxzKTtcblx0XHRcdFx0dGhpcy5hZGRFbWFpbHNUbyh0aGlzLmJjYywgYUJjY0VtYWlscyk7XG5cblx0XHRcdFx0aWYgKGlzTm9ybWFsKHNDdXN0b21TdWJqZWN0KSAmJiAnJyAhPT0gc0N1c3RvbVN1YmplY3QgJiYgJycgPT09IHRoaXMuc3ViamVjdCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHNDdXN0b21TdWJqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmluaXRPblNob3codHlwZSwgb01lc3NhZ2VPckFycmF5LCBhVG9FbWFpbHMsIGFDY0VtYWlscywgYUJjY0VtYWlscywgc0N1c3RvbVN1YmplY3QsIHNDdXN0b21QbGFpblRleHQpO1xuXHRcdH1cblx0fVxuXG5cdG9uV2FybVVwKCkge1xuXHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSAmJiAhdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4gZWRpdG9yLm1vZGVUb2dnbGUoZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZktvVmFsdWVcblx0ICogQHBhcmFtIHtBcnJheX0gZW1haWxzXG5cdCAqL1xuXHRhZGRFbWFpbHNUbyhmS29WYWx1ZSwgZW1haWxzKSB7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShlbWFpbHMpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRyaW0oZktvVmFsdWUoKSksXG5cdFx0XHRcdHZhbHVlcyA9IF8udW5pcShfLmNvbXBhY3QoXy5tYXAoZW1haWxzLCAoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLnRvTGluZShmYWxzZSkgOiBudWxsKSkpKTtcblxuXHRcdFx0ZktvVmFsdWUodmFsdWUgKyAoJycgPT09IHZhbHVlID8gJycgOiAnLCAnKSArIHRyaW0odmFsdWVzLmpvaW4oJywgJykpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtBcnJheX0gYUxpc3Rcblx0ICogQHBhcmFtIHtib29sZWFufSBiRnJpZW5kbHlcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYUxpc3QsIGJGcmllbmRseSkge1xuXHRcdGJGcmllbmRseSA9ICEhYkZyaWVuZGx5O1xuXHRcdHJldHVybiBfLm1hcChhTGlzdCwgKGl0ZW0pID0+IGl0ZW0udG9MaW5lKGJGcmllbmRseSkpLmpvaW4oJywgJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzVHlwZSA9IENvbXBvc2VUeXBlLkVtcHR5XG5cdCAqIEBwYXJhbSB7P01lc3NhZ2VNb2RlbHxBcnJheT19IG9NZXNzYWdlT3JBcnJheSA9IG51bGxcblx0ICogQHBhcmFtIHtBcnJheT19IGFUb0VtYWlscyA9IG51bGxcblx0ICogQHBhcmFtIHtBcnJheT19IGFDY0VtYWlscyA9IG51bGxcblx0ICogQHBhcmFtIHtBcnJheT19IGFCY2NFbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0N1c3RvbVN1YmplY3QgPSBudWxsXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0N1c3RvbVBsYWluVGV4dCA9IG51bGxcblx0ICovXG5cdGluaXRPblNob3coc1R5cGUsIG9NZXNzYWdlT3JBcnJheSwgYVRvRW1haWxzLCBhQ2NFbWFpbHMsIGFCY2NFbWFpbHMsIHNDdXN0b21TdWJqZWN0LCBzQ3VzdG9tUGxhaW5UZXh0KSB7XG5cdFx0QXBwU3RvcmUuY29tcG9zZUluRWRpdCh0cnVlKTtcblxuXHRcdGxldCBzRnJvbSA9ICcnLFxuXHRcdFx0c1RvID0gJycsXG5cdFx0XHRzQ2MgPSAnJyxcblx0XHRcdHNEYXRlID0gJycsXG5cdFx0XHRzU3ViamVjdCA9ICcnLFxuXHRcdFx0c1RleHQgPSAnJyxcblx0XHRcdHNSZXBseVRpdGxlID0gJycsXG5cdFx0XHRpZGVudGl0eSA9IG51bGwsXG5cdFx0XHRhRHJhZnRJbmZvID0gbnVsbCxcblx0XHRcdG1lc3NhZ2UgPSBudWxsO1xuXG5cdFx0Y29uc3QgZXhjbHVkZUVtYWlsID0ge30sXG5cdFx0XHRtRW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWwoKSxcblx0XHRcdGxpbmVDb21wb3NlVHlwZSA9IHNUeXBlIHx8IENvbXBvc2VUeXBlLkVtcHR5O1xuXG5cdFx0b01lc3NhZ2VPckFycmF5ID0gb01lc3NhZ2VPckFycmF5IHx8IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlT3JBcnJheSAmJiBpc05vcm1hbChvTWVzc2FnZU9yQXJyYXkpKSB7XG5cdFx0XHRtZXNzYWdlID1cblx0XHRcdFx0aXNBcnJheShvTWVzc2FnZU9yQXJyYXkpICYmIDEgPT09IG9NZXNzYWdlT3JBcnJheS5sZW5ndGhcblx0XHRcdFx0XHQ/IG9NZXNzYWdlT3JBcnJheVswXVxuXHRcdFx0XHRcdDogIWlzQXJyYXkob01lc3NhZ2VPckFycmF5KVxuXHRcdFx0XHRcdD8gb01lc3NhZ2VPckFycmF5XG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdH1cblxuXHRcdHRoaXMub0xhc3RNZXNzYWdlID0gbWVzc2FnZTtcblxuXHRcdGlmIChudWxsICE9PSBtRW1haWwpIHtcblx0XHRcdGV4Y2x1ZGVFbWFpbFttRW1haWxdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0aGlzLnJlc2V0KCk7XG5cblx0XHRpZGVudGl0eSA9IHRoaXMuZmluZElkZW50aXR5QnlNZXNzYWdlKGxpbmVDb21wb3NlVHlwZSwgbWVzc2FnZSk7XG5cdFx0aWYgKGlkZW50aXR5KSB7XG5cdFx0XHRleGNsdWRlRW1haWxbaWRlbnRpdHkuZW1haWwoKV0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYVRvRW1haWxzKSkge1xuXHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYVRvRW1haWxzKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhQ2NFbWFpbHMpKSB7XG5cdFx0XHR0aGlzLmNjKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihhQ2NFbWFpbHMpKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGFCY2NFbWFpbHMpKSB7XG5cdFx0XHR0aGlzLmJjYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYUJjY0VtYWlscykpO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gbGluZUNvbXBvc2VUeXBlICYmIG1lc3NhZ2UpIHtcblx0XHRcdHNEYXRlID0gbW9tZW50b3JGb3JtYXQobWVzc2FnZS5kYXRlVGltZVN0YW1wSW5VVEMoKSwgJ0ZVTEwnKTtcblx0XHRcdHNTdWJqZWN0ID0gbWVzc2FnZS5zdWJqZWN0KCk7XG5cdFx0XHRhRHJhZnRJbmZvID0gbWVzc2FnZS5hRHJhZnRJbmZvO1xuXG5cdFx0XHRjb25zdCBjbG9uZWRUZXh0ID0gJChtZXNzYWdlLmJvZHkpLmNsb25lKCk7XG5cdFx0XHRpZiAoY2xvbmVkVGV4dCkge1xuXHRcdFx0XHRjbGVhckJxU3dpdGNoZXIoY2xvbmVkVGV4dCk7XG5cblx0XHRcdFx0c1RleHQgPSBjbG9uZWRUZXh0Lmh0bWwoKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3BseUFsbFBhcnRzID0gbnVsbDtcblx0XHRcdHN3aXRjaCAobGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRW1wdHk6XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseTpcblx0XHRcdFx0XHR0aGlzLnRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLnJlcGx5RW1haWxzKGV4Y2x1ZGVFbWFpbCkpKTtcblx0XHRcdFx0XHR0aGlzLnN1YmplY3QocmVwbHlTdWJqZWN0QWRkKCdSZScsIHNTdWJqZWN0KSk7XG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIGxpbmVDb21wb3NlVHlwZSk7XG5cdFx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvID0gWydyZXBseScsIG1lc3NhZ2UudWlkLCBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3XTtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNNZXNzYWdlSWQ7XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IHRyaW0odGhpcy5zSW5SZXBseVRvICsgJyAnICsgbWVzc2FnZS5zUmVmZXJlbmNlcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0XHRyZXNwbHlBbGxQYXJ0cyA9IG1lc3NhZ2UucmVwbHlBbGxFbWFpbHMoZXhjbHVkZUVtYWlsKTtcblx0XHRcdFx0XHR0aGlzLnRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihyZXNwbHlBbGxQYXJ0c1swXSkpO1xuXHRcdFx0XHRcdHRoaXMuY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKHJlc3BseUFsbFBhcnRzWzFdKSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHJlcGx5U3ViamVjdEFkZCgnUmUnLCBzU3ViamVjdCkpO1xuXHRcdFx0XHRcdHRoaXMucHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCBsaW5lQ29tcG9zZVR5cGUpO1xuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IFsncmVwbHknLCBtZXNzYWdlLnVpZCwgbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhd107XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zTWVzc2FnZUlkO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSB0cmltKHRoaXMuc0luUmVwbHlUbyArICcgJyArIG1lc3NhZ2UucmVmZXJlbmNlcygpKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmQ6XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHJlcGx5U3ViamVjdEFkZCgnRndkJywgc1N1YmplY3QpKTtcblx0XHRcdFx0XHR0aGlzLnByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMobWVzc2FnZSwgbGluZUNvbXBvc2VUeXBlKTtcblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBbJ2ZvcndhcmQnLCBtZXNzYWdlLnVpZCwgbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhd107XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zTWVzc2FnZUlkO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSB0cmltKHRoaXMuc0luUmVwbHlUbyArICcgJyArIG1lc3NhZ2Uuc1JlZmVyZW5jZXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudDpcblx0XHRcdFx0XHR0aGlzLnN1YmplY3QocmVwbHlTdWJqZWN0QWRkKCdGd2QnLCBzU3ViamVjdCkpO1xuXHRcdFx0XHRcdHRoaXMucHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCBsaW5lQ29tcG9zZVR5cGUpO1xuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IFsnZm9yd2FyZCcsIG1lc3NhZ2UudWlkLCBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3XTtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNNZXNzYWdlSWQ7XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IHRyaW0odGhpcy5zSW5SZXBseVRvICsgJyAnICsgbWVzc2FnZS5zUmVmZXJlbmNlcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5EcmFmdDpcblx0XHRcdFx0XHR0aGlzLnRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLnRvKSk7XG5cdFx0XHRcdFx0dGhpcy5jYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5jYykpO1xuXHRcdFx0XHRcdHRoaXMuYmNjKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLmJjYykpO1xuXHRcdFx0XHRcdHRoaXMucmVwbHlUbyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5yZXBseVRvKSk7XG5cblx0XHRcdFx0XHR0aGlzLmJGcm9tRHJhZnQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5kcmFmdEZvbGRlcihtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHR0aGlzLmRyYWZ0VWlkKG1lc3NhZ2UudWlkKTtcblxuXHRcdFx0XHRcdHRoaXMuc3ViamVjdChzU3ViamVjdCk7XG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIGxpbmVDb21wb3NlVHlwZSk7XG5cblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBpc05vbkVtcHR5QXJyYXkoYURyYWZ0SW5mbykgJiYgMyA9PT0gYURyYWZ0SW5mby5sZW5ndGggPyBhRHJhZnRJbmZvIDogbnVsbDtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNJblJlcGx5VG87XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IG1lc3NhZ2Uuc1JlZmVyZW5jZXM7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5FZGl0QXNOZXc6XG5cdFx0XHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS50bykpO1xuXHRcdFx0XHRcdHRoaXMuY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UuY2MpKTtcblx0XHRcdFx0XHR0aGlzLmJjYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5iY2MpKTtcblx0XHRcdFx0XHR0aGlzLnJlcGx5VG8odGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UucmVwbHlUbykpO1xuXG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHNTdWJqZWN0KTtcblx0XHRcdFx0XHR0aGlzLnByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMobWVzc2FnZSwgbGluZUNvbXBvc2VUeXBlKTtcblxuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IGlzTm9uRW1wdHlBcnJheShhRHJhZnRJbmZvKSAmJiAzID09PSBhRHJhZnRJbmZvLmxlbmd0aCA/IGFEcmFmdEluZm8gOiBudWxsO1xuXHRcdFx0XHRcdHRoaXMuc0luUmVwbHlUbyA9IG1lc3NhZ2Uuc0luUmVwbHlUbztcblx0XHRcdFx0XHR0aGlzLnNSZWZlcmVuY2VzID0gbWVzc2FnZS5zUmVmZXJlbmNlcztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXG5cdFx0XHRzd2l0Y2ggKGxpbmVDb21wb3NlVHlwZSkge1xuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLlJlcGx5OlxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLlJlcGx5QWxsOlxuXHRcdFx0XHRcdHNGcm9tID0gbWVzc2FnZS5mcm9tVG9MaW5lKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRzUmVwbHlUaXRsZSA9IGkxOG4oJ0NPTVBPU0UvUkVQTFlfTUVTU0FHRV9USVRMRScsIHtcblx0XHRcdFx0XHRcdCdEQVRFVElNRSc6IHNEYXRlLFxuXHRcdFx0XHRcdFx0J0VNQUlMJzogc0Zyb21cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHNUZXh0ID0gJzxiciAvPjxiciAvPicgKyBzUmVwbHlUaXRsZSArICc6JyArICc8YnIgLz48YnIgLz4nICsgJzxibG9ja3F1b3RlPicgKyB0cmltKHNUZXh0KSArICc8L2Jsb2NrcXVvdGU+JztcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZDpcblx0XHRcdFx0XHRzRnJvbSA9IG1lc3NhZ2UuZnJvbVRvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c1RvID0gbWVzc2FnZS50b1RvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c0NjID0gbWVzc2FnZS5jY1RvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c1RleHQgPVxuXHRcdFx0XHRcdFx0JzxiciAvPjxiciAvPicgK1xuXHRcdFx0XHRcdFx0aTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX1RJVExFJykgK1xuXHRcdFx0XHRcdFx0JzxiciAvPicgK1xuXHRcdFx0XHRcdFx0aTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX0ZST00nKSArXG5cdFx0XHRcdFx0XHQnOiAnICtcblx0XHRcdFx0XHRcdHNGcm9tICtcblx0XHRcdFx0XHRcdCc8YnIgLz4nICtcblx0XHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9UTycpICtcblx0XHRcdFx0XHRcdCc6ICcgK1xuXHRcdFx0XHRcdFx0c1RvICtcblx0XHRcdFx0XHRcdCgwIDwgc0NjLmxlbmd0aCA/ICc8YnIgLz4nICsgaTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX0NDJykgKyAnOiAnICsgc0NjIDogJycpICtcblx0XHRcdFx0XHRcdCc8YnIgLz4nICtcblx0XHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9TRU5UJykgK1xuXHRcdFx0XHRcdFx0JzogJyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHNEYXRlKSArXG5cdFx0XHRcdFx0XHQnPGJyIC8+JyArXG5cdFx0XHRcdFx0XHRpMThuKCdDT01QT1NFL0ZPUldBUkRfTUVTU0FHRV9UT1BfU1VCSkVDVCcpICtcblx0XHRcdFx0XHRcdCc6ICcgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbChzU3ViamVjdCkgK1xuXHRcdFx0XHRcdFx0JzxiciAvPjxiciAvPicgK1xuXHRcdFx0XHRcdFx0dHJpbShzVGV4dCkgK1xuXHRcdFx0XHRcdFx0JzxiciAvPjxiciAvPic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5Gb3J3YXJkQXNBdHRhY2htZW50OlxuXHRcdFx0XHRcdHNUZXh0ID0gJyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4ge1xuXHRcdFx0XHRlZGl0b3Iuc2V0SHRtbChzVGV4dCwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbkZvcmNlZCA9PT0gdGhpcy5lZGl0b3JEZWZhdWx0VHlwZSgpIHx8XG5cdFx0XHRcdFx0KCFtZXNzYWdlLmlzSHRtbCgpICYmIEVkaXRvckRlZmF1bHRUeXBlLkh0bWxGb3JjZWQgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZWRpdG9yLm1vZGVUb2dnbGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlkZW50aXR5ICYmIENvbXBvc2VUeXBlLkRyYWZ0ICE9PSBsaW5lQ29tcG9zZVR5cGUgJiYgQ29tcG9zZVR5cGUuRWRpdEFzTmV3ICE9PSBsaW5lQ29tcG9zZVR5cGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldEZvY3VzSW5Qb3B1cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChDb21wb3NlVHlwZS5FbXB0eSA9PT0gbGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHR0aGlzLnN1YmplY3QoaXNOb3JtYWwoc0N1c3RvbVN1YmplY3QpID8gJycgKyBzQ3VzdG9tU3ViamVjdCA6ICcnKTtcblxuXHRcdFx0c1RleHQgPSBpc05vcm1hbChzQ3VzdG9tUGxhaW5UZXh0KSA/ICcnICsgc0N1c3RvbVBsYWluVGV4dCA6ICcnO1xuXG5cdFx0XHR0aGlzLmVkaXRvcigoZWRpdG9yKSA9PiB7XG5cdFx0XHRcdGVkaXRvci5zZXRIdG1sKHNUZXh0LCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWwgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKSAmJlxuXHRcdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWxGb3JjZWQgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRlZGl0b3IubW9kZVRvZ2dsZShmYWxzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdFx0XHR0aGlzLnNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldEZvY3VzSW5Qb3B1cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc05vbkVtcHR5QXJyYXkob01lc3NhZ2VPckFycmF5KSkge1xuXHRcdFx0Xy5lYWNoKG9NZXNzYWdlT3JBcnJheSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0dGhpcy5hZGRNZXNzYWdlQXNBdHRhY2htZW50KGl0ZW0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IHtcblx0XHRcdFx0ZWRpdG9yLnNldEh0bWwoJycsIGZhbHNlKTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuSHRtbCAhPT0gdGhpcy5lZGl0b3JEZWZhdWx0VHlwZSgpICYmXG5cdFx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuSHRtbEZvcmNlZCAhPT0gdGhpcy5lZGl0b3JEZWZhdWx0VHlwZSgpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGVkaXRvci5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpZGVudGl0eSAmJiBDb21wb3NlVHlwZS5EcmFmdCAhPT0gbGluZUNvbXBvc2VUeXBlICYmIENvbXBvc2VUeXBlLkVkaXRBc05ldyAhPT0gbGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRGb2N1c0luUG9wdXAoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzSW5Qb3B1cCgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRvd25sb2FkcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNEb3dubG9hZHNGb3JVcGxvYWQoKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGRvd25sb2FkcykpIHtcblx0XHRcdFJlbW90ZS5tZXNzYWdlVXBsb2FkQXR0YWNobWVudHModGhpcy5vbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cywgZG93bmxvYWRzKTtcblx0XHR9XG5cblx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KGlkZW50aXR5KTtcblx0XHR9XG5cblx0XHR0aGlzLnJlc2l6ZXJUcmlnZ2VyKCk7XG5cdH1cblxuXHRvbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cyhzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0aWYgKCF0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRfLmVhY2gob0RhdGEuUmVzdWx0LCAoaWQsIHRlbXBOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHRoaXMuZ2V0QXR0YWNobWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRcdGlmIChhdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LnRlbXBOYW1lKHRlbXBOYW1lKTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdC5jb21wbGV0ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2VBdHRhY2htZW50RmFpbGVkRG93bmxvYWRUZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0Rm9jdXNJblBvcHVwKCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGlmICgnJyA9PT0gdGhpcy50bygpKSB7XG5cdFx0XHRcdFx0dGhpcy50by5mb2N1c2VkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMub0VkaXRvcikge1xuXHRcdFx0XHRcdGlmICghdGhpcy50by5mb2N1c2VkKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMub0VkaXRvci5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdHRoaXMucmVzaXplclRyaWdnZXIoKTtcblx0fVxuXG5cdHRyeVRvQ2xvc2VQb3B1cCgpIHtcblx0XHRjb25zdCBQb3B1cHNBc2tWaWV3TW9kZWwgPSByZXF1aXJlKCdWaWV3L1BvcHVwL0FzaycpO1xuXHRcdGlmICghaXNQb3B1cFZpc2libGUoUG9wdXBzQXNrVmlld01vZGVsKSAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRpZiAodGhpcy5iU2tpcE5leHRIaWRlIHx8ICh0aGlzLmlzRW1wdHlGb3JtKCkgJiYgIXRoaXMuZHJhZnRVaWQoKSkpIHtcblx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2Nsb3NlQ29tbWFuZCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKFBvcHVwc0Fza1ZpZXdNb2RlbCwgW1xuXHRcdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2Nsb3NlQ29tbWFuZCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0aGlzLmluaXRVcGxvYWRlcigpO1xuXG5cdFx0a2V5KCdjdHJsK3EsIGNvbW1hbmQrcSwgY3RybCt3LCBjb21tYW5kK3cnLCBLZXlTdGF0ZS5Db21wb3NlLCBub29wRmFsc2UpO1xuXG5cdFx0a2V5KCdgJywgS2V5U3RhdGUuQ29tcG9zZSwgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMub0VkaXRvciAmJiAhdGhpcy5vRWRpdG9yLmhhc0ZvY3VzKCkgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLmlkZW50aXRpZXNEcm9wZG93blRyaWdnZXIodHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2N0cmwrYCcsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdHRoaXMuaWRlbnRpdGllc0Ryb3Bkb3duVHJpZ2dlcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnZXNjLCBjdHJsK2Rvd24sIGNvbW1hbmQrZG93bicsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdHRoaXMuc2tpcENvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLmFsbG93Rm9sZGVycykge1xuXHRcdFx0a2V5KCdjdHJsK3MsIGNvbW1hbmQrcycsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdFx0dGhpcy5zYXZlQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93Q3RybEVudGVyT25Db21wb3NlJykpIHtcblx0XHRcdGtleSgnY3RybCtlbnRlciwgY29tbWFuZCtlbnRlcicsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdFx0dGhpcy5zZW5kQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRrZXkoJ3NoaWZ0K2VzYycsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCd3aW5kb3cucmVzaXplLnJlYWwnLCB0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHRFdmVudHMuc3ViKCd3aW5kb3cucmVzaXplLnJlYWwnLCBfLmRlYm91bmNlKHRoaXMucmVzaXplclRyaWdnZXIsIE1hZ2ljcy5UaW1lNTBtcykpO1xuXG5cdFx0U29jaWFsU3RvcmUuYXBwZW5kRHJvcGJveCgpO1xuXG5cdFx0aWYgKHRoaXMuZHJpdmVFbmFibGVkKCkpIHtcblx0XHRcdCQuZ2V0U2NyaXB0KCdodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9hcGkuanMnLCAoKSA9PiB7XG5cdFx0XHRcdGlmICh3aW5kb3cuZ2FwaSkge1xuXHRcdFx0XHRcdHRoaXMuZHJpdmVWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiYgdGhpcy5vRWRpdG9yKSB7XG5cdFx0XHRcdHRoaXMub0VkaXRvci5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9LCBNYWdpY3MuVGltZTVzKTtcblx0fVxuXG5cdGRyaXZlQ2FsbGJhY2soYWNjZXNzVG9rZW4sIGRhdGEpIHtcblx0XHRpZiAoXG5cdFx0XHRkYXRhICYmXG5cdFx0XHR3aW5kb3cuWE1MSHR0cFJlcXVlc3QgJiZcblx0XHRcdHdpbmRvdy5nb29nbGUgJiZcblx0XHRcdGRhdGFbd2luZG93Lmdvb2dsZS5waWNrZXIuUmVzcG9uc2UuQUNUSU9OXSA9PT0gd2luZG93Lmdvb2dsZS5waWNrZXIuQWN0aW9uLlBJQ0tFRCAmJlxuXHRcdFx0ZGF0YVt3aW5kb3cuZ29vZ2xlLnBpY2tlci5SZXNwb25zZS5ET0NVTUVOVFNdICYmXG5cdFx0XHRkYXRhW3dpbmRvdy5nb29nbGUucGlja2VyLlJlc3BvbnNlLkRPQ1VNRU5UU11bMF0gJiZcblx0XHRcdGRhdGFbd2luZG93Lmdvb2dsZS5waWNrZXIuUmVzcG9uc2UuRE9DVU1FTlRTXVswXS5pZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0XHRcdHJlcXVlc3Qub3Blbihcblx0XHRcdFx0J0dFVCcsXG5cdFx0XHRcdCdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kcml2ZS92Mi9maWxlcy8nICsgZGF0YVt3aW5kb3cuZ29vZ2xlLnBpY2tlci5SZXNwb25zZS5ET0NVTUVOVFNdWzBdLmlkXG5cdFx0XHQpO1xuXHRcdFx0cmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgYWNjZXNzVG9rZW4pO1xuXHRcdFx0cmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuXHRcdFx0XHRpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gd2luZG93LkpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpLFxuXHRcdFx0XHRcdFx0ZkV4cG9ydCA9IChpdGVtLCBtaW1lVHlwZSwgZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0uZXhwb3J0TGlua3MpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5leHBvcnRMaW5rc1ttaW1lVHlwZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmRvd25sb2FkVXJsID0gaXRlbS5leHBvcnRMaW5rc1ttaW1lVHlwZV07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS50aXRsZSA9IGl0ZW0udGl0bGUgKyAnLicgKyBleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5taW1lVHlwZSA9IG1pbWVUeXBlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5leHBvcnRMaW5rc1snYXBwbGljYXRpb24vcGRmJ10pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmRvd25sb2FkVXJsID0gaXRlbS5leHBvcnRMaW5rc1snYXBwbGljYXRpb24vcGRmJ107XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS50aXRsZSA9IGl0ZW0udGl0bGUgKyAnLnBkZic7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5taW1lVHlwZSA9ICdhcHBsaWNhdGlvbi9wZGYnO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2UuZG93bmxvYWRVcmwgJiYgcmVzcG9uc2UubWltZVR5cGUgJiYgcmVzcG9uc2UuZXhwb3J0TGlua3MpIHtcblx0XHRcdFx0XHRcdHN3aXRjaCAocmVzcG9uc2UubWltZVR5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kb2N1bWVudCc6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JywgJ2RvY3gnKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnNwcmVhZHNoZWV0Jzpcblx0XHRcdFx0XHRcdFx0XHRmRXhwb3J0KHJlc3BvbnNlLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLCAneGxzeCcpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZHJhd2luZyc6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2ltYWdlL3BuZycsICdwbmcnKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnByZXNlbnRhdGlvbic6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLCAncHB0eCcpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdGZFeHBvcnQocmVzcG9uc2UsICdhcHBsaWNhdGlvbi9wZGYnLCAncGRmJyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRvd25sb2FkVXJsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFkZERyaXZlQXR0YWNobWVudChyZXNwb25zZSwgYWNjZXNzVG9rZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJlcXVlc3Quc2VuZCgpO1xuXHRcdH1cblx0fVxuXG5cdGRyaXZlQ3JlYXRlUGlrZXIoYXV0aFRva2VuKSB7XG5cdFx0aWYgKHdpbmRvdy5nYXBpICYmIGF1dGhUb2tlbiAmJiBhdXRoVG9rZW4uYWNjZXNzX3Rva2VuKSB7XG5cdFx0XHR3aW5kb3cuZ2FwaS5sb2FkKCdwaWNrZXInLCB7XG5cdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHdpbmRvdy5nb29nbGUgJiYgd2luZG93Lmdvb2dsZS5waWNrZXIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGRyaXZlUGlja2VyID0gbmV3IHdpbmRvdy5nb29nbGUucGlja2VyLlBpY2tlckJ1aWxkZXIoKVxuXHRcdFx0XHRcdFx0XHQvLyAuYWRkVmlldyh3aW5kb3cuZ29vZ2xlLnBpY2tlci5WaWV3SWQuRk9MREVSUylcblx0XHRcdFx0XHRcdFx0LmFkZFZpZXcod2luZG93Lmdvb2dsZS5waWNrZXIuVmlld0lkLkRPQ1MpXG5cdFx0XHRcdFx0XHRcdC5zZXRBcHBJZChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSlcblx0XHRcdFx0XHRcdFx0LnNldE9BdXRoVG9rZW4oYXV0aFRva2VuLmFjY2Vzc190b2tlbilcblx0XHRcdFx0XHRcdFx0LnNldENhbGxiYWNrKF8uYmluZCh0aGlzLmRyaXZlQ2FsbGJhY2ssIHRoaXMsIGF1dGhUb2tlbi5hY2Nlc3NfdG9rZW4pKVxuXHRcdFx0XHRcdFx0XHQuZW5hYmxlRmVhdHVyZSh3aW5kb3cuZ29vZ2xlLnBpY2tlci5GZWF0dXJlLk5BVl9ISURERU4pXG5cdFx0XHRcdFx0XHRcdC8vIC5zZXRPcmlnaW4od2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0KVxuXHRcdFx0XHRcdFx0XHQuYnVpbGQoKTtcblxuXHRcdFx0XHRcdFx0ZHJpdmVQaWNrZXIuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGRyaXZlT3BlblBvcHVwKCkge1xuXHRcdGlmICh3aW5kb3cuZ2FwaSkge1xuXHRcdFx0d2luZG93LmdhcGkubG9hZCgnYXV0aCcsIHtcblx0XHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhdXRoVG9rZW4gPSB3aW5kb3cuZ2FwaS5hdXRoLmdldFRva2VuKCksXG5cdFx0XHRcdFx0XHRmUmVzdWx0ID0gKGF1dGhSZXN1bHQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGF1dGhSZXN1bHQgJiYgIWF1dGhSZXN1bHQuZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHdpbmRvdy5nYXBpLmF1dGguZ2V0VG9rZW4oKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodG9rZW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZHJpdmVDcmVhdGVQaWtlcih0b2tlbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKCFhdXRoVG9rZW4pIHtcblx0XHRcdFx0XHRcdHdpbmRvdy5nYXBpLmF1dGguYXV0aG9yaXplKFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0J2NsaWVudF9pZCc6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpLFxuXHRcdFx0XHRcdFx0XHRcdCdzY29wZSc6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2RyaXZlLnJlYWRvbmx5Jyxcblx0XHRcdFx0XHRcdFx0XHQnaW1tZWRpYXRlJzogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQoYXV0aFJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghZlJlc3VsdChhdXRoUmVzdWx0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmdhcGkuYXV0aC5hdXRob3JpemUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY2xpZW50X2lkJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUNsaWVudElEJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Njb3BlJzogJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZHJpdmUucmVhZG9ubHknLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpbW1lZGlhdGUnOiBmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5kcml2ZUNyZWF0ZVBpa2VyKGF1dGhUb2tlbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEByZXR1cm5zIHs/T2JqZWN0fVxuXHQgKi9cblx0Z2V0QXR0YWNobWVudEJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gXy5maW5kKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgaWQgPT09IGl0ZW0uaWQpO1xuXHR9XG5cblx0Y2FuY2VsQXR0YWNobWVudEhlbHBlcihpZCwgb0p1YSkge1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gXy5maW5kKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbS5pZCA9PT0gaWQpO1xuXHRcdFx0aWYgKGF0dGFjaG1lbnQpIHtcblx0XHRcdFx0dGhpcy5hdHRhY2htZW50cy5yZW1vdmUoYXR0YWNobWVudCk7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdGlmIChvSnVhKSB7XG5cdFx0XHRcdFx0b0p1YS5jYW5jZWwoaWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGluaXRVcGxvYWRlcigpIHtcblx0XHRpZiAodGhpcy5jb21wb3NlVXBsb2FkZXJCdXR0b24oKSkge1xuXHRcdFx0Y29uc3QgdXBsb2FkQ2FjaGUgPSB7fSxcblx0XHRcdFx0YXR0YWNobWVudFNpemVMaW1pdCA9IHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSxcblx0XHRcdFx0b0p1YSA9IG5ldyBKdWEoe1xuXHRcdFx0XHRcdCdhY3Rpb24nOiB1cGxvYWQoKSxcblx0XHRcdFx0XHQnbmFtZSc6ICd1cGxvYWRlcicsXG5cdFx0XHRcdFx0J3F1ZXVlU2l6ZSc6IDIsXG5cdFx0XHRcdFx0J211bHRpcGxlU2l6ZUxpbWl0JzogNTAsXG5cdFx0XHRcdFx0J2NsaWNrRWxlbWVudCc6IHRoaXMuY29tcG9zZVVwbG9hZGVyQnV0dG9uKCksXG5cdFx0XHRcdFx0J2RyYWdBbmREcm9wRWxlbWVudCc6IHRoaXMuY29tcG9zZVVwbG9hZGVyRHJvcFBsYWNlKClcblx0XHRcdFx0fSk7XG5cblx0XHRcdGlmIChvSnVhKSB7XG5cdFx0XHRcdG9KdWFcblx0XHRcdFx0XHQvLyAub24oJ29uTGltaXRSZWFjaGVkJywgKGxpbWl0KSA9PiB7XG5cdFx0XHRcdFx0Ly8gXHRhbGVydChsaW1pdCk7XG5cdFx0XHRcdFx0Ly8gfSlcblx0XHRcdFx0XHQub24oJ29uRHJhZ0VudGVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIodHJ1ZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uRHJhZ0xlYXZlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvbkJvZHlEcmFnRW50ZXInLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmF0dGFjaG1lbnRzUGxhY2UodHJ1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmRyYWdBbmREcm9wVmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25Cb2R5RHJhZ0xlYXZlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcFZpc2libGUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvblByb2dyZXNzJywgKGlkLCBsb2FkZWQsIHRvdGFsKSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQgaXRlbSA9IHVwbG9hZENhY2hlW2lkXTtcblx0XHRcdFx0XHRcdGlmICghaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtID0gdGhpcy5nZXRBdHRhY2htZW50QnlJZChpZCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdFx0dXBsb2FkQ2FjaGVbaWRdID0gaXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtLnByb2dyZXNzKHdpbmRvdy5NYXRoLmZsb29yKChsb2FkZWQgLyB0b3RhbCkgKiAxMDApKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25TZWxlY3QnLCAoc0lkLCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBmaWxlTmFtZSA9IGlzVW5kKG9EYXRhLkZpbGVOYW1lKSA/ICcnIDogb0RhdGEuRmlsZU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdFx0c2l6ZSA9IGlzTm9ybWFsKG9EYXRhLlNpemUpID8gcEludChvRGF0YS5TaXplKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBuZXcgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbChzSWQsIGZpbGVOYW1lLCBzaXplKTtcblxuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jYW5jZWwgPSB0aGlzLmNhbmNlbEF0dGFjaG1lbnRIZWxwZXIoc0lkLCBvSnVhKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmF0dGFjaG1lbnRzUGxhY2UodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdGlmICgwIDwgc2l6ZSAmJiAwIDwgYXR0YWNobWVudFNpemVMaW1pdCAmJiBhdHRhY2htZW50U2l6ZUxpbWl0IDwgc2l6ZSkge1xuXHRcdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0LnVwbG9hZGluZyh0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdC5jb21wbGV0ZSh0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdC5lcnJvcihpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJykpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uU3RhcnQnLCAoaWQpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID0gdXBsb2FkQ2FjaGVbaWRdO1xuXHRcdFx0XHRcdFx0aWYgKCFpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0gPSB0aGlzLmdldEF0dGFjaG1lbnRCeUlkKGlkKTtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHR1cGxvYWRDYWNoZVtpZF0gPSBpdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW1cblx0XHRcdFx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHQudXBsb2FkaW5nKHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0LmNvbXBsZXRlKGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25Db21wbGV0ZScsIChpZCwgcmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gdGhpcy5nZXRBdHRhY2htZW50QnlJZChpZCksXG5cdFx0XHRcdFx0XHRcdGVycm9yQ29kZSA9IGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgZGF0YS5SZXN1bHQuRXJyb3JDb2RlID8gZGF0YS5SZXN1bHQuRXJyb3JDb2RlIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0YXR0YWNobWVudEpzb24gPSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5BdHRhY2htZW50ID8gZGF0YS5SZXN1bHQuQXR0YWNobWVudCA6IG51bGw7XG5cblx0XHRcdFx0XHRcdGxldCBlcnJvciA9ICcnO1xuXHRcdFx0XHRcdFx0aWYgKG51bGwgIT09IGVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRlcnJvciA9IGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShlcnJvckNvZGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICghYXR0YWNobWVudEpzb24pIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPSBpMThuKCdVUExPQUQvRVJST1JfVU5LTk9XTicpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoJycgIT09IGVycm9yICYmIDAgPCBlcnJvci5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdC5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudEpzb24pIHtcblx0XHRcdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRhdHRhY2htZW50LmluaXRCeVVwbG9hZEpzb24oYXR0YWNobWVudEpzb24pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGlzVW5kKHVwbG9hZENhY2hlW2lkXSkpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgdXBsb2FkQ2FjaGVbaWRdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hZGRBdHRhY2htZW50RW5hYmxlZCh0cnVlKS5kcmFnQW5kRHJvcEVuYWJsZWQob0p1YS5pc0RyYWdBbmREcm9wU3VwcG9ydGVkKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5hZGRBdHRhY2htZW50RW5hYmxlZChmYWxzZSkuZHJhZ0FuZERyb3BFbmFibGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHByZXBlYXJBdHRhY2htZW50c0ZvclNlbmRPclNhdmUoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Xy5lYWNoKHRoaXMuYXR0YWNobWVudHNJblJlYWR5KCksIChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSAmJiAnJyAhPT0gaXRlbS50ZW1wTmFtZSgpICYmIGl0ZW0uZW5hYmxlZCgpKSB7XG5cdFx0XHRcdHJlc3VsdFtpdGVtLnRlbXBOYW1lKCldID0gW2l0ZW0uZmlsZU5hbWUoKSwgaXRlbS5pc0lubGluZSA/ICcxJyA6ICcwJywgaXRlbS5DSUQsIGl0ZW0uY29udGVudExvY2F0aW9uXTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IG1lc3NhZ2Vcblx0ICovXG5cdGFkZE1lc3NhZ2VBc0F0dGFjaG1lbnQobWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRsZXQgdGVtcCA9IG1lc3NhZ2Uuc3ViamVjdCgpO1xuXHRcdFx0dGVtcCA9ICcuZW1sJyA9PT0gdGVtcC5zdWJzdHIoLTQpLnRvTG93ZXJDYXNlKCkgPyB0ZW1wIDogdGVtcCArICcuZW1sJztcblxuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IG5ldyBDb21wb3NlQXR0YWNobWVudE1vZGVsKG1lc3NhZ2UucmVxdWVzdEhhc2gsIHRlbXAsIG1lc3NhZ2Uuc2l6ZSgpKTtcblxuXHRcdFx0YXR0YWNobWVudC5mcm9tTWVzc2FnZSA9IHRydWU7XG5cdFx0XHRhdHRhY2htZW50LmNhbmNlbCA9IHRoaXMuY2FuY2VsQXR0YWNobWVudEhlbHBlcihtZXNzYWdlLnJlcXVlc3RIYXNoKTtcblx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdC51cGxvYWRpbmcodHJ1ZSlcblx0XHRcdFx0LmNvbXBsZXRlKHRydWUpO1xuXG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHNpemVcblx0ICogQHJldHVybnMge0NvbXBvc2VBdHRhY2htZW50TW9kZWx9XG5cdCAqL1xuXHRhZGRBdHRhY2htZW50SGVscGVyKHVybCwgbmFtZSwgc2l6ZSkge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCh1cmwsIG5hbWUsIHNpemUpO1xuXG5cdFx0YXR0YWNobWVudC5mcm9tTWVzc2FnZSA9IGZhbHNlO1xuXHRcdGF0dGFjaG1lbnQuY2FuY2VsID0gdGhpcy5jYW5jZWxBdHRhY2htZW50SGVscGVyKHVybCk7XG5cdFx0YXR0YWNobWVudFxuXHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHQudXBsb2FkaW5nKHRydWUpXG5cdFx0XHQuY29tcGxldGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXG5cdFx0cmV0dXJuIGF0dGFjaG1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRyb3Bib3hGaWxlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0YWRkRHJvcGJveEF0dGFjaG1lbnQoZHJvcGJveEZpbGUpIHtcblx0XHRjb25zdCBhdHRhY2htZW50U2l6ZUxpbWl0ID0gcEludChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXR0YWNobWVudExpbWl0JykpLFxuXHRcdFx0bVNpemUgPSBkcm9wYm94RmlsZS5ieXRlcyxcblx0XHRcdGF0dGFjaG1lbnQgPSB0aGlzLmFkZEF0dGFjaG1lbnRIZWxwZXIoZHJvcGJveEZpbGUubGluaywgZHJvcGJveEZpbGUubmFtZSwgbVNpemUpO1xuXG5cdFx0aWYgKDAgPCBtU2l6ZSAmJiAwIDwgYXR0YWNobWVudFNpemVMaW1pdCAmJiBhdHRhY2htZW50U2l6ZUxpbWl0IDwgbVNpemUpIHtcblx0XHRcdGF0dGFjaG1lbnQudXBsb2FkaW5nKGZhbHNlKS5jb21wbGV0ZSh0cnVlKTtcblx0XHRcdGF0dGFjaG1lbnQuZXJyb3IoaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRSZW1vdGUuY29tcG9zZVVwbG9hZEV4dGVybmFscyhcblx0XHRcdChzdGF0dXNSZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRhdHRhY2htZW50LnVwbG9hZGluZyhmYWxzZSkuY29tcGxldGUodHJ1ZSk7XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHN0YXR1c1Jlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC50ZW1wTmFtZShkYXRhLlJlc3VsdFthdHRhY2htZW50LmlkXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhdHRhY2htZW50LmVycm9yKGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdFtkcm9wYm94RmlsZS5saW5rXVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZHJpdmVGaWxlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhY2Nlc3NUb2tlblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGFkZERyaXZlQXR0YWNobWVudChkcml2ZUZpbGUsIGFjY2Vzc1Rva2VuKSB7XG5cdFx0Y29uc3QgYXR0YWNobWVudFNpemVMaW1pdCA9IHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSxcblx0XHRcdHNpemUgPSBkcml2ZUZpbGUuZmlsZVNpemUgPyBwSW50KGRyaXZlRmlsZS5maWxlU2l6ZSkgOiAwLFxuXHRcdFx0YXR0YWNobWVudCA9IHRoaXMuYWRkQXR0YWNobWVudEhlbHBlcihkcml2ZUZpbGUuZG93bmxvYWRVcmwsIGRyaXZlRmlsZS50aXRsZSwgc2l6ZSk7XG5cblx0XHRpZiAoMCA8IHNpemUgJiYgMCA8IGF0dGFjaG1lbnRTaXplTGltaXQgJiYgYXR0YWNobWVudFNpemVMaW1pdCA8IHNpemUpIHtcblx0XHRcdGF0dGFjaG1lbnQudXBsb2FkaW5nKGZhbHNlKS5jb21wbGV0ZSh0cnVlKTtcblx0XHRcdGF0dGFjaG1lbnQuZXJyb3IoaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRSZW1vdGUuY29tcG9zZVVwbG9hZERyaXZlKFxuXHRcdFx0KHN0YXR1c1Jlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdGF0dGFjaG1lbnQudXBsb2FkaW5nKGZhbHNlKS5jb21wbGV0ZSh0cnVlKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc3RhdHVzUmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHRbYXR0YWNobWVudC5pZF0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LnRlbXBOYW1lKGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdWzBdKTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuc2l6ZShwSW50KGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdWzFdKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhdHRhY2htZW50LmVycm9yKGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRyaXZlRmlsZS5kb3dubG9hZFVybCxcblx0XHRcdGFjY2Vzc1Rva2VuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG5cdCAqL1xuXHRwcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIHR5cGUpIHtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0aWYgKENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQgPT09IHR5cGUpIHtcblx0XHRcdFx0dGhpcy5hZGRNZXNzYWdlQXNBdHRhY2htZW50KG1lc3NhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzKCk7XG5cdFx0XHRcdF8uZWFjaChpc05vbkVtcHR5QXJyYXkoYXR0YWNobWVudHMpID8gYXR0YWNobWVudHMgOiBbXSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRsZXQgYWRkID0gZmFsc2U7XG5cdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLlJlcGx5OlxuXHRcdFx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0XHRcdFx0YWRkID0gaXRlbS5pc0xpbmtlZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZDpcblx0XHRcdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRHJhZnQ6XG5cdFx0XHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkVkaXRBc05ldzpcblx0XHRcdFx0XHRcdFx0YWRkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGFkZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IG5ldyBDb21wb3NlQXR0YWNobWVudE1vZGVsKFxuXHRcdFx0XHRcdFx0XHRpdGVtLmRvd25sb2FkLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmZpbGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmVzdGltYXRlZFNpemUsXG5cdFx0XHRcdFx0XHRcdGl0ZW0uaXNJbmxpbmUsXG5cdFx0XHRcdFx0XHRcdGl0ZW0uaXNMaW5rZWQsXG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2lkLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmNvbnRlbnRMb2NhdGlvblxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5mcm9tTWVzc2FnZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LmNhbmNlbCA9IHRoaXMuY2FuY2VsQXR0YWNobWVudEhlbHBlcihpdGVtLmRvd25sb2FkKTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcodHJ1ZSlcblx0XHRcdFx0XHRcdFx0LmNvbXBsZXRlKGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlTGlua2VkQXR0YWNobWVudHMoKSB7XG5cdFx0Y29uc3QgYXJyYWNobWVudCA9IF8uZmluZCh0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmIGl0ZW0uaXNMaW5rZWQpO1xuXHRcdGlmIChhcnJhY2htZW50KSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzLnJlbW92ZShhcnJhY2htZW50KTtcblx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGFycmFjaG1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdHNldE1lc3NhZ2VBdHRhY2htZW50RmFpbGVkRG93bmxvYWRUZXh0KCkge1xuXHRcdF8uZWFjaCh0aGlzLmF0dGFjaG1lbnRzKCksIChhdHRhY2htZW50KSA9PiB7XG5cdFx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmZyb21NZXNzYWdlKSB7XG5cdFx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHQudXBsb2FkaW5nKGZhbHNlKVxuXHRcdFx0XHRcdC5jb21wbGV0ZSh0cnVlKVxuXHRcdFx0XHRcdC5lcnJvcihnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUoVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gaW5jbHVkZUF0dGFjaG1lbnRJblByb2dyZXNzID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHlGb3JtKGluY2x1ZGVBdHRhY2htZW50SW5Qcm9ncmVzcyA9IHRydWUpIHtcblx0XHRjb25zdCB3aXRob3V0QXR0YWNobWVudCA9IGluY2x1ZGVBdHRhY2htZW50SW5Qcm9ncmVzc1xuXHRcdFx0PyAwID09PSB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoXG5cdFx0XHQ6IDAgPT09IHRoaXMuYXR0YWNobWVudHNJblJlYWR5KCkubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDAgPT09IHRoaXMudG8oKS5sZW5ndGggJiZcblx0XHRcdDAgPT09IHRoaXMuY2MoKS5sZW5ndGggJiZcblx0XHRcdDAgPT09IHRoaXMuYmNjKCkubGVuZ3RoICYmXG5cdFx0XHQwID09PSB0aGlzLnJlcGx5VG8oKS5sZW5ndGggJiZcblx0XHRcdDAgPT09IHRoaXMuc3ViamVjdCgpLmxlbmd0aCAmJlxuXHRcdFx0d2l0aG91dEF0dGFjaG1lbnQgJiZcblx0XHRcdCghdGhpcy5vRWRpdG9yIHx8ICcnID09PSB0aGlzLm9FZGl0b3IuZ2V0RGF0YSgpKVxuXHRcdCk7XG5cdH1cblxuXHRyZXNldCgpIHtcblx0XHR0aGlzLnRvKCcnKTtcblx0XHR0aGlzLmNjKCcnKTtcblx0XHR0aGlzLmJjYygnJyk7XG5cdFx0dGhpcy5yZXBseVRvKCcnKTtcblx0XHR0aGlzLnN1YmplY3QoJycpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0RHNuKGZhbHNlKTtcblx0XHR0aGlzLnJlcXVlc3RSZWFkUmVjZWlwdChmYWxzZSk7XG5cdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQoZmFsc2UpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKGZhbHNlKTtcblxuXHRcdHRoaXMuYURyYWZ0SW5mbyA9IG51bGw7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5iRnJvbURyYWZ0ID0gZmFsc2U7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0dGhpcy5zZW5kRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuc2F2ZWRFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5zYXZlZFRpbWUoMCk7XG5cdFx0dGhpcy5lbXB0eVRvRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLnNob3dDYyhmYWxzZSk7XG5cdFx0dGhpcy5zaG93QmNjKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvKGZhbHNlKTtcblxuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KHRoaXMuYXR0YWNobWVudHMoKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50cyhbXSk7XG5cblx0XHR0aGlzLmRyYWdBbmREcm9wT3ZlcihmYWxzZSk7XG5cdFx0dGhpcy5kcmFnQW5kRHJvcFZpc2libGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kcmFmdEZvbGRlcignJyk7XG5cdFx0dGhpcy5kcmFmdFVpZCgnJyk7XG5cblx0XHR0aGlzLnNlbmRpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLm9FZGl0b3IpIHtcblx0XHRcdHRoaXMub0VkaXRvci5jbGVhcihmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdGdldEF0dGFjaG1lbnRzRG93bmxvYWRzRm9yVXBsb2FkKCkge1xuXHRcdHJldHVybiBfLm1hcChcblx0XHRcdF8uZmlsdGVyKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgPT09IGl0ZW0udGVtcE5hbWUoKSksXG5cdFx0XHQoaXRlbSkgPT4gaXRlbS5pZFxuXHRcdCk7XG5cdH1cblxuXHRyZXNpemVyVHJpZ2dlcigpIHtcblx0XHR0aGlzLnJlc2l6ZXIoIXRoaXMucmVzaXplcigpKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb21wb3NlUG9wdXBWaWV3LCBDb21wb3NlUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjYuNCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xuXG52YXIgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJiAhZmFpbHMocG9zdCkpIHtcbiAgICBkZWZlciA9IHBvc3Q7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMsIHNoYW0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhKFxuICAgICAgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgJiZcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDAgJiZcbiAgICAgICFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgICkpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSwge1xuICAgICAgUkVQTEFDRV9LRUVQU18kMDogUkVQTEFDRV9LRUVQU18kMCxcbiAgICAgIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFOiBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgIH0pO1xuICAgIHZhciBzdHJpbmdNZXRob2QgPSBtZXRob2RzWzBdO1xuICAgIHZhciByZWdleE1ldGhvZCA9IG1ldGhvZHNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmluZ01ldGhvZCk7XG4gICAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cblxuICBpZiAoc2hhbSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cC5wcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2V4cEV4ZWMuY2FsbChSLCBTKTtcbn07XG5cbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc05vbkVtcHR5QXJyYXksIG5vb3AgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTY3JlZW4ge1xuXHRvQ3Jvc3MgPSBudWxsO1xuXHRzU2NyZWVuTmFtZTtcblx0YVZpZXdNb2RlbHM7XG5cblx0Y29uc3RydWN0b3Ioc2NyZWVuTmFtZSwgdmlld01vZGVscyA9IFtdKSB7XG5cdFx0dGhpcy5zU2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0dGhpcy5hVmlld01vZGVscyA9IGlzQXJyYXkodmlld01vZGVscykgPyB2aWV3TW9kZWxzIDogW107XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0dmlld01vZGVscygpIHtcblx0XHRyZXR1cm4gdGhpcy5hVmlld01vZGVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0c2NyZWVuTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zU2NyZWVuTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P0FycmF5KX1cblx0ICovXG5cdHJvdXRlcygpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P09iamVjdH1cblx0ICovXG5cdF9fY3Jvc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0Nyb3NzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0X19zdGFydCgpIHtcblx0XHRsZXQgcm91dGUgPSBudWxsLFxuXHRcdFx0Zk1hdGNoZXIgPSBudWxsO1xuXHRcdGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzKCk7XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJvdXRlcykpIHtcblx0XHRcdGZNYXRjaGVyID0gXy5iaW5kKHRoaXMub25Sb3V0ZSB8fCBub29wLCB0aGlzKTtcblx0XHRcdHJvdXRlID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblxuXHRcdFx0cm91dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgcm91dGUpIHtcblx0XHRcdFx0XHRyb3V0ZS5hZGRSb3V0ZShpdGVtWzBdLCBmTWF0Y2hlcikucnVsZXMgPSBpdGVtWzFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5vQ3Jvc3MgPSByb3V0ZTtcblx0XHR9XG5cdH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5zc207IiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXMoaGlkZGVuS2V5cywga2V5KSAmJiBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBpdGVyYXRlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGZuLCB0aGF0LCBBU19FTlRSSUVTLCBJU19JVEVSQVRPUikge1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoZm4sIHRoYXQsIEFTX0VOVFJJRVMgPyAyIDogMSk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBBU19FTlRSSUVTXG4gICAgICAgICAgPyBib3VuZEZ1bmN0aW9uKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKVxuICAgICAgICAgIDogYm91bmRGdW5jdGlvbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIGJvdW5kRnVuY3Rpb24sIHN0ZXAudmFsdWUsIEFTX0VOVFJJRVMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcblxuaXRlcmF0ZS5zdG9wID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCByZXN1bHQpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gIW1ldGhvZCB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuY29uc3QgU1RPUkFHRV9LRVkgPSAnX19ybEEnO1xuY29uc3QgVElNRV9LRVkgPSAnX19ybFQnO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlTmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0b3JhZ2VTdXBwb3J0ZWQoc3RvcmFnZU5hbWUpIHtcblx0bGV0IHN0b3JhZ2VJc0F2YWlsYWJsZSA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdC8vIGF0OiB3aW5kb3dbc3RvcmFnZU5hbWVdIGZpcmVmb3ggdGhyb3dzIFNlY3VyaXR5RXJyb3I6IFRoZSBvcGVyYXRpb24gaXMgaW5zZWN1cmUuIHdoZW4gaW4gaWZyYW1lXG5cdFx0c3RvcmFnZUlzQXZhaWxhYmxlID0gc3RvcmFnZU5hbWUgaW4gd2luZG93ICYmIHdpbmRvd1tzdG9yYWdlTmFtZV0gJiYgd2luZG93W3N0b3JhZ2VOYW1lXS5zZXRJdGVtO1xuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0aWYgKHN0b3JhZ2VJc0F2YWlsYWJsZSkge1xuXHRcdGNvbnN0IHMgPSB3aW5kb3dbc3RvcmFnZU5hbWVdLFxuXHRcdFx0a2V5ID0gJ3Rlc3RMb2NhbFN0b3JhZ2VfJyArIHdpbmRvdy5NYXRoLnJhbmRvbSgpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHMuc2V0SXRlbShrZXksIGtleSk7XG5cdFx0XHRpZiAoa2V5ID09PSBzLmdldEl0ZW0oa2V5KSkge1xuXHRcdFx0XHRzLnJlbW92ZUl0ZW0oa2V5KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5jb25zdCBTRVNTX1NUT1JBR0UgPSBpc1N0b3JhZ2VTdXBwb3J0ZWQoJ3Nlc3Npb25TdG9yYWdlJykgPyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgfHwgbnVsbCA6IG51bGw7XG5jb25zdCBXSU5fU1RPUkFHRSA9IHdpbmRvdy50b3AgfHwgd2luZG93IHx8IG51bGw7XG5cbmNvbnN0IF9fZ2V0ID0gKGtleSkgPT4ge1xuXHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0aWYgKFNFU1NfU1RPUkFHRSkge1xuXHRcdHJlc3VsdCA9IFNFU1NfU1RPUkFHRS5nZXRJdGVtKGtleSkgfHwgbnVsbDtcblx0fSBlbHNlIGlmIChXSU5fU1RPUkFHRSAmJiB3aW5kb3cuSlNPTikge1xuXHRcdGNvbnN0IGRhdGEgPVxuXHRcdFx0V0lOX1NUT1JBR0UubmFtZSAmJiAneycgPT09IFdJTl9TVE9SQUdFLm5hbWUudG9TdHJpbmcoKS5zdWJzdHIoMCwgMSlcblx0XHRcdFx0PyB3aW5kb3cuSlNPTi5wYXJzZShXSU5fU1RPUkFHRS5uYW1lLnRvU3RyaW5nKCkpXG5cdFx0XHRcdDogbnVsbDtcblx0XHRyZXN1bHQgPSBkYXRhID8gZGF0YVtrZXldIHx8IG51bGwgOiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IF9fc2V0ID0gKGtleSwgdmFsdWUpID0+IHtcblx0aWYgKFNFU1NfU1RPUkFHRSkge1xuXHRcdFNFU1NfU1RPUkFHRS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuXHR9IGVsc2UgaWYgKFdJTl9TVE9SQUdFICYmIHdpbmRvdy5KU09OKSB7XG5cdFx0bGV0IGRhdGEgPVxuXHRcdFx0V0lOX1NUT1JBR0UubmFtZSAmJiAneycgPT09IFdJTl9TVE9SQUdFLm5hbWUudG9TdHJpbmcoKS5zdWJzdHIoMCwgMSlcblx0XHRcdFx0PyB3aW5kb3cuSlNPTi5wYXJzZShXSU5fU1RPUkFHRS5uYW1lLnRvU3RyaW5nKCkpXG5cdFx0XHRcdDogbnVsbDtcblx0XHRkYXRhID0gZGF0YSB8fCB7fTtcblx0XHRkYXRhW2tleV0gPSB2YWx1ZTtcblxuXHRcdFdJTl9TVE9SQUdFLm5hbWUgPSB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cdH1cbn07XG5cbmNvbnN0IHRpbWVzdGFtcCA9ICgpID0+IHdpbmRvdy5NYXRoLnJvdW5kKG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xuXG5jb25zdCBzZXRUaW1lc3RhbXAgPSAoKSA9PiBfX3NldChUSU1FX0tFWSwgdGltZXN0YW1wKCkpO1xuXG5jb25zdCBnZXRUaW1lc3RhbXAgPSAoKSA9PiB7XG5cdGNvbnN0IHRpbWUgPSBfX2dldChUSU1FX0tFWSwgMCk7XG5cdHJldHVybiB0aW1lID8gd2luZG93LnBhcnNlSW50KHRpbWUsIDEwKSB8fCAwIDogMDtcbn07XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhhc2goKSB7XG5cdHJldHVybiBfX2dldChTVE9SQUdFX0tFWSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRIYXNoKCkge1xuXHRjb25zdCBrZXkgPSAnQXV0aEFjY291bnRIYXNoJyxcblx0XHRhcHBEYXRhID0gd2luZG93Ll9fcmxhaF9kYXRhKCk7XG5cblx0X19zZXQoU1RPUkFHRV9LRVksIGFwcERhdGEgJiYgYXBwRGF0YVtrZXldID8gYXBwRGF0YVtrZXldIDogJycpO1xuXHRzZXRUaW1lc3RhbXAoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFySGFzaCgpIHtcblx0X19zZXQoU1RPUkFHRV9LRVksICcnKTtcblx0c2V0VGltZXN0YW1wKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1RpbWVzdGFtcCgpIHtcblx0aWYgKHRpbWVzdGFtcCgpID4gZ2V0VGltZXN0YW1wKCkgKyAxMDAwICogNjAgKiA2MCkge1xuXHRcdC8vIDYwbVxuXHRcdGNsZWFySGFzaCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gaW5pdCBzZWN0aW9uXG53aW5kb3cuc2V0SW50ZXJ2YWwoc2V0VGltZXN0YW1wLCAxMDAwICogNjApOyAvLyAxbVxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgKi9cbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBkb2N1bWVudC5kb21haW4gJiYgbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IGFjdGl2ZVhEb2N1bWVudCA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpO1xuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdICsgbWF0Y2hbMV07XG59IGVsc2UgaWYgKHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgIC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuY3Jvc3Nyb2FkczsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdENoZWNrYm94IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyA9IHt9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlO1xuXHRcdGlmIChpc1VuZCh0aGlzLnZhbHVlKSB8fCAhdGhpcy52YWx1ZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMudmFsdWUpID8gZmFsc2UgOiAhIXRoaXMudmFsdWUpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW5hYmxlID0gcGFyYW1zLmVuYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5lbmFibGUpIHx8ICF0aGlzLmVuYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZW5hYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmVuYWJsZSkgPyB0cnVlIDogISF0aGlzLmVuYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNhYmxlID0gcGFyYW1zLmRpc2FibGU7XG5cdFx0aWYgKGlzVW5kKHRoaXMuZGlzYWJsZSkgfHwgIXRoaXMuZGlzYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZGlzYWJsZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy5kaXNhYmxlKSA/IGZhbHNlIDogISF0aGlzLmRpc2FibGUpO1xuXHRcdH1cblxuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblxuXHRcdHRoaXMucmVhZE9ubHkgPSBpc1VuZChwYXJhbXMucmVhZE9ubHkpID8gZmFsc2UgOiAhIXBhcmFtcy5yZWFkT25seTtcblx0XHR0aGlzLmludmVydGVkID0gaXNVbmQocGFyYW1zLmludmVydGVkKSA/IGZhbHNlIDogISFwYXJhbXMuaW52ZXJ0ZWQ7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLmxhYmVsQW5pbWF0ZWQgPSAhIXBhcmFtcy5sYWJlbEFuaW1hdGVkO1xuXHR9XG5cblx0Y2xpY2soKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWRPbmx5ICYmIHRoaXMuZW5hYmxlKCkgJiYgIXRoaXMuZGlzYWJsZSgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlKCF0aGlzLnZhbHVlKCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdENoZWNrYm94LCBBYnN0cmFjdENoZWNrYm94IGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2U7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgdmFyIHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKTtcbiAgdmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZSgpO1xuXG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGFkZHJlc3MgPSBbXTtcbiAgdmFyIHBhcnNlZEFkZHJlc3NlcyA9IFtdO1xuXG4gIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnb3BlcmF0b3InICYmICh0b2tlbi52YWx1ZSA9PT0gJywnIHx8IHRva2VuLnZhbHVlID09PSAnOycpKSB7XG4gICAgICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gICAgICB9XG4gICAgICBhZGRyZXNzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgcGFyc2VkQWRkcmVzc2VzID0gcGFyc2VkQWRkcmVzc2VzLmNvbmNhdChhZGRyZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRva2VucyBmb3IgYSBzaW5nbGUgYWRkcmVzcyBpbnRvIGFuIGFkZHJlc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtBcnJheX0gdG9rZW5zIFRva2VucyBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gQWRkcmVzcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2hhbmRsZUFkZHJlc3ModG9rZW5zKSB7XG4gIHZhciBpc0dyb3VwID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9ICd0ZXh0JztcbiAgdmFyIGFkZHJlc3MgPSB2b2lkIDA7XG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG5cbiAgICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgfTtmb3IgKHZhciBpID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgc3RhdGUgPSAnYWRkcmVzcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc6JzpcbiAgICAgICAgICBzdGF0ZSA9ICdncm91cCc7XG4gICAgICAgICAgaXNHcm91cCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3RhdGUgPSAndGV4dCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQsIHJlcGxhY2UgdGhlIHR3b1xuICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgIGRhdGEudGV4dCA9IGRhdGEuY29tbWVudDtcbiAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJyk7XG4gICAgYWRkcmVzc2VzLnB1c2goe1xuICAgICAgbmFtZTogZGF0YS50ZXh0IHx8IGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lLFxuICAgICAgZ3JvdXA6IGRhdGEuZ3JvdXAubGVuZ3RoID8gcGFyc2UoZGF0YS5ncm91cC5qb2luKCcsJykpIDogW11cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgX2kgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kgPj0gMDsgX2ktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W19pXS5tYXRjaCgvXlteQFxcc10rQFteQFxcc10rJC8pKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gZGF0YS50ZXh0LnNwbGljZShfaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIF9yZWdleEhhbmRsZXIgPSBmdW5jdGlvbiBfcmVnZXhIYW5kbGVyKGFkZHJlc3MpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gW2FkZHJlc3MudHJpbSgpXTtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgX2kyID0gZGF0YS50ZXh0Lmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTItLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtfaTJdID0gZGF0YS50ZXh0W19pMl0ucmVwbGFjZSgvXFxzKlxcYlteQFxcc10rQFteQFxcc10rXFxiXFxzKi8sIF9yZWdleEhhbmRsZXIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgICAgZGF0YS5jb21tZW50ID0gW107XG4gICAgfVxuXG4gICAgLy8gS2VlcCBvbmx5IHRoZSBmaXJzdCBhZGRyZXNzIG9jY3VyZW5jZSwgcHVzaCBvdGhlcnMgdG8gcmVndWxhciB0ZXh0XG4gICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuY29uY2F0KGRhdGEuYWRkcmVzcy5zcGxpY2UoMSkpO1xuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3Muam9pbignICcpO1xuXG4gICAgaWYgKCFkYXRhLmFkZHJlc3MgJiYgaXNHcm91cCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWRkcmVzcy5hZGRyZXNzID09PSBhZGRyZXNzLm5hbWUpIHtcbiAgICAgICAgaWYgKChhZGRyZXNzLmFkZHJlc3MgfHwgJycpLm1hdGNoKC9ALykpIHtcbiAgICAgICAgICBhZGRyZXNzLm5hbWUgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWRkcmVzc2VzO1xufTtcblxuLypcbiAqIE9wZXJhdG9yIHRva2VucyBhbmQgd2hpY2ggdG9rZW5zIGFyZSBleHBlY3RlZCB0byBlbmQgdGhlIHNlcXVlbmNlXG4gKi9cbnZhciBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVG9rZW5pemVyIG9iamVjdCBmb3IgdG9rZW5pemluZyBhZGRyZXNzIGZpZWxkIHN0cmluZ3NcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZCBzdHJpbmdcbiAgICovXG59O1xudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW5pemVyKHN0cikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2tlbml6ZXIpO1xuXG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpO1xuICAgIHRoaXMub3BlcmF0b3JDdXJyZW50ID0gJyc7XG4gICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgdGhpcy5saXN0ID0gW107XG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKFRva2VuaXplciwgW3tcbiAgICBrZXk6ICd0b2tlbml6ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRva2VuaXplKCkge1xuICAgICAgdmFyIGNociA9IHZvaWQgMDtcbiAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY2hyID0gdGhpcy5zdHIuY2hhckF0KGkpO1xuICAgICAgICB0aGlzLmNoZWNrQ2hhcihjaHIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxpc3QuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgIGxpc3QucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGNoYXJhY3RlciBpcyBhbiBvcGVyYXRvciBvciB0ZXh0IGFuZCBhY3RzIGFjY29yZGluZ2x5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NoZWNrQ2hhcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoZWNrQ2hhcihjaHIpIHtcbiAgICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wZXJhdG9yRXhwZWN0aW5nICYmIGNociA9PT0gdGhpcy5vcGVyYXRvckV4cGVjdGluZykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJztcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyIGluIE9QRVJBVE9SUykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXTtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmVzY2FwZWQgJiYgY2hyID09PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3QucHVzaCh0aGlzLm5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5lc2NhcGVkICYmIGNociAhPT0gJ1xcXFwnKSB7XG4gICAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSBjaHI7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9rZW5pemVyO1xufSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTloWkdSeVpYTnpjR0Z5YzJWeUxtcHpJbDBzSW01aGJXVnpJanBiSW5CaGNuTmxJaXdpYzNSeUlpd2lkRzlyWlc1cGVtVnlJaXdpVkc5clpXNXBlbVZ5SWl3aWRHOXJaVzV6SWl3aWRHOXJaVzVwZW1VaUxDSmhaR1J5WlhOelpYTWlMQ0poWkdSeVpYTnpJaXdpY0dGeWMyVmtRV1JrY21WemMyVnpJaXdpWm05eVJXRmphQ0lzSW5SdmEyVnVJaXdpZEhsd1pTSXNJblpoYkhWbElpd2liR1Z1WjNSb0lpd2ljSFZ6YUNJc0lsOW9ZVzVrYkdWQlpHUnlaWE56SWl3aVkyOXVZMkYwSWl3aWFYTkhjbTkxY0NJc0luTjBZWFJsSWl3aVpHRjBZU0lzSW1OdmJXMWxiblFpTENKbmNtOTFjQ0lzSW5SbGVIUWlMQ0pwSWl3aWJHVnVJaXdpYW05cGJpSXNJbTVoYldVaUxDSnRZWFJqYUNJc0luTndiR2xqWlNJc0lsOXlaV2RsZUVoaGJtUnNaWElpTENKMGNtbHRJaXdpY21Wd2JHRmpaU0lzSWs5UVJWSkJWRTlTVXlJc0luUnZVM1J5YVc1bklpd2liM0JsY21GMGIzSkRkWEp5Wlc1MElpd2liM0JsY21GMGIzSkZlSEJsWTNScGJtY2lMQ0p1YjJSbElpd2laWE5qWVhCbFpDSXNJbXhwYzNRaUxDSmphSElpTENKamFHRnlRWFFpTENKamFHVmphME5vWVhJaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPMnRDUVdOM1FrRXNTenM3T3p0QlFXUjRRanM3T3pzN096czdPenM3T3pzN1FVRmpaU3hUUVVGVFFTeExRVUZVTEVOQlFXZENReXhIUVVGb1FpeEZRVUZ4UWp0QlFVTnNReXhOUVVGTlF5eFpRVUZaTEVsQlFVbERMRk5CUVVvc1EwRkJZMFlzUjBGQlpDeERRVUZzUWp0QlFVTkJMRTFCUVUxSExGTkJRVk5HTEZWQlFWVkhMRkZCUVZZc1JVRkJaanM3UVVGRlFTeE5RVUZOUXl4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlNVTXNWVUZCVlN4RlFVRmtPMEZCUTBFc1RVRkJTVU1zYTBKQlFXdENMRVZCUVhSQ096dEJRVVZCU2l4VFFVRlBTeXhQUVVGUUxFTkJRV1VzVlVGQlZVTXNTMEZCVml4RlFVRnBRanRCUVVNNVFpeFJRVUZKUVN4TlFVRk5ReXhKUVVGT0xFdEJRV1VzVlVGQlppeExRVUU0UWtRc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRm9RaXhKUVVGMVFrWXNUVUZCVFVVc1MwRkJUaXhMUVVGblFpeEhRVUZ5UlN4RFFVRktMRVZCUVN0Rk8wRkJRemRGTEZWQlFVbE1MRkZCUVZGTkxFMUJRVm9zUlVGQmIwSTdRVUZEYkVKUUxHdENRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEdEJRVU5FUVN4blFrRkJWU3hGUVVGV08wRkJRMFFzUzBGTVJDeE5RVXRQTzBGQlEweEJMR05CUVZGUExFbEJRVklzUTBGQllVb3NTMEZCWWp0QlFVTkVPMEZCUTBZc1IwRlVSRHM3UVVGWFFTeE5RVUZKU0N4UlFVRlJUU3hOUVVGYUxFVkJRVzlDTzBGQlEyeENVQ3hqUVVGVlVTeEpRVUZXTEVOQlFXVlFMRTlCUVdZN1FVRkRSRHM3UVVGRlJFUXNXVUZCVlVjc1QwRkJWaXhEUVVGclFpeFZRVUZWUml4UFFVRldMRVZCUVcxQ08wRkJRMjVEUVN4alFVRlZVU3hsUVVGbFVpeFBRVUZtTEVOQlFWWTdRVUZEUVN4UlFVRkpRU3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1RDeDNRa0ZCYTBKQkxHZENRVUZuUWxFc1RVRkJhRUlzUTBGQmRVSlVMRTlCUVhaQ0xFTkJRV3hDTzBGQlEwUTdRVUZEUml4SFFVeEVPenRCUVU5QkxGTkJRVTlETEdWQlFWQTdRVUZEUkRzN1FVRkZSRHM3T3pzN08wRkJUVUVzVTBGQlUwOHNZMEZCVkN4RFFVRjVRbGdzVFVGQmVrSXNSVUZCYVVNN1FVRkRMMElzVFVGQlNXRXNWVUZCVlN4TFFVRmtPMEZCUTBFc1RVRkJTVU1zVVVGQlVTeE5RVUZhTzBGQlEwRXNUVUZCU1Znc1owSkJRVW83UVVGRFFTeE5RVUZOUkN4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlRXRXNUMEZCVHp0QlFVTllXaXhoUVVGVExFVkJSRVU3UVVGRldHRXNZVUZCVXl4RlFVWkZPMEZCUjFoRExGZEJRVThzUlVGSVNUdEJRVWxZUXl4VlFVRk5PenRCUVVkU08wRkJVR0VzUjBGQllpeERRVkZCTEV0QlFVc3NTVUZCU1VNc1NVRkJTU3hEUVVGU0xFVkJRVmRETEUxQlFVMXdRaXhQUVVGUFV5eE5RVUUzUWl4RlFVRnhRMVVzU1VGQlNVTXNSMEZCZWtNc1JVRkJPRU5FTEVkQlFUbERMRVZCUVcxRU8wRkJRMnBFTEZGQlFVMWlMRkZCUVZGT0xFOUJRVTl0UWl4RFFVRlFMRU5CUVdRN08wRkJSVUVzVVVGQlNXSXNUVUZCVFVNc1NVRkJUaXhMUVVGbExGVkJRVzVDTEVWQlFTdENPMEZCUXpkQ0xHTkJRVkZFTEUxQlFVMUZMRXRCUVdRN1FVRkRSU3hoUVVGTExFZEJRVXc3UVVGRFJVMHNhMEpCUVZFc1UwRkJVanRCUVVOQk8wRkJRMFlzWVVGQlN5eEhRVUZNTzBGQlEwVkJMR3RDUVVGUkxGTkJRVkk3UVVGRFFUdEJRVU5HTEdGQlFVc3NSMEZCVER0QlFVTkZRU3hyUWtGQlVTeFBRVUZTTzBGQlEwRkVMRzlDUVVGVkxFbEJRVlk3UVVGRFFUdEJRVU5HTzBGQlEwVkRMR3RDUVVGUkxFMUJRVkk3UVVGYVNqdEJRV05FTEV0QlprUXNUVUZsVHp0QlFVTk1MRlZCUVVsU0xFMUJRVTFGTEV0QlFWWXNSVUZCYVVJN1FVRkRaazhzWVVGQlMwUXNTMEZCVEN4RlFVRlpTaXhKUVVGYUxFTkJRV2xDU2l4TlFVRk5SU3hMUVVGMlFqdEJRVU5FTzBGQlEwWTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxFMUJRVWtzUTBGQlEwOHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUZZTEVsQlFYRkNUU3hMUVVGTFF5eFBRVUZNTEVOQlFXRlFMRTFCUVhSRExFVkJRVGhETzBGQlF6VkRUU3hUUVVGTFJ5eEpRVUZNTEVkQlFWbElMRXRCUVV0RExFOUJRV3BDTzBGQlEwRkVMRk5CUVV0RExFOUJRVXdzUjBGQlpTeEZRVUZtTzBGQlEwUTdPMEZCUlVRc1RVRkJTVWdzVDBGQlNpeEZRVUZoTzBGQlExZzdRVUZEUVVVc1UwRkJTMGNzU1VGQlRDeEhRVUZaU0N4TFFVRkxSeXhKUVVGTUxFTkJRVlZITEVsQlFWWXNRMEZCWlN4SFFVRm1MRU5CUVZvN1FVRkRRVzVDTEdOQlFWVlJMRWxCUVZZc1EwRkJaVHRCUVVOaVdTeFpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV05tTEZkQlFWZEJMRkZCUVZGdFFpeEpRVVF4UWp0QlFVVmlUQ3hoUVVGUFJpeExRVUZMUlN4TFFVRk1MRU5CUVZkU0xFMUJRVmdzUjBGQmIwSmlMRTFCUVUxdFFpeExRVUZMUlN4TFFVRk1MRU5CUVZkSkxFbEJRVmdzUTBGQlowSXNSMEZCYUVJc1EwRkJUaXhEUVVGd1FpeEhRVUZyUkR0QlFVWTFReXhMUVVGbU8wRkJTVVFzUjBGUVJDeE5RVTlQTzBGQlEwdzdRVUZEUVN4UlFVRkpMRU5CUVVOT0xFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJaQ3hKUVVGM1FrMHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUYwUXl4RlFVRTRRenRCUVVNMVF5eFhRVUZMTEVsQlFVbFZMRXRCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVFVGQlN5eERRVUY0UXl4RlFVRXlRMEVzU1VGQk0wTXNSVUZCWjBRN1FVRkRPVU1zV1VGQlNVb3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlF5eEZRVUZXTEVWQlFXRkpMRXRCUVdJc1EwRkJiVUlzYlVKQlFXNUNMRU5CUVVvc1JVRkJOa003UVVGRE0wTlNMR1ZCUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlRTeE5RVUZXTEVOQlFXbENUQ3hGUVVGcVFpeEZRVUZ2UWl4RFFVRndRaXhEUVVGbU8wRkJRMEU3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRlZCUVVsTkxHZENRVUZuUWl4VFFVRm9Ra0VzWVVGQlowSXNRMEZCVlhSQ0xFOUJRVllzUlVGQmJVSTdRVUZEY2tNc1dVRkJTU3hEUVVGRFdTeExRVUZMV2l4UFFVRk1MRU5CUVdGTkxFMUJRV3hDTEVWQlFUQkNPMEZCUTNoQ1RTeGxRVUZMV2l4UFFVRk1MRWRCUVdVc1EwRkJRMEVzVVVGQlVYVkNMRWxCUVZJc1JVRkJSQ3hEUVVGbU8wRkJRMEVzYVVKQlFVOHNSMEZCVUR0QlFVTkVMRk5CU0VRc1RVRkhUenRCUVVOTUxHbENRVUZQZGtJc1QwRkJVRHRCUVVORU8wRkJRMFlzVDBGUVJEczdRVUZUUVR0QlFVTkJMRlZCUVVrc1EwRkJRMWtzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGc1FpeEZRVUV3UWp0QlFVTjRRaXhoUVVGTExFbEJRVWxWTEUxQlFVbEtMRXRCUVV0SExFbEJRVXdzUTBGQlZWUXNUVUZCVml4SFFVRnRRaXhEUVVGb1F5eEZRVUZ0UTFVc1QwRkJTeXhEUVVGNFF5eEZRVUV5UTBFc1MwRkJNME1zUlVGQlowUTdRVUZET1VOS0xHVkJRVXRITEVsQlFVd3NRMEZCVlVNc1IwRkJWaXhKUVVGbFNpeExRVUZMUnl4SlFVRk1MRU5CUVZWRExFZEJRVllzUlVGQllWRXNUMEZCWWl4RFFVRnhRaXd5UWtGQmNrSXNSVUZCYTBSR0xHRkJRV3hFTEVWQlFXbEZReXhKUVVGcVJTeEZRVUZtTzBGQlEwRXNZMEZCU1Znc1MwRkJTMW9zVDBGQlRDeERRVUZoVFN4TlFVRnFRaXhGUVVGNVFqdEJRVU4yUWp0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVOR096dEJRVVZFTzBGQlEwRXNVVUZCU1N4RFFVRkRUU3hMUVVGTFJ5eEpRVUZNTEVOQlFWVlVMRTFCUVZnc1NVRkJjVUpOTEV0QlFVdERMRTlCUVV3c1EwRkJZVkFzVFVGQmRFTXNSVUZCT0VNN1FVRkROVU5OTEZkQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwTXNUMEZCYWtJN1FVRkRRVVFzVjBGQlMwTXNUMEZCVEN4SFFVRmxMRVZCUVdZN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEZGQlFVbEVMRXRCUVV0YUxFOUJRVXdzUTBGQllVMHNUVUZCWWl4SFFVRnpRaXhEUVVFeFFpeEZRVUUyUWp0QlFVTXpRazBzVjBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVk9MRTFCUVZZc1EwRkJhVUpITEV0QlFVdGFMRTlCUVV3c1EwRkJZWEZDTEUxQlFXSXNRMEZCYjBJc1EwRkJjRUlzUTBGQmFrSXNRMEZCV2p0QlFVTkVPenRCUVVWRU8wRkJRMEZVTEZOQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwY3NTVUZCVEN4RFFVRlZSeXhKUVVGV0xFTkJRV1VzUjBGQlppeERRVUZhTzBGQlEwRk9MRk5CUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaGEwSXNTVUZCWWl4RFFVRnJRaXhIUVVGc1FpeERRVUZtT3p0QlFVVkJMRkZCUVVrc1EwRkJRMDRzUzBGQlMxb3NUMEZCVGl4SlFVRnBRbFVzVDBGQmNrSXNSVUZCT0VJN1FVRkROVUlzWVVGQlR5eEZRVUZRTzBGQlEwUXNTMEZHUkN4TlFVVlBPMEZCUTB4V0xHZENRVUZWTzBGQlExSkJMR2xDUVVGVFdTeExRVUZMV2l4UFFVRk1MRWxCUVdkQ1dTeExRVUZMUnl4SlFVRnlRaXhKUVVFMlFpeEZRVVE1UWp0QlFVVlNTU3hqUVVGTlVDeExRVUZMUnl4SlFVRk1MRWxCUVdGSUxFdEJRVXRhTEU5QlFXeENMRWxCUVRaQ08wRkJSak5DTEU5QlFWWTdPMEZCUzBFc1ZVRkJTVUVzVVVGQlVVRXNUMEZCVWl4TFFVRnZRa0VzVVVGQlVXMUNMRWxCUVdoRExFVkJRWE5ETzBGQlEzQkRMRmxCUVVrc1EwRkJRMjVDTEZGQlFWRkJMRTlCUVZJc1NVRkJiVUlzUlVGQmNFSXNSVUZCZDBKdlFpeExRVUY0UWl4RFFVRTRRaXhIUVVFNVFpeERRVUZLTEVWQlFYZERPMEZCUTNSRGNFSXNhMEpCUVZGdFFpeEpRVUZTTEVkQlFXVXNSVUZCWmp0QlFVTkVMRk5CUmtRc1RVRkZUenRCUVVOTWJrSXNhMEpCUVZGQkxFOUJRVklzUjBGQmEwSXNSVUZCYkVJN1FVRkRSRHRCUVVOR096dEJRVVZFUkN4blFrRkJWVkVzU1VGQlZpeERRVUZsVUN4UFFVRm1PMEZCUTBRN1FVRkRSanM3UVVGRlJDeFRRVUZQUkN4VFFVRlFPMEZCUTBRN08wRkJSVVE3T3p0QlFVZEJMRWxCUVUwd1FpeFpRVUZaTzBGQlEyaENMRTlCUVVzc1IwRkVWenRCUVVWb1FpeFBRVUZMTEVkQlJsYzdRVUZIYUVJc1QwRkJTeXhIUVVoWE8wRkJTV2hDTEU5QlFVc3NSVUZLVnp0QlFVdG9RanRCUVVOQkxFOUJRVXNzUjBGT1Z6dEJRVTlvUWp0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeFBRVUZMT3p0QlFVZFFPenM3T3pzN1FVRm9RbXRDTEVOQlFXeENPMGxCYzBKTk4wSXNVenRCUVVOS0xIRkNRVUZoUml4SFFVRmlMRVZCUVd0Q08wRkJRVUU3TzBGQlEyaENMRk5CUVV0QkxFZEJRVXdzUjBGQlZ5eERRVUZEUVN4UFFVRlBMRVZCUVZJc1JVRkJXV2RETEZGQlFWb3NSVUZCV0R0QlFVTkJMRk5CUVV0RExHVkJRVXdzUjBGQmRVSXNSVUZCZGtJN1FVRkRRU3hUUVVGTFF5eHBRa0ZCVEN4SFFVRjVRaXhGUVVGNlFqdEJRVU5CTEZOQlFVdERMRWxCUVV3c1IwRkJXU3hKUVVGYU8wRkJRMEVzVTBGQlMwTXNUMEZCVEN4SFFVRmxMRXRCUVdZN1FVRkRRU3hUUVVGTFF5eEpRVUZNTEVkQlFWa3NSVUZCV2p0QlFVTkVPenRCUVVWRU96czdPenM3T3pzN0swSkJTMWs3UVVGRFZpeFZRVUZKUXl4WlFVRktPMEZCUTBFc1ZVRkJTVVFzVDBGQlR5eEZRVUZZTzBGQlEwRXNWMEZCU3l4SlFVRkpaaXhKUVVGSkxFTkJRVklzUlVGQlYwTXNUVUZCVFN4TFFVRkxka0lzUjBGQlRDeERRVUZUV1N4TlFVRXZRaXhGUVVGMVExVXNTVUZCU1VNc1IwRkJNME1zUlVGQlowUkVMRWRCUVdoRUxFVkJRWEZFTzBGQlEyNUVaMElzWTBGQlRTeExRVUZMZEVNc1IwRkJUQ3hEUVVGVGRVTXNUVUZCVkN4RFFVRm5RbXBDTEVOQlFXaENMRU5CUVU0N1FVRkRRU3hoUVVGTGEwSXNVMEZCVEN4RFFVRmxSaXhIUVVGbU8wRkJRMFE3TzBGQlJVUXNWMEZCUzBRc1NVRkJUQ3hEUVVGVk4wSXNUMEZCVml4RFFVRnJRaXhWUVVGVk1rSXNTVUZCVml4RlFVRm5RanRCUVVOb1EwRXNZVUZCUzNoQ0xFdEJRVXdzUjBGQllTeERRVUZEZDBJc1MwRkJTM2hDTEV0QlFVd3NTVUZCWXl4RlFVRm1MRVZCUVcxQ2NVSXNVVUZCYmtJc1IwRkJPRUpJTEVsQlFUbENMRVZCUVdJN1FVRkRRU3haUVVGSlRTeExRVUZMZUVJc1MwRkJWQ3hGUVVGblFqdEJRVU5rTUVJc1pVRkJTM2hDTEVsQlFVd3NRMEZCVlhOQ0xFbEJRVlk3UVVGRFJEdEJRVU5HTEU5QlRFUTdPMEZCVDBFc1lVRkJUMFVzU1VGQlVEdEJRVU5FT3p0QlFVVkVPenM3T3pzN096czRRa0ZMVjBNc1J5eEZRVUZMTzBGQlEyUXNWVUZCU1N4RFFVRkRRU3hQUVVGUFVDeFRRVUZRTEVsQlFXOUNUeXhSUVVGUkxFbEJRVGRDTEV0QlFYTkRMRXRCUVV0R0xFOUJRUzlETEVWQlFYZEVPMEZCUTNSRUxHRkJRVXRCTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRc1QwRkdSQ3hOUVVWUExFbEJRVWtzUzBGQlMwWXNhVUpCUVV3c1NVRkJNRUpKTEZGQlFWRXNTMEZCUzBvc2FVSkJRVE5ETEVWQlFUaEVPMEZCUTI1RkxHRkJRVXRETEVsQlFVd3NSMEZCV1R0QlFVTldla0lzWjBKQlFVMHNWVUZFU1R0QlFVVldReXhwUWtGQlR6SkNPMEZCUmtjc1UwRkJXanRCUVVsQkxHRkJRVXRFTEVsQlFVd3NRMEZCVlhoQ0xFbEJRVllzUTBGQlpTeExRVUZMYzBJc1NVRkJjRUk3UVVGRFFTeGhRVUZMUVN4SlFVRk1MRWRCUVZrc1NVRkJXanRCUVVOQkxHRkJRVXRFTEdsQ1FVRk1MRWRCUVhsQ0xFVkJRWHBDTzBGQlEwRXNZVUZCUzBVc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FTEU5QlZrMHNUVUZWUVN4SlFVRkpMRU5CUVVNc1MwRkJTMFlzYVVKQlFVNHNTVUZCTWtKSkxFOUJRVTlRTEZOQlFYUkRMRVZCUVdsRU8wRkJRM1JFTEdGQlFVdEpMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDU0N4VlFVRlZUeXhIUVVGV0xFTkJRWHBDTzBGQlEwRXNZVUZCUzBZc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1EwRkJReXhMUVVGTFFTeFBRVUZPTEVsQlFXbENSU3hSUVVGUkxFbEJRVGRDTEVWQlFXMURPMEZCUTJwRExHRkJRVXRHTEU5QlFVd3NSMEZCWlN4SlFVRm1PMEZCUTBFN1FVRkRSRHM3UVVGRlJDeFZRVUZKTEVOQlFVTXNTMEZCUzBRc1NVRkJWaXhGUVVGblFqdEJRVU5rTEdGQlFVdEJMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1RVRkVTVHRCUVVWV1F5eHBRa0ZCVHp0QlFVWkhMRk5CUVZvN1FVRkpRU3hoUVVGTE1FSXNTVUZCVEN4RFFVRlZlRUlzU1VGQlZpeERRVUZsTEV0QlFVdHpRaXhKUVVGd1FqdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1MwRkJTME1zVDBGQlRDeEpRVUZuUWtVc1VVRkJVU3hKUVVFMVFpeEZRVUZyUXp0QlFVTm9ReXhoUVVGTFNDeEpRVUZNTEVOQlFWVjRRaXhMUVVGV0xFbEJRVzFDTEVsQlFXNUNPMEZCUTBRN08wRkJSVVFzVjBGQlMzZENMRWxCUVV3c1EwRkJWWGhDTEV0QlFWWXNTVUZCYlVJeVFpeEhRVUZ1UWp0QlFVTkJMRmRCUVV0R0xFOUJRVXdzUjBGQlpTeExRVUZtTzBGQlEwUWlMQ0ptYVd4bElqb2lZV1JrY21WemMzQmhjbk5sY2k1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dVR0Z5YzJWeklITjBjblZqZEhWeVpXUWdaUzF0WVdsc0lHRmtaSEpsYzNObGN5Qm1jbTl0SUdGdUlHRmtaSEpsYzNNZ1ptbGxiR1JjYmlBcVhHNGdLaUJGZUdGdGNHeGxPbHh1SUNwY2JpQXFJQ0FnSUZ3aVRtRnRaU0E4WVdSa2NtVnpjMEJrYjIxaGFXNCtYQ0pjYmlBcVhHNGdLaUIzYVd4c0lHSmxJR052Ym5abGNuUmxaQ0IwYjF4dUlDcGNiaUFxSUNBZ0lDQmJlMjVoYldVNklGd2lUbUZ0WlZ3aUxDQmhaR1J5WlhOek9pQmNJbUZrWkhKbGMzTkFaRzl0WVdsdVhDSjlYVnh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQnpkSElnUVdSa2NtVnpjeUJtYVdWc1pGeHVJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUdGa1pISmxjM01nYjJKcVpXTjBjMXh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCd1lYSnpaU0FvYzNSeUtTQjdYRzRnSUdOdmJuTjBJSFJ2YTJWdWFYcGxjaUE5SUc1bGR5QlViMnRsYm1sNlpYSW9jM1J5S1Z4dUlDQmpiMjV6ZENCMGIydGxibk1nUFNCMGIydGxibWw2WlhJdWRHOXJaVzVwZW1Vb0tWeHVYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR3hsZENCaFpHUnlaWE56SUQwZ1cxMWNiaUFnYkdWMElIQmhjbk5sWkVGa1pISmxjM05sY3lBOUlGdGRYRzVjYmlBZ2RHOXJaVzV6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0hSdmEyVnVLU0I3WEc0Z0lDQWdhV1lnS0hSdmEyVnVMblI1Y0dVZ1BUMDlJQ2R2Y0dWeVlYUnZjaWNnSmlZZ0tIUnZhMlZ1TG5aaGJIVmxJRDA5UFNBbkxDY2dmSHdnZEc5clpXNHVkbUZzZFdVZ1BUMDlJQ2M3SnlrcElIdGNiaUFnSUNBZ0lHbG1JQ2hoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1lXUmtjbVZ6Y3lBOUlGdGRYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdGa1pISmxjM011Y0hWemFDaDBiMnRsYmlsY2JpQWdJQ0I5WEc0Z0lIMHBYRzVjYmlBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1lXUmtjbVZ6YzJWekxuQjFjMmdvWVdSa2NtVnpjeWxjYmlBZ2ZWeHVYRzRnSUdGa1pISmxjM05sY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnWVdSa2NtVnpjeUE5SUY5b1lXNWtiR1ZCWkdSeVpYTnpLR0ZrWkhKbGMzTXBYRzRnSUNBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQndZWEp6WldSQlpHUnlaWE56WlhNZ1BTQndZWEp6WldSQlpHUnlaWE56WlhNdVkyOXVZMkYwS0dGa1pISmxjM01wWEc0Z0lDQWdmVnh1SUNCOUtWeHVYRzRnSUhKbGRIVnliaUJ3WVhKelpXUkJaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFLbHh1SUNvZ1EyOXVkbVZ5ZEhNZ2RHOXJaVzV6SUdadmNpQmhJSE5wYm1kc1pTQmhaR1J5WlhOeklHbHVkRzhnWVc0Z1lXUmtjbVZ6Y3lCdlltcGxZM1JjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNWZTQjBiMnRsYm5NZ1ZHOXJaVzV6SUc5aWFtVmpkRnh1SUNvZ1FISmxkSFZ5YmlCN1QySnFaV04wZlNCQlpHUnlaWE56SUc5aWFtVmpkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmZhR0Z1Wkd4bFFXUmtjbVZ6Y3lBb2RHOXJaVzV6S1NCN1hHNGdJR3hsZENCcGMwZHliM1Z3SUQwZ1ptRnNjMlZjYmlBZ2JHVjBJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJR3hsZENCaFpHUnlaWE56WEc0Z0lHTnZibk4wSUdGa1pISmxjM05sY3lBOUlGdGRYRzRnSUdOdmJuTjBJR1JoZEdFZ1BTQjdYRzRnSUNBZ1lXUmtjbVZ6Y3pvZ1cxMHNYRzRnSUNBZ1kyOXRiV1Z1ZERvZ1cxMHNYRzRnSUNBZ1ozSnZkWEE2SUZ0ZExGeHVJQ0FnSUhSbGVIUTZJRnRkWEc0Z0lIMWNibHh1SUNBdkx5QkdhV3gwWlhJZ2IzVjBJRHhoWkdSeVpYTnpaWE0rTENBb1kyOXRiV1Z1ZEhNcElHRnVaQ0J5WldkMWJHRnlJSFJsZUhSY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHeGxiaUE5SUhSdmEyVnVjeTVzWlc1bmRHZzdJR2tnUENCc1pXNDdJR2tyS3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJ2YTJWdUlEMGdkRzlyWlc1elcybGRYRzVjYmlBZ0lDQnBaaUFvZEc5clpXNHVkSGx3WlNBOVBUMGdKMjl3WlhKaGRHOXlKeWtnZTF4dUlDQWdJQ0FnYzNkcGRHTm9JQ2gwYjJ0bGJpNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjOEp6cGNiaUFnSUNBZ0lDQWdJQ0J6ZEdGMFpTQTlJQ2RoWkdSeVpYTnpKMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJR05oYzJVZ0p5Z25PbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjJOdmJXMWxiblFuWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnWTJGelpTQW5PaWM2WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNBblozSnZkWEFuWEc0Z0lDQWdJQ0FnSUNBZ2FYTkhjbTkxY0NBOUlIUnlkV1ZjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjNSbGVIUW5YRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdsbUlDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCa1lYUmhXM04wWVhSbFhTNXdkWE5vS0hSdmEyVnVMblpoYkhWbEtWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRWxtSUhSb1pYSmxJR2x6SUc1dklIUmxlSFFnWW5WMElHRWdZMjl0YldWdWRDd2djbVZ3YkdGalpTQjBhR1VnZEhkdlhHNGdJR2xtSUNnaFpHRjBZUzUwWlhoMExteGxibWQwYUNBbUppQmtZWFJoTG1OdmJXMWxiblF1YkdWdVozUm9LU0I3WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNWpiMjF0Wlc1MFhHNGdJQ0FnWkdGMFlTNWpiMjF0Wlc1MElEMGdXMTFjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBjMGR5YjNWd0tTQjdYRzRnSUNBZ0x5OGdhSFIwY0RvdkwzUnZiMnh6TG1sbGRHWXViM0puTDJoMGJXd3ZjbVpqTWpneU1pTmhjSEJsYm1ScGVDMUJMakV1TTF4dUlDQWdJR1JoZEdFdWRHVjRkQ0E5SUdSaGRHRXVkR1Y0ZEM1cWIybHVLQ2NnSnlsY2JpQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaDdYRzRnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2dLR0ZrWkhKbGMzTWdKaVlnWVdSa2NtVnpjeTV1WVcxbEtTeGNiaUFnSUNBZ0lHZHliM1Z3T2lCa1lYUmhMbWR5YjNWd0xteGxibWQwYUNBL0lIQmhjbk5sS0dSaGRHRXVaM0p2ZFhBdWFtOXBiaWduTENjcEtTQTZJRnRkWEc0Z0lDQWdmU2xjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCSlppQnVieUJoWkdSeVpYTnpJSGRoY3lCbWIzVnVaQ3dnZEhKNUlIUnZJR1JsZEdWamRDQnZibVVnWm5KdmJTQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ0lDQnBaaUFvSVdSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdnZ0ppWWdaR0YwWVM1MFpYaDBMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SUdSaGRHRXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aR0YwWVM1MFpYaDBXMmxkTG0xaGRHTm9LQzllVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3NrTHlrcElIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaExtRmtaSEpsYzNNZ1BTQmtZWFJoTG5SbGVIUXVjM0JzYVdObEtHa3NJREVwWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMllYSWdYM0psWjJWNFNHRnVaR3hsY2lBOUlHWjFibU4wYVc5dUlDaGhaR1J5WlhOektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJRnRoWkdSeVpYTnpMblJ5YVcwb0tWMWNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKeUFuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGa1pISmxjM05jYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QnpkR2xzYkNCdWJ5QmhaR1J5WlhOelhHNGdJQ0FnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVkR1Y0ZEZ0cFhTQTlJR1JoZEdFdWRHVjRkRnRwWFM1eVpYQnNZV05sS0M5Y1hITXFYRnhpVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3RjWEdKY1hITXFMeXdnWDNKbFoyVjRTR0Z1Wkd4bGNpa3VkSEpwYlNncFhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1NXWWdkR2hsY21VbmN5QnpkR2xzYkNCcGN5QnVieUIwWlhoMElHSjFkQ0JoSUdOdmJXMWxiblFnWlhocGVIUnpMQ0J5WlhCc1lXTmxJSFJvWlNCMGQyOWNiaUFnSUNCcFppQW9JV1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dKaVlnWkdGMFlTNWpiMjF0Wlc1MExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdJQ0JrWVhSaExtTnZiVzFsYm5RZ1BTQmJYVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXRsWlhBZ2IyNXNlU0IwYUdVZ1ptbHljM1FnWVdSa2NtVnpjeUJ2WTJOMWNtVnVZMlVzSUhCMWMyZ2diM1JvWlhKeklIUnZJSEpsWjNWc1lYSWdkR1Y0ZEZ4dUlDQWdJR2xtSUNoa1lYUmhMbUZrWkhKbGMzTXViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtTnZibU5oZENoa1lYUmhMbUZrWkhKbGMzTXVjM0JzYVdObEtERXBLVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXB2YVc0Z2RtRnNkV1Z6SUhkcGRHZ2djM0JoWTJWelhHNGdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtcHZhVzRvSnlBbktWeHVJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJR1JoZEdFdVlXUmtjbVZ6Y3k1cWIybHVLQ2NnSnlsY2JseHVJQ0FnSUdsbUlDZ2haR0YwWVM1aFpHUnlaWE56SUNZbUlHbHpSM0p2ZFhBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JoWkdSeVpYTnpJRDBnZTF4dUlDQWdJQ0FnSUNCaFpHUnlaWE56T2lCa1lYUmhMbUZrWkhKbGMzTWdmSHdnWkdGMFlTNTBaWGgwSUh4OElDY25MRnh1SUNBZ0lDQWdJQ0J1WVcxbE9pQmtZWFJoTG5SbGVIUWdmSHdnWkdGMFlTNWhaR1J5WlhOeklIeDhJQ2NuWEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxtRmtaSEpsYzNNZ1BUMDlJR0ZrWkhKbGMzTXVibUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dGa1pISmxjM011WVdSa2NtVnpjeUI4ZkNBbkp5a3ViV0YwWTJnb0wwQXZLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRmtaSEpsYzNNdWJtRnRaU0E5SUNjblhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZV1JrY21WemN5NWhaR1J5WlhOeklEMGdKeWRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCaFpHUnlaWE56WlhNdWNIVnphQ2hoWkdSeVpYTnpLVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmhaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFYRzRnS2lCUGNHVnlZWFJ2Y2lCMGIydGxibk1nWVc1a0lIZG9hV05vSUhSdmEyVnVjeUJoY21VZ1pYaHdaV04wWldRZ2RHOGdaVzVrSUhSb1pTQnpaWEYxWlc1alpWeHVJQ292WEc1amIyNXpkQ0JQVUVWU1FWUlBVbE1nUFNCN1hHNGdJQ2RjSWljNklDZGNJaWNzWEc0Z0lDY29Kem9nSnlrbkxGeHVJQ0FuUENjNklDYytKeXhjYmlBZ0p5d25PaUFuSnl4Y2JpQWdMeThnUjNKdmRYQnpJR0Z5WlNCbGJtUmxaQ0JpZVNCelpXMXBZMjlzYjI1elhHNGdJQ2M2SnpvZ0p6c25MRnh1SUNBdkx5QlRaVzFwWTI5c2IyNXpJR0Z5WlNCdWIzUWdZU0JzWldkaGJDQmtaV3hwYldsMFpYSWdjR1Z5SUhSb1pTQlNSa015T0RJeUlHZHlZVzF0WVhJZ2IzUm9aWEpjYmlBZ0x5OGdkR2hoYmlCbWIzSWdkR1Z5YldsdVlYUnBibWNnWVNCbmNtOTFjQ3dnWW5WMElIUm9aWGtnWVhKbElHRnNjMjhnYm05MElIWmhiR2xrSUdadmNpQmhibmxjYmlBZ0x5OGdiM1JvWlhJZ2RYTmxJR2x1SUhSb2FYTWdZMjl1ZEdWNGRDNGdJRWRwZG1WdUlIUm9ZWFFnYzI5dFpTQnRZV2xzSUdOc2FXVnVkSE1nYUdGMlpWeHVJQ0F2THlCb2FYTjBiM0pwWTJGc2JIa2dZV3hzYjNkbFpDQjBhR1VnYzJWdGFXTnZiRzl1SUdGeklHRWdaR1ZzYVcxcGRHVnlJR1Z4ZFdsMllXeGxiblFnZEc4Z2RHaGxYRzRnSUM4dklHTnZiVzFoSUdsdUlIUm9aV2x5SUZWSkxDQnBkQ0J0WVd0bGN5QnpaVzV6WlNCMGJ5QjBjbVZoZENCMGFHVnRJSFJvWlNCellXMWxJR0Z6SUdFZ1kyOXRiV0ZjYmlBZ0x5OGdkMmhsYmlCMWMyVmtJRzkxZEhOcFpHVWdiMllnWVNCbmNtOTFjQzVjYmlBZ0p6c25PaUFuSjF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JVYjJ0bGJtbDZaWElnYjJKcVpXTjBJR1p2Y2lCMGIydGxibWw2YVc1bklHRmtaSEpsYzNNZ1ptbGxiR1FnYzNSeWFXNW5jMXh1SUNwY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb2dRSEJoY21GdElIdFRkSEpwYm1kOUlITjBjaUJCWkdSeVpYTnpJR1pwWld4a0lITjBjbWx1WjF4dUlDb3ZYRzVqYkdGemN5QlViMnRsYm1sNlpYSWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpQW9jM1J5S1NCN1hHNGdJQ0FnZEdocGN5NXpkSElnUFNBb2MzUnlJSHg4SUNjbktTNTBiMU4wY21sdVp5Z3BYRzRnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja04xY25KbGJuUWdQU0FuSjF4dUlDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQW5KMXh1SUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSFJvYVhNdWJHbHpkQ0E5SUZ0ZFhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWRzlyWlc1cGVtVnpJSFJvWlNCdmNtbG5hVzVoYkNCcGJuQjFkQ0J6ZEhKcGJtZGNiaUFnSUNwY2JpQWdJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUc5d1pYSmhkRzl5ZkhSbGVIUWdkRzlyWlc1elhHNGdJQ0FxTDF4dUlDQjBiMnRsYm1sNlpTQW9LU0I3WEc0Z0lDQWdiR1YwSUdOb2NseHVJQ0FnSUd4bGRDQnNhWE4wSUQwZ1cxMWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1emRISXViR1Z1WjNSb095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdOb2NpQTlJSFJvYVhNdWMzUnlMbU5vWVhKQmRDaHBLVnh1SUNBZ0lDQWdkR2hwY3k1amFHVmphME5vWVhJb1kyaHlLVnh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YkdsemRDNW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaHViMlJsS1NCN1hHNGdJQ0FnSUNCdWIyUmxMblpoYkhWbElEMGdLRzV2WkdVdWRtRnNkV1VnZkh3Z0p5Y3BMblJ2VTNSeWFXNW5LQ2t1ZEhKcGJTZ3BYRzRnSUNBZ0lDQnBaaUFvYm05a1pTNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhWE4wTG5CMWMyZ29ibTlrWlNsY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dVhHNGdJQ0FnY21WMGRYSnVJR3hwYzNSY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2FXWWdZU0JqYUdGeVlXTjBaWElnYVhNZ1lXNGdiM0JsY21GMGIzSWdiM0lnZEdWNGRDQmhibVFnWVdOMGN5QmhZMk52Y21ScGJtZHNlVnh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMzBnWTJoeUlFTm9ZWEpoWTNSbGNpQm1jbTl0SUhSb1pTQmhaR1J5WlhOeklHWnBaV3hrWEc0Z0lDQXFMMXh1SUNCamFHVmphME5vWVhJZ0tHTm9jaWtnZTF4dUlDQWdJR2xtSUNnb1kyaHlJR2x1SUU5UVJWSkJWRTlTVXlCOGZDQmphSElnUFQwOUlDZGNYRnhjSnlrZ0ppWWdkR2hwY3k1bGMyTmhjR1ZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdQVDA5SUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaU0E5SUh0Y2JpQWdJQ0FnSUNBZ2RIbHdaVG9nSjI5d1pYSmhkRzl5Snl4Y2JpQWdJQ0FnSUNBZ2RtRnNkV1U2SUdOb2NseHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVzYVhOMExuQjFjMmdvZEdocGN5NXViMlJsS1Z4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2JuVnNiRnh1SUNBZ0lDQWdkR2hwY3k1dmNHVnlZWFJ2Y2tWNGNHVmpkR2x1WnlBOUlDY25YRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lDQWdjbVYwZFhKdVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNnaGRHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdhVzRnVDFCRlVrRlVUMUpUS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbTV2WkdVZ1BTQjdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklDZHZjR1Z5WVhSdmNpY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQmphSEpjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWJHbHpkQzV3ZFhOb0tIUm9hWE11Ym05a1pTbGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0FnSUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY2dQU0JQVUVWU1FWUlBVbE5iWTJoeVhWeHVJQ0FnSUNBZ2RHaHBjeTVsYzJOaGNHVmtJRDBnWm1Gc2MyVmNiaUFnSUNBZ0lISmxkSFZ5Ymx4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTVsYzJOaGNHVmtJQ1ltSUdOb2NpQTlQVDBnSjF4Y1hGd25LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQjBjblZsWEc0Z0lDQWdJQ0J5WlhSMWNtNWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWFJvYVhNdWJtOWtaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2UxeHVJQ0FnSUNBZ0lDQjBlWEJsT2lBbmRHVjRkQ2NzWEc0Z0lDQWdJQ0FnSUhaaGJIVmxPaUFuSjF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtVnpZMkZ3WldRZ0ppWWdZMmh5SUNFOVBTQW5YRnhjWENjcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTNTJZV3gxWlNBclBTQW5YRnhjWENkY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtNXZaR1V1ZG1Gc2RXVWdLejBnWTJoeVhHNGdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdmVnh1ZlZ4dUlsMTkiLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5pZiAoIUlTX1BVUkUgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIGFycmF5UHVzaCA9IFtdLnB1c2g7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc3BsaXQnLCAyLCBmdW5jdGlvbiAoU1BMSVQsIG5hdGl2ZVNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCcuc3BsaXQoLyg/OikvLCAtMSkubGVuZ3RoICE9IDQgfHxcbiAgICAnYWInLnNwbGl0KC8oPzphYikqLykubGVuZ3RoICE9IDIgfHxcbiAgICAnLicuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoICE9IDQgfHxcbiAgICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxIHx8XG4gICAgJycuc3BsaXQoLy4/LykubGVuZ3RoXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW3N0cmluZ107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW0pO1xuICAgICAgfVxuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleDtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZy5sZW5ndGgpIGFycmF5UHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPj0gbGltKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weS5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbSA/IG91dHB1dC5zbGljZSgwLCBsaW0pIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCcuc3BsaXQodW5kZWZpbmVkLCAwKS5sZW5ndGgpIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogbmF0aXZlU3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2UgaW50ZXJuYWxTcGxpdCA9IG5hdGl2ZVNwbGl0O1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSBuYXRpdmVTcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9IG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59LCAhU1VQUE9SVFNfWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUubGlua2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmxpbmtcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdsaW5rJykgfSwge1xuICBsaW5rOiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuSnVhOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgXyBmcm9tICdfJztcblxuLy8gaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuY2xhc3MgVGVtcGxhdGVVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRlbXBsYXRlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cblx0XHR0aGlzLnRlbXBsYXRlc05hbWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwMCB9KTtcblx0XHR0aGlzLnRlbXBsYXRlc05hbWVzLnNraXBGaXJzdCA9IHRydWU7XG5cblx0XHR0aGlzLnN1YnNjcmliZXJzKCk7XG5cdH1cblxuXHRzdWJzY3JpYmVycygpIHtcblx0XHR0aGlzLnRlbXBsYXRlcy5zdWJzY3JpYmUoKGxpc3QpID0+IHtcblx0XHRcdHRoaXMudGVtcGxhdGVzTmFtZXMoXy5jb21wYWN0KF8ubWFwKGxpc3QsIChpdGVtKSA9PiAoaXRlbSA/IGl0ZW0ubmFtZSA6IG51bGwpKSkpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gdGhpcy50ZW1wbGF0ZXNOYW1lcy5zdWJzY3JpYmUoKGFMaXN0KSA9PiB7XG5cdFx0Ly8gXHRpZiAodGhpcy50ZW1wbGF0ZXNOYW1lcy5za2lwRmlyc3QpXG5cdFx0Ly8gXHR7XG5cdFx0Ly8gXHRcdHRoaXMudGVtcGxhdGVzTmFtZXMuc2tpcEZpcnN0ID0gZmFsc2U7XG5cdFx0Ly8gXHR9XG5cdFx0Ly8gXHRlbHNlIGlmIChhTGlzdCAmJiAxIDwgYUxpc3QubGVuZ3RoKVxuXHRcdC8vIFx0e1xuXHRcdC8vIFx0XHRSZW1vdGUudGVtcGxhdGVzU29ydE9yZGVyKG51bGwsIGFMaXN0KTtcblx0XHQvLyBcdH1cblx0XHQvLyB9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVGVtcGxhdGVVc2VyU3RvcmUoKTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgRmlsZVR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYkFsbG93UGRmUHJldmlldywgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHRyaW0sIHBJbnQsIGluQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgZ2V0RmlsZUV4dGVuc2lvbiwgZnJpZW5kbHlTaXplIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7XG5cdGF0dGFjaG1lbnREb3dubG9hZCxcblx0YXR0YWNobWVudFByZXZpZXcsXG5cdGF0dGFjaG1lbnRGcmFtZWQsXG5cdGF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbixcblx0YXR0YWNobWVudFRodW1ibmFpbFByZXZpZXdcbn0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5pbXBvcnQgQXVkaW8gZnJvbSAnQ29tbW9uL0F1ZGlvJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0V4dFxuICogQHBhcmFtIHtzdHJpbmd9IHNNaW1lVHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRpY0ZpbGVUeXBlID0gXy5tZW1vaXplKChleHQsIG1pbWVUeXBlKSA9PiB7XG5cdGV4dCA9IHRyaW0oZXh0KS50b0xvd2VyQ2FzZSgpO1xuXHRtaW1lVHlwZSA9IHRyaW0obWltZVR5cGUpLnRvTG93ZXJDYXNlKCk7XG5cblx0bGV0IHJlc3VsdCA9IEZpbGVUeXBlLlVua25vd247XG5cdGNvbnN0IG1pbWVUeXBlUGFydHMgPSBtaW1lVHlwZS5zcGxpdCgnLycpO1xuXG5cdHN3aXRjaCAodHJ1ZSkge1xuXHRcdGNhc2UgJ2ltYWdlJyA9PT0gbWltZVR5cGVQYXJ0c1swXSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ3BuZycsICdqcGcnLCAnanBlZycsICdnaWYnLCAnYm1wJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuSW1hZ2U7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhdWRpbycgPT09IG1pbWVUeXBlUGFydHNbMF0gfHwgLTEgPCBpbkFycmF5KGV4dCwgWydtcDMnLCAnb2dnJywgJ29nYScsICd3YXYnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5BdWRpbztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3ZpZGVvJyA9PT0gbWltZVR5cGVQYXJ0c1swXSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ21rdicsICdhdmknXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5WaWRlbztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPCBpbkFycmF5KGV4dCwgWydwaHAnLCAnanMnLCAnY3NzJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuQ29kZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2VtbCcgPT09IGV4dCB8fCAtMSA8IGluQXJyYXkobWltZVR5cGUsIFsnbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMnLCAnbWVzc2FnZS9yZmM4MjInXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5FbWw7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICgndGV4dCcgPT09IG1pbWVUeXBlUGFydHNbMF0gJiYgJ2h0bWwnICE9PSBtaW1lVHlwZVBhcnRzWzFdKSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ3R4dCcsICdsb2cnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5UZXh0O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAndGV4dC9odG1sJyA9PT0gbWltZVR5cGUgfHwgLTEgPCBpbkFycmF5KGV4dCwgWydodG1sJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuSHRtbDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPFxuXHRcdFx0aW5BcnJheShtaW1lVHlwZVBhcnRzWzFdLCBbXG5cdFx0XHRcdCd6aXAnLFxuXHRcdFx0XHQnN3onLFxuXHRcdFx0XHQndGFyJyxcblx0XHRcdFx0J3JhcicsXG5cdFx0XHRcdCdnemlwJyxcblx0XHRcdFx0J2J6aXAnLFxuXHRcdFx0XHQnYnppcDInLFxuXHRcdFx0XHQneC16aXAnLFxuXHRcdFx0XHQneC03eicsXG5cdFx0XHRcdCd4LXJhcicsXG5cdFx0XHRcdCd4LXRhcicsXG5cdFx0XHRcdCd4LWd6aXAnLFxuXHRcdFx0XHQneC1iemlwJyxcblx0XHRcdFx0J3gtYnppcDInLFxuXHRcdFx0XHQneC16aXAtY29tcHJlc3NlZCcsXG5cdFx0XHRcdCd4LTd6LWNvbXByZXNzZWQnLFxuXHRcdFx0XHQneC1yYXItY29tcHJlc3NlZCdcblx0XHRcdF0pIHx8IC0xIDwgaW5BcnJheShleHQsIFsnemlwJywgJzd6JywgJ3RhcicsICdyYXInLCAnZ3ppcCcsICdiemlwJywgJ2J6aXAyJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuQXJjaGl2ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPCBpbkFycmF5KG1pbWVUeXBlUGFydHNbMV0sIFsncGRmJywgJ3gtcGRmJ10pIHx8IC0xIDwgaW5BcnJheShleHQsIFsncGRmJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuUGRmO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8IGluQXJyYXkobWltZVR5cGUsIFsnYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZScsICdhcHBsaWNhdGlvbi9wZ3Ata2V5cyddKSB8fFxuXHRcdFx0LTEgPCBpbkFycmF5KGV4dCwgWydhc2MnLCAncGVtJywgJ3BwayddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkNlcnRpZmljYXRlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8IGluQXJyYXkobWltZVR5cGUsIFsnYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlJ10pIHx8IC0xIDwgaW5BcnJheShleHQsIFsncDdzJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuQ2VydGlmaWNhdGVCaW47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDxcblx0XHRcdGluQXJyYXkobWltZVR5cGVQYXJ0c1sxXSwgW1xuXHRcdFx0XHQncnRmJyxcblx0XHRcdFx0J21zd29yZCcsXG5cdFx0XHRcdCd2bmQubXN3b3JkJyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50Jyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlJyxcblx0XHRcdFx0J3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb0VuYWJsZWQuMTInXG5cdFx0XHRdKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLldvcmRUZXh0O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8XG5cdFx0XHRpbkFycmF5KG1pbWVUeXBlUGFydHNbMV0sIFtcblx0XHRcdFx0J2V4Y2VsJyxcblx0XHRcdFx0J21zLWV4Y2VsJyxcblx0XHRcdFx0J3ZuZC5tcy1leGNlbCcsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZScsXG5cdFx0XHRcdCd2bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy1leGNlbC50ZW1wbGF0ZS5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC4xMidcblx0XHRcdF0pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuU2hlZXQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDxcblx0XHRcdGluQXJyYXkobWltZVR5cGVQYXJ0c1sxXSwgW1xuXHRcdFx0XHQncG93ZXJwb2ludCcsXG5cdFx0XHRcdCdtcy1wb3dlcnBvaW50Jyxcblx0XHRcdFx0J3ZuZC5tcy1wb3dlcnBvaW50Jyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRlbXBsYXRlJyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3cnLFxuXHRcdFx0XHQndm5kLm1zLXBvd2VycG9pbnQuYWRkaW4ubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy1wb3dlcnBvaW50LnByZXNlbnRhdGlvbi5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLXBvd2VycG9pbnQudGVtcGxhdGUubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlc2hvdy5tYWNyb0VuYWJsZWQuMTInXG5cdFx0XHRdKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLlByZXNlbnRhdGlvbjtcblx0XHRcdGJyZWFrO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0ZpbGVUeXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3Qgc3RhdGljSWNvbkNsYXNzID0gXy5tZW1vaXplKChmaWxlVHlwZSkgPT4ge1xuXHRsZXQgcmVzdWx0VGV4dCA9ICcnLFxuXHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZSc7XG5cblx0c3dpdGNoIChmaWxlVHlwZSkge1xuXHRcdGNhc2UgRmlsZVR5cGUuVGV4dDpcblx0XHRjYXNlIEZpbGVUeXBlLkVtbDpcblx0XHRjYXNlIEZpbGVUeXBlLldvcmRUZXh0OlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLXRleHQnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5IdG1sOlxuXHRcdGNhc2UgRmlsZVR5cGUuQ29kZTpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1jb2RlJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuSW1hZ2U6XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtaW1hZ2UnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5BdWRpbzpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1tdXNpYyc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLlZpZGVvOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLW1vdmllJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuQXJjaGl2ZTpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS16aXAnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5DZXJ0aWZpY2F0ZTpcblx0XHRjYXNlIEZpbGVUeXBlLkNlcnRpZmljYXRlQmluOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLWNlcnRpZmljYXRlJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuU2hlZXQ6XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtZXhjZWwnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5QcmVzZW50YXRpb246XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtY2hhcnQtZ3JhcGgnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5QZGY6XG5cdFx0XHRyZXN1bHRUZXh0ID0gJ3BkZic7XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLW5vbmUnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Ly8gbm8gZGVmYXVsdFxuXHR9XG5cblx0cmV0dXJuIFtyZXN1bHRDbGFzcywgcmVzdWx0VGV4dF07XG59KTtcblxuLyoqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3N0cmluZ30gc0ZpbGVUeXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3Qgc3RhdGljQ29tYmluZWRJY29uQ2xhc3MgPSAoZGF0YSkgPT4ge1xuXHRsZXQgcmVzdWx0ID0gJycsXG5cdFx0dHlwZXMgPSBbXTtcblxuXHRpZiAoaXNOb25FbXB0eUFycmF5KGRhdGEpKSB7XG5cdFx0cmVzdWx0ID0gJ2ljb24tYXR0YWNobWVudCc7XG5cdFx0dHlwZXMgPSBfLnVuaXEoXy5jb21wYWN0KF8ubWFwKGRhdGEsIChpdGVtKSA9PiAoaXRlbSA/IHN0YXRpY0ZpbGVUeXBlKGdldEZpbGVFeHRlbnNpb24oaXRlbVswXSksIGl0ZW1bMV0pIDogJycpKSkpO1xuXG5cdFx0aWYgKHR5cGVzICYmIDEgPT09IHR5cGVzLmxlbmd0aCAmJiB0eXBlc1swXSkge1xuXHRcdFx0c3dpdGNoICh0eXBlc1swXSkge1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLlRleHQ6XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuV29yZFRleHQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS10ZXh0Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5IdG1sOlxuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkNvZGU6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1jb2RlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5JbWFnZTpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLWltYWdlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5BdWRpbzpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLW11c2ljJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5WaWRlbzpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLW1vdmllJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5BcmNoaXZlOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtemlwJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5DZXJ0aWZpY2F0ZTpcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5DZXJ0aWZpY2F0ZUJpbjpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLWNlcnRpZmljYXRlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5TaGVldDpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLWV4Y2VsJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5QcmVzZW50YXRpb246XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1jaGFydC1ncmFwaCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuY2xhc3MgQXR0YWNobWVudE1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdBdHRhY2htZW50TW9kZWwnKTtcblxuXHRcdHRoaXMuY2hlY2tlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5taW1lVHlwZSA9ICcnO1xuXHRcdHRoaXMuZmlsZU5hbWUgPSAnJztcblx0XHR0aGlzLmZpbGVOYW1lRXh0ID0gJyc7XG5cdFx0dGhpcy5maWxlVHlwZSA9IEZpbGVUeXBlLlVua25vd247XG5cdFx0dGhpcy5lc3RpbWF0ZWRTaXplID0gMDtcblx0XHR0aGlzLmZyaWVuZGx5U2l6ZSA9ICcnO1xuXHRcdHRoaXMuaXNJbmxpbmUgPSBmYWxzZTtcblx0XHR0aGlzLmlzTGlua2VkID0gZmFsc2U7XG5cdFx0dGhpcy5pc1RodW1ibmFpbCA9IGZhbHNlO1xuXHRcdHRoaXMuY2lkID0gJyc7XG5cdFx0dGhpcy5jaWRXaXRoT3V0VGFncyA9ICcnO1xuXHRcdHRoaXMuY29udGVudExvY2F0aW9uID0gJyc7XG5cdFx0dGhpcy5kb3dubG9hZCA9ICcnO1xuXHRcdHRoaXMuZm9sZGVyID0gJyc7XG5cdFx0dGhpcy51aWQgPSAnJztcblx0XHR0aGlzLm1pbWVJbmRleCA9ICcnO1xuXHRcdHRoaXMuZnJhbWVkID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uQXR0YWNobWVudH0ganNvblxuXHQgKiBAcmV0dXJucyB7P0F0dGFjaG1lbnRNb2RlbH1cblx0ICovXG5cdHN0YXRpYyBuZXdJbnN0YW5jZUZyb21Kc29uKGpzb24pIHtcblx0XHRjb25zdCBhdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnRNb2RlbCgpO1xuXHRcdHJldHVybiBhdHRhY2htZW50LmluaXRCeUpzb24oanNvbikgPyBhdHRhY2htZW50IDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uQXR0YWNobWVudH0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCBiUmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9BdHRhY2htZW50JyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLm1pbWVUeXBlID0gdHJpbSgoanNvbi5NaW1lVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHR0aGlzLmZpbGVOYW1lID0gdHJpbShqc29uLkZpbGVOYW1lKTtcblx0XHRcdHRoaXMuZXN0aW1hdGVkU2l6ZSA9IHBJbnQoanNvbi5Fc3RpbWF0ZWRTaXplKTtcblx0XHRcdHRoaXMuaXNJbmxpbmUgPSAhIWpzb24uSXNJbmxpbmU7XG5cdFx0XHR0aGlzLmlzTGlua2VkID0gISFqc29uLklzTGlua2VkO1xuXHRcdFx0dGhpcy5pc1RodW1ibmFpbCA9ICEhanNvbi5Jc1RodW1ibmFpbDtcblx0XHRcdHRoaXMuY2lkID0ganNvbi5DSUQ7XG5cdFx0XHR0aGlzLmNvbnRlbnRMb2NhdGlvbiA9IGpzb24uQ29udGVudExvY2F0aW9uO1xuXHRcdFx0dGhpcy5kb3dubG9hZCA9IGpzb24uRG93bmxvYWQ7XG5cblx0XHRcdHRoaXMuZm9sZGVyID0ganNvbi5Gb2xkZXI7XG5cdFx0XHR0aGlzLnVpZCA9IGpzb24uVWlkO1xuXHRcdFx0dGhpcy5taW1lSW5kZXggPSBqc29uLk1pbWVJbmRleDtcblx0XHRcdHRoaXMuZnJhbWVkID0gISFqc29uLkZyYW1lZDtcblxuXHRcdFx0dGhpcy5mcmllbmRseVNpemUgPSBmcmllbmRseVNpemUodGhpcy5lc3RpbWF0ZWRTaXplKTtcblx0XHRcdHRoaXMuY2lkV2l0aE91dFRhZ3MgPSB0aGlzLmNpZC5yZXBsYWNlKC9ePCsvLCAnJykucmVwbGFjZSgvPiskLywgJycpO1xuXG5cdFx0XHR0aGlzLmZpbGVOYW1lRXh0ID0gZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmZpbGVOYW1lKTtcblx0XHRcdHRoaXMuZmlsZVR5cGUgPSBzdGF0aWNGaWxlVHlwZSh0aGlzLmZpbGVOYW1lRXh0LCB0aGlzLm1pbWVUeXBlKTtcblxuXHRcdFx0YlJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJSZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0ltYWdlKCkge1xuXHRcdHJldHVybiBGaWxlVHlwZS5JbWFnZSA9PT0gdGhpcy5maWxlVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzTXAzKCkge1xuXHRcdHJldHVybiBGaWxlVHlwZS5BdWRpbyA9PT0gdGhpcy5maWxlVHlwZSAmJiAnbXAzJyA9PT0gdGhpcy5maWxlTmFtZUV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzT2dnKCkge1xuXHRcdHJldHVybiBGaWxlVHlwZS5BdWRpbyA9PT0gdGhpcy5maWxlVHlwZSAmJiAoJ29nYScgPT09IHRoaXMuZmlsZU5hbWVFeHQgfHwgJ29nZycgPT09IHRoaXMuZmlsZU5hbWVFeHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNXYXYoKSB7XG5cdFx0cmV0dXJuIEZpbGVUeXBlLkF1ZGlvID09PSB0aGlzLmZpbGVUeXBlICYmICd3YXYnID09PSB0aGlzLmZpbGVOYW1lRXh0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGh1bWJuYWlsKCkge1xuXHRcdHJldHVybiB0aGlzLmlzVGh1bWJuYWlsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNUZXh0KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRGaWxlVHlwZS5UZXh0ID09PSB0aGlzLmZpbGVUeXBlIHx8XG5cdFx0XHRGaWxlVHlwZS5FbWwgPT09IHRoaXMuZmlsZVR5cGUgfHxcblx0XHRcdEZpbGVUeXBlLkNlcnRpZmljYXRlID09PSB0aGlzLmZpbGVUeXBlIHx8XG5cdFx0XHRGaWxlVHlwZS5IdG1sID09PSB0aGlzLmZpbGVUeXBlIHx8XG5cdFx0XHRGaWxlVHlwZS5Db2RlID09PSB0aGlzLmZpbGVUeXBlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzUGRmKCkge1xuXHRcdHJldHVybiBGaWxlVHlwZS5QZGYgPT09IHRoaXMuZmlsZVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0ZyYW1lZCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5mcmFtZWQgJiZcblx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18gJiZcblx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uZ29vZ2xlUHJldmlld1N1cHBvcnRlZCgpICYmXG5cdFx0XHQhKHRoaXMuaXNQZGYoKSAmJiBiQWxsb3dQZGZQcmV2aWV3KSAmJlxuXHRcdFx0IXRoaXMuaXNUZXh0KCkgJiZcblx0XHRcdCF0aGlzLmlzSW1hZ2UoKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNQcmV2aWV3KCkge1xuXHRcdHJldHVybiB0aGlzLmlzSW1hZ2UoKSB8fCAodGhpcy5pc1BkZigpICYmIGJBbGxvd1BkZlByZXZpZXcpIHx8IHRoaXMuaXNUZXh0KCkgfHwgdGhpcy5pc0ZyYW1lZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzUHJlcGxheSgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KEF1ZGlvLnN1cHBvcnRlZE1wMyAmJiB0aGlzLmlzTXAzKCkpIHx8XG5cdFx0XHQoQXVkaW8uc3VwcG9ydGVkT2dnICYmIHRoaXMuaXNPZ2coKSkgfHxcblx0XHRcdChBdWRpby5zdXBwb3J0ZWRXYXYgJiYgdGhpcy5pc1dhdigpKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtEb3dubG9hZCgpIHtcblx0XHRyZXR1cm4gYXR0YWNobWVudERvd25sb2FkKHRoaXMuZG93bmxvYWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rUHJldmlldygpIHtcblx0XHRyZXR1cm4gYXR0YWNobWVudFByZXZpZXcodGhpcy5kb3dubG9hZCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtUaHVtYm5haWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzVGh1bWJuYWlsKCkgPyBhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyh0aGlzLmRvd25sb2FkKSA6ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rVGh1bWJuYWlsUHJldmlld1N0eWxlKCkge1xuXHRcdGNvbnN0IGxpbmsgPSB0aGlzLmxpbmtUaHVtYm5haWwoKTtcblx0XHRyZXR1cm4gJycgPT09IGxpbmsgPyAnJyA6ICdiYWNrZ3JvdW5kOnVybCgnICsgbGluayArICcpJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua0ZyYW1lZCgpIHtcblx0XHRyZXR1cm4gYXR0YWNobWVudEZyYW1lZCh0aGlzLmRvd25sb2FkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua1ByZXZpZXdBc1BsYWluKCkge1xuXHRcdHJldHVybiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4odGhpcy5kb3dubG9hZCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtQcmV2aWV3TWFpbigpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIHRoaXMuaXNJbWFnZSgpOlxuXHRcdFx0Y2FzZSB0aGlzLmlzUGRmKCkgJiYgYkFsbG93UGRmUHJldmlldzpcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5saW5rUHJldmlldygpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgdGhpcy5pc1RleHQoKTpcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5saW5rUHJldmlld0FzUGxhaW4oKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIHRoaXMuaXNGcmFtZWQoKTpcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5saW5rRnJhbWVkKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdlbmVyYXRlVHJhbnNmZXJEb3dubG9hZFVybCgpIHtcblx0XHRsZXQgbGluayA9IHRoaXMubGlua0Rvd25sb2FkKCk7XG5cdFx0aWYgKCdodHRwJyAhPT0gbGluay5zdWJzdHIoMCwgNCkpIHtcblx0XHRcdGxpbmsgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm1pbWVUeXBlICsgJzonICsgdGhpcy5maWxlTmFtZSArICc6JyArIGxpbms7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBdHRhY2htZW50TW9kZWx9IGF0dGFjaG1lbnRcblx0ICogQHBhcmFtIHsqfSBldmVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGV2ZW50RHJhZ1N0YXJ0KGF0dGFjaG1lbnQsIGV2ZW50KSB7XG5cdFx0Y29uc3QgbG9jYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG5cdFx0aWYgKGF0dGFjaG1lbnQgJiYgbG9jYWxFdmVudCAmJiBsb2NhbEV2ZW50LmRhdGFUcmFuc2ZlciAmJiBsb2NhbEV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKSB7XG5cdFx0XHRsb2NhbEV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdEb3dubG9hZFVSTCcsIHRoaXMuZ2VuZXJhdGVUcmFuc2ZlckRvd25sb2FkVXJsKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRpY29uQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHN0YXRpY0ljb25DbGFzcyh0aGlzLmZpbGVUeXBlKVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aWNvblRleHQoKSB7XG5cdFx0cmV0dXJuIHN0YXRpY0ljb25DbGFzcyh0aGlzLmZpbGVUeXBlKVsxXTtcblx0fVxufVxuXG5leHBvcnQgeyBBdHRhY2htZW50TW9kZWwsIEF0dGFjaG1lbnRNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIUlTX0lPUykge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBtYXRjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gbWF0Y2hlciAhPT0gdW5kZWZpbmVkID8gbWF0Y2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIFBSRUZFUlJFRF9TVFJJTkcpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGlucHV0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4xLjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuY29uc3QgT3BlbnRpcCA9IHdpbmRvdy5PcGVudGlwIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcyA9IE9wZW50aXAuc3R5bGVzIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcCA9IHtcblx0J2V4dGVuZHMnOiAnc3RhbmRhcmQnLFxuXG5cdCdmaXhlZCc6IHRydWUsXG5cdCd0YXJnZXQnOiB0cnVlLFxuXG5cdCdkZWxheSc6IDAuMixcblx0J2hpZGVEZWxheSc6IDAsXG5cblx0J2hpZGVFZmZlY3QnOiAnZmFkZScsXG5cdCdoaWRlRWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dFZmZlY3QnOiAnZmFkZScsXG5cdCdzaG93RWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dPbic6ICdtb3VzZW92ZXIgY2xpY2snLFxuXHQncmVtb3ZlRWxlbWVudHNPbkhpZGUnOiB0cnVlLFxuXG5cdCdiYWNrZ3JvdW5kJzogJyNmZmYnLFxuXHQnc2hhZG93JzogZmFsc2UsXG5cblx0J2JvcmRlckNvbG9yJzogJyM5OTknLFxuXHQnYm9yZGVyUmFkaXVzJzogMixcblx0J2JvcmRlcldpZHRoJzogMVxufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2RlbGF5JzogMC40LFxuXHQnZ3JvdXAnOiAncmFpbmxvb3BUaXBzJ1xufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BFcnJvclRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnY2xhc3NOYW1lJzogJ3JhaW5sb29wRXJyb3JUaXAnXG59O1xuXG5leHBvcnQgeyBPcGVudGlwLCBPcGVudGlwIGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICogUGlrYWRheVxuICpcbiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXlcbiAqL1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIG1vbWVudDtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAocmVxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgICAgICB2YXIgaWQgPSAnbW9tZW50JztcbiAgICAgICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcShpZCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShtb21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlBpa2FkYXkgPSBmYWN0b3J5KHJvb3QubW9tZW50KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogZmVhdHVyZSBkZXRlY3Rpb24gYW5kIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICB2YXIgaGFzTW9tZW50ID0gdHlwZW9mIG1vbWVudCA9PT0gJ2Z1bmN0aW9uJyxcblxuICAgIGhhc0V2ZW50TGlzdGVuZXJzID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixcblxuICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LFxuXG4gICAgc3RvID0gd2luZG93LnNldFRpbWVvdXQsXG5cbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmF0dGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5kZXRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHRyaW0gPSBmdW5jdGlvbihzdHIpXG4gICAge1xuICAgICAgICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csJycpO1xuICAgIH0sXG5cbiAgICBoYXNDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIHJldHVybiAoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNuICsgJyAnKSAhPT0gLTE7XG4gICAgfSxcblxuICAgIGFkZENsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY24pKSB7XG4gICAgICAgICAgICBlbC5jbGFzc05hbWUgPSAoZWwuY2xhc3NOYW1lID09PSAnJykgPyBjbiA6IGVsLmNsYXNzTmFtZSArICcgJyArIGNuO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gdHJpbSgoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5yZXBsYWNlKCcgJyArIGNuICsgJyAnLCAnICcpKTtcbiAgICB9LFxuXG4gICAgaXNBcnJheSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0FycmF5LykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSk7XG4gICAgfSxcblxuICAgIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0RhdGUvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSAmJiAhaXNOYU4ob2JqLmdldFRpbWUoKSk7XG4gICAgfSxcblxuICAgIGlzV2Vla2VuZCA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7XG4gICAgfSxcblxuICAgIGlzTGVhcFllYXIgPSBmdW5jdGlvbih5ZWFyKVxuICAgIHtcbiAgICAgICAgLy8gc29sdXRpb24gYnkgTWF0dGkgVmlya2t1bmVuOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80ODgxOTUxXG4gICAgICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpXG4gICAge1xuICAgICAgICByZXR1cm4gWzMxLCBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcbiAgICB9LFxuXG4gICAgc2V0VG9TdGFydE9mRGF5ID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChpc0RhdGUoZGF0ZSkpIGRhdGUuc2V0SG91cnMoMCwwLDAsMCk7XG4gICAgfSxcblxuICAgIGNvbXBhcmVEYXRlcyA9IGZ1bmN0aW9uKGEsYilcbiAgICB7XG4gICAgICAgIC8vIHdlYWsgZGF0ZSBjb21wYXJpc29uICh1c2Ugc2V0VG9TdGFydE9mRGF5KGRhdGUpIHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdClcbiAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICB9LFxuXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24odG8sIGZyb20sIG92ZXJ3cml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBwcm9wLCBoYXNQcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gZnJvbSkge1xuICAgICAgICAgICAgaGFzUHJvcCA9IHRvW3Byb3BdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaGFzUHJvcCAmJiB0eXBlb2YgZnJvbVtwcm9wXSA9PT0gJ29iamVjdCcgJiYgZnJvbVtwcm9wXSAhPT0gbnVsbCAmJiBmcm9tW3Byb3BdLm5vZGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlKGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gbmV3IERhdGUoZnJvbVtwcm9wXS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBleHRlbmQoe30sIGZyb21bcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvdmVyd3JpdGUgfHwgIWhhc1Byb3ApIHtcbiAgICAgICAgICAgICAgICB0b1twcm9wXSA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH0sXG5cbiAgICBmaXJlRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZlbnROYW1lLCBkYXRhKVxuICAgIHtcbiAgICAgICAgdmFyIGV2O1xuXG4gICAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgICAgICAgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgICAgICAgICAgZXYuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgZXYgPSBleHRlbmQoZXYsIGRhdGEpO1xuICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmZpcmVFdmVudCgnb24nICsgZXZlbnROYW1lLCBldik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRqdXN0Q2FsZW5kYXIgPSBmdW5jdGlvbihjYWxlbmRhcikge1xuICAgICAgICBpZiAoY2FsZW5kYXIubW9udGggPCAwKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyIC09IE1hdGguY2VpbChNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoID4gMTEpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLnllYXIgKz0gTWF0aC5mbG9vcihNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggLT0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0cyBhbmQgbG9jYWxpc2F0aW9uXG4gICAgICovXG4gICAgZGVmYXVsdHMgPSB7XG5cbiAgICAgICAgLy8gYmluZCB0aGUgcGlja2VyIHRvIGEgZm9ybSBmaWVsZFxuICAgICAgICBmaWVsZDogbnVsbCxcblxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNob3cvaGlkZSB0aGUgcGlja2VyIG9uIGBmaWVsZGAgZm9jdXMgKGRlZmF1bHQgYHRydWVgIGlmIGBmaWVsZGAgaXMgc2V0KVxuICAgICAgICBib3VuZDogdW5kZWZpbmVkLFxuXG4gICAgICAgIC8vIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGFuIGFyaWEgYXNzaXN0YW5jZSB0ZWtzdCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIHJlbmRlcldlZWsgPSBmdW5jdGlvbiAoZCwgbSwgeSkge1xuICAgICAgICAvLyBMaWZ0ZWQgZnJvbSBodHRwOi8vamF2YXNjcmlwdC5hYm91dC5jb20vbGlicmFyeS9ibHdlZWt5ZWFyLmh0bSwgbGlnaHRseSBtb2RpZmllZC5cbiAgICAgICAgdmFyIG9uZWphbiA9IG5ldyBEYXRlKHksIDAsIDEpLFxuICAgICAgICAgICAgd2Vla051bSA9IE1hdGguY2VpbCgoKChuZXcgRGF0ZSh5LCBtLCBkKSAtIG9uZWphbikgLyA4NjQwMDAwMCkgKyBvbmVqYW4uZ2V0RGF5KCkrMSkvNyk7XG4gICAgICAgIHJldHVybiAnPHRkIGNsYXNzPVwicGlrYS13ZWVrXCI+JyArIHdlZWtOdW0gKyAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJSb3cgPSBmdW5jdGlvbihkYXlzLCBpc1JUTCwgcGlja1dob2xlV2VlaywgaXNSb3dTZWxlY3RlZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRyIGNsYXNzPVwicGlrYS1yb3cnICsgKHBpY2tXaG9sZVdlZWsgPyAnIHBpY2std2hvbGUtd2VlaycgOiAnJykgKyAoaXNSb3dTZWxlY3RlZCA/ICcgaXMtc2VsZWN0ZWQnIDogJycpICsgJ1wiPicgKyAoaXNSVEwgPyBkYXlzLnJldmVyc2UoKSA6IGRheXMpLmpvaW4oJycpICsgJzwvdHI+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKHJvd3MpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0Ym9keT4nICsgcm93cy5qb2luKCcnKSArICc8L3Rib2R5Pic7XG4gICAgfSxcblxuICAgIHJlbmRlckhlYWQgPSBmdW5jdGlvbihvcHRzKVxuICAgIHtcbiAgICAgICAgdmFyIGksIGFyciA9IFtdO1xuICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgYXJyLnB1c2goJzx0aD48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGggc2NvcGU9XCJjb2xcIj48YWJiciB0aXRsZT1cIicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGkpICsgJ1wiPicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGksIHRydWUpICsgJzwvYWJicj48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHRoZWFkPjx0cj4nICsgKG9wdHMuaXNSVEwgPyBhcnIucmV2ZXJzZSgpIDogYXJyKS5qb2luKCcnKSArICc8L3RyPjwvdGhlYWQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGl0bGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgYywgeWVhciwgbW9udGgsIHJlZlllYXIsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHZhciBpLCBqLCBhcnIsXG4gICAgICAgICAgICBvcHRzID0gaW5zdGFuY2UuX28sXG4gICAgICAgICAgICBpc01pblllYXIgPSB5ZWFyID09PSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICBpc01heFllYXIgPSB5ZWFyID09PSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICBodG1sID0gJzxkaXYgaWQ9XCInICsgcmFuZElkICsgJ1wiIGNsYXNzPVwicGlrYS10aXRsZVwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+JyxcbiAgICAgICAgICAgIG1vbnRoSHRtbCxcbiAgICAgICAgICAgIHllYXJIdG1sLFxuICAgICAgICAgICAgcHJldiA9IHRydWUsXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGFyciA9IFtdLCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArICh5ZWFyID09PSByZWZZZWFyID8gaSAtIGMgOiAxMiArIGkgLSBjKSArICdcIicgK1xuICAgICAgICAgICAgICAgIChpID09PSBtb250aCA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICtcbiAgICAgICAgICAgICAgICAoKGlzTWluWWVhciAmJiBpIDwgb3B0cy5taW5Nb250aCkgfHwgKGlzTWF4WWVhciAmJiBpID4gb3B0cy5tYXhNb250aCkgPyAnZGlzYWJsZWQ9XCJkaXNhYmxlZFwiJyA6ICcnKSArICc+JyArXG4gICAgICAgICAgICAgICAgb3B0cy5pMThuLm1vbnRoc1tpXSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoSHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyBvcHRzLmkxOG4ubW9udGhzW21vbnRoXSArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGhcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgaSA9IG9wdHMueWVhclJhbmdlWzBdO1xuICAgICAgICAgICAgaiA9IG9wdHMueWVhclJhbmdlWzFdICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSB5ZWFyIC0gb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICBqID0gMSArIHllYXIgKyBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoYXJyID0gW107IGkgPCBqICYmIGkgPD0gb3B0cy5tYXhZZWFyOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG9wdHMubWluWWVhcikge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCInICsgKGkgPT09IHllYXIgPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArICc+JyArIChpKSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5ZWFySHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyB5ZWFyICsgb3B0cy55ZWFyU3VmZml4ICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAob3B0cy5zaG93TW9udGhBZnRlclllYXIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0geWVhckh0bWwgKyBtb250aEh0bWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sICs9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWluWWVhciAmJiAobW9udGggPT09IDAgfHwgb3B0cy5taW5Nb250aCA+PSBtb250aCkpIHtcbiAgICAgICAgICAgIHByZXYgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heFllYXIgJiYgKG1vbnRoID09PSAxMSB8fCBvcHRzLm1heE1vbnRoIDw9IG1vbnRoKSkge1xuICAgICAgICAgICAgbmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLXByZXYnICsgKHByZXYgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5wcmV2aW91c01vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IChpbnN0YW5jZS5fby5udW1iZXJPZk1vbnRocyAtIDEpICkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtbmV4dCcgKyAobmV4dCA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLm5leHRNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgfSxcblxuICAgIHJlbmRlclRhYmxlID0gZnVuY3Rpb24ob3B0cywgZGF0YSwgcmFuZElkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGFibGUgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJwaWthLXRhYmxlXCIgcm9sZT1cImdyaWRcIiBhcmlhLWxhYmVsbGVkYnk9XCInICsgcmFuZElkICsgJ1wiPicgKyByZW5kZXJIZWFkKG9wdHMpICsgcmVuZGVyQm9keShkYXRhKSArICc8L3RhYmxlPic7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUGlrYWRheSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFBpa2FkYXkgPSBmdW5jdGlvbihvcHRpb25zKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgb3B0cyA9IHNlbGYuY29uZmlnKG9wdGlvbnMpO1xuXG4gICAgICAgIHNlbGYuX29uTW91c2VEb3duID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl92KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1idXR0b24nKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZW1wdHknKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LnBhcmVudE5vZGUsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShuZXcgRGF0ZSh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EteWVhcicpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtbW9udGgnKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLWRheScpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG8oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYmx1ckZpZWxkT25TZWxlY3QgJiYgb3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtcHJldicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucHJldk1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0b3VjaCBldmVudCBwcmV2ZW50IG1vdXNlIGV2ZW50cyBlbXVsYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9jID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC1tb250aCcpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvTW9udGgodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LXllYXInKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b1llYXIodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbktleUNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuICAgICAgICAgICAgaWYgKHNlbGYuaXNWaXNpYmxlKCkpIHtcblxuICAgICAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRlO1xuXG4gICAgICAgICAgICBpZiAoZS5maXJlZEJ5ID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMucGFyc2UpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gb3B0cy5wYXJzZShvcHRzLmZpZWxkLnZhbHVlLCBvcHRzLmZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICBkYXRlID0gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBvcHRzLmZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0cy5zZXREZWZhdWx0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVmRGF0ZSA9IG9wdHMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKGlzRGF0ZShkZWZEYXRlKSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuc2V0RGVmYXVsdERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGVmRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b0RhdGUoZGVmRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgKz0gJyBpcy1ib3VuZCc7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHNlbGYuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdmb2N1cycsIHNlbGYuX29uSW5wdXRGb2N1cyk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgc2VsZi5fb25JbnB1dEJsdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgUGlrYWRheSBBUElcbiAgICAgKi9cbiAgICBQaWthZGF5LnByb3RvdHlwZSA9IHtcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb25maWd1cmUgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgY29uZmlnOiBmdW5jdGlvbihvcHRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX28pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRzID0gZXh0ZW5kKHRoaXMuX28sIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgICAgICAgICBvcHRzLmlzUlRMID0gISFvcHRzLmlzUlRMO1xuXG4gICAgICAgICAgICBvcHRzLmZpZWxkID0gKG9wdHMuZmllbGQgJiYgb3B0cy5maWVsZC5ub2RlTmFtZSkgPyBvcHRzLmZpZWxkIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy50aGVtZSA9ICh0eXBlb2Ygb3B0cy50aGVtZSkgPT09ICdzdHJpbmcnICYmIG9wdHMudGhlbWUgPyBvcHRzLnRoZW1lIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy5ib3VuZCA9ICEhKG9wdHMuYm91bmQgIT09IHVuZGVmaW5lZCA/IG9wdHMuZmllbGQgJiYgb3B0cy5ib3VuZCA6IG9wdHMuZmllbGQpO1xuXG4gICAgICAgICAgICBvcHRzLnRyaWdnZXIgPSAob3B0cy50cmlnZ2VyICYmIG9wdHMudHJpZ2dlci5ub2RlTmFtZSkgPyBvcHRzLnRyaWdnZXIgOiBvcHRzLmZpZWxkO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVXZWVrZW5kcyA9ICEhb3B0cy5kaXNhYmxlV2Vla2VuZHM7XG5cbiAgICAgICAgICAgIG9wdHMuZGlzYWJsZURheUZuID0gKHR5cGVvZiBvcHRzLmRpc2FibGVEYXlGbikgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRpc2FibGVEYXlGbiA6IG51bGw7XG5cbiAgICAgICAgICAgIHZhciBub20gPSBwYXJzZUludChvcHRzLm51bWJlck9mTW9udGhzLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIG9wdHMubnVtYmVyT2ZNb250aHMgPSBub20gPiA0ID8gNCA6IG5vbTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5taW5EYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWluRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5tYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWF4RGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChvcHRzLm1pbkRhdGUgJiYgb3B0cy5tYXhEYXRlKSAmJiBvcHRzLm1heERhdGUgPCBvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1pbkRhdGUob3B0cy5taW5EYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heERhdGUob3B0cy5tYXhEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMTA7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2VbMF0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVswXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzFdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMV0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2UgPSBNYXRoLmFicyhwYXJzZUludChvcHRzLnllYXJSYW5nZSwgMTApKSB8fCBkZWZhdWx0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMueWVhclJhbmdlID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICh1c2luZyBNb21lbnQuanMgaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMuX28uZm9ybWF0O1xuICAgICAgICAgICAgaWYgKCFpc0RhdGUodGhpcy5fZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fby50b1N0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fby50b1N0cmluZyh0aGlzLl9kLCBmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMuX2QpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2QudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIE1vbWVudC5qcyBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBnZXRNb21lbnQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGhhc01vbWVudCA/IG1vbWVudCh0aGlzLl9kKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbSBhIE1vbWVudC5qcyBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHNldE1vbWVudDogZnVuY3Rpb24oZGF0ZSwgcHJldmVudE9uU2VsZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaGFzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShkYXRlLnRvRGF0ZSgpLCBwcmV2ZW50T25TZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBEYXRlIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGdldERhdGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZSh0aGlzLl9kKSA/IG5ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldERhdGU6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuX28ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLl9vLm1heERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUobWluKSAmJiBkYXRlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG1pbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG1heCkgJiYgZGF0ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtYXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodGhpcy5fZCk7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKHRoaXMuX2QpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZmllbGQudmFsdWUgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KHRoaXMuX28uZmllbGQsICdjaGFuZ2UnLCB7IGZpcmVkQnk6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXZlbnRPblNlbGVjdCAmJiB0eXBlb2YgdGhpcy5fby5vblNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLCB0aGlzLmdldERhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b0RhdGU6IGZ1bmN0aW9uKGRhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdDYWxlbmRhciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhcnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsIHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVEYXRlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBlbmQgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldE1vbnRoKGxhc3RWaXNpYmxlRGF0ZS5nZXRNb250aCgpKzEpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXREYXRlKGxhc3RWaXNpYmxlRGF0ZS5nZXREYXRlKCktMSk7XG4gICAgICAgICAgICAgICAgbmV3Q2FsZW5kYXIgPSAodmlzaWJsZURhdGUgPCBmaXJzdFZpc2libGVEYXRlLmdldFRpbWUoKSB8fCBsYXN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIDwgdmlzaWJsZURhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3Q2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFycyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLm1haW5DYWxlbmRhciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArPSAxIC0gdGhpcy5fby5udW1iZXJPZk1vbnRocztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0RGF0ZTogZnVuY3Rpb24oc2lnbiwgZGF5cykge1xuXG4gICAgICAgICAgICB2YXIgZGF5ID0gdGhpcy5nZXREYXRlKCkgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaWZmZXJlbmNlID0gcGFyc2VJbnQoZGF5cykqMjQqNjAqNjAqMTAwMDtcblxuICAgICAgICAgICAgdmFyIG5ld0RheTtcblxuICAgICAgICAgICAgaWYgKHNpZ24gPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSArIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSAtIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGUobmV3RGF5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0gPSBhZGp1c3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgYyA8IHRoaXMuX28ubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzW2NdID0gYWRqdXN0Q2FsZW5kYXIoe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKyBjLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLmNhbGVuZGFyc1swXS55ZWFyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnb3RvVG9kYXk6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBtb250aCAoemVyby1pbmRleCwgZS5nLiAwOiBKYW51YXJ5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b01vbnRoOiBmdW5jdGlvbihtb250aClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBuZXh0TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKztcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcHJldk1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS07XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGZ1bGwgeWVhciAoZS5nLiBcIjIwMTJcIilcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9ZZWFyOiBmdW5jdGlvbih5ZWFyKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1pbkRhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1pbkRhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSBkZWZhdWx0cy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSBkZWZhdWx0cy5taW5ZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSBkZWZhdWx0cy5taW5Nb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSBkZWZhdWx0cy5zdGFydFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtYXhEYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNYXhEYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSBkZWZhdWx0cy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IGRlZmF1bHRzLm1heFllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IGRlZmF1bHRzLm1heE1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSBkZWZhdWx0cy5lbmRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0U3RhcnRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEVuZFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZWZyZXNoIHRoZSBIVE1MXG4gICAgICAgICAqL1xuICAgICAgICBkcmF3OiBmdW5jdGlvbihmb3JjZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl92ICYmICFmb3JjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBtaW5ZZWFyID0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgICAgIG1heFllYXIgPSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICAgICAgbWluTW9udGggPSBvcHRzLm1pbk1vbnRoLFxuICAgICAgICAgICAgICAgIG1heE1vbnRoID0gb3B0cy5tYXhNb250aCxcbiAgICAgICAgICAgICAgICBodG1sID0gJycsXG4gICAgICAgICAgICAgICAgcmFuZElkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5feSA8PSBtaW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1pblllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtaW5Nb250aCkgJiYgdGhpcy5fbSA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtaW5Nb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5feSA+PSBtYXhZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1heFllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtYXhNb250aCkgJiYgdGhpcy5fbSA+IG1heE1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtYXhNb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmRJZCA9ICdwaWthLXRpdGxlLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKS5zdWJzdHIoMCwgMik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgb3B0cy5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInBpa2EtbGVuZGFyXCI+JyArIHJlbmRlclRpdGxlKHRoaXMsIGMsIHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCB0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCByYW5kSWQpICsgdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbY10ueWVhciwgdGhpcy5jYWxlbmRhcnNbY10ubW9udGgsIHJhbmRJZCkgKyAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGlmKG9wdHMuZmllbGQudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy50cmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9vLm9uRHJhdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25EcmF3KHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgc2NyZWVuIHJlYWRlciB1c2VyIGtub3cgdG8gdXNlIGFycm93IGtleXNcbiAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG9wdHMuYXJpYUxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RQb3NpdGlvbjogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmllbGQsIHBFbCwgd2lkdGgsIGhlaWdodCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCwgbGVmdCwgdG9wLCBjbGllbnRSZWN0LCBsZWZ0QWxpZ25lZCwgYm90dG9tQWxpZ25lZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuX28udHJpZ2dlcjtcbiAgICAgICAgICAgIHBFbCA9IGZpZWxkO1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgbGVmdEFsaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2xpZW50UmVjdCA9IGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdG9wID0gY2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBwRWwub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICB0b3AgID0gcEVsLm9mZnNldFRvcCArIHBFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgd2hpbGUoKHBFbCA9IHBFbC5vZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcEVsLm9mZnNldFRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlZmF1bHQgcG9zaXRpb24gaXMgYm90dG9tICYgbGVmdFxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgbGVmdCArIHdpZHRoID4gdmlld3BvcnRXaWR0aCkgfHxcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigncmlnaHQnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIGxlZnQgLSB3aWR0aCArIGZpZWxkLm9mZnNldFdpZHRoID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBsZWZ0QWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgdG9wICsgaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQgKyBzY3JvbGxUb3ApIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3RvcCcpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0ID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRvcCA9IHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICBib3R0b21BbGlnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuXG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBsZWZ0QWxpZ25lZCA/ICdsZWZ0LWFsaWduZWQnIDogJ3JpZ2h0LWFsaWduZWQnKTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsIGJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhYm90dG9tQWxpZ25lZCA/ICdib3R0b20tYWxpZ25lZCcgOiAndG9wLWFsaWduZWQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVuZGVyIEhUTUwgZm9yIGEgcGFydGljdWxhciBtb250aFxuICAgICAgICAgKi9cbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgcmFuZElkKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgb3B0cyAgID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBub3cgICAgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRheXMgICA9IGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCksXG4gICAgICAgICAgICAgICAgZGF0YSAgID0gW10sXG4gICAgICAgICAgICAgICAgcm93ICAgID0gW107XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkobm93KTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZpcnN0RGF5ID4gMCkge1xuICAgICAgICAgICAgICAgIGJlZm9yZSAtPSBvcHRzLmZpcnN0RGF5O1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZSArPSA3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyAxMSA6IG1vbnRoIC0gMSxcbiAgICAgICAgICAgICAgICBuZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyAwIDogbW9udGggKyAxLFxuICAgICAgICAgICAgICAgIHllYXJPZlByZXZpb3VzTW9udGggPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcixcbiAgICAgICAgICAgICAgICB5ZWFyT2ZOZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgZGF5c0luUHJldmlvdXNNb250aCA9IGdldERheXNJbk1vbnRoKHllYXJPZlByZXZpb3VzTW9udGgsIHByZXZpb3VzTW9udGgpO1xuICAgICAgICAgICAgdmFyIGNlbGxzID0gZGF5cyArIGJlZm9yZSxcbiAgICAgICAgICAgICAgICBhZnRlciA9IGNlbGxzO1xuICAgICAgICAgICAgd2hpbGUoYWZ0ZXIgPiA3KSB7XG4gICAgICAgICAgICAgICAgYWZ0ZXIgLT0gNztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxzICs9IDcgLSBhZnRlcjtcbiAgICAgICAgICAgIHZhciBpc1dlZWtTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwgY2VsbHM7IGkrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEgKyAoaSAtIGJlZm9yZSkpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gaXNEYXRlKHRoaXMuX2QpID8gY29tcGFyZURhdGVzKGRheSwgdGhpcy5fZCkgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNUb2RheSA9IGNvbXBhcmVEYXRlcyhkYXksIG5vdyksXG4gICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50ID0gb3B0cy5ldmVudHMuaW5kZXhPZihkYXkudG9EYXRlU3RyaW5nKCkpICE9PSAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSA9IGkgPCBiZWZvcmUgfHwgaSA+PSAoZGF5cyArIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIGRheU51bWJlciA9IDEgKyAoaSAtIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbW9udGgsXG4gICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuc3RhcnRSYW5nZSwgZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbmRSYW5nZSA9IG9wdHMuZW5kUmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuZW5kUmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzSW5SYW5nZSA9IG9wdHMuc3RhcnRSYW5nZSAmJiBvcHRzLmVuZFJhbmdlICYmIG9wdHMuc3RhcnRSYW5nZSA8IGRheSAmJiBkYXkgPCBvcHRzLmVuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkID0gKG9wdHMubWluRGF0ZSAmJiBkYXkgPCBvcHRzLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5tYXhEYXRlICYmIGRheSA+IG9wdHMubWF4RGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVXZWVrZW5kcyAmJiBpc1dlZWtlbmQoZGF5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVEYXlGbiAmJiBvcHRzLmRpc2FibGVEYXlGbihkYXkpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlzSW5QcmV2aW91c01vbnRoICsgZGF5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBwcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZlByZXZpb3VzTW9udGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlOdW1iZXIgLSBkYXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBuZXh0TW9udGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck9mTmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRheUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheTogZGF5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6IG1vbnRoTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogeWVhck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50OiBoYXNFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiBpc1RvZGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2U6IGlzU3RhcnRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2U6IGlzRW5kUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2U6IGlzSW5SYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczogb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHNcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzLnBpY2tXaG9sZVdlZWsgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93LnB1c2gocmVuZGVyRGF5KGRheUNvbmZpZykpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCsrciA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LnVuc2hpZnQocmVuZGVyV2VlayhpIC0gYmVmb3JlLCBtb250aCwgeWVhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsgLy8gcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3YgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHQU1FIE9WRVJcbiAgICAgICAgICovXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vO1xuXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy5maWVsZCwgJ2NoYW5nZScsIHRoaXMuX29uSW5wdXRDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCB0aGlzLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgdGhpcy5fb25JbnB1dEJsdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICByZXR1cm4gUGlrYWRheTtcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LkF1dG9saW5rZXI7IiwiLyogZXNsaW50IGtleS1zcGFjaW5nOiAwICovXG4vKiBlc2xpbnQgcXVvdGUtcHJvcHM6IDAgKi9cblxuY29uc3QgTWltZSA9IHtcblx0J2VtbCc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCdtaW1lJzogJ21lc3NhZ2UvcmZjODIyJyxcblx0J3R4dCc6ICd0ZXh0L3BsYWluJyxcblx0J3RleHQnOiAndGV4dC9wbGFpbicsXG5cdCdkZWYnOiAndGV4dC9wbGFpbicsXG5cdCdsaXN0JzogJ3RleHQvcGxhaW4nLFxuXHQnaW4nOiAndGV4dC9wbGFpbicsXG5cdCdpbmknOiAndGV4dC9wbGFpbicsXG5cdCdsb2cnOiAndGV4dC9wbGFpbicsXG5cdCdzcWwnOiAndGV4dC9wbGFpbicsXG5cdCdjZmcnOiAndGV4dC9wbGFpbicsXG5cdCdjb25mJzogJ3RleHQvcGxhaW4nLFxuXHQnYXNjJzogJ3RleHQvcGxhaW4nLFxuXHQncnR4JzogJ3RleHQvcmljaHRleHQnLFxuXHQndmNhcmQnOiAndGV4dC92Y2FyZCcsXG5cdCd2Y2YnOiAndGV4dC92Y2FyZCcsXG5cdCdodG0nOiAndGV4dC9odG1sJyxcblx0J2h0bWwnOiAndGV4dC9odG1sJyxcblx0J2Nzdic6ICd0ZXh0L2NzdicsXG5cdCdpY3MnOiAndGV4dC9jYWxlbmRhcicsXG5cdCdpZmInOiAndGV4dC9jYWxlbmRhcicsXG5cdCd4bWwnOiAndGV4dC94bWwnLFxuXHQnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0J3N3Zic6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsXG5cdCdobHAnOiAnYXBwbGljYXRpb24vd2luaGxwJyxcblx0J3dndCc6ICdhcHBsaWNhdGlvbi93aWRnZXQnLFxuXHQnY2htJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCcsXG5cdCdwMTAnOiAnYXBwbGljYXRpb24vcGtjczEwJyxcblx0J3A3Yyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3bSc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3cyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUnLFxuXHQndG9ycmVudCc6ICdhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQnLFxuXG5cdC8vIHNjcmlwdHNcblx0J2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxuXHQncGwnOiAndGV4dC9wZXJsJyxcblx0J2Nzcyc6ICd0ZXh0L2NzcycsXG5cdCdhc3AnOiAndGV4dC9hc3AnLFxuXHQncGhwJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDMnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHA1JzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BodG1sJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblxuXHQvLyBpbWFnZXNcblx0J3BuZyc6ICdpbWFnZS9wbmcnLFxuXHQnanBnJzogJ2ltYWdlL2pwZWcnLFxuXHQnanBlZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZSc6ICdpbWFnZS9qcGVnJyxcblx0J2pmaWYnOiAnaW1hZ2UvanBlZycsXG5cdCdnaWYnOiAnaW1hZ2UvZ2lmJyxcblx0J2JtcCc6ICdpbWFnZS9ibXAnLFxuXHQnY2dtJzogJ2ltYWdlL2NnbScsXG5cdCdpZWYnOiAnaW1hZ2UvaWVmJyxcblx0J2ljbyc6ICdpbWFnZS94LWljb24nLFxuXHQndGlmJzogJ2ltYWdlL3RpZmYnLFxuXHQndGlmZic6ICdpbWFnZS90aWZmJyxcblx0J3N2Zyc6ICdpbWFnZS9zdmcreG1sJyxcblx0J3N2Z3onOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdkanYnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnZGp2dSc6ICdpbWFnZS92bmQuZGp2dScsXG5cdCd3ZWJwJzogJ2ltYWdlL3dlYnAnLFxuXG5cdC8vIGFyY2hpdmVzXG5cdCd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcblx0Jzd6JzogJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsXG5cdCdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXG5cdCdleGUnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2RsbCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnc2NyJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjb20nOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2JhdCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnbXNpJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjYWInOiAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJyxcblx0J2d6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCd0Z3onOiAnYXBwbGljYXRpb24veC1nemlwJyxcblx0J2J6JzogJ2FwcGxpY2F0aW9uL3gtYnppcCcsXG5cdCdiejInOiAnYXBwbGljYXRpb24veC1iemlwMicsXG5cdCdkZWInOiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsXG5cblx0Ly8gZm9udHNcblx0J3BzZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmJyxcblx0J290Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtb3RmJyxcblx0J3BjZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtcGNmJyxcblx0J3NuZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJyxcblx0J3R0Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblx0J3R0Yyc6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblxuXHQvLyBhdWRpb1xuXHQnbXAzJzogJ2F1ZGlvL21wZWcnLFxuXHQnYW1yJzogJ2F1ZGlvL2FtcicsXG5cdCdhYWMnOiAnYXVkaW8veC1hYWMnLFxuXHQnYWlmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZjJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCd3YXYnOiAnYXVkaW8veC13YXYnLFxuXHQnd21hJzogJ2F1ZGlvL3gtbXMtd21hJyxcblx0J3dheCc6ICdhdWRpby94LW1zLXdheCcsXG5cdCdtaWRpJzogJ2F1ZGlvL21pZGknLFxuXHQnbXA0YSc6ICdhdWRpby9tcDQnLFxuXHQnb2dnJzogJ2F1ZGlvL29nZycsXG5cdCd3ZWJhJzogJ2F1ZGlvL3dlYm0nLFxuXHQncmEnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8nLFxuXHQncmFtJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JtcCc6ICdhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4nLFxuXHQnbTN1JzogJ2F1ZGlvL3gtbXBlZ3VybCcsXG5cblx0Ly8gdmlkZW9cblx0J2Zsdic6ICd2aWRlby94LWZsdicsXG5cdCdxdCc6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnbW92JzogJ3ZpZGVvL3F1aWNrdGltZScsXG5cdCd3bXYnOiAndmlkZW8vd2luZG93cy1tZWRpYScsXG5cdCdhdmknOiAndmlkZW8veC1tc3ZpZGVvJyxcblx0J21wZyc6ICd2aWRlby9tcGVnJyxcblx0J21wZWcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGUnOiAndmlkZW8vbXBlZycsXG5cdCdtMXYnOiAndmlkZW8vbXBlZycsXG5cdCdtMnYnOiAndmlkZW8vbXBlZycsXG5cdCczZ3AnOiAndmlkZW8vM2dwcCcsXG5cdCczZzInOiAndmlkZW8vM2dwcDInLFxuXHQnaDI2MSc6ICd2aWRlby9oMjYxJyxcblx0J2gyNjMnOiAndmlkZW8vaDI2MycsXG5cdCdoMjY0JzogJ3ZpZGVvL2gyNjQnLFxuXHQnanBndic6ICd2aWRlby9qcGd2Jyxcblx0J21wNCc6ICd2aWRlby9tcDQnLFxuXHQnbXA0dic6ICd2aWRlby9tcDQnLFxuXHQnbXBnNCc6ICd2aWRlby9tcDQnLFxuXHQnb2d2JzogJ3ZpZGVvL29nZycsXG5cdCd3ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuXHQnbTR2JzogJ3ZpZGVvL3gtbTR2Jyxcblx0J2FzZic6ICd2aWRlby94LW1zLWFzZicsXG5cdCdhc3gnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnd20nOiAndmlkZW8veC1tcy13bScsXG5cdCd3bXgnOiAndmlkZW8veC1tcy13bXgnLFxuXHQnd3Z4JzogJ3ZpZGVvL3gtbXMtd3Z4Jyxcblx0J21vdmllJzogJ3ZpZGVvL3gtc2dpLW1vdmllJyxcblxuXHQvLyBhZG9iZVxuXHQncGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXG5cdCdwc2QnOiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsXG5cdCdhaSc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J2Vwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J3BzJzogJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLFxuXG5cdC8vIG1zIG9mZmljZVxuXHQnZG9jJzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdkb3QnOiAnYXBwbGljYXRpb24vbXN3b3JkJyxcblx0J3J0Zic6ICdhcHBsaWNhdGlvbi9ydGYnLFxuXHQneGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG5cdCdwcHQnOiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLFxuXHQnZG9jeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG5cdCd4bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyxcblx0J2RvdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLFxuXHQncHB0eCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcblxuXHQvLyBvcGVuIG9mZmljZVxuXHQnb2R0JzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCcsXG5cdCdvZHMnOiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbn07XG5cbmV4cG9ydCB7IE1pbWUsIE1pbWUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmNsYXNzIEZpbHRlclVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2FwYSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubW9kdWxlcyA9IGtvLm9ic2VydmFibGUoe30pO1xuXG5cdFx0dGhpcy5maWx0ZXJzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuZmlsdGVycy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMjAwbXMgfSk7XG5cdFx0dGhpcy5maWx0ZXJzLnNhdmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXG5cdFx0dGhpcy5yYXcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRmlsdGVyVXNlclN0b3JlKCk7XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldDtcbiAgICBzZXR0ZXIuY2FsbCh0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlci5jYWxsKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwicmVxdWlyZSgnLi9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiAhQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgIGhpZGUoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0Z1bmMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FzaycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBc2snXG59KVxuY2xhc3MgQXNrUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmFza0Rlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubm9CdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMueWVzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSB0cnVlO1xuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQXNrO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmFza0Rlc2MoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX1lFUycpKTtcblx0XHR0aGlzLm5vQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX05PJykpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXHR9XG5cblx0eWVzQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZlllc0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZlllc0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdG5vQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZk5vQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mTm9BY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBc2tEZXNjXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmWWVzRnVuY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZk5vRnVuY1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNZZXNCdXR0b25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTm9CdXR0b25cblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvY3VzWWVzT25TaG93ID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdyhhc2tEZXNjLCBmWWVzRnVuYyA9IG51bGwsIGZOb0Z1bmMgPSBudWxsLCB5ZXNCdXR0b24gPSAnJywgbm9CdXR0b24gPSAnJywgaXNGb2N1c1llc09uU2hvdyA9IHRydWUpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IGZZZXNGdW5jIHx8IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBmTm9GdW5jIHx8IG51bGw7XG5cblx0XHR0aGlzLmFza0Rlc2MoYXNrRGVzYyB8fCAnJyk7XG5cblx0XHRpZiAoeWVzQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnllc0J1dHRvbih5ZXNCdXR0b24pO1xuXHRcdH1cblxuXHRcdGlmIChub0J1dHRvbikge1xuXHRcdFx0dGhpcy5ub0J1dHRvbihub0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSAhIWlzRm9jdXNZZXNPblNob3c7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuYkZvY3VzWWVzT25TaG93KSB7XG5cdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgcmlnaHQsIGxlZnQnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMueWVzRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLm5vRm9jdXModHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0dGhpcy5ub0NsaWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQXNrUG9wdXBWaWV3LCBBc2tQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY2xhc3MgUXVvdGFVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnF1b3RhID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLnVzYWdlID0ga28ub2JzZXJ2YWJsZSgwKTtcblxuXHRcdHRoaXMucGVyY2VudGFnZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHF1b3RhID0gdGhpcy5xdW90YSgpLFxuXHRcdFx0XHR1c2FnZSA9IHRoaXMudXNhZ2UoKTtcblxuXHRcdFx0cmV0dXJuIDAgPCBxdW90YSA/IHdpbmRvdy5NYXRoLmNlaWwoKHVzYWdlIC8gcXVvdGEpICogMTAwKSA6IDA7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IHF1b3RhXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB1c2FnZVxuXHQgKi9cblx0cG9wdWxhdGVEYXRhKHF1b3RhLCB1c2FnZSkge1xuXHRcdHRoaXMucXVvdGEocXVvdGEgKiBNYWdpY3MuQml0TGVuZ3RoMTAyNCk7XG5cdFx0dGhpcy51c2FnZSh1c2FnZSAqIE1hZ2ljcy5CaXRMZW5ndGgxMDI0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUXVvdGFVc2VyU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmlmdmlzaWJsZTsiLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNhY2hlID0ge307XG5cbnZhciB0aHJvd2VyID0gZnVuY3Rpb24gKGl0KSB7IHRocm93IGl0OyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgb3B0aW9ucykge1xuICBpZiAoaGFzKGNhY2hlLCBNRVRIT0RfTkFNRSkpIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV07XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICB2YXIgQUNDRVNTT1JTID0gaGFzKG9wdGlvbnMsICdBQ0NFU1NPUlMnKSA/IG9wdGlvbnMuQUNDRVNTT1JTIDogZmFsc2U7XG4gIHZhciBhcmd1bWVudDAgPSBoYXMob3B0aW9ucywgMCkgPyBvcHRpb25zWzBdIDogdGhyb3dlcjtcbiAgdmFyIGFyZ3VtZW50MSA9IGhhcyhvcHRpb25zLCAxKSA/IG9wdGlvbnNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXSA9ICEhbWV0aG9kICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKEFDQ0VTU09SUyAmJiAhREVTQ1JJUFRPUlMpIHJldHVybiB0cnVlO1xuICAgIHZhciBPID0geyBsZW5ndGg6IC0xIH07XG5cbiAgICBpZiAoQUNDRVNTT1JTKSBkZWZpbmVQcm9wZXJ0eShPLCAxLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogdGhyb3dlciB9KTtcbiAgICBlbHNlIE9bMV0gPSAxO1xuXG4gICAgbWV0aG9kLmNhbGwoTywgYXJndW1lbnQwLCBhcmd1bWVudDEpO1xuICB9KTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSAmJiBpdCAhPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhpdCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBBcnJheUl0ZXJhdG9yTWV0aG9kcyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvck1ldGhvZHMudmFsdWVzO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUpIHtcbiAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gIT09IEFycmF5VmFsdWVzKSB0cnkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdID0gQXJyYXlWYWx1ZXM7XG4gICAgfVxuICAgIGlmICghQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gICAgfVxuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vZmFpbHMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3IsXG4vLyBzbyB3ZSB1c2UgYW4gaW50ZXJtZWRpYXRlIGZ1bmN0aW9uLlxuZnVuY3Rpb24gUkUocywgZikge1xuICByZXR1cm4gUmVnRXhwKHMsIGYpO1xufVxuXG5leHBvcnRzLlVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG4gIHZhciByZSA9IFJFKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPSBudWxsO1xufSk7XG5cbmV4cG9ydHMuQlJPS0VOX0NBUkVUID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gUkUoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPSBudWxsO1xufSk7XG4iLCJ2YXIgcmVkdWNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IHJlZHVjZSA6IG93bjtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBzY3JpcHQgPSAnc2NyaXB0JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIganMgPSAnamF2YScgKyBzY3JpcHQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhqcyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyBzY3JpcHQgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvJyArIHNjcmlwdCArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGxlbmd0aCwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCIvLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBNRVRIT0RfUkVRVUlSRUQgPSB0b1N0cmluZyAhPT0gKHt9KS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDLCBTRVRfTUVUSE9EKSB7XG4gIGlmIChpdCkge1xuICAgIHZhciB0YXJnZXQgPSBTVEFUSUMgPyBpdCA6IGl0LnByb3RvdHlwZTtcbiAgICBpZiAoIWhhcyh0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICAgIH1cbiAgICBpZiAoU0VUX01FVEhPRCAmJiBNRVRIT0RfUkVRVUlSRUQpIGhpZGUodGFyZ2V0LCAndG9TdHJpbmcnLCB0b1N0cmluZyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBuZXcgKEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQykobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBET01JdGVyYWJsZXMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihpdCkpID8gZm9yRWFjaCA6IG93bjtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGNvbnZlcnRMYW5nTmFtZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbi8vIGltcG9ydCB7dmlldywgVmlld1R5cGV9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9MYW5ndWFnZXMnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzTGFuZ3VhZ2VzJ1xufSlcbmNsYXNzIExhbmd1YWdlc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5mTGFuZyA9IG51bGw7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubGFuZ3MgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB1c2VyTGFuZ3VhZ2UgPSB0aGlzLnVzZXJMYW5ndWFnZSgpO1xuXHRcdFx0cmV0dXJuIF8ubWFwKHRoaXMubGFuZ3MoKSwgKGxhbmd1YWdlKSA9PiAoe1xuXHRcdFx0XHRrZXk6IGxhbmd1YWdlLFxuXHRcdFx0XHR1c2VyOiBsYW5ndWFnZSA9PT0gdXNlckxhbmd1YWdlLFxuXHRcdFx0XHRzZWxlY3RlZDoga28ub2JzZXJ2YWJsZShmYWxzZSksXG5cdFx0XHRcdGZ1bGxOYW1lOiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UpXG5cdFx0XHR9KSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxhbmdzLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNldExhbmd1YWdlU2VsZWN0aW9uKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRsYW5ndWFnZVRvb2x0aXBOYW1lKGxhbmd1YWdlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCB0cnVlKTtcblx0XHRyZXR1cm4gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCBmYWxzZSkgPT09IHJlc3VsdCA/ICcnIDogcmVzdWx0O1xuXHR9XG5cblx0c2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKSB7XG5cdFx0Y29uc3QgY3VycmVudExhbmcgPSB0aGlzLmZMYW5nID8ga28udW53cmFwKHRoaXMuZkxhbmcpIDogJyc7XG5cdFx0Xy5lYWNoKHRoaXMubGFuZ3VhZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRpdGVtLnNlbGVjdGVkKGl0ZW0ua2V5ID09PSBjdXJyZW50TGFuZyk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJlZm9yZVNob3coKSB7XG5cdFx0dGhpcy5mTGFuZyA9IG51bGw7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyhbXSk7XG5cdH1cblxuXHRvblNob3coZkxhbmd1YWdlLCBsYW5ncywgdXNlckxhbmd1YWdlKSB7XG5cdFx0dGhpcy5mTGFuZyA9IGZMYW5ndWFnZTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSh1c2VyTGFuZ3VhZ2UgfHwgJycpO1xuXG5cdFx0dGhpcy5sYW5ncyhsYW5ncyk7XG5cdH1cblxuXHRjaGFuZ2VMYW5ndWFnZShsYW5nKSB7XG5cdFx0aWYgKHRoaXMuZkxhbmcpIHtcblx0XHRcdHRoaXMuZkxhbmcobGFuZyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTGFuZ3VhZ2VzUG9wdXBWaWV3LCBMYW5ndWFnZXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsga2lsbEN0cmxBQ3RybFMsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSwgY3JlYXRlQ29tbWFuZExlZ2FjeSwgZG9tUmVhZHkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgJHdpbiwgJGh0bWwsIGRhdGEgYXMgR2xvYmFsc0RhdGEsIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgKiBhcyBFbnVtcyBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgRW1haWxNb2RlbCB9IGZyb20gJ01vZGVsL0VtYWlsJztcblxuZXhwb3J0IGRlZmF1bHQgKEFwcCkgPT4ge1xuXHRHbG9iYWxzRGF0YS5fX0FQUF9fID0gQXBwO1xuXG5cdCR3aW4ub24oJ2tleWRvd24nLCBraWxsQ3RybEFDdHJsUykub24oJ3VubG9hZCcsICgpID0+IHtcblx0XHRHbG9iYWxzRGF0YS5iVW5sb2FkID0gdHJ1ZTtcblx0fSk7XG5cblx0JGh0bWwuYWRkQ2xhc3MoYk1vYmlsZURldmljZSA/ICdtb2JpbGUnIDogJ25vLW1vYmlsZScpLm9uKCdjbGljay5kcm9wZG93bi5kYXRhLWFwaScsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSk7XG5cblx0Y29uc3QgcmwgPSB3aW5kb3cucmwgfHwge307XG5cblx0cmwuaTE4biA9IGkxOG47XG5cdHJsLmNyZWF0ZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kTGVnYWN5O1xuXG5cdHJsLmFkZFNldHRpbmdzVmlld01vZGVsID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbDtcblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiA9IFBsdWdpbnMuYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbjtcblxuXHRybC5hZGRIb29rID0gUGx1Z2lucy5hZGRIb29rO1xuXHRybC5zZXR0aW5nc0dldCA9IFBsdWdpbnMubWFpblNldHRpbmdzR2V0O1xuXHRybC5wbHVnaW5TZXR0aW5nc0dldCA9IFBsdWdpbnMuc2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblJlbW90ZVJlcXVlc3QgPSBQbHVnaW5zLnJlbW90ZVJlcXVlc3Q7XG5cblx0cmwuRW1haWxNb2RlbCA9IEVtYWlsTW9kZWw7XG5cdHJsLkVudW1zID0gRW51bXM7XG5cblx0d2luZG93LnJsID0gcmw7XG5cblx0d2luZG93Ll9fQVBQX0JPT1QgPSAoZkVycm9yQ2FsbGJhY2spID0+IHtcblx0XHRkb21SZWFkeSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh3aW5kb3cucmFpbmxvb3BURU1QTEFURVMgJiYgd2luZG93LnJhaW5sb29wVEVNUExBVEVTWzBdKSB7XG5cdFx0XHRcdFx0d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdybC10ZW1wbGF0ZXMnKS5pbm5lckhUTUwgPSB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF07XG5cblx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnbm8tanMgcmwtYm9vdGVkLXRyaWdnZXInKS5hZGRDbGFzcygncmwtYm9vdGVkJyk7XG5cblx0XHRcdFx0XHRcdEFwcC5ib290c3RhcnQoKTtcblx0XHRcdFx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZFcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aW5kb3cuX19BUFBfQk9PVCA9IG51bGw7XG5cdFx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHRcdH0pO1xuXHR9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyAkaHRtbCwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFwcFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlciA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBhbmltID0gYk1vYmlsZURldmljZSB8fCAhdmFsdWU7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtYW5pbScsICFhbmltKS50b2dnbGVDbGFzcygnbm8tcmwtYW5pbScsIGFuaW0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24udmFsdWVIYXNNdXRhdGVkKCk7XG5cblx0XHR0aGlzLnByZW0gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNvbW11bml0eSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uTG9naW4nKSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dMYW5ndWFnZXNPblNldHRpbmdzJykpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ05ld01vdmVUb0ZvbGRlcicpKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ludGVyZmFjZUFuaW1hdGlvbicpKTtcblxuXHRcdHRoaXMucHJlbSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdQcmVtVHlwZScpKTtcblx0XHR0aGlzLmNvbW11bml0eSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdDb21tdW5pdHknKSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RBcHBTdG9yZSwgQWJzdHJhY3RBcHBTdG9yZSBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JlZHVjZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5cbmltcG9ydCB7IFRPS0VOX0VSUk9SX0xJTUlULCBBSkFYX0VSUk9SX0xJTUlULCBERUZBVUxUX0FKQVhfVElNRU9VVCB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpbkFycmF5LCBwSW50LCBwU3RyaW5nLCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgYWpheCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5vUmVxdWVzdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVxdWVzdEFjdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1R5cGVcblx0ICogQHBhcmFtIHs/QWpheEpzb25EZWZhdWx0UmVzcG9uc2V9IG9EYXRhXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkNhY2hlZFxuXHQgKiBAcGFyYW0geyo9fSBvUmVxdWVzdFBhcmFtZXRlcnNcblx0ICovXG5cdGRlZmF1bHRSZXNwb25zZShmQ2FsbGJhY2ssIHNSZXF1ZXN0QWN0aW9uLCBzVHlwZSwgb0RhdGEsIGJDYWNoZWQsIG9SZXF1ZXN0UGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGZDYWxsID0gKCkgPT4ge1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgIT09IHNUeXBlICYmIEdsb2JhbHNEYXRhLmJVbmxvYWQpIHtcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5VbmxvYWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSAmJiBvRGF0YSAmJiAhb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvRGF0YSAmJlxuXHRcdFx0XHRcdC0xIDxcblx0XHRcdFx0XHRcdGluQXJyYXkob0RhdGEuRXJyb3JDb2RlLCBbXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5BdXRoRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkNvbm5lY3Rpb25FcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkRvbWFpbk5vdEFsbG93ZWQsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5BY2NvdW50Tm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3Jcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9EYXRhICYmIE5vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4gPT09IG9EYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQgKz0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChUT0tFTl9FUlJPUl9MSU1JVCA8IEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEuQ2xlYXJBdXRoIHx8IG9EYXRhLkxvZ291dCB8fCBBSkFYX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50KSB7XG5cdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5jbGVhckNsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5jbGVhckNsaWVudFNpZGVUb2tlbigpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIW9EYXRhLkNsZWFyQXV0aCAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ID0gMDtcblx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXNwb25zZScsIFtcblx0XHRcdFx0c1JlcXVlc3RBY3Rpb24sXG5cdFx0XHRcdFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlID8gb0RhdGEgOiBudWxsLFxuXHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0YkNhY2hlZCxcblx0XHRcdFx0b1JlcXVlc3RQYXJhbWV0ZXJzXG5cdFx0XHRdKTtcblxuXHRcdFx0aWYgKGZDYWxsYmFjaykge1xuXHRcdFx0XHRmQ2FsbGJhY2soXG5cdFx0XHRcdFx0c1R5cGUsXG5cdFx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdFx0YkNhY2hlZCxcblx0XHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0c3dpdGNoIChzVHlwZSkge1xuXHRcdFx0Y2FzZSAnc3VjY2Vzcyc6XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2Vzcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhYm9ydCc6XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuQWJvcnQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5FcnJvcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yID09PSBzVHlwZSkge1xuXHRcdFx0Xy5kZWxheShmQ2FsbCwgMzAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZkNhbGwoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZSZXN1bHRDYWxsYmFja1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVPdXQgPSAyMDAwMFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNHZXRBZGQgPSAnJ1xuXHQgKiBAcGFyYW0ge0FycmF5PX0gYUFib3J0QWN0aW9ucyA9IFtdXG5cdCAqIEByZXR1cm5zIHtqUXVlcnkuanFYSFJ9XG5cdCAqL1xuXHRhamF4UmVxdWVzdChmUmVzdWx0Q2FsbGJhY2ssIHBhcmFtcywgaVRpbWVPdXQgPSAyMDAwMCwgc0dldEFkZCA9ICcnLCBhYm9ydEFjdGlvbnMgPSBbXSkge1xuXHRcdGNvbnN0IGlzUG9zdCA9ICcnID09PSBzR2V0QWRkLFxuXHRcdFx0aGVhZGVycyA9IHt9LFxuXHRcdFx0c3RhcnQgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cblx0XHRsZXQgYWN0aW9uID0gJyc7XG5cblx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0YWN0aW9uID0gcGFyYW1zLkFjdGlvbiB8fCAnJztcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdF8uZWFjaChhYm9ydEFjdGlvbnMsIChhY3Rpb25Ub0Fib3J0KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XSkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLl9fYWJvcnRlZCA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5hYm9ydCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChpc1Bvc3QpIHtcblx0XHRcdHBhcmFtcy5YVG9rZW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndG9rZW4nKTtcblx0XHR9XG5cblx0XHRjb25zdCBvRGVmQWpheCA9ICQuYWpheCh7XG5cdFx0XHR0eXBlOiBpc1Bvc3QgPyAnUE9TVCcgOiAnR0VUJyxcblx0XHRcdHVybDogYWpheChzR2V0QWRkKSxcblx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0ZGF0YVR5cGU6ICdqc29uJyxcblx0XHRcdGRhdGE6IGlzUG9zdCA/IHBhcmFtcyA6IHt9LFxuXHRcdFx0aGVhZGVyczogaGVhZGVycyxcblx0XHRcdHRpbWVvdXQ6IGlUaW1lT3V0LFxuXHRcdFx0Z2xvYmFsOiB0cnVlXG5cdFx0fSk7XG5cblx0XHRvRGVmQWpheC5hbHdheXMoKG9EYXRhLCBzVHlwZSkgPT4ge1xuXHRcdFx0bGV0IGNhY2hlZCA9IGZhbHNlO1xuXHRcdFx0aWYgKG9EYXRhICYmIG9EYXRhLlRpbWUpIHtcblx0XHRcdFx0Y2FjaGVkID0gcEludChvRGF0YS5UaW1lKSA+IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVXBkYXRlVG9rZW4pIHtcblx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5zZXRDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbihvRGF0YS5VcGRhdGVUb2tlbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGFjdGlvbiAmJiB0aGlzLm9SZXF1ZXN0c1thY3Rpb25dKSB7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLl9fYWJvcnRlZCkge1xuXHRcdFx0XHRcdHNUeXBlID0gJ2Fib3J0Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlZmF1bHRSZXNwb25zZShmUmVzdWx0Q2FsbGJhY2ssIGFjdGlvbiwgc1R5cGUsIG9EYXRhLCBjYWNoZWQsIHBhcmFtcyk7XG5cdFx0fSk7XG5cblx0XHRpZiAoYWN0aW9uICYmIDAgPCBhYm9ydEFjdGlvbnMubGVuZ3RoICYmIC0xIDwgaW5BcnJheShhY3Rpb24sIGFib3J0QWN0aW9ucykpIHtcblx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dKSB7XG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQpIHtcblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLmFib3J0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBvRGVmQWpheDtcblx0XHR9XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHRcdG9EZWZBamF4LmNhdGNoKGNvbnNvbGUubG9nKTtcblx0XHRyZXR1cm4gb0RlZkFqYXg7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdD19IG9QYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSB7P251bWJlcj19IGlUaW1lb3V0XG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICovXG5cdGRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgc0FjdGlvbiwgb1BhcmFtZXRlcnMsIGlUaW1lb3V0LCBzR2V0QWRkLCBhQWJvcnRBY3Rpb25zKSB7XG5cdFx0b1BhcmFtZXRlcnMgPSBvUGFyYW1ldGVycyB8fCB7fTtcblx0XHRvUGFyYW1ldGVycy5BY3Rpb24gPSBzQWN0aW9uO1xuXG5cdFx0c0dldEFkZCA9IHBTdHJpbmcoc0dldEFkZCk7XG5cblx0XHRydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVxdWVzdCcsIFtzQWN0aW9uLCBvUGFyYW1ldGVycywgc0dldEFkZF0pO1xuXG5cdFx0cmV0dXJuIHRoaXMuYWpheFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHRvUGFyYW1ldGVycyxcblx0XHRcdGlzVW5kKGlUaW1lb3V0KSA/IERFRkFVTFRfQUpBWF9USU1FT1VUIDogcEludChpVGltZW91dCksXG5cdFx0XHRzR2V0QWRkLFxuXHRcdFx0YUFib3J0QWN0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0bm9vcChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ05vb3AnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRnZXRQdWJsaWNLZXkoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdHZXRQdWJsaWNLZXknKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVmVyc2lvblxuXHQgKi9cblx0anNWZXJzaW9uKGZDYWxsYmFjaywgc1ZlcnNpb24pIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1ZlcnNpb24nLCB7XG5cdFx0XHQnVmVyc2lvbic6IHNWZXJzaW9uXG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RBamF4UmVtb3RlLCBBYnN0cmFjdEFqYXhSZW1vdGUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFZJRVdfTU9ERUxTIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIHdpbmRvd1Jlc2l6ZSwgbG9nLCBpc1VuZCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCB7IHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFNjcmVlbiB9IGZyb20gJ0tub2luL0Fic3RyYWN0U2NyZWVuJztcblxuY2xhc3MgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHZpZXdNb2RlbHNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHZpZXdNb2RlbHMpIHtcblx0XHRzdXBlcignc2V0dGluZ3MnLCB2aWV3TW9kZWxzKTtcblxuXHRcdHRoaXMubWVudSA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLm9DdXJyZW50U3ViU2NyZWVuID0gbnVsbDtcblx0XHR0aGlzLm9WaWV3TW9kZWxQbGFjZSA9IG51bGw7XG5cblx0XHR0aGlzLnNldHVwU2V0dGluZ3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkNhbGxiYWNrXG5cdCAqL1xuXHRzZXR1cFNldHRpbmdzKGZDYWxsYmFjayA9IG51bGwpIHtcblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2soKTtcblx0XHR9XG5cdH1cblxuXHRvblJvdXRlKHN1Yk5hbWUpIHtcblx0XHRsZXQgc2V0dGluZ3NTY3JlZW4gPSBudWxsLFxuXHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBudWxsLFxuXHRcdFx0dmlld01vZGVsUGxhY2UgPSBudWxsLFxuXHRcdFx0dmlld01vZGVsRG9tID0gbnVsbDtcblxuXHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gXy5maW5kKFxuXHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHQoU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiYgc3ViTmFtZSA9PT0gU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Sb3V0ZVxuXHRcdCk7XG5cblx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0Xy5maW5kKFxuXHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1yZW1vdmVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgJiZcblx0XHRcdFx0Xy5maW5kKFxuXHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdChEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRcdFx0RGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsID09PSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fYnVpbGRlZCAmJiBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtKSB7XG5cdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX192bTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZpZXdNb2RlbFBsYWNlID0gdGhpcy5vVmlld01vZGVsUGxhY2U7XG5cdFx0XHRcdGlmICh2aWV3TW9kZWxQbGFjZSAmJiAxID09PSB2aWV3TW9kZWxQbGFjZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbiA9IG5ldyBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCgpO1xuXG5cdFx0XHRcdFx0dmlld01vZGVsRG9tID0gJCgnPGRpdj48L2Rpdj4nKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCdybC1zZXR0aW5ncy12aWV3LW1vZGVsJylcblx0XHRcdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHRcdFx0dmlld01vZGVsRG9tLmFwcGVuZFRvKHZpZXdNb2RlbFBsYWNlKTtcblxuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLnZpZXdNb2RlbERvbSA9IHZpZXdNb2RlbERvbTtcblxuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhO1xuXG5cdFx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19kb20gPSB2aWV3TW9kZWxEb207XG5cdFx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtID0gc2V0dGluZ3NTY3JlZW47XG5cblx0XHRcdFx0XHRjb25zdCB0bXBsID0geyBuYW1lOiBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlRlbXBsYXRlIH07XG5cdFx0XHRcdFx0a28uYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlKFxuXHRcdFx0XHRcdFx0dmlld01vZGVsRG9tWzBdLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0cmFuc2xhdG9ySW5pdDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+IHRtcGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlblxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihzZXR0aW5nc1NjcmVlbiwgJ29uQnVpbGQnLCBbdmlld01vZGVsRG9tXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bG9nKCdDYW5ub3QgZmluZCBzdWIgc2V0dGluZ3MgdmlldyBtb2RlbCBwb3NpdGlvbjogU2V0dGluZ3NTdWJTY3JlZW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3NTY3JlZW4pIHtcblx0XHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gaGlkZVxuXHRcdFx0XHRcdGlmICh0aGlzLm9DdXJyZW50U3ViU2NyZWVuKSB7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DdXJyZW50U3ViU2NyZWVuLnZpZXdNb2RlbERvbS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0XHR0aGlzLm9DdXJyZW50U3ViU2NyZWVuID0gc2V0dGluZ3NTY3JlZW47XG5cblx0XHRcdFx0XHQvLyBzaG93XG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkJlZm9yZVNob3cnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvblNob3cnKTtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvblNob3dXaXRoRGVsYXknLCBbXSwgMjAwKTtcblxuXHRcdFx0XHRcdFx0Xy5lYWNoKHRoaXMubWVudSgpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpdGVtLnNlbGVjdGVkKFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbi5fX3JsU2V0dGluZ3NEYXRhICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtLnJvdXRlID09PSBzZXR0aW5nc1NjcmVlbi5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0JCgnI3JsLWNvbnRlbnQgLmItc2V0dGluZ3MgLmItY29udGVudCAuY29udGVudCcpLnNjcm9sbFRvcCgwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0SGFzaChzZXR0aW5ncygpLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdGlmICh0aGlzLm9DdXJyZW50U3ViU2NyZWVuICYmIHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHR0aGlzLm9DdXJyZW50U3ViU2NyZWVuLnZpZXdNb2RlbERvbS5oaWRlKCk7XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmVhY2goVklFV19NT0RFTFMuc2V0dGluZ3MsIChTZXR0aW5nc1ZpZXdNb2RlbCkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmXG5cdFx0XHRcdCFfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwpID0+IFJlbW92ZVNldHRpbmdzVmlld01vZGVsICYmIFJlbW92ZVNldHRpbmdzVmlld01vZGVsID09PSBTZXR0aW5nc1ZpZXdNb2RlbFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5tZW51LnB1c2goe1xuXHRcdFx0XHRcdHJvdXRlOiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlLFxuXHRcdFx0XHRcdGxhYmVsOiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLkxhYmVsLFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBrby5vYnNlcnZhYmxlKGZhbHNlKSxcblx0XHRcdFx0XHRkaXNhYmxlZDogISFfLmZpbmQoXG5cdFx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXSxcblx0XHRcdFx0XHRcdChEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsKSA9PiBEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gJCgnI3JsLWNvbnRlbnQgI3JsLXNldHRpbmdzLXN1YnNjcmVlbicpO1xuXHR9XG5cblx0cm91dGVzKCkge1xuXHRcdGNvbnN0IERlZmF1bHRWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRcdFZJRVdfTU9ERUxTLnNldHRpbmdzLFxuXHRcdFx0XHQoU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLklzRGVmYXVsdFxuXHRcdFx0KSxcblx0XHRcdGRlZmF1bHRSb3V0ZSA9XG5cdFx0XHRcdERlZmF1bHRWaWV3TW9kZWwgJiYgRGVmYXVsdFZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhID8gRGVmYXVsdFZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlIDogJ2dlbmVyYWwnLFxuXHRcdFx0cnVsZXMgPSB7XG5cdFx0XHRcdHN1Ym5hbWU6IC9eKC4qKSQvLFxuXHRcdFx0XHRub3JtYWxpemVfOiAocnF1ZXN0LCB2YWxzKSA9PiB7XG5cdFx0XHRcdFx0dmFscy5zdWJuYW1lID0gaXNVbmQodmFscy5zdWJuYW1lKSA/IGRlZmF1bHRSb3V0ZSA6IHBTdHJpbmcodmFscy5zdWJuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gW3ZhbHMuc3VibmFtZV07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0Wyd7c3VibmFtZX0vJywgcnVsZXNdLFxuXHRcdFx0Wyd7c3VibmFtZX0nLCBydWxlc10sXG5cdFx0XHRbJycsIHJ1bGVzXVxuXHRcdF07XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiwgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcbmltcG9ydCBzc20gZnJvbSAnc3NtJztcblxuaW1wb3J0IHtcblx0JHdpbixcblx0JGh0bWwsXG5cdCRkb2MsXG5cdGxlZnRQYW5lbERpc2FibGVkLFxuXHRsZWZ0UGFuZWxUeXBlLFxuXHRzVXNlckFnZW50LFxuXHRiTW9iaWxlRGV2aWNlLFxuXHRiQW5pbWF0aW9uU3VwcG9ydGVkXG59IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNOb3JtYWwsIHBTdHJpbmcsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSwgd2luZG93UmVzaXplQ2FsbGJhY2sgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJvb3QsIHJvb3RBZG1pbiwgcm9vdFVzZXIsIHBvcHVsYXRlQXV0aFN1ZmZpeCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSwgaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBMYW5ndWFnZVN0b3JlIGZyb20gJ1N0b3Jlcy9MYW5ndWFnZSc7XG5pbXBvcnQgVGhlbWVTdG9yZSBmcm9tICdTdG9yZXMvVGhlbWUnO1xuaW1wb3J0IFNvY2lhbFN0b3JlIGZyb20gJ1N0b3Jlcy9Tb2NpYWwnO1xuXG5pbXBvcnQgeyByb3V0ZU9mZiwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Qm9vdCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Qm9vdCc7XG5cbmNsYXNzIEFic3RyYWN0QXBwIGV4dGVuZHMgQWJzdHJhY3RCb290IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7UmVtb3RlU3RvcmFnZXxBZG1pblJlbW90ZVN0b3JhZ2V9IFJlbW90ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID0gbnVsbDtcblx0XHR0aGlzLmlzTG9jYWxBdXRvY29tcGxldGUgPSB0cnVlO1xuXHRcdHRoaXMuaWZyYW1lID0gbnVsbDtcblx0XHR0aGlzLmxhc3RFcnJvclRpbWUgPSAwO1xuXG5cdFx0dGhpcy5pZnJhbWUgPSAkKCc8aWZyYW1lIGNsYXNzPVwiaW50ZXJuYWwtaGlkZGRlblwiIC8+JykuYXBwZW5kVG8oJ2JvZHknKTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsICgpID0+IHtcblx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUnKTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoXG5cdFx0XHQnd2luZG93LnJlc2l6ZScsXG5cdFx0XHRfLnRocm90dGxlKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgaUggPSAkd2luLmhlaWdodCgpLFxuXHRcdFx0XHRcdGlXID0gJHdpbi5oZWlnaHQoKTtcblxuXHRcdFx0XHRpZiAoJHdpbi5fX3NpemVzWzBdICE9PSBpSCB8fCAkd2luLl9fc2l6ZXNbMV0gIT09IGlXKSB7XG5cdFx0XHRcdFx0JHdpbi5fX3NpemVzWzBdID0gaUg7XG5cdFx0XHRcdFx0JHdpbi5fX3NpemVzWzFdID0gaVc7XG5cblx0XHRcdFx0XHRFdmVudHMucHViKCd3aW5kb3cucmVzaXplLnJlYWwnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MG1zKVxuXHRcdCk7XG5cblx0XHQvLyBERUJVR1xuXHRcdC8vXHRcdEV2ZW50cy5zdWIoe1xuXHRcdC8vXHRcdFx0J3dpbmRvdy5yZXNpemUnOiBmdW5jdGlvbigpIHtcblx0XHQvL1x0XHRcdFx0d2luZG93LmNvbnNvbGUubG9nKCd3aW5kb3cucmVzaXplJyk7XG5cdFx0Ly9cdFx0XHR9LFxuXHRcdC8vXHRcdFx0J3dpbmRvdy5yZXNpemUucmVhbCc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdC8vXHRcdFx0fVxuXHRcdC8vXHRcdH0pO1xuXG5cdFx0JGRvY1xuXHRcdFx0Lm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5KSB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLWN0cmwta2V5LXByZXNzZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbigna2V5dXAnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmICFldmVudC5jdHJsS2V5KSB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLWN0cmwta2V5LXByZXNzZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHQkZG9jLm9uKFxuXHRcdFx0J21vdXNlbW92ZSBrZXlwcmVzcyBjbGljaycsXG5cdFx0XHRfLmRlYm91bmNlKCgpID0+IHtcblx0XHRcdFx0RXZlbnRzLnB1YigncmwuYXV0by1sb2dvdXQtcmVmcmVzaCcpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1cylcblx0XHQpO1xuXG5cdFx0a2V5KCdlc2MsIGVudGVyJywgS2V5U3RhdGUuQWxsLCAoKSA9PiB7XG5cdFx0XHRkZXRlY3REcm9wZG93blZpc2liaWxpdHkoKTtcblx0XHR9KTtcblx0fVxuXG5cdHJlbW90ZSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24obmFtZSwgZGVmYXVsdF8pIHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25bbmFtZV0gfHwgZGVmYXVsdF87XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxpbmtcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRkb3dubG9hZChsaW5rKSB7XG5cdFx0aWYgKHNVc2VyQWdlbnQgJiYgKC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSB8fCAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignY2hyb21lJykpKSB7XG5cdFx0XHRjb25zdCBvTGluayA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRvTGluay5ocmVmID0gbGluaztcblxuXHRcdFx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcblx0XHRcdFx0Y29uc3Qgb0UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQuTW91c2VFdmVudHM7XG5cdFx0XHRcdGlmIChvRSAmJiBvRS5pbml0RXZlbnQgJiYgb0xpbmsuZGlzcGF0Y2hFdmVudCkge1xuXHRcdFx0XHRcdG9FLmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRvTGluay5kaXNwYXRjaEV2ZW50KG9FKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR3aW5kb3cub3BlbihsaW5rLCAnX3NlbGYnKTtcblx0XHRcdHdpbmRvdy5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmlmcmFtZS5hdHRyKCdzcmMnLCBsaW5rKTtcblx0XHRcdC8vIHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gbGluaztcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGdvb2dsZVByZXZpZXdTdXBwb3J0ZWQoKSB7XG5cdFx0aWYgKG51bGwgPT09IHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlKSB7XG5cdFx0XHR0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSA9XG5cdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykgJiYgISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3Jyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuXHQgKi9cblx0c2V0V2luZG93VGl0bGUodGl0bGUpIHtcblx0XHR0aXRsZSA9IGlzTm9ybWFsKHRpdGxlKSAmJiAwIDwgdGl0bGUubGVuZ3RoID8gJycgKyB0aXRsZSA6ICcnO1xuXHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGl0bGUnKSkge1xuXHRcdFx0dGl0bGUgKz0gKHRpdGxlID8gJyAtICcgOiAnJykgKyBTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGl0bGUnKTtcblx0XHR9XG5cblx0XHR3aW5kb3cuZG9jdW1lbnQudGl0bGUgPSB0aXRsZSArICcgLi4uJztcblx0XHR3aW5kb3cuZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcblx0fVxuXG5cdHJlZGlyZWN0VG9BZG1pblBhbmVsKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSByb290QWRtaW4oKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdGNsZWFyQ2xpZW50U2lkZVRva2VuKCkge1xuXHRcdGlmICh3aW5kb3cuX19ybGFoX2NsZWFyKSB7XG5cdFx0XHR3aW5kb3cuX19ybGFoX2NsZWFyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuXHQgKi9cblx0c2V0Q2xpZW50U2lkZVRva2VuKHRva2VuKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfc2V0KSB7XG5cdFx0XHR3aW5kb3cuX19ybGFoX3NldCh0b2tlbik7XG5cblx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdBdXRoQWNjb3VudEhhc2gnLCB0b2tlbik7XG5cdFx0XHRwb3B1bGF0ZUF1dGhTdWZmaXgoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYWRtaW4gPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBsb2dvdXQgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBjbG9zZSA9IGZhbHNlXG5cdCAqL1xuXHRsb2dpbkFuZExvZ291dFJlbG9hZChhZG1pbiA9IGZhbHNlLCBsb2dvdXQgPSBmYWxzZSwgY2xvc2UgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluSWZyYW1lID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnaW5JZnJhbWUnKTtcblx0XHRsZXQgY3VzdG9tTG9nb3V0TGluayA9IHBTdHJpbmcoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2N1c3RvbUxvZ291dExpbmsnKSk7XG5cblx0XHRpZiAobG9nb3V0KSB7XG5cdFx0XHR0aGlzLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGxvZ291dCAmJiBjbG9zZSAmJiB3aW5kb3cuY2xvc2UpIHtcblx0XHRcdHdpbmRvdy5jbG9zZSgpO1xuXHRcdH1cblxuXHRcdGN1c3RvbUxvZ291dExpbmsgPSBjdXN0b21Mb2dvdXRMaW5rIHx8IChhZG1pbiA/IHJvb3RBZG1pbigpIDogcm9vdFVzZXIoKSk7XG5cblx0XHRpZiAobG9nb3V0ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmICE9PSBjdXN0b21Mb2dvdXRMaW5rKSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0aWYgKGluSWZyYW1lICYmIHdpbmRvdy5wYXJlbnQpIHtcblx0XHRcdFx0XHR3aW5kb3cucGFyZW50LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gY3VzdG9tTG9nb3V0TGluaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cdFx0XHRzZXRIYXNoKHJvb3QoKSwgdHJ1ZSk7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0aWYgKGluSWZyYW1lICYmIHdpbmRvdy5wYXJlbnQpIHtcblx0XHRcdFx0XHR3aW5kb3cucGFyZW50LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0aGlzdG9yeUJhY2soKSB7XG5cdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdC8vIGxvZygnUHMnICsgJ3NzLCBoYWMnICsgJ2tlcnMhIFRoZScgKyAncmVcXCdzIG5vdCcgKyAnaGluZyBpbnRlJyArICdyZXN0aW5nIDonICsgJyknKTtcblxuXHRcdEV2ZW50cy5wdWIoJ3JsLmJvb3RzdGFydCcpO1xuXG5cdFx0Y29uc3QgbW9iaWxlID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2F2ZVRyaWdnZXInLCByZXF1aXJlKCdDb21wb25lbnQvU2F2ZVRyaWdnZXInKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdJbnB1dCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9JbnB1dCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1NlbGVjdCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9TZWxlY3QnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdSYWRpbycsIHJlcXVpcmUoJ0NvbXBvbmVudC9SYWRpbycpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1RleHRBcmVhJywgcmVxdWlyZSgnQ29tcG9uZW50L1RleHRBcmVhJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignRGF0ZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9EYXRlJykuZGVmYXVsdCk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCd4LXNjcmlwdCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9TY3JpcHQnKS5kZWZhdWx0KTtcblx0XHQvLyBrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdzdmctaWNvbicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TdmdJY29uJykuZGVmYXVsdCk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21hdGVyaWFsRGVzaWduJykgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94JywgcmVxdWlyZSgnQ29tcG9uZW50L0NsYXNzaWMvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NsYXNzaWMvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94JywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveFNpbXBsZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdH1cblxuXHRcdGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKGluaXROb3RpZmljYXRpb25MYW5ndWFnZSk7XG5cblx0XHRfLmRlbGF5KHdpbmRvd1Jlc2l6ZUNhbGxiYWNrLCBNYWdpY3MuVGltZTFzKTtcblxuXHRcdEV2ZW50cy5zdWIoJ3NzbS5tb2JpbGUtZW50ZXInLCAoKSA9PiB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ3NzbS5tb2JpbGUtbGVhdmUnLCAoKSA9PiB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHRpZiAoIW1vYmlsZSkge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLWRlc2t0b3AnKTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICdtb2JpbGUnLFxuXHRcdFx0XHRxdWVyeTogJyhtYXgtd2lkdGg6IDc2N3B4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLW1vYmlsZScpO1xuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3NzbS5tb2JpbGUtZW50ZXInKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1sZWF2ZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICd0YWJsZXQnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTk5cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLXRhYmxldCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICdkZXNrdG9wJyxcblx0XHRcdFx0cXVlcnk6ICcobWluLXdpZHRoOiAxMDAwcHgpIGFuZCAobWF4LXdpZHRoOiAxNDAwcHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtZGVza3RvcCcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AtbGFyZ2UnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDE0MDFweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wLWxhcmdlJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJykuYWRkQ2xhc3MoJ3JsLW1vYmlsZScpO1xuXHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdH1cblxuXHRcdGxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1kaXNhYmxlZCcsIGJWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1lbmFibGVkJywgIWJWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxUeXBlLnN1YnNjcmliZSgoc1ZhbHVlKSA9PiB7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1ub25lJywgJ25vbmUnID09PSBzVmFsdWUpO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtc2hvcnQnLCAnc2hvcnQnID09PSBzVmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQudmFsdWVIYXNNdXRhdGVkKCk7XG5cblx0XHRMYW5ndWFnZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0VGhlbWVTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdFNvY2lhbFN0b3JlLnBvcHVsYXRlKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RBcHAsIEFic3RyYWN0QXBwIGFzIGRlZmF1bHQgfTtcbiIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdEJvb3Qge1xuXHRib290c3RhcnQoKSB7XG5cdFx0Lyogbm8tZW1wdHkgKi9cblx0fVxufVxuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdFJhZGlvIGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWU7XG5cdFx0aWYgKGlzVW5kKHRoaXMudmFsdWUpIHx8ICF0aGlzLnZhbHVlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5saW5lID0gaXNVbmQocGFyYW1zLmlubGluZSkgPyBmYWxzZSA6IHBhcmFtcy5pbmxpbmU7XG5cdFx0dGhpcy5yZWFkT25seSA9IGlzVW5kKHBhcmFtcy5yZWFkT25seSkgPyBmYWxzZSA6ICEhcGFyYW1zLnJlYWRPbmx5O1xuXG5cdFx0aWYgKHBhcmFtcy52YWx1ZXMpIHtcblx0XHRcdHRoaXMudmFsdWVzKF8ubWFwKHBhcmFtcy52YWx1ZXMsIChsYWJlbCwgdmFsdWUpID0+ICh7IGxhYmVsOiBsYWJlbCwgdmFsdWU6IHZhbHVlIH0pKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jbGljayA9IF8uYmluZCh0aGlzLmNsaWNrLCB0aGlzKTtcblx0fVxuXG5cdGNsaWNrKHZhbHVlKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWRPbmx5ICYmIHZhbHVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlKHZhbHVlLnZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RSYWRpbywgQWJzdHJhY3RSYWRpbyBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzVW5kLCBwSW50LCBmcmllbmRseVNpemUsIG1pbWVDb250ZW50VHlwZSwgZ2V0RmlsZUV4dGVuc2lvbiB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IHN0YXRpY0ljb25DbGFzcywgc3RhdGljRmlsZVR5cGUgfSBmcm9tICdNb2RlbC9BdHRhY2htZW50JztcbmltcG9ydCB7IEFic3RyYWN0TW9kZWwgfSBmcm9tICdLbm9pbi9BYnN0cmFjdE1vZGVsJztcblxuY2xhc3MgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBzaXplID0gbnVsbFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0lubGluZSA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzTGlua2VkID0gZmFsc2Vcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBDSUQgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGNvbnRlbnRMb2NhdGlvbiA9ICcnXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihpZCwgZmlsZU5hbWUsIHNpemUgPSBudWxsLCBpc0lubGluZSA9IGZhbHNlLCBpc0xpbmtlZCA9IGZhbHNlLCBDSUQgPSAnJywgY29udGVudExvY2F0aW9uID0gJycpIHtcblx0XHRzdXBlcignQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCcpO1xuXG5cdFx0dGhpcy5pZCA9IGlkO1xuXHRcdHRoaXMuaXNJbmxpbmUgPSAhIWlzSW5saW5lO1xuXHRcdHRoaXMuaXNMaW5rZWQgPSAhIWlzTGlua2VkO1xuXHRcdHRoaXMuQ0lEID0gQ0lEO1xuXHRcdHRoaXMuY29udGVudExvY2F0aW9uID0gY29udGVudExvY2F0aW9uO1xuXHRcdHRoaXMuZnJvbU1lc3NhZ2UgPSBmYWxzZTtcblxuXHRcdHRoaXMuZmlsZU5hbWUgPSBrby5vYnNlcnZhYmxlKGZpbGVOYW1lKTtcblx0XHR0aGlzLnNpemUgPSBrby5vYnNlcnZhYmxlKHNpemUpO1xuXHRcdHRoaXMudGVtcE5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucHJvZ3Jlc3MgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMuZXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLndhaXRpbmcgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMudXBsb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvbXBsZXRlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnByb2dyZXNzVGV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLnByb2dyZXNzKCk7XG5cdFx0XHRyZXR1cm4gMCA9PT0gcCA/ICcnIDogJycgKyAoOTggPCBwID8gMTAwIDogcCkgKyAnJSc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnByb2dyZXNzU3R5bGUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5wcm9ncmVzcygpO1xuXHRcdFx0cmV0dXJuIDAgPT09IHAgPyAnJyA6ICd3aWR0aDonICsgKDk4IDwgcCA/IDEwMCA6IHApICsgJyUnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy50aXRsZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGVycm9yID0gdGhpcy5lcnJvcigpO1xuXHRcdFx0cmV0dXJuICcnICE9PSBlcnJvciA/IGVycm9yIDogdGhpcy5maWxlTmFtZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5mcmllbmRseVNpemUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBsb2NhbFNpemUgPSB0aGlzLnNpemUoKTtcblx0XHRcdHJldHVybiBudWxsID09PSBsb2NhbFNpemUgPyAnJyA6IGZyaWVuZGx5U2l6ZShsb2NhbFNpemUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5taW1lVHlwZSA9IGtvLmNvbXB1dGVkKCgpID0+IG1pbWVDb250ZW50VHlwZSh0aGlzLmZpbGVOYW1lKCkpKTtcblx0XHR0aGlzLmZpbGVFeHQgPSBrby5jb21wdXRlZCgoKSA9PiBnZXRGaWxlRXh0ZW5zaW9uKHRoaXMuZmlsZU5hbWUoKSkpO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhbXG5cdFx0XHR0aGlzLnByb2dyZXNzVGV4dCxcblx0XHRcdHRoaXMucHJvZ3Jlc3NTdHlsZSxcblx0XHRcdHRoaXMudGl0bGUsXG5cdFx0XHR0aGlzLmZyaWVuZGx5U2l6ZSxcblx0XHRcdHRoaXMubWltZVR5cGUsXG5cdFx0XHR0aGlzLmZpbGVFeHRcblx0XHRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uQ29tcG9zZUF0dGFjaG1lbnR9IGpzb25cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpbml0QnlVcGxvYWRKc29uKGpzb24pIHtcblx0XHRsZXQgYlJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uKSB7XG5cdFx0XHR0aGlzLmZpbGVOYW1lKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLnNpemUoaXNVbmQoanNvbi5TaXplKSA/IDAgOiBwSW50KGpzb24uU2l6ZSkpO1xuXHRcdFx0dGhpcy50ZW1wTmFtZShpc1VuZChqc29uLlRlbXBOYW1lKSA/ICcnIDoganNvbi5UZW1wTmFtZSk7XG5cdFx0XHR0aGlzLmlzSW5saW5lID0gZmFsc2U7XG5cblx0XHRcdGJSZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBiUmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRpY29uQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHN0YXRpY0ljb25DbGFzcyhzdGF0aWNGaWxlVHlwZSh0aGlzLmZpbGVFeHQoKSwgdGhpcy5taW1lVHlwZSgpKSlbMF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGljb25UZXh0KCkge1xuXHRcdHJldHVybiBzdGF0aWNJY29uQ2xhc3Moc3RhdGljRmlsZVR5cGUodGhpcy5maWxlRXh0KCksIHRoaXMubWltZVR5cGUoKSkpWzFdO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbXBvc2VBdHRhY2htZW50TW9kZWwsIENvbXBvc2VBdHRhY2htZW50TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgQ29udGFjdFByb3BlcnR5VHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwSW50LCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IEFic3RyYWN0TW9kZWwgfSBmcm9tICdLbm9pbi9BYnN0cmFjdE1vZGVsJztcblxuY2xhc3MgQ29udGFjdFByb3BlcnR5TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7bnVtYmVyPX0gdHlwZSA9IEVudW1zLkNvbnRhY3RQcm9wZXJ0eVR5cGUuVW5rbm93blxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHR5cGVTdHIgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHZhbHVlID0gJydcblx0ICogQHBhcmFtIHtib29sZWFuPX0gZm9jdXNlZCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gcGxhY2Vob2xkZXIgPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IodHlwZSA9IENvbnRhY3RQcm9wZXJ0eVR5cGUuVW5rbm93biwgdHlwZVN0ciA9ICcnLCB2YWx1ZSA9ICcnLCBmb2N1c2VkID0gZmFsc2UsIHBsYWNlaG9sZGVyID0gJycpIHtcblx0XHRzdXBlcignQ29udGFjdFByb3BlcnR5TW9kZWwnKTtcblxuXHRcdHRoaXMudHlwZSA9IGtvLm9ic2VydmFibGUocEludCh0eXBlKSk7XG5cdFx0dGhpcy50eXBlU3RyID0ga28ub2JzZXJ2YWJsZShwU3RyaW5nKHR5cGVTdHIpKTtcblx0XHR0aGlzLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKCEhZm9jdXNlZCk7XG5cdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUocFN0cmluZyh2YWx1ZSkpO1xuXG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IGtvLm9ic2VydmFibGUocGxhY2Vob2xkZXIpO1xuXG5cdFx0dGhpcy5wbGFjZWhvbGRlclZhbHVlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdiA9IHRoaXMucGxhY2Vob2xkZXIoKTtcblx0XHRcdHJldHVybiB2ID8gaTE4bih2KSA6ICcnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYXJnZVZhbHVlID0ga28uY29tcHV0ZWQoKCkgPT4gQ29udGFjdFByb3BlcnR5VHlwZS5Ob3RlID09PSB0aGlzLnR5cGUoKSk7XG5cblx0XHR0aGlzLnJlZ0Rpc3Bvc2FibGVzKFt0aGlzLnBsYWNlaG9sZGVyVmFsdWUsIHRoaXMubGFyZ2VWYWx1ZV0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RQcm9wZXJ0eU1vZGVsLCBDb250YWN0UHJvcGVydHlNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG4vLyBFZGdlIDE0LSBpc3N1ZVxudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChTRUFSQ0gsIG5hdGl2ZVNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzZWFyY2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBzZWFyY2hlciAhPT0gdW5kZWZpbmVkID8gc2VhcmNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlU2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGZvbGRlckxpc3RPcHRpb25zQnVpbGRlciwgbm9vcCwgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0ZvbGRlclN5c3RlbSdcbn0pXG5jbGFzcyBGb2xkZXJTeXN0ZW1Qb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc0Nob29zZU9uVGV4dCA9ICcnO1xuXHRcdHRoaXMuc1VudXNlVGV4dCA9ICcnO1xuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0dGhpcy5zQ2hvb3NlT25UZXh0ID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL1NFTEVDVF9DSE9PU0VfT05FJyk7XG5cdFx0XHR0aGlzLnNVbnVzZVRleHQgPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvU0VMRUNUX1VOVVNFX05BTUUnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubm90aWZpY2F0aW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmZvbGRlclNlbGVjdExpc3QgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHRbXSxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdCgpLFxuXHRcdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0U3lzdGVtTmFtZXMoKSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdFsnJywgdGhpcy5zQ2hvb3NlT25UZXh0XSxcblx0XHRcdFx0XHRbVU5VU0VEX09QVElPTl9WQUxVRSwgdGhpcy5zVW51c2VUZXh0XVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VudEZvbGRlciA9IEZvbGRlclN0b3JlLnNlbnRGb2xkZXI7XG5cdFx0dGhpcy5kcmFmdEZvbGRlciA9IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyO1xuXHRcdHRoaXMuc3BhbUZvbGRlciA9IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXI7XG5cdFx0dGhpcy50cmFzaEZvbGRlciA9IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyO1xuXHRcdHRoaXMuYXJjaGl2ZUZvbGRlciA9IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXI7XG5cblx0XHRjb25zdCBmU2V0U3lzdGVtRm9sZGVycyA9ICgpID0+IHtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1NlbnRGb2xkZXInLCBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCkpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnRHJhZnRGb2xkZXInLCBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1NwYW1Gb2xkZXInLCBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnVHJhc2hGb2xkZXInLCBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0FyY2hpdmVGb2xkZXInLCBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkpO1xuXHRcdFx0fSxcblx0XHRcdGZTYXZlU3lzdGVtRm9sZGVycyA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRmU2V0U3lzdGVtRm9sZGVycygpO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZVN5c3RlbUZvbGRlcnMobm9vcCwge1xuXHRcdFx0XHRcdFNlbnRGb2xkZXI6IEZvbGRlclN0b3JlLnNlbnRGb2xkZXIoKSxcblx0XHRcdFx0XHREcmFmdEZvbGRlcjogRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0XHRTcGFtRm9sZGVyOiBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCksXG5cdFx0XHRcdFx0VHJhc2hGb2xkZXI6IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCksXG5cdFx0XHRcdFx0QXJjaGl2ZUZvbGRlcjogRm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcigpLFxuXHRcdFx0XHRcdE51bGxGb2xkZXI6ICdOdWxsRm9sZGVyJ1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMXMpLFxuXHRcdFx0ZkNhbGxiYWNrID0gKCkgPT4ge1xuXHRcdFx0XHRmU2V0U3lzdGVtRm9sZGVycygpO1xuXHRcdFx0XHRmU2F2ZVN5c3RlbUZvbGRlcnMoKTtcblx0XHRcdH07XG5cblx0XHRGb2xkZXJTdG9yZS5zZW50Rm9sZGVyLnN1YnNjcmliZShmQ2FsbGJhY2spO1xuXHRcdEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyLnN1YnNjcmliZShmQ2FsbGJhY2spO1xuXHRcdEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIuc3Vic2NyaWJlKGZDYWxsYmFjayk7XG5cdFx0Rm9sZGVyU3RvcmUudHJhc2hGb2xkZXIuc3Vic2NyaWJlKGZDYWxsYmFjayk7XG5cdFx0Rm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlci5zdWJzY3JpYmUoZkNhbGxiYWNrKTtcblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7bnVtYmVyPX0gbm90aWZpY2F0aW9uVHlwZSA9IFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uTm9uZVxuXHQgKi9cblx0b25TaG93KG5vdGlmaWNhdGlvblR5cGUgPSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLk5vbmUpIHtcblx0XHRsZXQgbm90aWZpY2F0aW9uID0gJyc7XG5cdFx0c3dpdGNoIChub3RpZmljYXRpb25UeXBlKSB7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uU2VudDpcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL05PVElGSUNBVElPTl9TRU5UJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLkRyYWZ0OlxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvTk9USUZJQ0FUSU9OX0RSQUZUUycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5TcGFtOlxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvTk9USUZJQ0FUSU9OX1NQQU0nKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uVHJhc2g6XG5cdFx0XHRcdG5vdGlmaWNhdGlvbiA9IGkxOG4oJ1BPUFVQU19TWVNURU1fRk9MREVSUy9OT1RJRklDQVRJT05fVFJBU0gnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uQXJjaGl2ZTpcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL05PVElGSUNBVElPTl9BUkNISVZFJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblxuXHRcdHRoaXMubm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyU3lzdGVtUG9wdXBWaWV3LCBGb2xkZXJTeXN0ZW1Qb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdEJhc2ljUHJvbWlzZXMge1xuXHRvUHJvbWlzZXNTdGFjayA9IHt9O1xuXG5cdGZ1bmMoZkZ1bmMpIHtcblx0XHRmRnVuYygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZmFzdFJlc29sdmUobURhdGEpIHtcblx0XHRyZXR1cm4gd2luZG93LlByb21pc2UucmVzb2x2ZShtRGF0YSk7XG5cdH1cblxuXHRmYXN0UmVqZWN0KG1EYXRhKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnJlamVjdChtRGF0YSk7XG5cdH1cblxuXHRzZXRUcmlnZ2VyKHRyaWdnZXIsIHZhbHVlKSB7XG5cdFx0aWYgKHRyaWdnZXIpIHtcblx0XHRcdHZhbHVlID0gISF2YWx1ZTtcblx0XHRcdChpc0FycmF5KHRyaWdnZXIpID8gdHJpZ2dlciA6IFt0cmlnZ2VyXSkuZm9yRWFjaCgoZlRyaWdnZXIpID0+IHtcblx0XHRcdFx0aWYgKGZUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0ZlRyaWdnZXIodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IHsgQ2FwYSwgTWFnaWNzLCBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltLCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5jbGFzcyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubG9nb0ltZyA9IHRyaW0oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMb2dvJykpO1xuXHRcdHRoaXMubG9nb1RpdGxlID0gdHJpbShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxvZ29UaXRsZScpKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuYWxsb3dTZXR0aW5ncyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLlNldHRpbmdzKTtcblx0XHR0aGlzLmFsbG93SGVscCA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkhlbHApO1xuXG5cdFx0dGhpcy5jdXJyZW50QXVkaW8gPSBBcHBTdG9yZS5jdXJyZW50QXVkaW87XG5cblx0XHR0aGlzLmFjY291bnRFbWFpbCA9IEFjY291bnRTdG9yZS5lbWFpbDtcblxuXHRcdHRoaXMuYWNjb3VudHMgPSBBY2NvdW50U3RvcmUuYWNjb3VudHM7XG5cdFx0dGhpcy5hY2NvdW50c1VucmVhZENvdW50ID0gQWNjb3VudFN0b3JlLmFjY291bnRzVW5yZWFkQ291bnQ7XG5cblx0XHR0aGlzLmFjY291bnRNZW51RHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzID0ga28ub2JzZXJ2YWJsZShTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKSk7XG5cblx0XHR0aGlzLmFkZEFjY291bnRDbGljayA9IF8uYmluZCh0aGlzLmFkZEFjY291bnRDbGljaywgdGhpcyk7XG5cblx0XHRFdmVudHMuc3ViKCdhdWRpby5zdG9wJywgKCkgPT4gQXBwU3RvcmUuY3VycmVudEF1ZGlvKCcnKSk7XG5cdFx0RXZlbnRzLnN1YignYXVkaW8uc3RhcnQnLCAobmFtZSkgPT4gQXBwU3RvcmUuY3VycmVudEF1ZGlvKG5hbWUpKTtcblx0fVxuXG5cdHN0b3BQbGF5KCkge1xuXHRcdEV2ZW50cy5wdWIoJ2F1ZGlvLmFwaS5zdG9wJyk7XG5cdH1cblxuXHRhY2NvdW50Q2xpY2soYWNjb3VudCwgZXZlbnQpIHtcblx0XHRpZiAoYWNjb3VudCAmJiBldmVudCAmJiAhaXNVbmQoZXZlbnQud2hpY2gpICYmIDEgPT09IGV2ZW50LndoaWNoKSB7XG5cdFx0XHRBY2NvdW50U3RvcmUuYWNjb3VudHMubG9hZGluZyh0cnVlKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4gQWNjb3VudFN0b3JlLmFjY291bnRzLmxvYWRpbmcoZmFsc2UpLCBNYWdpY3MuVGltZTFzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGVtYWlsVGl0bGUoKSB7XG5cdFx0cmV0dXJuIEFjY291bnRTdG9yZS5lbWFpbCgpO1xuXHR9XG5cblx0c2V0dGluZ3NDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlNldHRpbmdzKSkge1xuXHRcdFx0c2V0SGFzaChzZXR0aW5ncygpKTtcblx0XHR9XG5cdH1cblxuXHRzZXR0aW5nc0hlbHAoKSB7XG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5IZWxwKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJykpO1xuXHRcdH1cblx0fVxuXG5cdGFkZEFjY291bnRDbGljaygpIHtcblx0XHRpZiAodGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FjY291bnQnKSk7XG5cdFx0fVxuXHR9XG5cblx0bG9nb3V0Q2xpY2soKSB7XG5cdFx0Z2V0QXBwKCkubG9nb3V0KCk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgnYCcsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXcsIEtleVN0YXRlLlNldHRpbmdzXSwgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMudmlld01vZGVsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlRnVsbFNjcmVlbk1vZGUoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLmFjY291bnRNZW51RHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gc2hvcnRjdXRzIGhlbHBcblx0XHRrZXkoJ3NoaWZ0Ky8nLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCBLZXlTdGF0ZS5TZXR0aW5nc10sICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9LZXlib2FyZFNob3J0Y3V0c0hlbHAnKSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldywgQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgRXZlbnRLZXlDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzQXJyYXksIGluQXJyYXksIG5vb3AsIG5vb3BUcnVlIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgU2VsZWN0b3Ige1xuXHRsaXN0O1xuXHRsaXN0Q2hlY2tlZDtcblx0aXNMaXN0Q2hlY2tlZDtcblxuXHRmb2N1c2VkSXRlbTtcblx0c2VsZWN0ZWRJdGVtO1xuXG5cdGl0ZW1TZWxlY3RlZFRocm90dGxlO1xuXG5cdHNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrID0gdHJ1ZTtcblxuXHRpU2VsZWN0TmV4dEhlbHBlciA9IDA7XG5cdGlGb2N1c2VkTmV4dEhlbHBlciA9IDA7XG5cdG9Db250ZW50VmlzaWJsZTtcblx0b0NvbnRlbnRTY3JvbGxhYmxlO1xuXG5cdHNJdGVtU2VsZWN0b3I7XG5cdHNJdGVtU2VsZWN0ZWRTZWxlY3Rvcjtcblx0c0l0ZW1DaGVja2VkU2VsZWN0b3I7XG5cdHNJdGVtRm9jdXNlZFNlbGVjdG9yO1xuXG5cdHNMYXN0VWlkID0gJyc7XG5cdG9DYWxsYmFja3MgPSB7fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtrb1Byb3BlcnR5fSBrb0xpc3Rcblx0ICogQHBhcmFtIHtrb1Byb3BlcnR5fSBrb1NlbGVjdGVkSXRlbVxuXHQgKiBAcGFyYW0ge2tvUHJvcGVydHl9IGtvRm9jdXNlZEl0ZW1cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtU2VsZWN0b3Jcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtU2VsZWN0ZWRTZWxlY3RvclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0l0ZW1DaGVja2VkU2VsZWN0b3Jcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtRm9jdXNlZFNlbGVjdG9yXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRrb0xpc3QsXG5cdFx0a29TZWxlY3RlZEl0ZW0sXG5cdFx0a29Gb2N1c2VkSXRlbSxcblx0XHRzSXRlbVNlbGVjdG9yLFxuXHRcdHNJdGVtU2VsZWN0ZWRTZWxlY3Rvcixcblx0XHRzSXRlbUNoZWNrZWRTZWxlY3Rvcixcblx0XHRzSXRlbUZvY3VzZWRTZWxlY3RvclxuXHQpIHtcblx0XHR0aGlzLmxpc3QgPSBrb0xpc3Q7XG5cblx0XHR0aGlzLmxpc3RDaGVja2VkID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5saXN0KCksIChpdGVtKSA9PiBpdGVtLmNoZWNrZWQoKSkpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblx0XHR0aGlzLmlzTGlzdENoZWNrZWQgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5saXN0Q2hlY2tlZCgpLmxlbmd0aCk7XG5cblx0XHR0aGlzLmZvY3VzZWRJdGVtID0ga29Gb2N1c2VkSXRlbSB8fCBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0ga29TZWxlY3RlZEl0ZW0gfHwga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuaXRlbVNlbGVjdGVkVGhyb3R0bGUgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLml0ZW1TZWxlY3RlZCwgdGhpcyksIDMwMCk7XG5cblx0XHR0aGlzLmxpc3RDaGVja2VkLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcblx0XHRcdGlmICgwIDwgaXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGlmIChudWxsID09PSB0aGlzLnNlbGVjdGVkSXRlbSgpKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0udmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuYXV0b1NlbGVjdCgpICYmIHRoaXMuZm9jdXNlZEl0ZW0oKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0uc3Vic2NyaWJlKChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xpc3RDaGVja2VkKCkpIHtcblx0XHRcdFx0XHRfLmVhY2godGhpcy5saXN0Q2hlY2tlZCgpLCAoc3ViSXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0c3ViSXRlbS5jaGVja2VkKGZhbHNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0dGhpcy5pdGVtU2VsZWN0ZWRUaHJvdHRsZShpdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrKSB7XG5cdFx0XHRcdHRoaXMuaXRlbVNlbGVjdGVkKG51bGwpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdzZWxlY3RlZCddIH0pO1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW0gPSB0aGlzLmZvY3VzZWRJdGVtLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbbnVsbCwgJ2ZvY3VzZWQnXSB9KTtcblxuXHRcdHRoaXMuc0l0ZW1TZWxlY3RvciA9IHNJdGVtU2VsZWN0b3I7XG5cdFx0dGhpcy5zSXRlbVNlbGVjdGVkU2VsZWN0b3IgPSBzSXRlbVNlbGVjdGVkU2VsZWN0b3I7XG5cdFx0dGhpcy5zSXRlbUNoZWNrZWRTZWxlY3RvciA9IHNJdGVtQ2hlY2tlZFNlbGVjdG9yO1xuXHRcdHRoaXMuc0l0ZW1Gb2N1c2VkU2VsZWN0b3IgPSBzSXRlbUZvY3VzZWRTZWxlY3RvcjtcblxuXHRcdHRoaXMuZm9jdXNlZEl0ZW0uc3Vic2NyaWJlKChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHR0aGlzLnNMYXN0VWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0bGV0IGFDYWNoZSA9IFtdLFxuXHRcdFx0YUNoZWNrZWRDYWNoZSA9IFtdLFxuXHRcdFx0bUZvY3VzZWQgPSBudWxsLFxuXHRcdFx0bVNlbGVjdGVkID0gbnVsbDtcblxuXHRcdHRoaXMubGlzdC5zdWJzY3JpYmUoXG5cdFx0XHQoaXRlbXMpID0+IHtcblx0XHRcdFx0aWYgKGlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXG5cdFx0XHRcdFx0XHRcdGFDYWNoZS5wdXNoKHVpZCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLmNoZWNrZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGFDaGVja2VkQ2FjaGUucHVzaCh1aWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChudWxsID09PSBtRm9jdXNlZCAmJiBpdGVtLmZvY3VzZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdG1Gb2N1c2VkID0gdWlkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChudWxsID09PSBtU2VsZWN0ZWQgJiYgaXRlbS5zZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVNlbGVjdGVkID0gdWlkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLFxuXHRcdFx0J2JlZm9yZUNoYW5nZSdcblx0XHQpO1xuXG5cdFx0dGhpcy5saXN0LnN1YnNjcmliZSgoYUl0ZW1zKSA9PiB7XG5cdFx0XHRsZXQgdGVtcCA9IG51bGwsXG5cdFx0XHRcdGdldE5leHQgPSBmYWxzZSxcblx0XHRcdFx0aXNOZXh0Rm9jdXNlZCA9IG1Gb2N1c2VkLFxuXHRcdFx0XHRpc0NoZWNrZWQgPSBmYWxzZSxcblx0XHRcdFx0aXNTZWxlY3RlZCA9IGZhbHNlLFxuXHRcdFx0XHRsZW4gPSAwO1xuXG5cdFx0XHRjb25zdCB1aWRzID0gW107XG5cblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtVXNlQ2FsbGJhY2sgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbShudWxsKTtcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKG51bGwpO1xuXG5cdFx0XHRpZiAoaXNBcnJheShhSXRlbXMpKSB7XG5cdFx0XHRcdGxlbiA9IGFDaGVja2VkQ2FjaGUubGVuZ3RoO1xuXG5cdFx0XHRcdF8uZWFjaChhSXRlbXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXHRcdFx0XHRcdHVpZHMucHVzaCh1aWQpO1xuXG5cdFx0XHRcdFx0aWYgKG51bGwgIT09IG1Gb2N1c2VkICYmIG1Gb2N1c2VkID09PSB1aWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0oaXRlbSk7XG5cdFx0XHRcdFx0XHRtRm9jdXNlZCA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKDAgPCBsZW4gJiYgLTEgPCBpbkFycmF5KHVpZCwgYUNoZWNrZWRDYWNoZSkpIHtcblx0XHRcdFx0XHRcdGlzQ2hlY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRpdGVtLmNoZWNrZWQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRsZW4gLT0gMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIWlzQ2hlY2tlZCAmJiBudWxsICE9PSBtU2VsZWN0ZWQgJiYgbVNlbGVjdGVkID09PSB1aWQpIHtcblx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0oaXRlbSk7XG5cdFx0XHRcdFx0XHRtU2VsZWN0ZWQgPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1Vc2VDYWxsYmFjayA9IHRydWU7XG5cblx0XHRcdFx0aWYgKCFpc0NoZWNrZWQgJiYgIWlzU2VsZWN0ZWQgJiYgdGhpcy5hdXRvU2VsZWN0KCkpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5mb2N1c2VkSXRlbSgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoMCA8IGFJdGVtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmIChudWxsICE9PSBpc05leHRGb2N1c2VkKSB7XG5cdFx0XHRcdFx0XHRcdGdldE5leHQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aXNOZXh0Rm9jdXNlZCA9IF8uZmluZChhQ2FjaGUsIChzVWlkKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGdldE5leHQgJiYgLTEgPCBpbkFycmF5KHNVaWQsIHVpZHMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc1VpZDtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzTmV4dEZvY3VzZWQgPT09IHNVaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGdldE5leHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpc05leHRGb2N1c2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGVtcCA9IF8uZmluZChhSXRlbXMsIChvSXRlbSkgPT4gaXNOZXh0Rm9jdXNlZCA9PT0gdGhpcy5nZXRJdGVtVWlkKG9JdGVtKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0odGVtcCB8fCBudWxsKTtcblx0XHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0oKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCgwICE9PSB0aGlzLmlTZWxlY3ROZXh0SGVscGVyIHx8IDAgIT09IHRoaXMuaUZvY3VzZWROZXh0SGVscGVyKSAmJlxuXHRcdFx0XHRcdDAgPCBhSXRlbXMubGVuZ3RoICYmXG5cdFx0XHRcdFx0IXRoaXMuZm9jdXNlZEl0ZW0oKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZW1wID0gbnVsbDtcblx0XHRcdFx0XHRpZiAoMCAhPT0gdGhpcy5pRm9jdXNlZE5leHRIZWxwZXIpIHtcblx0XHRcdFx0XHRcdHRlbXAgPSBhSXRlbXNbLTEgPT09IHRoaXMuaUZvY3VzZWROZXh0SGVscGVyID8gYUl0ZW1zLmxlbmd0aCAtIDEgOiAwXSB8fCBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghdGVtcCAmJiAwICE9PSB0aGlzLmlTZWxlY3ROZXh0SGVscGVyKSB7XG5cdFx0XHRcdFx0XHR0ZW1wID0gYUl0ZW1zWy0xID09PSB0aGlzLmlTZWxlY3ROZXh0SGVscGVyID8gYUl0ZW1zLmxlbmd0aCAtIDEgOiAwXSB8fCBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0ZW1wKSB7XG5cdFx0XHRcdFx0XHRpZiAoMCAhPT0gdGhpcy5pU2VsZWN0TmV4dEhlbHBlcikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSh0ZW1wIHx8IG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtKHRlbXAgfHwgbnVsbCk7XG5cblx0XHRcdFx0XHRcdHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCk7XG5cblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5zY3JvbGxUb0ZvY3VzZWQoKSwgMTAwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmlTZWxlY3ROZXh0SGVscGVyID0gMDtcblx0XHRcdFx0XHR0aGlzLmlGb2N1c2VkTmV4dEhlbHBlciA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YUNhY2hlID0gW107XG5cdFx0XHRhQ2hlY2tlZENhY2hlID0gW107XG5cdFx0XHRtRm9jdXNlZCA9IG51bGw7XG5cdFx0XHRtU2VsZWN0ZWQgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cblx0aXRlbVNlbGVjdGVkKGl0ZW0pIHtcblx0XHRpZiAodGhpcy5pc0xpc3RDaGVja2VkKCkpIHtcblx0XHRcdGlmICghaXRlbSkge1xuXHRcdFx0XHQodGhpcy5vQ2FsbGJhY2tzLm9uSXRlbVNlbGVjdCB8fCBub29wKShpdGVtIHx8IG51bGwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXRlbSkge1xuXHRcdFx0KHRoaXMub0NhbGxiYWNrcy5vbkl0ZW1TZWxlY3QgfHwgbm9vcCkoaXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VTZWxlY3Rcblx0ICovXG5cdGdvRG93bihmb3JjZVNlbGVjdCkge1xuXHRcdHRoaXMubmV3U2VsZWN0UG9zaXRpb24oRXZlbnRLZXlDb2RlLkRvd24sIGZhbHNlLCBmb3JjZVNlbGVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmb3JjZVNlbGVjdFxuXHQgKi9cblx0Z29VcChmb3JjZVNlbGVjdCkge1xuXHRcdHRoaXMubmV3U2VsZWN0UG9zaXRpb24oRXZlbnRLZXlDb2RlLlVwLCBmYWxzZSwgZm9yY2VTZWxlY3QpO1xuXHR9XG5cblx0dW5zZWxlY3QoKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0obnVsbCk7XG5cdFx0dGhpcy5mb2N1c2VkSXRlbShudWxsKTtcblx0fVxuXG5cdGluaXQoY29udGVudFZpc2libGUsIGNvbnRlbnRTY3JvbGxhYmxlLCBrZXlTY29wZSA9ICdhbGwnKSB7XG5cdFx0dGhpcy5vQ29udGVudFZpc2libGUgPSBjb250ZW50VmlzaWJsZTtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9IGNvbnRlbnRTY3JvbGxhYmxlO1xuXG5cdFx0aWYgKHRoaXMub0NvbnRlbnRWaXNpYmxlICYmIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSB7XG5cdFx0XHQkKHRoaXMub0NvbnRlbnRWaXNpYmxlKVxuXHRcdFx0XHQub24oJ3NlbGVjdHN0YXJ0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCdjbGljaycsIHRoaXMuc0l0ZW1TZWxlY3RvciwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25DbGljayhrby5kYXRhRm9yKGV2ZW50LmN1cnJlbnRUYXJnZXQpLCBldmVudCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignY2xpY2snLCB0aGlzLnNJdGVtQ2hlY2tlZFNlbGVjdG9yLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpdGVtID0ga28uZGF0YUZvcihldmVudC5jdXJyZW50VGFyZ2V0KTtcblx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uQ2xpY2soaXRlbSwgZXZlbnQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbShpdGVtKTtcblx0XHRcdFx0XHRcdFx0aXRlbS5jaGVja2VkKCFpdGVtLmNoZWNrZWQoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0a2V5KCdlbnRlcicsIGtleVNjb3BlLCAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZvY3VzZWRJdGVtKCkgJiYgIXRoaXMuZm9jdXNlZEl0ZW0oKS5zZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25DbGljayh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGtleSgnY3RybCt1cCwgY29tbWFuZCt1cCwgY3RybCtkb3duLCBjb21tYW5kK2Rvd24nLCBrZXlTY29wZSwgKCkgPT4gZmFsc2UpO1xuXG5cdFx0XHRrZXkoJ3VwLCBzaGlmdCt1cCwgZG93biwgc2hpZnQrZG93biwgaG9tZSwgZW5kLCBwYWdldXAsIHBhZ2Vkb3duLCBpbnNlcnQsIHNwYWNlJywga2V5U2NvcGUsIChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgaGFuZGxlciAmJiBoYW5kbGVyLnNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0bGV0IGV2ZW50S2V5ID0gMDtcblx0XHRcdFx0XHRzd2l0Y2ggKGhhbmRsZXIuc2hvcnRjdXQpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ3VwJzpcblx0XHRcdFx0XHRcdGNhc2UgJ3NoaWZ0K3VwJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuVXA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZG93bic6XG5cdFx0XHRcdFx0XHRjYXNlICdzaGlmdCtkb3duJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuRG93bjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdpbnNlcnQnOlxuXHRcdFx0XHRcdFx0XHRldmVudEtleSA9IEV2ZW50S2V5Q29kZS5JbnNlcnQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdFx0XHRldmVudEtleSA9IEV2ZW50S2V5Q29kZS5TcGFjZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdob21lJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuSG9tZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdlbmQnOlxuXHRcdFx0XHRcdFx0XHRldmVudEtleSA9IEV2ZW50S2V5Q29kZS5FbmQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAncGFnZXVwJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuUGFnZVVwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3BhZ2Vkb3duJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuUGFnZURvd247XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgwIDwgZXZlbnRLZXkpIHtcblx0XHRcdFx0XHRcdHRoaXMubmV3U2VsZWN0UG9zaXRpb24oZXZlbnRLZXksIGtleS5zaGlmdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRhdXRvU2VsZWN0KCkge1xuXHRcdHJldHVybiAhISh0aGlzLm9DYWxsYmFja3Mub25BdXRvU2VsZWN0IHx8IG5vb3BUcnVlKSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBcblx0ICovXG5cdGRvVXBVcE9yRG93bkRvd24odXApIHtcblx0XHQodGhpcy5vQ2FsbGJhY2tzLm9uVXBVcE9yRG93bkRvd24gfHwgbm9vcFRydWUpKCEhdXApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvSXRlbVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0SXRlbVVpZChpdGVtKSB7XG5cdFx0bGV0IHVpZCA9ICcnO1xuXG5cdFx0Y29uc3QgZ2V0SXRlbVVpZENhbGxiYWNrID0gdGhpcy5vQ2FsbGJhY2tzLm9uSXRlbUdldFVpZCB8fCBudWxsO1xuXHRcdGlmIChnZXRJdGVtVWlkQ2FsbGJhY2sgJiYgaXRlbSkge1xuXHRcdFx0dWlkID0gZ2V0SXRlbVVpZENhbGxiYWNrKGl0ZW0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB1aWQudG9TdHJpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaUV2ZW50S2V5Q29kZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTaGlmdEtleVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiRm9yY2VTZWxlY3QgPSBmYWxzZVxuXHQgKi9cblx0bmV3U2VsZWN0UG9zaXRpb24oaUV2ZW50S2V5Q29kZSwgYlNoaWZ0S2V5LCBiRm9yY2VTZWxlY3QpIHtcblx0XHRsZXQgaW5kZXggPSAwLFxuXHRcdFx0aXNOZXh0ID0gZmFsc2UsXG5cdFx0XHRpc1N0b3AgPSBmYWxzZSxcblx0XHRcdHJlc3VsdCA9IG51bGw7XG5cblx0XHRjb25zdCBwYWdlU3RlcCA9IDEwLFxuXHRcdFx0bGlzdCA9IHRoaXMubGlzdCgpLFxuXHRcdFx0bGlzdExlbiA9IGxpc3QgPyBsaXN0Lmxlbmd0aCA6IDAsXG5cdFx0XHRmb2N1c2VkID0gdGhpcy5mb2N1c2VkSXRlbSgpO1xuXG5cdFx0aWYgKDAgPCBsaXN0TGVuKSB7XG5cdFx0XHRpZiAoIWZvY3VzZWQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5TcGFjZSA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5Ib21lID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLlBhZ2VVcCA9PT0gaUV2ZW50S2V5Q29kZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBsaXN0WzBdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5FbmQgPT09IGlFdmVudEtleUNvZGUgfHxcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuUGFnZURvd24gPT09IGlFdmVudEtleUNvZGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGZvY3VzZWQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5TcGFjZSA9PT0gaUV2ZW50S2V5Q29kZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRfLmVhY2gobGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdGlmICghaXNTdG9wKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgRXZlbnRLZXlDb2RlLlVwOlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZvY3VzZWQgPT09IGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTdG9wID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGl0ZW07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIEV2ZW50S2V5Q29kZS5Eb3duOlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgRXZlbnRLZXlDb2RlLkluc2VydDpcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc05leHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gaXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTdG9wID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZm9jdXNlZCA9PT0gaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpc05leHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAoIXJlc3VsdCAmJiAoRXZlbnRLZXlDb2RlLkRvd24gPT09IGlFdmVudEtleUNvZGUgfHwgRXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5kb1VwVXBPckRvd25Eb3duKEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5Ib21lID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5FbmQgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRpZiAoRXZlbnRLZXlDb2RlLkhvbWUgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IGxpc3RbMF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuRW5kID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBsaXN0W2xpc3QubGVuZ3RoIC0gMV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5QYWdlRG93biA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdGZvciAoOyBpbmRleCA8IGxpc3RMZW47IGluZGV4KyspIHtcblx0XHRcdFx0XHRcdGlmIChmb2N1c2VkID09PSBsaXN0W2luZGV4XSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleCArPSBwYWdlU3RlcDtcblx0XHRcdFx0XHRcdFx0aW5kZXggPSBsaXN0TGVuIC0gMSA8IGluZGV4ID8gbGlzdExlbiAtIDEgOiBpbmRleDtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gbGlzdFtpbmRleF07XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuUGFnZVVwID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0Zm9yIChpbmRleCA9IGxpc3RMZW47IDAgPD0gaW5kZXg7IGluZGV4LS0pIHtcblx0XHRcdFx0XHRcdGlmIChmb2N1c2VkID09PSBsaXN0W2luZGV4XSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleCAtPSBwYWdlU3RlcDtcblx0XHRcdFx0XHRcdFx0aW5kZXggPSAwID4gaW5kZXggPyAwIDogaW5kZXg7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGxpc3RbaW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtKHJlc3VsdCk7XG5cblx0XHRcdGlmIChmb2N1c2VkKSB7XG5cdFx0XHRcdGlmIChiU2hpZnRLZXkpIHtcblx0XHRcdFx0XHRpZiAoRXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fCBFdmVudEtleUNvZGUuU3BhY2UgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKHRoaXMuYXV0b1NlbGVjdCgpIHx8ICEhYkZvcmNlU2VsZWN0KSAmJiAhdGhpcy5pc0xpc3RDaGVja2VkKCkgJiYgRXZlbnRLZXlDb2RlLlNwYWNlICE9PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKHJlc3VsdCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCk7XG5cdFx0fSBlbHNlIGlmIChmb2N1c2VkKSB7XG5cdFx0XHRpZiAoYlNoaWZ0S2V5ICYmIChFdmVudEtleUNvZGUuVXAgPT09IGlFdmVudEtleUNvZGUgfHwgRXZlbnRLZXlDb2RlLkRvd24gPT09IGlFdmVudEtleUNvZGUpKSB7XG5cdFx0XHRcdGZvY3VzZWQuY2hlY2tlZCghZm9jdXNlZC5jaGVja2VkKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuSW5zZXJ0ID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5TcGFjZSA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbShmb2N1c2VkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzY3JvbGxUb0ZvY3VzZWQoKSB7XG5cdFx0aWYgKCF0aGlzLm9Db250ZW50VmlzaWJsZSB8fCAhdGhpcy5vQ29udGVudFNjcm9sbGFibGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBvZmZzZXQgPSAyMCxcblx0XHRcdGxpc3QgPSB0aGlzLmxpc3QoKSxcblx0XHRcdCRmb2N1c2VkID0gJCh0aGlzLnNJdGVtRm9jdXNlZFNlbGVjdG9yLCB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSksXG5cdFx0XHRwb3MgPSAkZm9jdXNlZC5wb3NpdGlvbigpLFxuXHRcdFx0dmlzaWJsZUhlaWdodCA9IHRoaXMub0NvbnRlbnRWaXNpYmxlLmhlaWdodCgpLFxuXHRcdFx0Zm9jdXNlZEhlaWdodCA9ICRmb2N1c2VkLm91dGVySGVpZ2h0KCk7XG5cblx0XHRpZiAobGlzdCAmJiBsaXN0WzBdICYmIGxpc3RbMF0uZm9jdXNlZCgpKSB7XG5cdFx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoMCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHBvcyAmJiAoMCA+IHBvcy50b3AgfHwgcG9zLnRvcCArIGZvY3VzZWRIZWlnaHQgPiB2aXNpYmxlSGVpZ2h0KSkge1xuXHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKFxuXHRcdFx0XHQwID4gcG9zLnRvcFxuXHRcdFx0XHRcdD8gdGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKCkgKyBwb3MudG9wIC0gb2Zmc2V0XG5cdFx0XHRcdFx0OiB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoKSArIHBvcy50b3AgLSB2aXNpYmxlSGVpZ2h0ICsgZm9jdXNlZEhlaWdodCArIG9mZnNldFxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGZhc3QgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHNjcm9sbFRvVG9wKGZhc3QgPSBmYWxzZSkge1xuXHRcdGlmICghdGhpcy5vQ29udGVudFZpc2libGUgfHwgIXRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGZhc3QgfHwgNTAgPiB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoKSkge1xuXHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zdG9wKCkuYW5pbWF0ZSh7IHNjcm9sbFRvcDogMCB9LCAyMDApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZXZlbnRDbGlja0Z1bmN0aW9uKGl0ZW0sIGV2ZW50KSB7XG5cdFx0bGV0IGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IDAsXG5cdFx0XHRjaGFuZ2VSYW5nZSA9IGZhbHNlLFxuXHRcdFx0aXNJblJhbmdlID0gZmFsc2UsXG5cdFx0XHRsaXN0ID0gW10sXG5cdFx0XHRjaGVja2VkID0gZmFsc2UsXG5cdFx0XHRsaXN0SXRlbSA9IG51bGwsXG5cdFx0XHRsaW5lVWlkID0gJyc7XG5cblx0XHRjb25zdCB1aWQgPSB0aGlzLmdldEl0ZW1VaWQoaXRlbSk7XG5cdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRpZiAoJycgIT09IHVpZCAmJiAnJyAhPT0gdGhpcy5zTGFzdFVpZCAmJiB1aWQgIT09IHRoaXMuc0xhc3RVaWQpIHtcblx0XHRcdFx0bGlzdCA9IHRoaXMubGlzdCgpO1xuXHRcdFx0XHRjaGVja2VkID0gaXRlbS5jaGVja2VkKCk7XG5cblx0XHRcdFx0Zm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0XHRcdGxpc3RJdGVtID0gbGlzdFtpbmRleF07XG5cdFx0XHRcdFx0bGluZVVpZCA9IHRoaXMuZ2V0SXRlbVVpZChsaXN0SXRlbSk7XG5cblx0XHRcdFx0XHRjaGFuZ2VSYW5nZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChsaW5lVWlkID09PSB0aGlzLnNMYXN0VWlkIHx8IGxpbmVVaWQgPT09IHVpZCkge1xuXHRcdFx0XHRcdFx0Y2hhbmdlUmFuZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChjaGFuZ2VSYW5nZSkge1xuXHRcdFx0XHRcdFx0aXNJblJhbmdlID0gIWlzSW5SYW5nZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNJblJhbmdlIHx8IGNoYW5nZVJhbmdlKSB7XG5cdFx0XHRcdFx0XHRsaXN0SXRlbS5jaGVja2VkKGNoZWNrZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc0xhc3RVaWQgPSAnJyA9PT0gdWlkID8gJycgOiB1aWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGl0ZW1cblx0ICogQHBhcmFtIHtPYmplY3Q9fSBldmVudFxuXHQgKi9cblx0YWN0aW9uQ2xpY2soaXRlbSwgZXZlbnQgPSBudWxsKSB7XG5cdFx0aWYgKGl0ZW0pIHtcblx0XHRcdGxldCBjbGljayA9IHRydWU7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnNoaWZ0S2V5ICYmICEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuYWx0S2V5KSB7XG5cdFx0XHRcdFx0Y2xpY2sgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoJycgPT09IHRoaXMuc0xhc3RVaWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc0xhc3RVaWQgPSB0aGlzLmdldEl0ZW1VaWQoaXRlbSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXRlbS5jaGVja2VkKCFpdGVtLmNoZWNrZWQoKSk7XG5cdFx0XHRcdFx0dGhpcy5ldmVudENsaWNrRnVuY3Rpb24oaXRlbSwgZXZlbnQpO1xuXG5cdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbShpdGVtKTtcblx0XHRcdFx0fSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdFx0XHRcdGNsaWNrID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbShpdGVtKTtcblxuXHRcdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbSgpICYmIGl0ZW0gIT09IHRoaXMuc2VsZWN0ZWRJdGVtKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKCkuY2hlY2tlZCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpdGVtLmNoZWNrZWQoIWl0ZW0uY2hlY2tlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xpY2spIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RNZXNzYWdlSXRlbShpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5vQ2FsbGJhY2tzW2V2ZW50TmFtZV0gPSBjYWxsYmFjaztcblx0fVxuXG5cdHNlbGVjdE1lc3NhZ2VJdGVtKG1lc3NhZ2VJdGVtKSB7XG5cdFx0dGhpcy5mb2N1c2VkSXRlbShtZXNzYWdlSXRlbSk7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0obWVzc2FnZUl0ZW0pO1xuXHRcdHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU2VsZWN0b3IsIFNlbGVjdG9yIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgbG96YWQgZnJvbSAnbG96YWQnO1xuXG5pbXBvcnQgeyBNZXNzYWdlUHJpb3JpdHksIFNpZ25lZFZlcmlmeVN0YXR1cyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgREFUQV9JTUFHRV9MQVpZX1BMQUNFSE9MREVSX1BJQyB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuXG5pbXBvcnQge1xuXHRwSW50LFxuXHRpbkFycmF5LFxuXHRpc0FycmF5LFxuXHRpc1VuZCxcblx0dHJpbSxcblx0cHJldmlld01lc3NhZ2UsXG5cdHdpbmRvd1Jlc2l6ZSxcblx0ZnJpZW5kbHlTaXplLFxuXHRpc05vbkVtcHR5QXJyYXlcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IG1lc3NhZ2VWaWV3TGluaywgbWVzc2FnZURvd25sb2FkTGluayB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5cbmltcG9ydCB7IGVtYWlsQXJyYXlGcm9tSnNvbiwgZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIsIGVtYWlsQXJyYXlUb1N0cmluZywgcmVwbHlIZWxwZXIgfSBmcm9tICdIZWxwZXIvTWVzc2FnZSc7XG5cbmltcG9ydCB7IEF0dGFjaG1lbnRNb2RlbCwgc3RhdGljQ29tYmluZWRJY29uQ2xhc3MgfSBmcm9tICdNb2RlbC9BdHRhY2htZW50JztcbmltcG9ydCB7IEFic3RyYWN0TW9kZWwgfSBmcm9tICdLbm9pbi9BYnN0cmFjdE1vZGVsJztcblxuY2xhc3MgTWVzc2FnZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdNZXNzYWdlTW9kZWwnKTtcblxuXHRcdHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPSAnJztcblx0XHR0aGlzLnVpZCA9ICcnO1xuXHRcdHRoaXMuaGFzaCA9ICcnO1xuXHRcdHRoaXMucmVxdWVzdEhhc2ggPSAnJztcblx0XHR0aGlzLnN1YmplY3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1YmplY3RQcmVmaXggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1YmplY3RTdWZmaXggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNpemUgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLnByaW9yaXR5ID0ga28ub2JzZXJ2YWJsZShNZXNzYWdlUHJpb3JpdHkuTm9ybWFsKTtcblxuXHRcdHRoaXMucHJveHkgPSBmYWxzZTtcblxuXHRcdHRoaXMuZnJvbUVtYWlsU3RyaW5nID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudG9FbWFpbHNTdHJpbmcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvQ2xlYXJFbWFpbHNTdHJpbmcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2VuZGVyRW1haWxzU3RyaW5nID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zZW5kZXJDbGVhckVtYWlsc1N0cmluZyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5lbWFpbHMgPSBbXTtcblxuXHRcdHRoaXMuZnJvbSA9IFtdO1xuXHRcdHRoaXMudG8gPSBbXTtcblx0XHR0aGlzLmNjID0gW107XG5cdFx0dGhpcy5iY2MgPSBbXTtcblx0XHR0aGlzLnJlcGx5VG8gPSBbXTtcblx0XHR0aGlzLmRlbGl2ZXJlZFRvID0gW107XG5cdFx0dGhpcy51bnN1YnNyaWJlTGlua3MgPSBbXTtcblxuXHRcdHRoaXMubmV3Rm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlbGV0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRlbGV0ZWRNYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51bnNlZW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZsYWdnZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFuc3dlcmVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mb3J3YXJkZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmlzUmVhZFJlY2VpcHQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNoZWNrZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmhhc0F0dGFjaG1lbnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudEljb25DbGFzcyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRzdGF0aWNDb21iaW5lZEljb25DbGFzcyh0aGlzLmhhc0F0dGFjaG1lbnRzKCkgPyB0aGlzLmF0dGFjaG1lbnRzU3BlY0RhdGEoKSA6IFtdKVxuXHRcdCk7XG5cblx0XHR0aGlzLmJvZHkgPSBudWxsO1xuXG5cdFx0dGhpcy5pc0h0bWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmhhc0ltYWdlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5pc1BncFNpZ25lZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaXNQZ3BFbmNyeXB0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBncFNpZ25lZFZlcmlmeVN0YXR1cyA9IGtvLm9ic2VydmFibGUoU2lnbmVkVmVyaWZ5U3RhdHVzLk5vbmUpO1xuXHRcdHRoaXMucGdwU2lnbmVkVmVyaWZ5VXNlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5wcmlvcml0eSA9IGtvLm9ic2VydmFibGUoTWVzc2FnZVByaW9yaXR5Lk5vcm1hbCk7XG5cdFx0dGhpcy5yZWFkUmVjZWlwdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gW107XG5cdFx0dGhpcy5zTWVzc2FnZUlkID0gJyc7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0dGhpcy5oYXNVbnNlZW5TdWJNZXNzYWdlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5oYXNGbGFnZ2VkU3ViTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy50aHJlYWRzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMudGhyZWFkc0xlbiA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMudGhyZWFkcygpLmxlbmd0aCk7XG5cdFx0dGhpcy5pc0ltcG9ydGFudCA9IGtvLmNvbXB1dGVkKCgpID0+IE1lc3NhZ2VQcmlvcml0eS5IaWdoID09PSB0aGlzLnByaW9yaXR5KCkpO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhbdGhpcy5hdHRhY2htZW50SWNvbkNsYXNzLCB0aGlzLnRocmVhZHNMZW4sIHRoaXMuaXNJbXBvcnRhbnRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25NZXNzYWdlfSBvSnNvbk1lc3NhZ2Vcblx0ICogQHJldHVybnMgez9NZXNzYWdlTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IG5ldyBNZXNzYWdlTW9kZWwoKTtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5pbml0QnlKc29uKGpzb24pID8gb01lc3NhZ2VNb2RlbCA6IG51bGw7XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0gJyc7XG5cdFx0dGhpcy51aWQgPSAnJztcblx0XHR0aGlzLmhhc2ggPSAnJztcblx0XHR0aGlzLnJlcXVlc3RIYXNoID0gJyc7XG5cdFx0dGhpcy5zdWJqZWN0KCcnKTtcblx0XHR0aGlzLnN1YmplY3RQcmVmaXgoJycpO1xuXHRcdHRoaXMuc3ViamVjdFN1ZmZpeCgnJyk7XG5cdFx0dGhpcy5zaXplKDApO1xuXHRcdHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDKDApO1xuXHRcdHRoaXMucHJpb3JpdHkoTWVzc2FnZVByaW9yaXR5Lk5vcm1hbCk7XG5cblx0XHR0aGlzLnByb3h5ID0gZmFsc2U7XG5cblx0XHR0aGlzLmZyb21FbWFpbFN0cmluZygnJyk7XG5cdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZygnJyk7XG5cdFx0dGhpcy50b0VtYWlsc1N0cmluZygnJyk7XG5cdFx0dGhpcy50b0NsZWFyRW1haWxzU3RyaW5nKCcnKTtcblx0XHR0aGlzLnNlbmRlckVtYWlsc1N0cmluZygnJyk7XG5cdFx0dGhpcy5zZW5kZXJDbGVhckVtYWlsc1N0cmluZygnJyk7XG5cblx0XHR0aGlzLmVtYWlscyA9IFtdO1xuXG5cdFx0dGhpcy5mcm9tID0gW107XG5cdFx0dGhpcy50byA9IFtdO1xuXHRcdHRoaXMuY2MgPSBbXTtcblx0XHR0aGlzLmJjYyA9IFtdO1xuXHRcdHRoaXMucmVwbHlUbyA9IFtdO1xuXHRcdHRoaXMuZGVsaXZlcmVkVG8gPSBbXTtcblx0XHR0aGlzLnVuc3Vic3JpYmVMaW5rcyA9IFtdO1xuXG5cdFx0dGhpcy5uZXdGb3JBbmltYXRpb24oZmFsc2UpO1xuXG5cdFx0dGhpcy5kZWxldGVkKGZhbHNlKTtcblx0XHR0aGlzLmRlbGV0ZWRNYXJrKGZhbHNlKTtcblx0XHR0aGlzLnVuc2VlbihmYWxzZSk7XG5cdFx0dGhpcy5mbGFnZ2VkKGZhbHNlKTtcblx0XHR0aGlzLmFuc3dlcmVkKGZhbHNlKTtcblx0XHR0aGlzLmZvcndhcmRlZChmYWxzZSk7XG5cdFx0dGhpcy5pc1JlYWRSZWNlaXB0KGZhbHNlKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWQoZmFsc2UpO1xuXHRcdHRoaXMuY2hlY2tlZChmYWxzZSk7XG5cdFx0dGhpcy5oYXNBdHRhY2htZW50cyhmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKFtdKTtcblxuXHRcdHRoaXMuYm9keSA9IG51bGw7XG5cdFx0dGhpcy5pc0h0bWwoZmFsc2UpO1xuXHRcdHRoaXMuaGFzSW1hZ2VzKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzKFtdKTtcblxuXHRcdHRoaXMuaXNQZ3BTaWduZWQoZmFsc2UpO1xuXHRcdHRoaXMuaXNQZ3BFbmNyeXB0ZWQoZmFsc2UpO1xuXHRcdHRoaXMucGdwU2lnbmVkVmVyaWZ5U3RhdHVzKFNpZ25lZFZlcmlmeVN0YXR1cy5Ob25lKTtcblx0XHR0aGlzLnBncFNpZ25lZFZlcmlmeVVzZXIoJycpO1xuXG5cdFx0dGhpcy5wcmlvcml0eShNZXNzYWdlUHJpb3JpdHkuTm9ybWFsKTtcblx0XHR0aGlzLnJlYWRSZWNlaXB0KCcnKTtcblx0XHR0aGlzLmFEcmFmdEluZm8gPSBbXTtcblx0XHR0aGlzLnNNZXNzYWdlSWQgPSAnJztcblx0XHR0aGlzLnNJblJlcGx5VG8gPSAnJztcblx0XHR0aGlzLnNSZWZlcmVuY2VzID0gJyc7XG5cblx0XHR0aGlzLnRocmVhZHMoW10pO1xuXG5cdFx0dGhpcy5oYXNVbnNlZW5TdWJNZXNzYWdlKGZhbHNlKTtcblx0XHR0aGlzLmhhc0ZsYWdnZWRTdWJNZXNzYWdlKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdGdldEVtYWlscyhwcm9wZXJ0aWVzKSB7XG5cdFx0cmV0dXJuIF8uY29tcGFjdChcblx0XHRcdF8udW5pcShcblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5yZWR1Y2UocHJvcGVydGllcywgKGNhcnJ5LCBwcm9wZXJ0eSkgPT4gY2FycnkuY29uY2F0KHRoaXNbcHJvcGVydHldKSwgW10pLFxuXHRcdFx0XHRcdChvSXRlbSkgPT4gKG9JdGVtID8gb0l0ZW0uZW1haWwgOiAnJylcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0Z2V0UmVjaXBpZW50c0VtYWlscygpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbWFpbHMoWyd0bycsICdjYyddKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnJpZW5kbHlTaXplKCkge1xuXHRcdHJldHVybiBmcmllbmRseVNpemUodGhpcy5zaXplKCkpO1xuXHR9XG5cblx0Y29tcHV0ZVNlbmRlckVtYWlsKCkge1xuXHRcdGNvbnN0IHNlbnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCksXG5cdFx0XHRkcmFmdEZvbGRlciA9IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCk7XG5cblx0XHR0aGlzLnNlbmRlckVtYWlsc1N0cmluZyhcblx0XHRcdHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPT09IHNlbnRGb2xkZXIgfHwgdGhpcy5mb2xkZXJGdWxsTmFtZVJhdyA9PT0gZHJhZnRGb2xkZXJcblx0XHRcdFx0PyB0aGlzLnRvRW1haWxzU3RyaW5nKClcblx0XHRcdFx0OiB0aGlzLmZyb21FbWFpbFN0cmluZygpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VuZGVyQ2xlYXJFbWFpbHNTdHJpbmcoXG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID09PSBzZW50Rm9sZGVyIHx8IHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPT09IGRyYWZ0Rm9sZGVyXG5cdFx0XHRcdD8gdGhpcy50b0NsZWFyRW1haWxzU3RyaW5nKClcblx0XHRcdFx0OiB0aGlzLmZyb21DbGVhckVtYWlsU3RyaW5nKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25NZXNzYWdlfSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlLFxuXHRcdFx0cHJpb3JpdHkgPSBNZXNzYWdlUHJpb3JpdHkuTm9ybWFsO1xuXG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9NZXNzYWdlJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHRwcmlvcml0eSA9IHBJbnQoanNvbi5Qcmlvcml0eSk7XG5cdFx0XHR0aGlzLnByaW9yaXR5KFxuXHRcdFx0XHQtMSA8IGluQXJyYXkocHJpb3JpdHksIFtNZXNzYWdlUHJpb3JpdHkuSGlnaCwgTWVzc2FnZVByaW9yaXR5Lkxvd10pID8gcHJpb3JpdHkgOiBNZXNzYWdlUHJpb3JpdHkuTm9ybWFsXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0ganNvbi5Gb2xkZXI7XG5cdFx0XHR0aGlzLnVpZCA9IGpzb24uVWlkO1xuXHRcdFx0dGhpcy5oYXNoID0ganNvbi5IYXNoO1xuXHRcdFx0dGhpcy5yZXF1ZXN0SGFzaCA9IGpzb24uUmVxdWVzdEhhc2g7XG5cblx0XHRcdHRoaXMucHJveHkgPSAhIWpzb24uRXh0ZXJuYWxQcm94eTtcblxuXHRcdFx0dGhpcy5zaXplKHBJbnQoanNvbi5TaXplKSk7XG5cblx0XHRcdHRoaXMuZnJvbSA9IGVtYWlsQXJyYXlGcm9tSnNvbihqc29uLkZyb20pO1xuXHRcdFx0dGhpcy50byA9IGVtYWlsQXJyYXlGcm9tSnNvbihqc29uLlRvKTtcblx0XHRcdHRoaXMuY2MgPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5DYyk7XG5cdFx0XHR0aGlzLmJjYyA9IGVtYWlsQXJyYXlGcm9tSnNvbihqc29uLkJjYyk7XG5cdFx0XHR0aGlzLnJlcGx5VG8gPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5SZXBseVRvKTtcblx0XHRcdHRoaXMuZGVsaXZlcmVkVG8gPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5EZWxpdmVyZWRUbyk7XG5cdFx0XHR0aGlzLnVuc3Vic3JpYmVMaW5rcyA9IGlzTm9uRW1wdHlBcnJheShqc29uLlVuc3Vic3JpYmVMaW5rcykgPyBqc29uLlVuc3Vic3JpYmVMaW5rcyA6IFtdO1xuXG5cdFx0XHR0aGlzLnN1YmplY3QoanNvbi5TdWJqZWN0KTtcblx0XHRcdGlmIChpc0FycmF5KGpzb24uU3ViamVjdFBhcnRzKSkge1xuXHRcdFx0XHR0aGlzLnN1YmplY3RQcmVmaXgoanNvbi5TdWJqZWN0UGFydHNbMF0pO1xuXHRcdFx0XHR0aGlzLnN1YmplY3RTdWZmaXgoanNvbi5TdWJqZWN0UGFydHNbMV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zdWJqZWN0UHJlZml4KCcnKTtcblx0XHRcdFx0dGhpcy5zdWJqZWN0U3VmZml4KHRoaXMuc3ViamVjdCgpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kYXRlVGltZVN0YW1wSW5VVEMocEludChqc29uLkRhdGVUaW1lU3RhbXBJblVUQykpO1xuXHRcdFx0dGhpcy5oYXNBdHRhY2htZW50cyghIWpzb24uSGFzQXR0YWNobWVudHMpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKGlzQXJyYXkoanNvbi5BdHRhY2htZW50c1NwZWNEYXRhKSA/IGpzb24uQXR0YWNobWVudHNTcGVjRGF0YSA6IFtdKTtcblxuXHRcdFx0dGhpcy5mcm9tRW1haWxTdHJpbmcoZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuZnJvbSwgdHJ1ZSkpO1xuXHRcdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZyhlbWFpbEFycmF5VG9TdHJpbmdDbGVhcih0aGlzLmZyb20pKTtcblx0XHRcdHRoaXMudG9FbWFpbHNTdHJpbmcoZW1haWxBcnJheVRvU3RyaW5nKHRoaXMudG8sIHRydWUpKTtcblx0XHRcdHRoaXMudG9DbGVhckVtYWlsc1N0cmluZyhlbWFpbEFycmF5VG9TdHJpbmdDbGVhcih0aGlzLnRvKSk7XG5cblx0XHRcdHRoaXMudGhyZWFkcyhpc0FycmF5KGpzb24uVGhyZWFkcykgPyBqc29uLlRocmVhZHMgOiBbXSk7XG5cblx0XHRcdHRoaXMuaW5pdEZsYWdzQnlKc29uKGpzb24pO1xuXHRcdFx0dGhpcy5jb21wdXRlU2VuZGVyRW1haWwoKTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25NZXNzYWdlfSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdFVwZGF0ZUJ5TWVzc2FnZUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdHByaW9yaXR5ID0gTWVzc2FnZVByaW9yaXR5Lk5vcm1hbDtcblxuXHRcdGlmIChqc29uICYmICdPYmplY3QvTWVzc2FnZScgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0cHJpb3JpdHkgPSBwSW50KGpzb24uUHJpb3JpdHkpO1xuXHRcdFx0dGhpcy5wcmlvcml0eShcblx0XHRcdFx0LTEgPCBpbkFycmF5KHByaW9yaXR5LCBbTWVzc2FnZVByaW9yaXR5LkhpZ2gsIE1lc3NhZ2VQcmlvcml0eS5Mb3ddKSA/IHByaW9yaXR5IDogTWVzc2FnZVByaW9yaXR5Lk5vcm1hbFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hRHJhZnRJbmZvID0ganNvbi5EcmFmdEluZm87XG5cblx0XHRcdHRoaXMuc01lc3NhZ2VJZCA9IGpzb24uTWVzc2FnZUlkO1xuXHRcdFx0dGhpcy5zSW5SZXBseVRvID0ganNvbi5JblJlcGx5VG87XG5cdFx0XHR0aGlzLnNSZWZlcmVuY2VzID0ganNvbi5SZWZlcmVuY2VzO1xuXG5cdFx0XHR0aGlzLnByb3h5ID0gISFqc29uLkV4dGVybmFsUHJveHk7XG5cblx0XHRcdGlmIChQZ3BTdG9yZS5jYXBhT3BlblBHUCgpKSB7XG5cdFx0XHRcdHRoaXMuaXNQZ3BTaWduZWQoISFqc29uLlBncFNpZ25lZCk7XG5cdFx0XHRcdHRoaXMuaXNQZ3BFbmNyeXB0ZWQoISFqc29uLlBncEVuY3J5cHRlZCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaGFzQXR0YWNobWVudHMoISFqc29uLkhhc0F0dGFjaG1lbnRzKTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNTcGVjRGF0YShpc0FycmF5KGpzb24uQXR0YWNobWVudHNTcGVjRGF0YSkgPyBqc29uLkF0dGFjaG1lbnRzU3BlY0RhdGEgOiBbXSk7XG5cblx0XHRcdHRoaXMuZm91bmRlZENJRHMgPSBpc0FycmF5KGpzb24uRm91bmRlZENJRHMpID8ganNvbi5Gb3VuZGVkQ0lEcyA6IFtdO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50cyh0aGlzLmluaXRBdHRhY2htZW50c0Zyb21Kc29uKGpzb24uQXR0YWNobWVudHMpKTtcblxuXHRcdFx0dGhpcy5yZWFkUmVjZWlwdChqc29uLlJlYWRSZWNlaXB0IHx8ICcnKTtcblxuXHRcdFx0dGhpcy5jb21wdXRlU2VuZGVyRW1haWwoKTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7KEFqYXhKc29uQXR0YWNobWVudHxudWxsKX0gb0pzb25BdHRhY2htZW50c1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRpbml0QXR0YWNobWVudHNGcm9tSnNvbihqc29uKSB7XG5cdFx0bGV0IGluZGV4ID0gMCxcblx0XHRcdGxlbiA9IDAsXG5cdFx0XHRhdHRhY2htZW50ID0gbnVsbDtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmIChqc29uICYmICdDb2xsZWN0aW9uL0F0dGFjaG1lbnRDb2xsZWN0aW9uJyA9PT0ganNvblsnQE9iamVjdCddICYmIGlzTm9uRW1wdHlBcnJheShqc29uWydAQ29sbGVjdGlvbiddKSkge1xuXHRcdFx0Zm9yIChpbmRleCA9IDAsIGxlbiA9IGpzb25bJ0BDb2xsZWN0aW9uJ10ubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0XHRhdHRhY2htZW50ID0gQXR0YWNobWVudE1vZGVsLm5ld0luc3RhbmNlRnJvbUpzb24oanNvblsnQENvbGxlY3Rpb24nXVtpbmRleF0pO1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCcnICE9PSBhdHRhY2htZW50LmNpZFdpdGhPdXRUYWdzICYmXG5cdFx0XHRcdFx0XHQwIDwgdGhpcy5mb3VuZGVkQ0lEcy5sZW5ndGggJiZcblx0XHRcdFx0XHRcdDAgPD0gaW5BcnJheShhdHRhY2htZW50LmNpZFdpdGhPdXRUYWdzLCB0aGlzLmZvdW5kZWRDSURzKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5pc0xpbmtlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goYXR0YWNobWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzVW5zdWJzcmliZUxpbmtzKCkge1xuXHRcdHJldHVybiB0aGlzLnVuc3Vic3JpYmVMaW5rcyAmJiAwIDwgdGhpcy51bnN1YnNyaWJlTGlua3MubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRGaXJzdFVuc3Vic3JpYmVMaW5rKCkge1xuXHRcdHJldHVybiB0aGlzLnVuc3Vic3JpYmVMaW5rcyAmJiAwIDwgdGhpcy51bnN1YnNyaWJlTGlua3MubGVuZ3RoID8gdGhpcy51bnN1YnNyaWJlTGlua3NbMF0gfHwgJycgOiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uTWVzc2FnZX0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRGbGFnc0J5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvTWVzc2FnZScgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy51bnNlZW4oIWpzb24uSXNTZWVuKTtcblx0XHRcdHRoaXMuZmxhZ2dlZCghIWpzb24uSXNGbGFnZ2VkKTtcblx0XHRcdHRoaXMuYW5zd2VyZWQoISFqc29uLklzQW5zd2VyZWQpO1xuXHRcdFx0dGhpcy5mb3J3YXJkZWQoISFqc29uLklzRm9yd2FyZGVkKTtcblx0XHRcdHRoaXMuaXNSZWFkUmVjZWlwdCghIWpzb24uSXNSZWFkUmVjZWlwdCk7XG5cdFx0XHR0aGlzLmRlbGV0ZWRNYXJrKCEhanNvbi5Jc0RlbGV0ZWQpO1xuXG5cdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZyb21Ub0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSkge1xuXHRcdHJldHVybiBlbWFpbEFycmF5VG9TdHJpbmcodGhpcy5mcm9tLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZyb21Ea2ltRGF0YSgpIHtcblx0XHRsZXQgcmVzdWx0ID0gWydub25lJywgJyddO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkodGhpcy5mcm9tKSAmJiAxID09PSB0aGlzLmZyb20ubGVuZ3RoICYmIHRoaXMuZnJvbVswXSAmJiB0aGlzLmZyb21bMF0uZGtpbVN0YXR1cykge1xuXHRcdFx0cmVzdWx0ID0gW3RoaXMuZnJvbVswXS5ka2ltU3RhdHVzLCB0aGlzLmZyb21bMF0uZGtpbVZhbHVlIHx8ICcnXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1RvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGVtYWlsQXJyYXlUb1N0cmluZyh0aGlzLnRvLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGNjVG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuY2MsIGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZyaWVuZGx5Vmlld1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwV2l0aExpbmsgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0YmNjVG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuYmNjLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHJlcGx5VG9Ub0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSkge1xuXHRcdHJldHVybiBlbWFpbEFycmF5VG9TdHJpbmcodGhpcy5yZXBseVRvLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiBzdHJpbmdcblx0ICovXG5cdGxpbmVBc0NzcygpIHtcblx0XHRyZXR1cm4gY2xhc3NuYW1lcyh7XG5cdFx0XHQnZGVsZXRlZCc6IHRoaXMuZGVsZXRlZCgpLFxuXHRcdFx0J2RlbGV0ZWQtbWFyayc6IHRoaXMuZGVsZXRlZE1hcmsoKSxcblx0XHRcdCdzZWxlY3RlZCc6IHRoaXMuc2VsZWN0ZWQoKSxcblx0XHRcdCdjaGVja2VkJzogdGhpcy5jaGVja2VkKCksXG5cdFx0XHQnZmxhZ2dlZCc6IHRoaXMuZmxhZ2dlZCgpLFxuXHRcdFx0J3Vuc2Vlbic6IHRoaXMudW5zZWVuKCksXG5cdFx0XHQnYW5zd2VyZWQnOiB0aGlzLmFuc3dlcmVkKCksXG5cdFx0XHQnZm9yd2FyZGVkJzogdGhpcy5mb3J3YXJkZWQoKSxcblx0XHRcdCdmb2N1c2VkJzogdGhpcy5mb2N1c2VkKCksXG5cdFx0XHQnaW1wb3J0YW50JzogdGhpcy5pc0ltcG9ydGFudCgpLFxuXHRcdFx0J3dpdGhBdHRhY2htZW50cyc6IHRoaXMuaGFzQXR0YWNobWVudHMoKSxcblx0XHRcdCduZXcnOiB0aGlzLm5ld0ZvckFuaW1hdGlvbigpLFxuXHRcdFx0J2VtcHR5U3ViamVjdCc6ICcnID09PSB0aGlzLnN1YmplY3QoKSxcblx0XHRcdC8vICdoYXNDaGlsZHJlbk1lc3NhZ2UnOiAxIDwgdGhpcy50aHJlYWRzTGVuKCksXG5cdFx0XHQnaGFzVW5zZWVuU3ViTWVzc2FnZSc6IHRoaXMuaGFzVW5zZWVuU3ViTWVzc2FnZSgpLFxuXHRcdFx0J2hhc0ZsYWdnZWRTdWJNZXNzYWdlJzogdGhpcy5oYXNGbGFnZ2VkU3ViTWVzc2FnZSgpXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNWaXNpYmxlQXR0YWNobWVudHMoKSB7XG5cdFx0cmV0dXJuICEhXy5maW5kKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+ICFpdGVtLmlzTGlua2VkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2lkXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0ZmluZEF0dGFjaG1lbnRCeUNpZChjaWQpIHtcblx0XHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0XHRjb25zdCBhdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYXR0YWNobWVudHMpKSB7XG5cdFx0XHRjaWQgPSBjaWQucmVwbGFjZSgvXjwrLywgJycpLnJlcGxhY2UoLz4rJC8sICcnKTtcblx0XHRcdHJlc3VsdCA9IF8uZmluZChhdHRhY2htZW50cywgKGl0ZW0pID0+IGNpZCA9PT0gaXRlbS5jaWRXaXRoT3V0VGFncyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdCB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50TG9jYXRpb25cblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRmaW5kQXR0YWNobWVudEJ5Q29udGVudExvY2F0aW9uKGNvbnRlbnRMb2NhdGlvbikge1xuXHRcdGxldCByZXN1bHQgPSBudWxsO1xuXHRcdGNvbnN0IGF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50cygpO1xuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhdHRhY2htZW50cykpIHtcblx0XHRcdHJlc3VsdCA9IF8uZmluZChhdHRhY2htZW50cywgKGl0ZW0pID0+IGNvbnRlbnRMb2NhdGlvbiA9PT0gaXRlbS5jb250ZW50TG9jYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bWVzc2FnZUlkKCkge1xuXHRcdHJldHVybiB0aGlzLnNNZXNzYWdlSWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGluUmVwbHlUbygpIHtcblx0XHRyZXR1cm4gdGhpcy5zSW5SZXBseVRvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRyZWZlcmVuY2VzKCkge1xuXHRcdHJldHVybiB0aGlzLnNSZWZlcmVuY2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmcm9tQXNTaW5nbGVFbWFpbCgpIHtcblx0XHRyZXR1cm4gaXNBcnJheSh0aGlzLmZyb20pICYmIHRoaXMuZnJvbVswXSA/IHRoaXMuZnJvbVswXS5lbWFpbCA6ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR2aWV3TGluaygpIHtcblx0XHRyZXR1cm4gbWVzc2FnZVZpZXdMaW5rKHRoaXMucmVxdWVzdEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRkb3dubG9hZExpbmsoKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VEb3dubG9hZExpbmsodGhpcy5yZXF1ZXN0SGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV4Y2x1ZGVFbWFpbHNcblx0ICogQHBhcmFtIHtib29sZWFuPX0gbGFzdCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdHJlcGx5RW1haWxzKGV4Y2x1ZGVFbWFpbHMsIGxhc3QgPSBmYWxzZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdLFxuXHRcdFx0dW5pYyA9IGlzVW5kKGV4Y2x1ZGVFbWFpbHMpID8ge30gOiBleGNsdWRlRW1haWxzO1xuXG5cdFx0cmVwbHlIZWxwZXIodGhpcy5yZXBseVRvLCB1bmljLCByZXN1bHQpO1xuXHRcdGlmICgwID09PSByZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRyZXBseUhlbHBlcih0aGlzLmZyb20sIHVuaWMsIHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPT09IHJlc3VsdC5sZW5ndGggJiYgIWxhc3QpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlcGx5RW1haWxzKHt9LCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBleGNsdWRlRW1haWxzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxhc3QgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5Pn1cblx0ICovXG5cdHJlcGx5QWxsRW1haWxzKGV4Y2x1ZGVFbWFpbHMsIGxhc3QgPSBmYWxzZSkge1xuXHRcdGxldCBkYXRhID0gW107XG5cdFx0Y29uc3QgdG9SZXN1bHQgPSBbXSxcblx0XHRcdGNjUmVzdWx0ID0gW10sXG5cdFx0XHR1bmljID0gaXNVbmQoZXhjbHVkZUVtYWlscykgPyB7fSA6IGV4Y2x1ZGVFbWFpbHM7XG5cblx0XHRyZXBseUhlbHBlcih0aGlzLnJlcGx5VG8sIHVuaWMsIHRvUmVzdWx0KTtcblx0XHRpZiAoMCA9PT0gdG9SZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRyZXBseUhlbHBlcih0aGlzLmZyb20sIHVuaWMsIHRvUmVzdWx0KTtcblx0XHR9XG5cblx0XHRyZXBseUhlbHBlcih0aGlzLnRvLCB1bmljLCB0b1Jlc3VsdCk7XG5cdFx0cmVwbHlIZWxwZXIodGhpcy5jYywgdW5pYywgY2NSZXN1bHQpO1xuXG5cdFx0aWYgKDAgPT09IHRvUmVzdWx0Lmxlbmd0aCAmJiAhbGFzdCkge1xuXHRcdFx0ZGF0YSA9IHRoaXMucmVwbHlBbGxFbWFpbHMoe30sIHRydWUpO1xuXHRcdFx0cmV0dXJuIFtkYXRhWzBdLCBjY1Jlc3VsdF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFt0b1Jlc3VsdCwgY2NSZXN1bHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0ZXh0Qm9keVRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmJvZHkgPyB0aGlzLmJvZHkuaHRtbCgpIDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGF0dGFjaG1lbnRzVG9TdHJpbmdMaW5lKCkge1xuXHRcdGNvbnN0IGF0dGFjaExpbmVzID0gXy5tYXAodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbS5maWxlTmFtZSArICcgKCcgKyBpdGVtLmZyaWVuZGx5U2l6ZSArICcpJyk7XG5cdFx0cmV0dXJuIGF0dGFjaExpbmVzICYmIDAgPCBhdHRhY2hMaW5lcy5sZW5ndGggPyBhdHRhY2hMaW5lcy5qb2luKCcsICcpIDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gcHJpbnQgPSBmYWxzZVxuXHQgKi9cblx0dmlld1BvcHVwTWVzc2FnZShwcmludCA9IGZhbHNlKSB7XG5cdFx0dGhpcy5zaG93TGF6eUV4dGVybmFsSW1hZ2VzSW5Cb2R5KCk7XG5cblx0XHRjb25zdCB0aW1lU3RhbXBJblVUQyA9IHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDKCkgfHwgMCxcblx0XHRcdGNjTGluZSA9IHRoaXMuY2NUb0xpbmUoZmFsc2UpLFxuXHRcdFx0bSA9IDAgPCB0aW1lU3RhbXBJblVUQyA/IG1vbWVudC51bml4KHRpbWVTdGFtcEluVVRDKSA6IG51bGw7XG5cblx0XHRwcmV2aWV3TWVzc2FnZShcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IHRoaXMuc3ViamVjdCgpLFxuXHRcdFx0XHRzdWJqZWN0OiB0aGlzLnN1YmplY3QoKSxcblx0XHRcdFx0ZGF0ZTogbSA/IG0uZm9ybWF0KCdMTEwnKSA6ICcnLFxuXHRcdFx0XHRmcm9tQ3JlZHM6IHRoaXMuZnJvbVRvTGluZShmYWxzZSksXG5cdFx0XHRcdHRvTGFiZWw6IGkxOG4oJ01FU1NBR0UvTEFCRUxfVE8nKSxcblx0XHRcdFx0dG9DcmVkczogdGhpcy50b1RvTGluZShmYWxzZSksXG5cdFx0XHRcdGNjQ2xhc3M6IGNjTGluZSA/ICcnIDogJ3JsLXByZXZpZXctaGlkZScsXG5cdFx0XHRcdGNjTGFiZWw6IGkxOG4oJ01FU1NBR0UvTEFCRUxfQ0MnKSxcblx0XHRcdFx0Y2NDcmVkczogY2NMaW5lXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5ib2R5LFxuXHRcdFx0dGhpcy5pc0h0bWwoKSxcblx0XHRcdHByaW50XG5cdFx0KTtcblx0fVxuXG5cdHByaW50TWVzc2FnZSgpIHtcblx0XHR0aGlzLnZpZXdQb3B1cE1lc3NhZ2UodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdlbmVyYXRlVWlkKCkge1xuXHRcdHJldHVybiB0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ICsgJy8nICsgdGhpcy51aWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IG1lc3NhZ2Vcblx0ICogQHJldHVybnMge01lc3NhZ2VNb2RlbH1cblx0ICovXG5cdHBvcHVsYXRlQnlNZXNzYWdlTGlzdEl0ZW0obWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0gbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdztcblx0XHRcdHRoaXMudWlkID0gbWVzc2FnZS51aWQ7XG5cdFx0XHR0aGlzLmhhc2ggPSBtZXNzYWdlLmhhc2g7XG5cdFx0XHR0aGlzLnJlcXVlc3RIYXNoID0gbWVzc2FnZS5yZXF1ZXN0SGFzaDtcblx0XHRcdHRoaXMuc3ViamVjdChtZXNzYWdlLnN1YmplY3QoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJqZWN0UHJlZml4KHRoaXMuc3ViamVjdFByZWZpeCgpKTtcblx0XHR0aGlzLnN1YmplY3RTdWZmaXgodGhpcy5zdWJqZWN0U3VmZml4KCkpO1xuXG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdHRoaXMuc2l6ZShtZXNzYWdlLnNpemUoKSk7XG5cdFx0XHR0aGlzLmRhdGVUaW1lU3RhbXBJblVUQyhtZXNzYWdlLmRhdGVUaW1lU3RhbXBJblVUQygpKTtcblx0XHRcdHRoaXMucHJpb3JpdHkobWVzc2FnZS5wcmlvcml0eSgpKTtcblxuXHRcdFx0dGhpcy5wcm94eSA9IG1lc3NhZ2UucHJveHk7XG5cblx0XHRcdHRoaXMuZnJvbUVtYWlsU3RyaW5nKG1lc3NhZ2UuZnJvbUVtYWlsU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZyhtZXNzYWdlLmZyb21DbGVhckVtYWlsU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy50b0VtYWlsc1N0cmluZyhtZXNzYWdlLnRvRW1haWxzU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy50b0NsZWFyRW1haWxzU3RyaW5nKG1lc3NhZ2UudG9DbGVhckVtYWlsc1N0cmluZygpKTtcblxuXHRcdFx0dGhpcy5lbWFpbHMgPSBtZXNzYWdlLmVtYWlscztcblxuXHRcdFx0dGhpcy5mcm9tID0gbWVzc2FnZS5mcm9tO1xuXHRcdFx0dGhpcy50byA9IG1lc3NhZ2UudG87XG5cdFx0XHR0aGlzLmNjID0gbWVzc2FnZS5jYztcblx0XHRcdHRoaXMuYmNjID0gbWVzc2FnZS5iY2M7XG5cdFx0XHR0aGlzLnJlcGx5VG8gPSBtZXNzYWdlLnJlcGx5VG87XG5cdFx0XHR0aGlzLmRlbGl2ZXJlZFRvID0gbWVzc2FnZS5kZWxpdmVyZWRUbztcblx0XHRcdHRoaXMudW5zdWJzcmliZUxpbmtzID0gbWVzc2FnZS51bnN1YnNyaWJlTGlua3M7XG5cblx0XHRcdHRoaXMudW5zZWVuKG1lc3NhZ2UudW5zZWVuKCkpO1xuXHRcdFx0dGhpcy5mbGFnZ2VkKG1lc3NhZ2UuZmxhZ2dlZCgpKTtcblx0XHRcdHRoaXMuYW5zd2VyZWQobWVzc2FnZS5hbnN3ZXJlZCgpKTtcblx0XHRcdHRoaXMuZm9yd2FyZGVkKG1lc3NhZ2UuZm9yd2FyZGVkKCkpO1xuXHRcdFx0dGhpcy5pc1JlYWRSZWNlaXB0KG1lc3NhZ2UuaXNSZWFkUmVjZWlwdCgpKTtcblx0XHRcdHRoaXMuZGVsZXRlZE1hcmsobWVzc2FnZS5kZWxldGVkTWFyaygpKTtcblxuXHRcdFx0dGhpcy5wcmlvcml0eShtZXNzYWdlLnByaW9yaXR5KCkpO1xuXG5cdFx0XHR0aGlzLnNlbGVjdGVkKG1lc3NhZ2Uuc2VsZWN0ZWQoKSk7XG5cdFx0XHR0aGlzLmNoZWNrZWQobWVzc2FnZS5jaGVja2VkKCkpO1xuXHRcdFx0dGhpcy5oYXNBdHRhY2htZW50cyhtZXNzYWdlLmhhc0F0dGFjaG1lbnRzKCkpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKG1lc3NhZ2UuYXR0YWNobWVudHNTcGVjRGF0YSgpKTtcblx0XHR9XG5cblx0XHR0aGlzLmJvZHkgPSBudWxsO1xuXG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gW107XG5cdFx0dGhpcy5zTWVzc2FnZUlkID0gJyc7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdHRoaXMudGhyZWFkcyhtZXNzYWdlLnRocmVhZHMoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb21wdXRlU2VuZGVyRW1haWwoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2hvd0xhenlFeHRlcm5hbEltYWdlc0luQm9keSgpIHtcblx0XHRpZiAodGhpcy5ib2R5KSB7XG5cdFx0XHQkKCcubGF6eS5sYXp5LWluaXRlZFtkYXRhLW9yaWdpbmFsXScsIHRoaXMuYm9keSkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdC5hdHRyKCdzcmMnLCAkKHRoaXMpLmF0dHIoJ2RhdGEtb3JpZ2luYWwnKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1vcmlnaW5hbCcpXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ2RhdGEtbG9hZGVkJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRsb3phZCgpIHtcblx0XHRsb3phZCgnaW1nLmxhenk6bm90KC5sYXp5LWluaXRlZCknLCB7XG5cdFx0XHR0aHJlc2hvbGQ6IDAuNCxcblx0XHRcdGxvYWQ6IChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdsYXp5JywgZWxlbWVudC5kYXRhc2V0Lm9yaWdpbmFsKTtcblx0XHRcdFx0ZWxlbWVudC5zcmMgPSBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDO1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdsYXp5LWluaXRlZCcpXG5cdFx0XHRcdFx0LmF0dHIoJ3NyYycsIGVsZW1lbnQuZGF0YXNldC5vcmlnaW5hbClcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1sb2FkZWQnKVxuXHRcdFx0XHRcdC5yZW1vdmVBdHRyKCdkYXRhLW9yaWdpbmFsJylcblx0XHRcdFx0XHQuY3NzKHsgb3BhY2l0eTogMC4zIH0pXG5cdFx0XHRcdFx0LmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIDUwMCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZSgpO1xuXHR9XG5cblx0c2hvd0V4dGVybmFsSW1hZ2VzKGxhenkgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmJvZHkgJiYgdGhpcy5ib2R5LmRhdGEoJ3JsLWhhcy1pbWFnZXMnKSkge1xuXHRcdFx0dGhpcy5oYXNJbWFnZXMoZmFsc2UpO1xuXHRcdFx0dGhpcy5ib2R5LmRhdGEoJ3JsLWhhcy1pbWFnZXMnLCBmYWxzZSk7XG5cblx0XHRcdGxldCBhdHRyID0gdGhpcy5wcm94eSA/ICdkYXRhLXgtYWRkaXRpb25hbC1zcmMnIDogJ2RhdGEteC1zcmMnO1xuXHRcdFx0JCgnWycgKyBhdHRyICsgJ10nLCB0aGlzLmJvZHkpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGxhenkgJiYgJHRoaXMuaXMoJ2ltZycpKSB7XG5cdFx0XHRcdFx0JHRoaXNcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygnbGF6eScpXG5cdFx0XHRcdFx0XHQuYXR0cignZGF0YS1vcmlnaW5hbCcsICR0aGlzLmF0dHIoYXR0cikpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1sb2FkZWQnKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkdGhpcy5hdHRyKCdzcmMnLCAkdGhpcy5hdHRyKGF0dHIpKS5yZW1vdmVBdHRyKCdkYXRhLWxvYWRlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YXR0ciA9IHRoaXMucHJveHkgPyAnZGF0YS14LWFkZGl0aW9uYWwtc3R5bGUtdXJsJyA6ICdkYXRhLXgtc3R5bGUtdXJsJztcblx0XHRcdCQoJ1snICsgYXR0ciArICddJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGxldCBzdHlsZSA9IHRyaW0oJHRoaXMuYXR0cignc3R5bGUnKSk7XG5cdFx0XHRcdHN0eWxlID0gJycgPT09IHN0eWxlID8gJycgOiAnOycgPT09IHN0eWxlLnN1YnN0cigtMSkgPyBzdHlsZSArICcgJyA6IHN0eWxlICsgJzsgJztcblx0XHRcdFx0JHRoaXMuYXR0cignc3R5bGUnLCBzdHlsZSArICR0aGlzLmF0dHIoYXR0cikpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChsYXp5KSB7XG5cdFx0XHRcdHRoaXMubG96YWQoKTtcblx0XHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHRcdH1cblxuXHRcdFx0d2luZG93UmVzaXplKDUwMCk7XG5cdFx0fVxuXHR9XG5cblx0c2hvd0ludGVybmFsSW1hZ2VzKGxhenkgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmJvZHkgJiYgIXRoaXMuYm9keS5kYXRhKCdybC1pbml0LWludGVybmFsLWltYWdlcycpKSB7XG5cdFx0XHR0aGlzLmJvZHkuZGF0YSgncmwtaW5pdC1pbnRlcm5hbC1pbWFnZXMnLCB0cnVlKTtcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRcdCQoJ1tkYXRhLXgtc3JjLWNpZF0nLCB0aGlzLmJvZHkpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRhdHRhY2htZW50ID0gc2VsZi5maW5kQXR0YWNobWVudEJ5Q2lkKCR0aGlzLmF0dHIoJ2RhdGEteC1zcmMtY2lkJykpO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQuZG93bmxvYWQpIHtcblx0XHRcdFx0XHRpZiAobGF6eSAmJiAkdGhpcy5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRcdCR0aGlzLmFkZENsYXNzKCdsYXp5JykuYXR0cignZGF0YS1vcmlnaW5hbCcsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCR0aGlzLmF0dHIoJ3NyYycsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0JCgnW2RhdGEteC1zcmMtbG9jYXRpb25dJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGxldCBhdHRhY2htZW50ID0gc2VsZi5maW5kQXR0YWNobWVudEJ5Q29udGVudExvY2F0aW9uKCR0aGlzLmF0dHIoJ2RhdGEteC1zcmMtbG9jYXRpb24nKSk7XG5cdFx0XHRcdGlmICghYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBzZWxmLmZpbmRBdHRhY2htZW50QnlDaWQoJHRoaXMuYXR0cignZGF0YS14LXNyYy1sb2NhdGlvbicpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQuZG93bmxvYWQpIHtcblx0XHRcdFx0XHRpZiAobGF6eSAmJiAkdGhpcy5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRcdCR0aGlzLmFkZENsYXNzKCdsYXp5JykuYXR0cignZGF0YS1vcmlnaW5hbCcsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCR0aGlzLmF0dHIoJ3NyYycsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0JCgnW2RhdGEteC1zdHlsZS1jaWRdJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsZXQgc3R5bGUgPSAnJyxcblx0XHRcdFx0XHRuYW1lID0gJyc7XG5cblx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBzZWxmLmZpbmRBdHRhY2htZW50QnlDaWQoJHRoaXMuYXR0cignZGF0YS14LXN0eWxlLWNpZCcpKTtcblxuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmxpbmtQcmV2aWV3KSB7XG5cdFx0XHRcdFx0bmFtZSA9ICR0aGlzLmF0dHIoJ2RhdGEteC1zdHlsZS1jaWQtbmFtZScpO1xuXHRcdFx0XHRcdGlmICgnJyAhPT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0c3R5bGUgPSB0cmltKCR0aGlzLmF0dHIoJ3N0eWxlJykpO1xuXHRcdFx0XHRcdFx0c3R5bGUgPSAnJyA9PT0gc3R5bGUgPyAnJyA6ICc7JyA9PT0gc3R5bGUuc3Vic3RyKC0xKSA/IHN0eWxlICsgJyAnIDogc3R5bGUgKyAnOyAnO1xuXHRcdFx0XHRcdFx0JHRoaXMuYXR0cignc3R5bGUnLCBzdHlsZSArIG5hbWUgKyBcIjogdXJsKCdcIiArIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSArIFwiJylcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGxhenkpIHtcblx0XHRcdFx0Ly8gJCgnLlJMLU1haWxNZXNzYWdlVmlldyAubWVzc2FnZVZpZXcgLm1lc3NhZ2VJdGVtIC5jb250ZW50JylbMF1cblx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmxvemFkKCksIDMwMCk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvd1Jlc2l6ZSg1MDApO1xuXHRcdH1cblx0fVxuXG5cdHN0b3JlRGF0YUluRG9tKCkge1xuXHRcdGlmICh0aGlzLmJvZHkpIHtcblx0XHRcdHRoaXMuYm9keS5kYXRhKCdybC1pcy1odG1sJywgISF0aGlzLmlzSHRtbCgpKTtcblx0XHRcdHRoaXMuYm9keS5kYXRhKCdybC1oYXMtaW1hZ2VzJywgISF0aGlzLmhhc0ltYWdlcygpKTtcblx0XHR9XG5cdH1cblxuXHRmZXRjaERhdGFGcm9tRG9tKCkge1xuXHRcdGlmICh0aGlzLmJvZHkpIHtcblx0XHRcdHRoaXMuaXNIdG1sKCEhdGhpcy5ib2R5LmRhdGEoJ3JsLWlzLWh0bWwnKSk7XG5cdFx0XHR0aGlzLmhhc0ltYWdlcyghIXRoaXMuYm9keS5kYXRhKCdybC1oYXMtaW1hZ2VzJykpO1xuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VQbGFuZVRleHRCb2R5KHBsYWluKSB7XG5cdFx0aWYgKHRoaXMuYm9keSkge1xuXHRcdFx0dGhpcy5ib2R5Lmh0bWwocGxhaW4pLmFkZENsYXNzKCdiLXRleHQtcGFydCBwbGFpbicpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZmxhZ0hhc2goKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHRoaXMuZGVsZXRlZCgpLFxuXHRcdFx0dGhpcy5kZWxldGVkTWFyaygpLFxuXHRcdFx0dGhpcy51bnNlZW4oKSxcblx0XHRcdHRoaXMuZmxhZ2dlZCgpLFxuXHRcdFx0dGhpcy5hbnN3ZXJlZCgpLFxuXHRcdFx0dGhpcy5mb3J3YXJkZWQoKSxcblx0XHRcdHRoaXMuaXNSZWFkUmVjZWlwdCgpXG5cdFx0XS5qb2luKCcsJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTWVzc2FnZU1vZGVsLCBNZXNzYWdlTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiLyohXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4yLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1jb29raWUvanMtY29va2llXG4gKlxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdHZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZmFjdG9yeSk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAoIXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlcikge1xuXHRcdHZhciBPbGRDb29raWVzID0gd2luZG93LkNvb2tpZXM7XG5cdFx0dmFyIGFwaSA9IHdpbmRvdy5Db29raWVzID0gZmFjdG9yeSgpO1xuXHRcdGFwaS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0d2luZG93LkNvb2tpZXMgPSBPbGRDb29raWVzO1xuXHRcdFx0cmV0dXJuIGFwaTtcblx0XHR9O1xuXHR9XG59KGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gZXh0ZW5kICgpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWNvZGUgKHMpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlcikge1xuXHRcdGZ1bmN0aW9uIGFwaSgpIHt9XG5cblx0XHRmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YXR0cmlidXRlcyA9IGV4dGVuZCh7XG5cdFx0XHRcdHBhdGg6ICcvJ1xuXHRcdFx0fSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkgKiAxICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UncmUgdXNpbmcgXCJleHBpcmVzXCIgYmVjYXVzZSBcIm1heC1hZ2VcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHRcdFx0XHRpZiAoL15bXFx7XFxbXS8udGVzdChyZXN1bHQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdHZhbHVlID0gY29udmVydGVyLndyaXRlID9cblx0XHRcdFx0Y29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDpcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cblx0XHRcdGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSlcblx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudClcblx0XHRcdFx0LnJlcGxhY2UoL1tcXChcXCldL2csIGVzY2FwZSk7XG5cblx0XHRcdHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcblx0XHRcdGZvciAodmFyIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0XHRpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb25zaWRlcnMgUkZDIDYyNjUgc2VjdGlvbiA1LjI6XG5cdFx0XHRcdC8vIC4uLlxuXHRcdFx0XHQvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG5cdFx0XHRcdC8vICAgICBjaGFyYWN0ZXI6XG5cdFx0XHRcdC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG5cdFx0XHRcdC8vIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyB2YWx1ZSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGphciA9IHt9O1xuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxuXHRcdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG5cdFx0XHR2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xuXHRcdFx0dmFyIGkgPSAwO1xuXG5cdFx0XHRmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0XHR2YXIgY29va2llID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG5cdFx0XHRcdGlmICghanNvbiAmJiBjb29raWUuY2hhckF0KDApID09PSAnXCInKSB7XG5cdFx0XHRcdFx0Y29va2llID0gY29va2llLnNsaWNlKDEsIC0xKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIG5hbWUgPSBkZWNvZGUocGFydHNbMF0pO1xuXHRcdFx0XHRcdGNvb2tpZSA9IChjb252ZXJ0ZXIucmVhZCB8fCBjb252ZXJ0ZXIpKGNvb2tpZSwgbmFtZSkgfHxcblx0XHRcdFx0XHRcdGRlY29kZShjb29raWUpO1xuXG5cdFx0XHRcdFx0aWYgKGpzb24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0amFyW25hbWVdID0gY29va2llO1xuXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7XG5cdFx0fVxuXG5cdFx0YXBpLnNldCA9IHNldDtcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIGZhbHNlIC8qIHJlYWQgYXMgcmF3ICovKTtcblx0XHR9O1xuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTtcblx0XHR9O1xuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRzZXQoa2V5LCAnJywgZXh0ZW5kKGF0dHJpYnV0ZXMsIHtcblx0XHRcdFx0ZXhwaXJlczogLTFcblx0XHRcdH0pKTtcblx0XHR9O1xuXG5cdFx0YXBpLmRlZmF1bHRzID0ge307XG5cblx0XHRhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9XG5cblx0cmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pO1xufSkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZWh0bWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgc2xvcHB5QXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2xvcHB5LWFycmF5LW1ldGhvZCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBzbG9wcHlBcnJheU1ldGhvZCgncmVkdWNlJykgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyB2YWx1ZXMgOiBvd247XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGhpZGUoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcuY2FsbChXZWFrTWFwKSk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNoYXJlZCgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBoaWRlKGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBoaWRlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGhpZGUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSAhPT0gJ1tvYmplY3Qgel0nID8gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn0gOiB0ZXN0LnRvU3RyaW5nO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG4iLCJ2YXIgY29uY2F0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IGNvbmNhdCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcbnZhciBNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQgPSAnTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJztcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luZGV4LW9mJyk7XG4iLCJ2YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gaW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuaW5kZXhPZjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gW10uaW5kZXhPZjtcblxudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUluZGV4T2YgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG52YXIgU0xPUFBZX01FVEhPRCA9IHNsb3BweUFycmF5TWV0aG9kKCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCBTTE9QUFlfTUVUSE9EIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbmQnKTtcbiIsInZhciBmaW5kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maW5kJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbmQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maW5kKSA/IGZpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmluZDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9sYXN0LWluZGV4LW9mJyk7XG4iLCJ2YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2xhc3QtaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubGFzdEluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5sYXN0SW5kZXhPZikgPyBsYXN0SW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5sYXN0SW5kZXhPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGxhc3RJbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubGFzdGluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGxhc3RJbmRleE9mICE9PSBbXS5sYXN0SW5kZXhPZiB9LCB7XG4gIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBuYXRpdmVMYXN0SW5kZXhPZiA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ2xhc3RJbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2ZgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IChORUdBVElWRV9aRVJPIHx8IFNMT1BQWV9NRVRIT0QpID8gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAvLyBjb252ZXJ0IC0wIHRvICswXG4gIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gbmF0aXZlTGFzdEluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IG1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTyAmJiBPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gIHJldHVybiAtMTtcbn0gOiBuYXRpdmVMYXN0SW5kZXhPZjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9mdW5jdGlvbi92aXJ0dWFsL2JpbmQnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuYmluZDtcbiAgcmV0dXJuIGl0ID09PSBGdW5jdGlvblByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gYmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmZ1bmN0aW9uLmJpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnRnVuY3Rpb24nKS5iaW5kO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghKGFyZ3NMZW5ndGggaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIGxpc3QgPSBbXSwgaSA9IDA7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSBGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgbGlzdC5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogZm4uYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS90cmltJyk7XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGl0IGluc3RhbmNlb2YgU3RyaW5nICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gdHJpbSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ1N0cmluZycpLnRyaW07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKSB8fCBub25bTUVUSE9EX05BTUVdKCkgIT0gbm9uIHx8IHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG4iLCJ2YXIgbWFwID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1hcCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKSB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZS5mXG59KTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7ICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KVxufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9IHNsb3BweUFycmF5TWV0aG9kKCdmb3JFYWNoJykgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgXCI8aHRtbD5cXG48aGVhZD5cXG5cXHQ8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwidXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlXFxcIiBjb250ZW50PVxcXCJ5ZXNcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwicm9ib3RzXFxcIiBjb250ZW50PVxcXCJub2luZGV4LCBub2ZvbGxvdywgbm9vZHBcXFwiIC8+XFxuXFx0PHRpdGxlPnt7dGl0bGV9fTwvdGl0bGU+XFxuXFx0PHN0eWxlPlxcbmh0bWwsIGJvZHkge1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFx0Zm9udC1zaXplOiAxM3B4O1xcblxcdGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuYSB7Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfVxcbmE6dmlzaXRlZCB7Y29sb3I6ICM2MDl9XFxuYTphY3RpdmUge2NvbG9yOiByZWR9XFxuYmxvY2txdW90ZSB7Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwcHggMTBweH1cXG5cXG5wcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmJvZHktd3JwIHtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4uYm9keS13cnAuaHRtbCBwcmUge1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4ge1xcblxcdHBhZGRpbmc6IDE1cHg7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gcHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsdWU7XFxuXFx0Y29sb3I6IGJsdWU7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JlZW47XFxuXFx0Y29sb3I6IGdyZWVuO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgcmVkO1xcblxcdGNvbG9yOiByZWQ7XFxufVxcbi5ybC1wcmV2aWV3LXN1YmplY3Qge1xcblxcdGZvbnQtc2l6ZTogMTZweDtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1jcmVkcy1mcm9tLCAucmwtcHJldmlldy1jcmVkcy10bywgLnJsLXByZXZpZXctY3JlZHMtY2Mge1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiA1cHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctZGF0ZSB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiAxMHB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LXNlY3Rpb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucmwtcHJldmlldy1oaWRlIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXHQ8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc3ViamVjdFxcXCI+e3tzdWJqZWN0fX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWZyb21cXFwiPnt7ZnJvbUNyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLXRvXFxcIj57e3RvTGFiZWx9fToge3t0b0NyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWNjIHt7Y2NDbGFzc319XFxcIj57e2NjTGFiZWx9fToge3tjY0NyZWRzfX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJib2R5LXdycCB7e2JvZHlDbGFzc319XFxcIj57e2h0bWx9fTwvZGl2PlxcbjwvYm9keT5cXG48L2h0bWw+XCI7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcbiIsInZhciBmaWx0ZXIgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gZmlsdGVyIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcbiIsInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBzbGljZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc2xpY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKSB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FjY291bnQnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQWNjb3VudCdcbn0pXG5jbGFzcyBBY2NvdW50UG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmlzTmV3ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWwuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuZW1haWxFcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpdGlvbmFsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVtYWlsRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGFkZEFjY291bnRDb21tYW5kKCkge1xuXHRcdHRoaXMuZW1haWxFcnJvcignJyA9PT0gdHJpbSh0aGlzLmVtYWlsKCkpKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoJycgPT09IHRyaW0odGhpcy5wYXNzd29yZCgpKSk7XG5cblx0XHRpZiAodGhpcy5lbWFpbEVycm9yKCkgfHwgdGhpcy5wYXNzd29yZEVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cblx0XHRSZW1vdGUuYWNjb3VudFNldHVwKFxuXHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmFjY291bnRzQW5kSWRlbnRpdGllcygpO1xuXHRcdFx0XHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoXG5cdFx0XHRcdFx0XHRcdGRhdGEuRXJyb3JDb2RlID8gZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSA6IGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGRhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yQWRkaXRpb25hbChkYXRhLkVycm9yTWVzc2FnZUFkZGl0aW9uYWwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGl0aW9uYWwoJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lbWFpbCgpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpLFxuXHRcdFx0dGhpcy5pc05ldygpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmlzTmV3KHRydWUpO1xuXG5cdFx0dGhpcy5lbWFpbCgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IoJycpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpdGlvbmFsKCcnKTtcblx0fVxuXG5cdG9uU2hvdyhhY2NvdW50KSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdFx0aWYgKGFjY291bnQgJiYgYWNjb3VudC5jYW5CZUVkaXQoKSkge1xuXHRcdFx0dGhpcy5pc05ldyhmYWxzZSk7XG5cdFx0XHR0aGlzLmVtYWlsKGFjY291bnQuZW1haWwpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWNjb3VudFBvcHVwVmlldywgQWNjb3VudFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyB0cmltLCBmYWtlTWQ1IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9JZGVudGl0eScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNJZGVudGl0eSdcbn0pXG5jbGFzcyBJZGVudGl0eVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5pZCA9ICcnO1xuXHRcdHRoaXMuZWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMub3duZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKS52YWxpZGF0ZUVtYWlsKCk7XG5cdFx0dGhpcy5lbWFpbC5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnJlcGx5VG8gPSBrby5vYnNlcnZhYmxlKCcnKS52YWxpZGF0ZVNpbXBsZUVtYWlsKCk7XG5cdFx0dGhpcy5yZXBseVRvLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJjYyA9IGtvLm9ic2VydmFibGUoJycpLnZhbGlkYXRlU2ltcGxlRW1haWwoKTtcblx0XHR0aGlzLmJjYy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNpZ25hdHVyZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNob3dCY2MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmJjYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHRoaXMuc2hvd0JjYygpICYmIDAgPCB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5zaG93QmNjKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZXBseVRvLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChmYWxzZSA9PT0gdGhpcy5zaG93UmVwbHlUbygpICYmIDAgPCB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5zaG93UmVwbHlUbyh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGFkZE9yRWRpdElkZW50aXR5Q29tbWFuZCgpIHtcblx0XHRpZiAodGhpcy5zaWduYXR1cmUgJiYgdGhpcy5zaWduYXR1cmUuX19mZXRjaEVkaXRvclZhbHVlKSB7XG5cdFx0XHR0aGlzLnNpZ25hdHVyZS5fX2ZldGNoRWRpdG9yVmFsdWUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuZW1haWwuaGFzRXJyb3IoKSkge1xuXHRcdFx0dGhpcy5lbWFpbC5oYXNFcnJvcignJyA9PT0gdHJpbSh0aGlzLmVtYWlsKCkpKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbWFpbC5oYXNFcnJvcigpKSB7XG5cdFx0XHRpZiAoIXRoaXMub3duZXIoKSkge1xuXHRcdFx0XHR0aGlzLmVtYWlsLmZvY3VzZWQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yZXBseVRvLmhhc0Vycm9yKCkpIHtcblx0XHRcdHRoaXMucmVwbHlUby5mb2N1c2VkKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmJjYy5oYXNFcnJvcigpKSB7XG5cdFx0XHR0aGlzLmJjYy5mb2N1c2VkKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdFJlbW90ZS5pZGVudGl0eVVwZGF0ZShcblx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5hY2NvdW50c0FuZElkZW50aXRpZXMoKTtcblx0XHRcdFx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuaWQsXG5cdFx0XHR0aGlzLmVtYWlsKCksXG5cdFx0XHR0aGlzLm5hbWUoKSxcblx0XHRcdHRoaXMucmVwbHlUbygpLFxuXHRcdFx0dGhpcy5iY2MoKSxcblx0XHRcdHRoaXMuc2lnbmF0dXJlKCksXG5cdFx0XHR0aGlzLnNpZ25hdHVyZUluc2VydEJlZm9yZSgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmlkID0gJyc7XG5cdFx0dGhpcy5lZGl0KGZhbHNlKTtcblx0XHR0aGlzLm93bmVyKGZhbHNlKTtcblxuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5lbWFpbCgnJyk7XG5cdFx0dGhpcy5yZXBseVRvKCcnKTtcblx0XHR0aGlzLmJjYygnJyk7XG5cdFx0dGhpcy5zaWduYXR1cmUoJycpO1xuXHRcdHRoaXMuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWwuaGFzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucmVwbHlUby5oYXNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5iY2MuaGFzRXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5zaG93QmNjKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvKGZhbHNlKTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvcignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/SWRlbnRpdHlNb2RlbH0gb0lkZW50aXR5XG5cdCAqL1xuXHRvblNob3coaWRlbnRpdHkpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0dGhpcy5lZGl0KHRydWUpO1xuXG5cdFx0XHR0aGlzLmlkID0gaWRlbnRpdHkuaWQoKSB8fCAnJztcblx0XHRcdHRoaXMubmFtZShpZGVudGl0eS5uYW1lKCkpO1xuXHRcdFx0dGhpcy5lbWFpbChpZGVudGl0eS5lbWFpbCgpKTtcblx0XHRcdHRoaXMucmVwbHlUbyhpZGVudGl0eS5yZXBseVRvKCkpO1xuXHRcdFx0dGhpcy5iY2MoaWRlbnRpdHkuYmNjKCkpO1xuXHRcdFx0dGhpcy5zaWduYXR1cmUoaWRlbnRpdHkuc2lnbmF0dXJlKCkpO1xuXHRcdFx0dGhpcy5zaWduYXR1cmVJbnNlcnRCZWZvcmUoaWRlbnRpdHkuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKCkpO1xuXG5cdFx0XHR0aGlzLm93bmVyKCcnID09PSB0aGlzLmlkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5pZCA9IGZha2VNZDUoKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCF0aGlzLm93bmVyKCkgJiYgIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHRoaXMuZW1haWwuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGVXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgSWRlbnRpdHlQb3B1cFZpZXcsIElkZW50aXR5UG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2F2ZVRyaWdnZXJDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lbGVtZW50ID0gcGFyYW1zLmVsZW1lbnQgfHwgbnVsbDtcblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlICYmIHBhcmFtcy52YWx1ZS5zdWJzY3JpYmUgPyBwYXJhbXMudmFsdWUgOiBudWxsO1xuXG5cdFx0aWYgKHRoaXMuZWxlbWVudCkge1xuXHRcdFx0aWYgKHRoaXMudmFsdWUpIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcblxuXHRcdFx0XHRpZiAocGFyYW1zLnZlcnRpY2FsQWxpZ24pIHtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuY3NzKCd2ZXJ0aWNhbC1hbGlnbicsIHBhcmFtcy52ZXJ0aWNhbEFsaWduKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUodGhpcy52YWx1ZSgpKTtcblxuXHRcdFx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLnZhbHVlLnN1YnNjcmliZSh0aGlzLnNldFN0YXRlLCB0aGlzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHNldFN0YXRlKHZhbHVlKSB7XG5cdFx0c3dpdGNoIChwSW50KHZhbHVlKSkge1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLmVycm9yJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3InKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZTpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5JZGxlOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNhdmVUcmlnZ2VyQ29tcG9uZW50LCAnU2F2ZVRyaWdnZXJDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBJbnB1dENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge31cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKElucHV0Q29tcG9uZW50LCAnSW5wdXRDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIocGFyYW1zKTtcblxuXHRcdHRoaXMub3B0aW9ucyA9IHBhcmFtcy5vcHRpb25zIHx8ICcnO1xuXG5cdFx0dGhpcy5vcHRpb25zVGV4dCA9IHBhcmFtcy5vcHRpb25zVGV4dCB8fCBudWxsO1xuXHRcdHRoaXMub3B0aW9uc1ZhbHVlID0gcGFyYW1zLm9wdGlvbnNWYWx1ZSB8fCBudWxsO1xuXHRcdHRoaXMub3B0aW9uc0NhcHRpb24gPSBwYXJhbXMub3B0aW9uc0NhcHRpb24gfHwgbnVsbDtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnNDYXB0aW9uKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gaTE4bih0aGlzLm9wdGlvbnNDYXB0aW9uKTtcblx0XHR9XG5cblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoU2VsZWN0Q29tcG9uZW50LCAnU2VsZWN0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RSYWRpbyB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvJztcblxuY2xhc3MgUmFkaW9Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFJhZGlvIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihSYWRpb0NvbXBvbmVudCwgJ1JhZGlvQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY29uc3QgREVGQVVMVF9ST1dTID0gNTtcblxuY2xhc3MgVGV4dEFyZWFDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLnJvd3MgPSBwYXJhbXMucm93cyB8fCBERUZBVUxUX1JPV1M7XG5cdFx0dGhpcy5zcGVsbGNoZWNrID0gaXNVbmQocGFyYW1zLnNwZWxsY2hlY2spID8gZmFsc2UgOiAhIXBhcmFtcy5zcGVsbGNoZWNrO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihUZXh0QXJlYUNvbXBvbmVudCwgJ1RleHRBcmVhQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgRGF0ZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge31cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKERhdGVDb21wb25lbnQsICdEYXRlQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBTY3JpcHRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKFxuXHRcdFx0cGFyYW1zLmNvbXBvbmVudCAmJlxuXHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudCAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnRbMF0gJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdLm91dGVySFRNTFxuXHRcdCkge1xuXHRcdFx0bGV0IHNjcmlwdCA9IHBhcmFtcy5lbGVtZW50WzBdLm91dGVySFRNTDtcblx0XHRcdHNjcmlwdCA9ICFzY3JpcHQgPyAnJyA6IHNjcmlwdC5yZXBsYWNlKC88eC1zY3JpcHQvaSwgJzxzY3JpcHQnKS5yZXBsYWNlKC88Yj48XFwvYj48XFwveC1zY3JpcHQ+L2ksICc8L3NjcmlwdD4nKTtcblxuXHRcdFx0aWYgKHNjcmlwdCkge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC50ZXh0KCcnKTtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQucmVwbGFjZVdpdGgoXG5cdFx0XHRcdFx0JChzY3JpcHQpLnRleHQoXG5cdFx0XHRcdFx0XHRwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0gJiYgcGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdLm5vZGVWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ/IHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0OiAnJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoU2NyaXB0Q29tcG9uZW50LCAnU2NyaXB0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hNYXRlcmlhbERlc2lnbkNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q2hlY2tib3gge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIocGFyYW1zKTtcblxuXHRcdHRoaXMuYW5pbWF0aW9uQm94ID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmsgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDIwMCB9KTtcblxuXHRcdHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSA9IF8uYmluZCh0aGlzLmFuaW1hdGlvbkJveFNldFRydWUsIHRoaXMpO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSA9IF8uYmluZCh0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUsIHRoaXMpO1xuXG5cdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2goXG5cdFx0XHR0aGlzLnZhbHVlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyQW5pbWF0aW9uKHZhbHVlKTtcblx0XHRcdH0sIHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdGFuaW1hdGlvbkJveFNldFRydWUoKSB7XG5cdFx0dGhpcy5hbmltYXRpb25Cb3godHJ1ZSk7XG5cdH1cblxuXHRhbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrKHRydWUpO1xuXHR9XG5cblx0dHJpZ2dlckFuaW1hdGlvbihib3gpIHtcblx0XHRpZiAoYm94KSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUoKTtcblx0XHRcdF8uZGVsYXkodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCAyMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUoKTtcblx0XHRcdF8uZGVsYXkodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCAyMDApO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoQ2hlY2tib3hNYXRlcmlhbERlc2lnbkNvbXBvbmVudCwgJ0NoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQnKTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHtcblx0bm9vcCxcblx0dHJpbSxcblx0bG9nLFxuXHRoYXMsXG5cdGlzQXJyYXksXG5cdGluQXJyYXksXG5cdGlzVW5kLFxuXHRpc05vcm1hbCxcblx0aXNQb3NOdW1lcmljLFxuXHRpc05vbkVtcHR5QXJyYXksXG5cdHBJbnQsXG5cdHBTdHJpbmcsXG5cdGRlbGVnYXRlUnVuT25EZXN0cm95LFxuXHRtYWlsVG9IZWxwZXIsXG5cdHdpbmRvd1Jlc2l6ZSxcblx0amFzc2xcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHtcblx0TGF5b3V0LFxuXHRDYXBhLFxuXHRTdG9yYWdlUmVzdWx0VHlwZSxcblx0Tm90aWZpY2F0aW9uLFxuXHRGb2xkZXJUeXBlLFxuXHRTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLFxuXHRNZXNzYWdlU2V0QWN0aW9uLFxuXHRDbGllbnRTaWRlS2V5TmFtZSxcblx0TWFnaWNzXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7ICRodG1sLCBsZWZ0UGFuZWxXaWR0aCwgbGVmdFBhbmVsRGlzYWJsZWQsIGJBbmltYXRpb25TdXBwb3J0ZWQsIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyBtb21lbnROb3dVbml4LCByZWxvYWQgYXMgbW9tZW50UmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcblxuaW1wb3J0IHtcblx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSxcblx0c2V0Rm9sZGVySGFzaCxcblx0Z2V0Rm9sZGVySGFzaCxcblx0Z2V0Rm9sZGVySW5ib3hOYW1lLFxuXHRnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0LFxuXHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyLFxuXHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeVNldEFjdGlvbixcblx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlGb2xkZXJBbmRVaWRcbn0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IHtcblx0dXNlckJhY2tncm91bmQsXG5cdG1haWxCb3gsXG5cdHJvb3QsXG5cdG9wZW5QZ3BXb3JrZXJKcyxcblx0b3BlblBncEpzLFxuXHRzb2NpYWxHb29nbGUsXG5cdHNvY2lhbFR3aXR0ZXIsXG5cdHNvY2lhbEZhY2Vib29rXG59IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBOb3RpZmljYXRpb25TdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Ob3RpZmljYXRpb24nO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBDb250YWN0U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQ29udGFjdCc7XG5pbXBvcnQgSWRlbnRpdHlTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9JZGVudGl0eSc7XG5pbXBvcnQgVGVtcGxhdGVTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9UZW1wbGF0ZSc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcbmltcG9ydCBRdW90YVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1F1b3RhJztcblxuaW1wb3J0ICogYXMgTG9jYWwgZnJvbSAnU3RvcmFnZS9DbGllbnQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBjaGVja1RpbWVzdGFtcCB9IGZyb20gJ1N0b3JhZ2UvUmFpbkxvb3AnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuaW1wb3J0IFByb21pc2VzIGZyb20gJ1Byb21pc2VzL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5pbXBvcnQgeyBBY2NvdW50TW9kZWwgfSBmcm9tICdNb2RlbC9BY2NvdW50JztcbmltcG9ydCB7IElkZW50aXR5TW9kZWwgfSBmcm9tICdNb2RlbC9JZGVudGl0eSc7XG5pbXBvcnQgeyBUZW1wbGF0ZU1vZGVsIH0gZnJvbSAnTW9kZWwvVGVtcGxhdGUnO1xuaW1wb3J0IHsgT3BlblBncEtleU1vZGVsIH0gZnJvbSAnTW9kZWwvT3BlblBncEtleSc7XG5cbi8vIGltcG9ydCB7QWJvdXRVc2VyU2NyZWVufSBmcm9tICdTY3JlZW4vVXNlci9BYm91dCc7XG5pbXBvcnQgeyBMb2dpblVzZXJTY3JlZW4gfSBmcm9tICdTY3JlZW4vVXNlci9Mb2dpbic7XG5pbXBvcnQgeyBNYWlsQm94VXNlclNjcmVlbiB9IGZyb20gJ1NjcmVlbi9Vc2VyL01haWxCb3gnO1xuaW1wb3J0IHsgU2V0dGluZ3NVc2VyU2NyZWVuIH0gZnJvbSAnU2NyZWVuL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBoaWRlTG9hZGluZywgcm91dGVPZmYsIHJvdXRlT24sIHNldEhhc2gsIHN0YXJ0U2NyZWVucywgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFwcCB9IGZyb20gJ0FwcC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFwcFVzZXIgZXh0ZW5kcyBBYnN0cmFjdEFwcCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFJlbW90ZSk7XG5cblx0XHR0aGlzLm1vdmVDYWNoZSA9IHt9O1xuXG5cdFx0dGhpcy5xdW90YURlYm91bmNlID0gXy5kZWJvdW5jZSh0aGlzLnF1b3RhLCBNYWdpY3MuVGltZTMwcyk7XG5cdFx0dGhpcy5tb3ZlT3JEZWxldGVSZXNwb25zZUhlbHBlciA9IF8uYmluZCh0aGlzLm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyLCB0aGlzKTtcblxuXHRcdHRoaXMubWVzc2FnZXNNb3ZlVHJpZ2dlciA9IF8uZGVib3VuY2UodGhpcy5tZXNzYWdlc01vdmVUcmlnZ2VyLCA1MDApO1xuXG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjMwcycpLCBNYWdpY3MuVGltZTMwcyk7XG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjFtJyksIE1hZ2ljcy5UaW1lMW0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4ybScpLCBNYWdpY3MuVGltZTJtKTtcblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuM20nKSwgTWFnaWNzLlRpbWUzbSk7XG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjVtJyksIE1hZ2ljcy5UaW1lNW0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xMG0nKSwgTWFnaWNzLlRpbWUxMG0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xNW0nKSwgTWFnaWNzLlRpbWUxNW0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4yMG0nKSwgTWFnaWNzLlRpbWUyMG0pO1xuXG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4gd2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjJtLWFmdGVyNW0nKSwgTWFnaWNzLlRpbWUybSksIE1hZ2ljcy5UaW1lNW0pO1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC41bS1hZnRlcjVtJyksIE1hZ2ljcy5UaW1lNW0pLCBNYWdpY3MuVGltZTVtKTtcblx0XHR3aW5kb3cuc2V0VGltZW91dChcblx0XHRcdCgpID0+IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xMG0tYWZ0ZXI1bScpLCBNYWdpY3MuVGltZTEwbSksXG5cdFx0XHRNYWdpY3MuVGltZTVtXG5cdFx0KTtcblxuXHRcdCQud2FrZVVwKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoY2hlY2tUaW1lc3RhbXAoKSkge1xuXHRcdFx0XHRcdHRoaXMucmVsb2FkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRSZW1vdGUuanNWZXJzaW9uKChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVsb2FkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpKTtcblx0XHRcdH0sXG5cdFx0XHR7fSxcblx0XHRcdE1hZ2ljcy5UaW1lNjBtXG5cdFx0KTtcblxuXHRcdGlmIChjaGVja1RpbWVzdGFtcCgpKSB7XG5cdFx0XHR0aGlzLnJlbG9hZCgpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHQkKCcjcmwtYmcnKVxuXHRcdFx0XHRcdC5hdHRyKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7Jylcblx0XHRcdFx0XHQuYmFja3N0cmV0Y2godXNlckJhY2tncm91bmQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJCYWNrZ3JvdW5kSGFzaCcpKSwge1xuXHRcdFx0XHRcdFx0ZmFkZTogYkFuaW1hdGlvblN1cHBvcnRlZCA/IE1hZ2ljcy5UaW1lMXMgOiAwLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRYOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRZOiB0cnVlXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignc3R5bGUnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuc29jaWFsVXNlcnMgPSBfLmJpbmQodGhpcy5zb2NpYWxVc2VycywgdGhpcyk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIFJlbW90ZTtcblx0fVxuXG5cdHJlbG9hZCgpIHtcblx0XHRpZiAod2luZG93LnBhcmVudCAmJiAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpKSB7XG5cdFx0XHR3aW5kb3cucGFyZW50LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0fVxuXHR9XG5cblx0cmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCkge1xuXHRcdF8uZWFjaChNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKSwgKG1lc3NhZ2UpID0+IHtcblx0XHRcdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShNZXNzYWdlU3RvcmUubWVzc2FnZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiRHJvcFBhZ2VQb3NpdGlvbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUgPSBmYWxzZVxuXHQgKi9cblx0cmVsb2FkTWVzc2FnZUxpc3QoYkRyb3BQYWdlUG9zaXRpb24gPSBmYWxzZSwgYkRyb3BDdXJyZW5Gb2xkZXJDYWNoZSA9IGZhbHNlKSB7XG5cdFx0bGV0IGlPZmZzZXQgPSAoTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZSgpIC0gMSkgKiBTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpO1xuXG5cdFx0aWYgKGJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUpIHtcblx0XHRcdHNldEZvbGRlckhhc2goRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksICcnKTtcblx0XHR9XG5cblx0XHRpZiAoYkRyb3BQYWdlUG9zaXRpb24pIHtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UoMSk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlQmVmb3JlVGhyZWFkKDEpO1xuXHRcdFx0aU9mZnNldCA9IDA7XG5cblx0XHRcdHNldEhhc2goXG5cdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UoKSxcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goKSxcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RUaHJlYWRVaWQoKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdExvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLm1lc3NhZ2VMaXN0KFxuXHRcdFx0KHNSZXN1bHQsIG9EYXRhLCBiQ2FjaGVkKSA9PiB7XG5cdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVycm9yKCcnKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKGZhbHNlKTtcblxuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5zZXRNZXNzYWdlTGlzdChvRGF0YSwgYkNhY2hlZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuVW5sb2FkID09PSBzUmVzdWx0KSB7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0RXJyb3IoJycpO1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdExvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0ICE9PSBzUmVzdWx0KSB7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KFtdKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFcnJvcihcblx0XHRcdFx0XHRcdG9EYXRhICYmIG9EYXRhLkVycm9yQ29kZSA/IGdldE5vdGlmaWNhdGlvbihvRGF0YS5FcnJvckNvZGUpIDogaTE4bignTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9NRVNTQUdFX0xJU1QnKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdGlPZmZzZXQsXG5cdFx0XHRTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RUaHJlYWRVaWQoKVxuXHRcdCk7XG5cdH1cblxuXHRyZWNhY2hlSW5ib3hNZXNzYWdlTGlzdCgpIHtcblx0XHRSZW1vdGUubWVzc2FnZUxpc3Qobm9vcCwgZ2V0Rm9sZGVySW5ib3hOYW1lKCksIDAsIFNldHRpbmdzU3RvcmUubWVzc2FnZXNQZXJQYWdlKCksICcnLCAnJywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZlJlc3VsdEZ1bmNcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWN0c1N5bmMoZlJlc3VsdEZ1bmMpIHtcblx0XHRjb25zdCBvQ29udGFjdHMgPSBDb250YWN0U3RvcmUuY29udGFjdHM7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRhY3RzLmltcG9ydGluZygpIHx8XG5cdFx0XHRvQ29udGFjdHMuc3luY2luZygpIHx8XG5cdFx0XHQhQ29udGFjdFN0b3JlLmVuYWJsZUNvbnRhY3RzU3luYygpIHx8XG5cdFx0XHQhQ29udGFjdFN0b3JlLmFsbG93Q29udGFjdHNTeW5jKClcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvQ29udGFjdHMuc3luY2luZyh0cnVlKTtcblxuXHRcdFJlbW90ZS5jb250YWN0c1N5bmMoKHNSZXN1bHQsIG9EYXRhKSA9PiB7XG5cdFx0XHRvQ29udGFjdHMuc3luY2luZyhmYWxzZSk7XG5cblx0XHRcdGlmIChmUmVzdWx0RnVuYykge1xuXHRcdFx0XHRmUmVzdWx0RnVuYyhzUmVzdWx0LCBvRGF0YSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG1lc3NhZ2VzTW92ZVRyaWdnZXIoKSB7XG5cdFx0Y29uc3Qgc1RyYXNoRm9sZGVyID0gRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSxcblx0XHRcdHNTcGFtRm9sZGVyID0gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpO1xuXG5cdFx0Xy5lYWNoKHRoaXMubW92ZUNhY2hlLCAoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgaXNTcGFtID0gc1NwYW1Gb2xkZXIgPT09IGl0ZW0uVG8sXG5cdFx0XHRcdGlzVHJhc2ggPSBzVHJhc2hGb2xkZXIgPT09IGl0ZW0uVG8sXG5cdFx0XHRcdGlzSGFtID0gIWlzU3BhbSAmJiBzU3BhbUZvbGRlciA9PT0gaXRlbS5Gcm9tICYmIGdldEZvbGRlckluYm94TmFtZSgpID09PSBpdGVtLlRvO1xuXG5cdFx0XHRSZW1vdGUubWVzc2FnZXNNb3ZlKFxuXHRcdFx0XHR0aGlzLm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyLFxuXHRcdFx0XHRpdGVtLkZyb20sXG5cdFx0XHRcdGl0ZW0uVG8sXG5cdFx0XHRcdGl0ZW0uVWlkLFxuXHRcdFx0XHRpc1NwYW0gPyAnU1BBTScgOiBpc0hhbSA/ICdIQU0nIDogJycsXG5cdFx0XHRcdGlzU3BhbSB8fCBpc1RyYXNoXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tb3ZlQ2FjaGUgPSB7fTtcblx0fVxuXG5cdG1lc3NhZ2VzTW92ZUhlbHBlcihmcm9tRm9sZGVyRnVsbE5hbWVSYXcsIHRvRm9sZGVyRnVsbE5hbWVSYXcsIHVpZHNGb3JNb3ZlKSB7XG5cdFx0Y29uc3QgaGFzaCA9ICckJCcgKyBmcm9tRm9sZGVyRnVsbE5hbWVSYXcgKyAnJCQnICsgdG9Gb2xkZXJGdWxsTmFtZVJhdyArICckJCc7XG5cdFx0aWYgKCF0aGlzLm1vdmVDYWNoZVtoYXNoXSkge1xuXHRcdFx0dGhpcy5tb3ZlQ2FjaGVbaGFzaF0gPSB7XG5cdFx0XHRcdEZyb206IGZyb21Gb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0VG86IHRvRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFVpZDogW11cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy5tb3ZlQ2FjaGVbaGFzaF0uVWlkID0gXy51bmlvbih0aGlzLm1vdmVDYWNoZVtoYXNoXS5VaWQsIHVpZHNGb3JNb3ZlKTtcblx0XHR0aGlzLm1lc3NhZ2VzTW92ZVRyaWdnZXIoKTtcblx0fVxuXG5cdG1lc3NhZ2VzQ29weUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBzVG9Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvckNvcHkpIHtcblx0XHRSZW1vdGUubWVzc2FnZXNDb3B5KHRoaXMubW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIsIHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIHNUb0ZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yQ29weSk7XG5cdH1cblxuXHRtZXNzYWdlc0RlbGV0ZUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKSB7XG5cdFx0UmVtb3RlLm1lc3NhZ2VzRGVsZXRlKHRoaXMubW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIsIHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRGb3JSZW1vdmUpO1xuXHR9XG5cblx0bW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCkpIHtcblx0XHRcdGlmIChvRGF0YSAmJiBpc0FycmF5KG9EYXRhLlJlc3VsdCkgJiYgMiA9PT0gb0RhdGEuUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0XHRzZXRGb2xkZXJIYXNoKG9EYXRhLlJlc3VsdFswXSwgb0RhdGEuUmVzdWx0WzFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldEZvbGRlckhhc2goRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksICcnKTtcblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgLTEgPCBpbkFycmF5KG9EYXRhLkVycm9yQ29kZSwgW05vdGlmaWNhdGlvbi5DYW50TW92ZU1lc3NhZ2UsIE5vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2VdKSkge1xuXHRcdFx0XHRcdHdpbmRvdy5hbGVydChnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yZWxvYWRNZXNzYWdlTGlzdCgwID09PSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKS5sZW5ndGgpO1xuXHRcdFx0dGhpcy5xdW90YURlYm91bmNlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRGb3JSZW1vdmVcblx0ICovXG5cdGRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcldpdGhvdXRDaGVjayhzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKSB7XG5cdFx0dGhpcy5tZXNzYWdlc0RlbGV0ZUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRNZXNzYWdlU3RvcmUucmVtb3ZlTWVzc2FnZXNGcm9tTGlzdChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaURlbGV0ZVR5cGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGcm9tRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZEZvclJlbW92ZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiVXNlRm9sZGVyID0gdHJ1ZVxuXHQgKi9cblx0ZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKGlEZWxldGVUeXBlLCBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlLCBiVXNlRm9sZGVyKSB7XG5cdFx0bGV0IG9Nb3ZlRm9sZGVyID0gbnVsbCxcblx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gbnVsbDtcblxuXHRcdHN3aXRjaCAoaURlbGV0ZVR5cGUpIHtcblx0XHRcdGNhc2UgRm9sZGVyVHlwZS5TcGFtOlxuXHRcdFx0XHRvTW92ZUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpKTtcblx0XHRcdFx0blNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24gPSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLlNwYW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBGb2xkZXJUeXBlLk5vdFNwYW06XG5cdFx0XHRcdG9Nb3ZlRm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChnZXRGb2xkZXJJbmJveE5hbWUoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlRyYXNoOlxuXHRcdFx0XHRvTW92ZUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSk7XG5cdFx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5UcmFzaDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZvbGRlclR5cGUuQXJjaGl2ZTpcblx0XHRcdFx0b01vdmVGb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSk7XG5cdFx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5BcmNoaXZlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cblx0XHRiVXNlRm9sZGVyID0gaXNVbmQoYlVzZUZvbGRlcikgPyB0cnVlIDogISFiVXNlRm9sZGVyO1xuXHRcdGlmIChiVXNlRm9sZGVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChGb2xkZXJUeXBlLlNwYW0gPT09IGlEZWxldGVUeXBlICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSkgfHxcblx0XHRcdFx0KEZvbGRlclR5cGUuVHJhc2ggPT09IGlEZWxldGVUeXBlICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCkpIHx8XG5cdFx0XHRcdChGb2xkZXJUeXBlLkFyY2hpdmUgPT09IGlEZWxldGVUeXBlICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRiVXNlRm9sZGVyID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvTW92ZUZvbGRlciAmJiBiVXNlRm9sZGVyKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Gb2xkZXJTeXN0ZW0nKSwgW25TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uXSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdCFiVXNlRm9sZGVyIHx8XG5cdFx0XHQoRm9sZGVyVHlwZS5UcmFzaCA9PT0gaURlbGV0ZVR5cGUgJiZcblx0XHRcdFx0KHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSB8fCBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpKSlcblx0XHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FzaycpLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0RFTEVURV9NRVNTQUdFUycpLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlc0RlbGV0ZUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUucmVtb3ZlTWVzc2FnZXNGcm9tTGlzdChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRcdFx0fVxuXHRcdFx0XSk7XG5cdFx0fSBlbHNlIGlmIChvTW92ZUZvbGRlcikge1xuXHRcdFx0dGhpcy5tZXNzYWdlc01vdmVIZWxwZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgb01vdmVGb2xkZXIuZnVsbE5hbWVSYXcsIGFVaWRGb3JSZW1vdmUpO1xuXHRcdFx0TWVzc2FnZVN0b3JlLnJlbW92ZU1lc3NhZ2VzRnJvbUxpc3Qoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSwgb01vdmVGb2xkZXIuZnVsbE5hbWVSYXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Zyb21Gb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkRm9yTW92ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RvRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkNvcHkgPSBmYWxzZVxuXHQgKi9cblx0bW92ZU1lc3NhZ2VzVG9Gb2xkZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvck1vdmUsIHNUb0ZvbGRlckZ1bGxOYW1lUmF3LCBiQ29weSkge1xuXHRcdGlmIChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3ICE9PSBzVG9Gb2xkZXJGdWxsTmFtZVJhdyAmJiBpc0FycmF5KGFVaWRGb3JNb3ZlKSAmJiAwIDwgYVVpZEZvck1vdmUubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBvRnJvbUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdyksXG5cdFx0XHRcdG9Ub0ZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc1RvRm9sZGVyRnVsbE5hbWVSYXcpO1xuXG5cdFx0XHRpZiAob0Zyb21Gb2xkZXIgJiYgb1RvRm9sZGVyKSB7XG5cdFx0XHRcdGlmIChpc1VuZChiQ29weSkgPyBmYWxzZSA6ICEhYkNvcHkpIHtcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VzQ29weUhlbHBlcihvRnJvbUZvbGRlci5mdWxsTmFtZVJhdywgb1RvRm9sZGVyLmZ1bGxOYW1lUmF3LCBhVWlkRm9yTW92ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlc01vdmVIZWxwZXIob0Zyb21Gb2xkZXIuZnVsbE5hbWVSYXcsIG9Ub0ZvbGRlci5mdWxsTmFtZVJhdywgYVVpZEZvck1vdmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0TWVzc2FnZVN0b3JlLnJlbW92ZU1lc3NhZ2VzRnJvbUxpc3Qob0Zyb21Gb2xkZXIuZnVsbE5hbWVSYXcsIGFVaWRGb3JNb3ZlLCBvVG9Gb2xkZXIuZnVsbE5hbWVSYXcsIGJDb3B5KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayA9IG51bGxcblx0ICovXG5cdGZvbGRlcnNSZWxvYWQoY2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0Y29uc3QgcHJvbSA9IFByb21pc2VzLmZvbGRlcnNSZWxvYWQoRm9sZGVyU3RvcmUuZm9sZGVyc0xvYWRpbmcpO1xuXHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0cHJvbVxuXHRcdFx0XHQudGhlbigodmFsdWUpID0+ICEhdmFsdWUpXG5cdFx0XHRcdC50aGVuKGNhbGxiYWNrKVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrKGZhbHNlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYWxsYmFjay1yZXR1cm5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAxKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9sZGVyc1Byb21pc2VzQWN0aW9uSGVscGVyKHByb21pc2UsIGVycm9yRGVmQ29kZSkge1xuXHRcdFByb21pc2VzLmFib3J0KCdGb2xkZXJzJylcblx0XHRcdC5mYXN0UmVzb2x2ZSh0cnVlKVxuXHRcdFx0LnRoZW4oKCkgPT4gcHJvbWlzZSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0UHJvbWlzZXMuZm9sZGVyc1JlbG9hZFdpdGhUaW1lb3V0KEZvbGRlclN0b3JlLmZvbGRlcnNMb2FkaW5nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0KGVycm9yQ29kZSkgPT4ge1xuXHRcdFx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QuZXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGVycm9yQ29kZSwgJycsIGVycm9yRGVmQ29kZSkpO1xuXHRcdFx0XHRcdFByb21pc2VzLmZvbGRlcnNSZWxvYWRXaXRoVGltZW91dChGb2xkZXJTdG9yZS5mb2xkZXJzTG9hZGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdH1cblxuXHRyZWxvYWRPcGVuUGdwS2V5cygpIHtcblx0XHRpZiAoUGdwU3RvcmUuY2FwYU9wZW5QR1AoKSkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IFtdLFxuXHRcdFx0XHRlbWFpbCA9IG5ldyBFbWFpbE1vZGVsKCksXG5cdFx0XHRcdG9wZW5wZ3BLZXlyaW5nID0gUGdwU3RvcmUub3BlbnBncEtleXJpbmcsXG5cdFx0XHRcdG9wZW5wZ3BLZXlzID0gb3BlbnBncEtleXJpbmcgPyBvcGVucGdwS2V5cmluZy5nZXRBbGxLZXlzKCkgOiBbXTtcblxuXHRcdFx0Xy5lYWNoKG9wZW5wZ3BLZXlzLCAob0l0ZW0sIGlJbmRleCkgPT4ge1xuXHRcdFx0XHRpZiAob0l0ZW0gJiYgb0l0ZW0ucHJpbWFyeUtleSkge1xuXHRcdFx0XHRcdGNvbnN0IGFFbWFpbHMgPSBbXSxcblx0XHRcdFx0XHRcdGFVc2VycyA9IFtdLFxuXHRcdFx0XHRcdFx0cHJpbWFyeVVzZXIgPSBvSXRlbS5nZXRQcmltYXJ5VXNlcigpLFxuXHRcdFx0XHRcdFx0dXNlciA9XG5cdFx0XHRcdFx0XHRcdHByaW1hcnlVc2VyICYmIHByaW1hcnlVc2VyLnVzZXJcblx0XHRcdFx0XHRcdFx0XHQ/IHByaW1hcnlVc2VyLnVzZXIudXNlcklkLnVzZXJpZFxuXHRcdFx0XHRcdFx0XHRcdDogb0l0ZW0udXNlcnMgJiYgb0l0ZW0udXNlcnNbMF1cblx0XHRcdFx0XHRcdFx0XHQ/IG9JdGVtLnVzZXJzWzBdLnVzZXJJZC51c2VyaWRcblx0XHRcdFx0XHRcdFx0XHQ6ICcnO1xuXG5cdFx0XHRcdFx0aWYgKG9JdGVtLnVzZXJzKSB7XG5cdFx0XHRcdFx0XHRfLmVhY2gob0l0ZW0udXNlcnMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLnVzZXJJZCkge1xuXHRcdFx0XHRcdFx0XHRcdGVtYWlsLmNsZWFyKCk7XG5cdFx0XHRcdFx0XHRcdFx0ZW1haWwucGFyc2UoaXRlbS51c2VySWQudXNlcmlkKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZW1haWwudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUVtYWlscy5wdXNoKGVtYWlsLmVtYWlsKTtcblx0XHRcdFx0XHRcdFx0XHRcdGFVc2Vycy5wdXNoKGl0ZW0udXNlcklkLnVzZXJpZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoYUVtYWlscy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGtleXMucHVzaChcblx0XHRcdFx0XHRcdFx0bmV3IE9wZW5QZ3BLZXlNb2RlbChcblx0XHRcdFx0XHRcdFx0XHRpSW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0b0l0ZW0ucHJpbWFyeUtleS5nZXRGaW5nZXJwcmludCgpLFxuXHRcdFx0XHRcdFx0XHRcdG9JdGVtLnByaW1hcnlLZXlcblx0XHRcdFx0XHRcdFx0XHRcdC5nZXRLZXlJZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHQudG9IZXgoKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRcdFx0Xy51bmlxKF8uY29tcGFjdChfLm1hcChvSXRlbS5nZXRLZXlJZHMoKSwgKGl0ZW0pID0+IChpdGVtICYmIGl0ZW0udG9IZXggPyBpdGVtLnRvSGV4KCkgOiBudWxsKSkpKSxcblx0XHRcdFx0XHRcdFx0XHRhVXNlcnMsXG5cdFx0XHRcdFx0XHRcdFx0YUVtYWlscyxcblx0XHRcdFx0XHRcdFx0XHRvSXRlbS5pc1ByaXZhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHRvSXRlbS5hcm1vcigpLFxuXHRcdFx0XHRcdFx0XHRcdHVzZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShQZ3BTdG9yZS5vcGVucGdwa2V5cygpKTtcblx0XHRcdFBncFN0b3JlLm9wZW5wZ3BrZXlzKGtleXMpO1xuXHRcdH1cblx0fVxuXG5cdGFjY291bnRzQ291bnRzKCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0XHQvLyBBY2NvdW50U3RvcmUuYWNjb3VudHMubG9hZGluZyh0cnVlKTtcblx0XHQvL1xuXHRcdC8vIFJlbW90ZS5hY2NvdW50c0NvdW50cygoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHQvL1xuXHRcdC8vIFx0QWNjb3VudFN0b3JlLmFjY291bnRzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdC8vXG5cdFx0Ly8gXHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YS5SZXN1bHQgJiYgb0RhdGEuUmVzdWx0WydDb3VudHMnXSlcblx0XHQvLyBcdHtcblx0XHQvLyBcdFx0dmFyXG5cdFx0Ly8gXHRcdFx0c0VtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCksXG5cdFx0Ly8gXHRcdFx0YUFjb3VudHMgPSBBY2NvdW50U3RvcmUuYWNjb3VudHMoKVxuXHRcdC8vIFx0XHQ7XG5cdFx0Ly9cblx0XHQvLyBcdFx0Xy5lYWNoKG9EYXRhLlJlc3VsdFsnQ291bnRzJ10sIChvSXRlbSkgPT4ge1xuXHRcdC8vXG5cdFx0Ly8gXHRcdFx0dmFyIG9BY2NvdW50ID0gXy5maW5kKGFBY291bnRzLCAob0FjY291bnQpID0+IHtcblx0XHQvLyBcdFx0XHRcdHJldHVybiBvQWNjb3VudCAmJiBvSXRlbVswXSA9PT0gb0FjY291bnQuZW1haWwgJiYgc0VtYWlsICE9PSBvQWNjb3VudC5lbWFpbDtcblx0XHQvLyBcdFx0XHR9KTtcblx0XHQvL1xuXHRcdC8vIFx0XHRcdGlmIChvQWNjb3VudClcblx0XHQvLyBcdFx0XHR7XG5cdFx0Ly8gXHRcdFx0XHRvQWNjb3VudC5jb3VudChwSW50KG9JdGVtWzFdKSk7XG5cdFx0Ly8gXHRcdFx0fVxuXHRcdC8vIFx0XHR9KTtcblx0XHQvLyBcdH1cblx0XHQvLyB9KTtcblx0fVxuXG5cdGFjY291bnRzQW5kSWRlbnRpdGllcyhiQm9vdCkge1xuXHRcdEFjY291bnRTdG9yZS5hY2NvdW50cy5sb2FkaW5nKHRydWUpO1xuXHRcdElkZW50aXR5U3RvcmUuaWRlbnRpdGllcy5sb2FkaW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLmFjY291bnRzQW5kSWRlbnRpdGllcygoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdEFjY291bnRTdG9yZS5hY2NvdW50cy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdElkZW50aXR5U3RvcmUuaWRlbnRpdGllcy5sb2FkaW5nKGZhbHNlKTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGNvbnN0IGNvdW50cyA9IHt9LFxuXHRcdFx0XHRcdHNBY2NvdW50RW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWwoKTtcblx0XHRcdFx0bGV0IHBhcmVudEVtYWlsID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1BhcmVudEVtYWlsJyk7XG5cblx0XHRcdFx0cGFyZW50RW1haWwgPSAnJyA9PT0gcGFyZW50RW1haWwgPyBzQWNjb3VudEVtYWlsIDogcGFyZW50RW1haWw7XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob0RhdGEuUmVzdWx0LkFjY291bnRzKSkge1xuXHRcdFx0XHRcdF8uZWFjaChBY2NvdW50U3RvcmUuYWNjb3VudHMoKSwgKG9BY2NvdW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb3VudHNbb0FjY291bnQuZW1haWxdID0gb0FjY291bnQuY291bnQoKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KEFjY291bnRTdG9yZS5hY2NvdW50cygpKTtcblxuXHRcdFx0XHRcdEFjY291bnRTdG9yZS5hY2NvdW50cyhcblx0XHRcdFx0XHRcdF8ubWFwKFxuXHRcdFx0XHRcdFx0XHRvRGF0YS5SZXN1bHQuQWNjb3VudHMsXG5cdFx0XHRcdFx0XHRcdChzVmFsdWUpID0+IG5ldyBBY2NvdW50TW9kZWwoc1ZhbHVlLCBzVmFsdWUgIT09IHBhcmVudEVtYWlsLCBjb3VudHNbc1ZhbHVlXSB8fCAwKVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNVbmQoYkJvb3QpID8gZmFsc2UgOiAhIWJCb290KSB7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmFjY291bnRzQ291bnRzKCksIDEwMDAgKiA1KTtcblx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4xMG0tYWZ0ZXI1bScsICgpID0+IHRoaXMuYWNjb3VudHNDb3VudHMoKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNBcnJheShvRGF0YS5SZXN1bHQuSWRlbnRpdGllcykpIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMoKSk7XG5cblx0XHRcdFx0XHRJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMoXG5cdFx0XHRcdFx0XHRfLm1hcChvRGF0YS5SZXN1bHQuSWRlbnRpdGllcywgKGlkZW50aXR5RGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IHBTdHJpbmcoaWRlbnRpdHlEYXRhLklkKSxcblx0XHRcdFx0XHRcdFx0XHRlbWFpbCA9IHBTdHJpbmcoaWRlbnRpdHlEYXRhLkVtYWlsKSxcblx0XHRcdFx0XHRcdFx0XHRpZGVudGl0eSA9IG5ldyBJZGVudGl0eU1vZGVsKGlkLCBlbWFpbCk7XG5cblx0XHRcdFx0XHRcdFx0aWRlbnRpdHkubmFtZShwU3RyaW5nKGlkZW50aXR5RGF0YS5OYW1lKSk7XG5cdFx0XHRcdFx0XHRcdGlkZW50aXR5LnJlcGx5VG8ocFN0cmluZyhpZGVudGl0eURhdGEuUmVwbHlUbykpO1xuXHRcdFx0XHRcdFx0XHRpZGVudGl0eS5iY2MocFN0cmluZyhpZGVudGl0eURhdGEuQmNjKSk7XG5cdFx0XHRcdFx0XHRcdGlkZW50aXR5LnNpZ25hdHVyZShwU3RyaW5nKGlkZW50aXR5RGF0YS5TaWduYXR1cmUpKTtcblx0XHRcdFx0XHRcdFx0aWRlbnRpdHkuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKCEhaWRlbnRpdHlEYXRhLlNpZ25hdHVyZUluc2VydEJlZm9yZSk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGlkZW50aXR5O1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR0ZW1wbGF0ZXMoKSB7XG5cdFx0VGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXMubG9hZGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZW1wbGF0ZXMoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0VGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXMubG9hZGluZyhmYWxzZSk7XG5cblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YS5SZXN1bHQgJiYgaXNBcnJheShkYXRhLlJlc3VsdC5UZW1wbGF0ZXMpKSB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzKCkpO1xuXG5cdFx0XHRcdFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzKFxuXHRcdFx0XHRcdF8uY29tcGFjdChcblx0XHRcdFx0XHRcdF8ubWFwKGRhdGEuUmVzdWx0LlRlbXBsYXRlcywgKHRlbXBsYXRlRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZU1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0ZW1wbGF0ZS5wYXJzZSh0ZW1wbGF0ZURhdGEpID8gdGVtcGxhdGUgOiBudWxsO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRxdW90YSgpIHtcblx0XHRSZW1vdGUucXVvdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiZcblx0XHRcdFx0ZGF0YSAmJlxuXHRcdFx0XHRkYXRhLlJlc3VsdCAmJlxuXHRcdFx0XHRpc0FycmF5KGRhdGEuUmVzdWx0KSAmJlxuXHRcdFx0XHQxIDwgZGF0YS5SZXN1bHQubGVuZ3RoICYmXG5cdFx0XHRcdGlzUG9zTnVtZXJpYyhkYXRhLlJlc3VsdFswXSwgdHJ1ZSkgJiZcblx0XHRcdFx0aXNQb3NOdW1lcmljKGRhdGEuUmVzdWx0WzFdLCB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdFF1b3RhU3RvcmUucG9wdWxhdGVEYXRhKHBJbnQoZGF0YS5SZXN1bHRbMV0pLCBwSW50KGRhdGEuUmVzdWx0WzBdKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuXHQgKiBAcGFyYW0ge0FycmF5PX0gbGlzdCA9IFtdXG5cdCAqL1xuXHRmb2xkZXJJbmZvcm1hdGlvbihmb2xkZXIsIGxpc3QpIHtcblx0XHRpZiAoJycgIT09IHRyaW0oZm9sZGVyKSkge1xuXHRcdFx0UmVtb3RlLmZvbGRlckluZm9ybWF0aW9uKFxuXHRcdFx0XHQocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgZGF0YS5SZXN1bHQuSGFzaCAmJiBkYXRhLlJlc3VsdC5Gb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0bGV0IHVpZCA9ICcnLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0dW5yZWFkQ291bnRDaGFuZ2UgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBmb2xkZXJGcm9tQ2FjaGUgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGRhdGEuUmVzdWx0LkZvbGRlcik7XG5cdFx0XHRcdFx0XHRcdGlmIChmb2xkZXJGcm9tQ2FjaGUpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXJGcm9tQ2FjaGUuaW50ZXJ2YWwgPSBtb21lbnROb3dVbml4KCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQuSGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0Rm9sZGVySGFzaChkYXRhLlJlc3VsdC5Gb2xkZXIsIGRhdGEuUmVzdWx0Lkhhc2gpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5NZXNzYWdlQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb2xkZXJGcm9tQ2FjaGUubWVzc2FnZUNvdW50QWxsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VDb3VudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzTm9ybWFsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwSW50KGZvbGRlckZyb21DYWNoZS5tZXNzYWdlQ291bnRVbnJlYWQoKSkgIT09IHBJbnQoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bnJlYWRDb3VudENoYW5nZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlckZyb21DYWNoZS5tZXNzYWdlQ291bnRVbnJlYWQoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAodW5yZWFkQ291bnRDaGFuZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIoZm9sZGVyRnJvbUNhY2hlLmZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQuRmxhZ3MpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodWlkIGluIGRhdGEuUmVzdWx0LkZsYWdzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChoYXMoZGF0YS5SZXN1bHQuRmxhZ3MsIHVpZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVjayA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZmxhZ3MgPSBkYXRhLlJlc3VsdC5GbGFnc1t1aWRdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5Rm9sZGVyQW5kVWlkKGZvbGRlckZyb21DYWNoZS5mdWxsTmFtZVJhdywgdWlkLnRvU3RyaW5nKCksIFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFmbGFncy5Jc1NlZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhIWZsYWdzLklzRmxhZ2dlZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCEhZmxhZ3MuSXNBbnN3ZXJlZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCEhZmxhZ3MuSXNGb3J3YXJkZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhIWZsYWdzLklzUmVhZFJlY2VpcHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2hlY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRNZXNzYWdlU3RvcmUuaW5pdFVpZE5leHRBbmROZXdNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlckZyb21DYWNoZS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEuUmVzdWx0LlVpZE5leHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLlJlc3VsdC5OZXdNZXNzYWdlc1xuXHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gZ2V0Rm9sZGVySGFzaChkYXRhLlJlc3VsdC5Gb2xkZXIpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhLlJlc3VsdC5IYXNoICE9PSBoYXNoIHx8ICcnID09PSBoYXNoIHx8IHVucmVhZENvdW50Q2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9sZGVyRnJvbUNhY2hlLmZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbG9hZE1lc3NhZ2VMaXN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGdldEZvbGRlckluYm94TmFtZSgpID09PSBmb2xkZXJGcm9tQ2FjaGUuZnVsbE5hbWVSYXcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWNhY2hlSW5ib3hNZXNzYWdlTGlzdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9sZGVyLFxuXHRcdFx0XHRsaXN0XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBib290ID0gZmFsc2Vcblx0ICovXG5cdGZvbGRlckluZm9ybWF0aW9uTXVsdGlwbHkoYm9vdCA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgZm9sZGVycyA9IEZvbGRlclN0b3JlLmdldE5leHRGb2xkZXJOYW1lcygpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoZm9sZGVycykpIHtcblx0XHRcdFJlbW90ZS5mb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5SZXN1bHQgJiYgb0RhdGEuUmVzdWx0Lkxpc3QgJiYgaXNOb25FbXB0eUFycmF5KG9EYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXRjID0gbW9tZW50Tm93VW5peCgpO1xuXHRcdFx0XHRcdFx0Xy5lYWNoKG9EYXRhLlJlc3VsdC5MaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gZ2V0Rm9sZGVySGFzaChpdGVtLkZvbGRlciksXG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChpdGVtLkZvbGRlcik7XG5cdFx0XHRcdFx0XHRcdGxldCB1bnJlYWRDb3VudENoYW5nZSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIuaW50ZXJ2YWwgPSB1dGM7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5IYXNoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRGb2xkZXJIYXNoKGl0ZW0uRm9sZGVyLCBpdGVtLkhhc2gpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChpdGVtLk1lc3NhZ2VDb3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRBbGwoaXRlbS5NZXNzYWdlQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChpdGVtLk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwSW50KGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkgIT09IHBJbnQoaXRlbS5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVucmVhZENvdW50Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChpdGVtLk1lc3NhZ2VVbnNlZW5Db3VudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVucmVhZENvdW50Q2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKGZvbGRlci5mdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uSGFzaCAhPT0gaGFzaCB8fCAnJyA9PT0gaGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZvbGRlci5mdWxsTmFtZVJhdyA9PT0gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRNZXNzYWdlTGlzdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodW5yZWFkQ291bnRDaGFuZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb2xkZXIuZnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxpc3QgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9sZGVySW5mb3JtYXRpb24oZm9sZGVyLmZ1bGxOYW1lUmF3LCBsaXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChib290KSB7XG5cdFx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5mb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KHRydWUpLCAyMDAwKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIGZvbGRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpU2V0QWN0aW9uXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBtZXNzYWdlcyA9IG51bGxcblx0ICovXG5cdG1lc3NhZ2VMaXN0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgaVNldEFjdGlvbiwgbWVzc2FnZXMpIHtcblx0XHRsZXQgZm9sZGVyID0gbnVsbCxcblx0XHRcdGFscmVhZHlVbnJlYWQgPSAwLFxuXHRcdFx0cm9vdFVpZHMgPSBbXTtcblxuXHRcdGlmIChpc1VuZChtZXNzYWdlcykgfHwgIW1lc3NhZ2VzKSB7XG5cdFx0XHRtZXNzYWdlcyA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWQoKTtcblx0XHR9XG5cblx0XHRyb290VWlkcyA9IF8udW5pcShfLmNvbXBhY3QoXy5tYXAobWVzc2FnZXMsIChvTWVzc2FnZSkgPT4gKG9NZXNzYWdlICYmIG9NZXNzYWdlLnVpZCA/IG9NZXNzYWdlLnVpZCA6IG51bGwpKSkpO1xuXG5cdFx0aWYgKCcnICE9PSBzRm9sZGVyRnVsbE5hbWVSYXcgJiYgMCA8IHJvb3RVaWRzLmxlbmd0aCkge1xuXHRcdFx0c3dpdGNoIChpU2V0QWN0aW9uKSB7XG5cdFx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdGFscmVhZHlVbnJlYWQgKz0gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkLCBpU2V0QWN0aW9uKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIGFscmVhZHlVbnJlYWQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2Vlbihub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIHJvb3RVaWRzLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdGFscmVhZHlVbnJlYWQgKz0gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkLCBpU2V0QWN0aW9uKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIGFscmVhZHlVbnJlYWQgKyByb290VWlkcy5sZW5ndGgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2Vlbihub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIHJvb3RVaWRzLCBmYWxzZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWc6XG5cdFx0XHRcdFx0Xy5lYWNoKHJvb3RVaWRzLCAoc1N1YlVpZCkgPT4ge1xuXHRcdFx0XHRcdFx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkLCBpU2V0QWN0aW9uKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0RmxhZ2dlZChub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIHJvb3RVaWRzLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCwgaVNldEFjdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRSZW1vdGUubWVzc2FnZVNldEZsYWdnZWQobm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCByb290VWlkcywgZmFsc2UpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZS52aWV3VHJpZ2dlcighTWVzc2FnZVN0b3JlLm1lc3NhZ2Uudmlld1RyaWdnZXIoKSk7XG5cdFx0fVxuXHR9XG5cblx0Z29vZ2xlQ29ubmVjdCgpIHtcblx0XHR3aW5kb3cub3Blbihcblx0XHRcdHNvY2lhbEdvb2dsZSgpLFxuXHRcdFx0J0dvb2dsZScsXG5cdFx0XHQnbGVmdD0yMDAsdG9wPTEwMCx3aWR0aD02NTAsaGVpZ2h0PTYwMCxtZW51YmFyPW5vLHN0YXR1cz1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzJ1xuXHRcdCk7XG5cdH1cblxuXHR0d2l0dGVyQ29ubmVjdCgpIHtcblx0XHR3aW5kb3cub3Blbihcblx0XHRcdHNvY2lhbFR3aXR0ZXIoKSxcblx0XHRcdCdUd2l0dGVyJyxcblx0XHRcdCdsZWZ0PTIwMCx0b3A9MTAwLHdpZHRoPTY1MCxoZWlnaHQ9MzUwLG1lbnViYXI9bm8sc3RhdHVzPW5vLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz15ZXMnXG5cdFx0KTtcblx0fVxuXG5cdGZhY2Vib29rQ29ubmVjdCgpIHtcblx0XHR3aW5kb3cub3Blbihcblx0XHRcdHNvY2lhbEZhY2Vib29rKCksXG5cdFx0XHQnRmFjZWJvb2snLFxuXHRcdFx0J2xlZnQ9MjAwLHRvcD0xMDAsd2lkdGg9NjUwLGhlaWdodD0zMzUsbWVudWJhcj1ubyxzdGF0dXM9bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcydcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGZpcmVBbGxBY3Rpb25zID0gZmFsc2Vcblx0ICovXG5cdHNvY2lhbFVzZXJzKGZpcmVBbGxBY3Rpb25zID0gZmFsc2UpIHtcblx0XHRpZiAodHJ1ZSA9PT0gZmlyZUFsbEFjdGlvbnMpIHtcblx0XHRcdFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nKHRydWUpO1xuXHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2subG9hZGluZyh0cnVlKTtcblx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZyh0cnVlKTtcblx0XHR9XG5cblx0XHRSZW1vdGUuc29jaWFsVXNlcnMoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLmdvb2dsZS51c2VyTmFtZShkYXRhLlJlc3VsdC5Hb29nbGUgfHwgJycpO1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay51c2VyTmFtZShkYXRhLlJlc3VsdC5GYWNlYm9vayB8fCAnJyk7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIudXNlck5hbWUoZGF0YS5SZXN1bHQuVHdpdHRlciB8fCAnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUudXNlck5hbWUoJycpO1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay51c2VyTmFtZSgnJyk7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIudXNlck5hbWUoJycpO1xuXHRcdFx0fVxuXG5cdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZyhmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRnb29nbGVEaXNjb25uZWN0KCkge1xuXHRcdFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5nb29nbGVEaXNjb25uZWN0KHRoaXMuc29jaWFsVXNlcnMpO1xuXHR9XG5cblx0ZmFjZWJvb2tEaXNjb25uZWN0KCkge1xuXHRcdFNvY2lhbFN0b3JlLmZhY2Vib29rLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLmZhY2Vib29rRGlzY29ubmVjdCh0aGlzLnNvY2lhbFVzZXJzKTtcblx0fVxuXG5cdHR3aXR0ZXJEaXNjb25uZWN0KCkge1xuXHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUudHdpdHRlckRpc2Nvbm5lY3QodGhpcy5zb2NpYWxVc2Vycyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGF1dG9jb21wbGV0ZUNhbGxiYWNrXG5cdCAqL1xuXHRnZXRBdXRvY29tcGxldGUocXVlcnksIGF1dG9jb21wbGV0ZUNhbGxiYWNrKSB7XG5cdFx0UmVtb3RlLnN1Z2dlc3Rpb25zKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBpc0FycmF5KGRhdGEuUmVzdWx0KSkge1xuXHRcdFx0XHRhdXRvY29tcGxldGVDYWxsYmFjayhcblx0XHRcdFx0XHRfLmNvbXBhY3QoXy5tYXAoZGF0YS5SZXN1bHQsIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtWzBdID8gbmV3IEVtYWlsTW9kZWwoaXRlbVswXSwgaXRlbVsxXSkgOiBudWxsKSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0ICE9PSByZXN1bHQpIHtcblx0XHRcdFx0YXV0b2NvbXBsZXRlQ2FsbGJhY2soW10pO1xuXHRcdFx0fVxuXHRcdH0sIHF1ZXJ5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Z1bGxOYW1lSGFzaFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJFeHBhbmRlZFxuXHQgKi9cblx0c2V0RXhwYW5kZWRGb2xkZXIoc0Z1bGxOYW1lSGFzaCwgYkV4cGFuZGVkKSB7XG5cdFx0bGV0IGFFeHBhbmRlZExpc3QgPSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuRXhwYW5kZWRGb2xkZXJzKTtcblx0XHRpZiAoIWlzQXJyYXkoYUV4cGFuZGVkTGlzdCkpIHtcblx0XHRcdGFFeHBhbmRlZExpc3QgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoYkV4cGFuZGVkKSB7XG5cdFx0XHRhRXhwYW5kZWRMaXN0LnB1c2goc0Z1bGxOYW1lSGFzaCk7XG5cdFx0XHRhRXhwYW5kZWRMaXN0ID0gXy51bmlxKGFFeHBhbmRlZExpc3QpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhRXhwYW5kZWRMaXN0ID0gXy53aXRob3V0KGFFeHBhbmRlZExpc3QsIHNGdWxsTmFtZUhhc2gpO1xuXHRcdH1cblxuXHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5FeHBhbmRlZEZvbGRlcnMsIGFFeHBhbmRlZExpc3QpO1xuXHR9XG5cblx0aW5pdEhvcml6b250YWxMYXlvdXRSZXNpemVyKHNDbGllbnRTaWRlS2V5TmFtZSkge1xuXHRcdGxldCB0b3AgPSBudWxsLFxuXHRcdFx0Ym90dG9tID0gbnVsbDtcblxuXHRcdGNvbnN0IG1pbkhlaWdodCA9IDIwMCxcblx0XHRcdG1heEhlaWdodCA9IDUwMCxcblx0XHRcdGZTZXRIZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG5cdFx0XHRcdGlmIChoZWlnaHQpIHtcblx0XHRcdFx0XHRpZiAodG9wKSB7XG5cdFx0XHRcdFx0XHR0b3AuYXR0cignc3R5bGUnLCAnaGVpZ2h0OicgKyBoZWlnaHQgKyAncHgnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoYm90dG9tKSB7XG5cdFx0XHRcdFx0XHRib3R0b20uYXR0cignc3R5bGUnLCAndG9wOicgKyAoNTUgLyogdG9wIHRvb2xiYXIgKi8gKyBoZWlnaHQpICsgJ3B4Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZlJlc2l6ZUNyZWF0ZUZ1bmN0aW9uID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC50YXJnZXQpIHtcblx0XHRcdFx0XHQkKGV2ZW50LnRhcmdldClcblx0XHRcdFx0XHRcdC5maW5kKCcudWktcmVzaXphYmxlLWhhbmRsZScpXG5cdFx0XHRcdFx0XHQub24oJ21vdXNlZG93bicsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQub24oJ21vdXNldXAnLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1yZXNpemVyJyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVTdGFydEZ1bmN0aW9uID0gKCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVSZXNpemVGdW5jdGlvbiA9IF8uZGVib3VuY2UoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQ1MDAsXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRmUmVzaXplU3RvcEZ1bmN0aW9uID0gKG9FdmVudCwgb09iamVjdCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRpZiAob09iamVjdCAmJiBvT2JqZWN0LnNpemUgJiYgb09iamVjdC5zaXplLmhlaWdodCkge1xuXHRcdFx0XHRcdExvY2FsLnNldChzQ2xpZW50U2lkZUtleU5hbWUsIG9PYmplY3Quc2l6ZS5oZWlnaHQpO1xuXG5cdFx0XHRcdFx0ZlNldEhlaWdodChvT2JqZWN0LnNpemUuaGVpZ2h0KTtcblxuXHRcdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b09wdGlvbnMgPSB7XG5cdFx0XHRcdGhlbHBlcjogJ3VpLXJlc2l6YWJsZS1oZWxwZXItaCcsXG5cdFx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0LFxuXHRcdFx0XHRtYXhIZWlnaHQ6IG1heEhlaWdodCxcblx0XHRcdFx0aGFuZGxlczogJ3MnLFxuXHRcdFx0XHRjcmVhdGU6IGZSZXNpemVDcmVhdGVGdW5jdGlvbixcblx0XHRcdFx0cmVzaXplOiBmUmVzaXplUmVzaXplRnVuY3Rpb24sXG5cdFx0XHRcdHN0YXJ0OiBmUmVzaXplU3RhcnRGdW5jdGlvbixcblx0XHRcdFx0c3RvcDogZlJlc2l6ZVN0b3BGdW5jdGlvblxuXHRcdFx0fSxcblx0XHRcdGZEaXNhYmxlID0gKGJEaXNhYmxlKSA9PiB7XG5cdFx0XHRcdGlmIChiRGlzYWJsZSkge1xuXHRcdFx0XHRcdGlmICh0b3AgJiYgdG9wLmhhc0NsYXNzKCd1aS1yZXNpemFibGUnKSkge1xuXHRcdFx0XHRcdFx0dG9wLnJlc2l6YWJsZSgnZGVzdHJveScpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGJvdHRvbSkge1xuXHRcdFx0XHRcdFx0Ym90dG9tLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKCRodG1sLmhhc0NsYXNzKCdybC1ib3R0b20tcHJldmlldy1wYW5lJykpIHtcblx0XHRcdFx0XHR0b3AgPSAkKCcuYi1tZXNzYWdlLWxpc3Qtd3JhcHBlcicpO1xuXHRcdFx0XHRcdGJvdHRvbSA9ICQoJy5iLW1lc3NhZ2Utdmlldy13cmFwcGVyJyk7XG5cblx0XHRcdFx0XHRpZiAoIXRvcC5oYXNDbGFzcygndWktcmVzaXphYmxlJykpIHtcblx0XHRcdFx0XHRcdHRvcC5yZXNpemFibGUob09wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGlIZWlnaHQgPSBwSW50KExvY2FsLmdldChzQ2xpZW50U2lkZUtleU5hbWUpKSB8fCAzMDA7XG5cdFx0XHRcdFx0ZlNldEhlaWdodChpSGVpZ2h0ID4gbWluSGVpZ2h0ID8gaUhlaWdodCA6IG1pbkhlaWdodCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRmRGlzYWJsZShmYWxzZSk7XG5cblx0XHRFdmVudHMuc3ViKCdsYXlvdXQnLCAobGF5b3V0KSA9PiB7XG5cdFx0XHRmRGlzYWJsZShMYXlvdXQuQm90dG9tUHJldmlldyAhPT0gbGF5b3V0KTtcblx0XHR9KTtcblx0fVxuXG5cdGluaXRWZXJ0aWNhbExheW91dFJlc2l6ZXIoc0NsaWVudFNpZGVLZXlOYW1lKSB7XG5cdFx0Y29uc3QgZGlzYWJsZWRXaWR0aCA9IDYwLFxuXHRcdFx0bWluV2lkdGggPSAxNTUsXG5cdFx0XHRsTGVmdCA9ICQoJyNybC1sZWZ0JyksXG5cdFx0XHRyaWdodCA9ICQoJyNybC1yaWdodCcpLFxuXHRcdFx0bUxlZnRXaWR0aCA9IExvY2FsLmdldChzQ2xpZW50U2lkZUtleU5hbWUpIHx8IG51bGwsXG5cdFx0XHRmU2V0V2lkdGggPSAoaVdpZHRoKSA9PiB7XG5cdFx0XHRcdGlmIChpV2lkdGgpIHtcblx0XHRcdFx0XHRsZWZ0UGFuZWxXaWR0aChpV2lkdGgpO1xuXG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblxuXHRcdFx0XHRcdGxMZWZ0LmNzcyh7XG5cdFx0XHRcdFx0XHR3aWR0aDogJycgKyBpV2lkdGggKyAncHgnXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRyaWdodC5jc3Moe1xuXHRcdFx0XHRcdFx0bGVmdDogJycgKyBpV2lkdGggKyAncHgnXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmRGlzYWJsZSA9IChiRGlzYWJsZSkgPT4ge1xuXHRcdFx0XHRpZiAoYkRpc2FibGUpIHtcblx0XHRcdFx0XHRsTGVmdC5yZXNpemFibGUoJ2Rpc2FibGUnKTtcblx0XHRcdFx0XHRmU2V0V2lkdGgoZGlzYWJsZWRXaWR0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bExlZnQucmVzaXphYmxlKCdlbmFibGUnKTtcblx0XHRcdFx0XHRjb25zdCB3aWR0aCA9IHBJbnQoTG9jYWwuZ2V0KHNDbGllbnRTaWRlS2V5TmFtZSkpIHx8IG1pbldpZHRoO1xuXHRcdFx0XHRcdGZTZXRXaWR0aCh3aWR0aCA+IG1pbldpZHRoID8gd2lkdGggOiBtaW5XaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmUmVzaXplQ3JlYXRlRnVuY3Rpb24gPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCkge1xuXHRcdFx0XHRcdCQoZXZlbnQudGFyZ2V0KVxuXHRcdFx0XHRcdFx0LmZpbmQoJy51aS1yZXNpemFibGUtaGFuZGxlJylcblx0XHRcdFx0XHRcdC5vbignbW91c2Vkb3duJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5vbignbW91c2V1cCcsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uID0gXy5kZWJvdW5jZShcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1yZXNpemVyJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdDUwMCxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KSxcblx0XHRcdGZSZXNpemVTdGFydEZ1bmN0aW9uID0gKCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVTdG9wRnVuY3Rpb24gPSAoZXZlbnQsIG9iaikgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRpZiAob2JqICYmIG9iai5zaXplICYmIG9iai5zaXplLndpZHRoKSB7XG5cdFx0XHRcdFx0TG9jYWwuc2V0KHNDbGllbnRTaWRlS2V5TmFtZSwgb2JqLnNpemUud2lkdGgpO1xuXG5cdFx0XHRcdFx0bGVmdFBhbmVsV2lkdGgob2JqLnNpemUud2lkdGgpO1xuXG5cdFx0XHRcdFx0cmlnaHQuY3NzKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICcnICsgb2JqLnNpemUud2lkdGggKyAncHgnXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRsTGVmdC5jc3Moe1xuXHRcdFx0XHRcdFx0cG9zaXRpb246ICcnLFxuXHRcdFx0XHRcdFx0dG9wOiAnJyxcblx0XHRcdFx0XHRcdGxlZnQ6ICcnLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiAnJ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKG51bGwgIT09IG1MZWZ0V2lkdGgpIHtcblx0XHRcdGZTZXRXaWR0aChtTGVmdFdpZHRoID4gbWluV2lkdGggPyBtTGVmdFdpZHRoIDogbWluV2lkdGgpO1xuXHRcdH1cblxuXHRcdGxMZWZ0LnJlc2l6YWJsZSh7XG5cdFx0XHRoZWxwZXI6ICd1aS1yZXNpemFibGUtaGVscGVyLXcnLFxuXHRcdFx0bWluV2lkdGg6IG1pbldpZHRoLFxuXHRcdFx0bWF4V2lkdGg6IE1hZ2ljcy5TaXplMzUwcHgsXG5cdFx0XHRoYW5kbGVzOiAnZScsXG5cdFx0XHRjcmVhdGU6IGZSZXNpemVDcmVhdGVGdW5jdGlvbixcblx0XHRcdHJlc2l6ZTogZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uLFxuXHRcdFx0c3RhcnQ6IGZSZXNpemVTdGFydEZ1bmN0aW9uLFxuXHRcdFx0c3RvcDogZlJlc2l6ZVN0b3BGdW5jdGlvblxuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbGVmdC1wYW5lbC5vZmYnLCAoKSA9PiB7XG5cdFx0XHRmRGlzYWJsZSh0cnVlKTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ2xlZnQtcGFuZWwub24nLCAoKSA9PiB7XG5cdFx0XHRmRGlzYWJsZShmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRsb2dvdXQoKSB7XG5cdFx0UmVtb3RlLmxvZ291dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmxvZ2luQW5kTG9nb3V0UmVsb2FkKFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1BhcmVudEVtYWlsJykgJiYgMCA8IFNldHRpbmdzLnNldHRpbmdzR2V0KCdQYXJlbnRFbWFpbCcpLmxlbmd0aFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXG5cdGJvb3RzdGFydFR3b0ZhY3RvclNjcmVlbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uJyksIFt0cnVlXSk7XG5cdH1cblxuXHRib290c3RhcnRXZWxjb21lUG9wdXAodXJsKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvV2VsY29tZVBhZ2UnKSwgW3VybF0pO1xuXHR9XG5cblx0Ym9vdHN0YXJ0TG9naW5TY3JlZW4oKSB7XG5cdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXVzZXItYXV0aCcpLmFkZENsYXNzKCdybC11c2VyLW5vLWF1dGgnKTtcblxuXHRcdGNvbnN0IGN1c3RvbUxvZ2luTGluayA9IHBTdHJpbmcoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2N1c3RvbUxvZ2luTGluaycpKTtcblx0XHRpZiAoIWN1c3RvbUxvZ2luTGluaykge1xuXHRcdFx0c3RhcnRTY3JlZW5zKFtMb2dpblVzZXJTY3JlZW5dKTtcblxuXHRcdFx0cnVuSG9vaygncmwtc3RhcnQtbG9naW4tc2NyZWVucycpO1xuXHRcdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0LWxvZ2luLXNjcmVlbnMnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ2luTGluaztcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJvb3RlbmQoKSB7XG5cdFx0aWYgKHByb2dyZXNzSnMpIHtcblx0XHRcdHByb2dyZXNzSnMuc2V0KDEwMCkuZW5kKCk7XG5cdFx0fVxuXHRcdGhpZGVMb2FkaW5nKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0c3VwZXIuYm9vdHN0YXJ0KCk7XG5cblx0XHRBcHBTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdFNldHRpbmdzU3RvcmUucG9wdWxhdGUoKTtcblx0XHROb3RpZmljYXRpb25TdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdEFjY291bnRTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdENvbnRhY3RTdG9yZS5wb3B1bGF0ZSgpO1xuXG5cdFx0bGV0IGNvbnRhY3RzU3luY0ludGVydmFsID0gcEludChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jSW50ZXJ2YWwnKSk7XG5cblx0XHRjb25zdCBqc0hhc2ggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnanNIYXNoJyksXG5cdFx0XHRzdGFydHVwVXJsID0gcFN0cmluZyhTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3RhcnR1cFVybCcpKSxcblx0XHRcdGFsbG93R29vZ2xlID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJyksXG5cdFx0XHRhbGxvd0ZhY2Vib29rID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSxcblx0XHRcdGFsbG93VHdpdHRlciA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKTtcblxuXHRcdGlmIChwcm9ncmVzc0pzKSB7XG5cdFx0XHRwcm9ncmVzc0pzLnNldCg5MCk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1YignbGVmdC1wYW5lbC4nICsgKHZhbHVlID8gJ29mZicgOiAnb24nKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXVzZXItYXV0aCcpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpICYmXG5cdFx0XHRcdFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3JGb3JjZSkgJiZcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1JlcXVpcmVUd29GYWN0b3InKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuYm9vdGVuZCgpO1xuXHRcdFx0XHR0aGlzLmJvb3RzdGFydFR3b0ZhY3RvclNjcmVlbigpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRXaW5kb3dUaXRsZShpMThuKCdUSVRMRVMvTE9BRElORycpKTtcblxuXHRcdFx0XHQvLyByZXF1aXJlLmVuc3VyZShbXSwgZnVuY3Rpb24oKSB7IC8vIHJlcXVpcmUgY29kZSBzcGxpdHRpbmdcblxuXHRcdFx0XHR0aGlzLmZvbGRlcnNSZWxvYWQoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ib290ZW5kKCk7XG5cblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGlmICgnJyAhPT0gc3RhcnR1cFVybCkge1xuXHRcdFx0XHRcdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0XHRcdFx0XHRzZXRIYXNoKHJvb3Qoc3RhcnR1cFVybCksIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRyb3V0ZU9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChqYXNzbCAmJiB3aW5kb3cuY3J5cHRvICYmIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIFNldHRpbmdzLmNhcGEoQ2FwYS5PcGVuUEdQKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvcGVucGdwQ2FsbGJhY2sgPSAob3BlbnBncCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3AgPSBvcGVucGdwO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHdpbmRvdy5Xb3JrZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3AuaW5pdFdvcmtlcih7IHBhdGg6IG9wZW5QZ3BXb3JrZXJKcygpIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncEtleXJpbmcgPSBuZXcgb3BlbnBncC5LZXlyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0UGdwU3RvcmUuY2FwYU9wZW5QR1AodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRFdmVudHMucHViKCdvcGVucGdwLmluaXQnKTtcblxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVsb2FkT3BlblBncEtleXMoKTtcblx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRpZiAod2luZG93Lm9wZW5wZ3ApIHtcblx0XHRcdFx0XHRcdFx0XHRvcGVucGdwQ2FsbGJhY2sod2luZG93Lm9wZW5wZ3ApO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGphc3NsKG9wZW5QZ3BKcygpKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh3aW5kb3cub3BlbnBncCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcGVucGdwQ2FsbGJhY2sod2luZG93Lm9wZW5wZ3ApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRQZ3BTdG9yZS5jYXBhT3BlblBHUChmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0U2NyZWVucyhbXG5cdFx0XHRcdFx0XHRcdE1haWxCb3hVc2VyU2NyZWVuLFxuXHRcdFx0XHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuU2V0dGluZ3MpID8gU2V0dGluZ3NVc2VyU2NyZWVuIDogbnVsbFxuXHRcdFx0XHRcdFx0XHQvLyBmYWxzZSA/IEFib3V0VXNlclNjcmVlbiA6IG51bGxcblx0XHRcdFx0XHRcdF0pO1xuXG5cdFx0XHRcdFx0XHRpZiAoYWxsb3dHb29nbGUgfHwgYWxsb3dGYWNlYm9vayB8fCBhbGxvd1R3aXR0ZXIpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zb2NpYWxVc2Vycyh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMm0nLCAoKSA9PiB0aGlzLmZvbGRlckluZm9ybWF0aW9uKGdldEZvbGRlckluYm94TmFtZSgpKSk7XG5cdFx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4zbScsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0YgPSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGdldEZvbGRlckluYm94TmFtZSgpICE9PSBzRikge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9sZGVySW5mb3JtYXRpb24oc0YpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMm0tYWZ0ZXI1bScsICgpID0+IHRoaXMuZm9sZGVySW5mb3JtYXRpb25NdWx0aXBseSgpKTtcblx0XHRcdFx0XHRcdEV2ZW50cy5zdWIoJ2ludGVydmFsLjE1bScsICgpID0+IHRoaXMucXVvdGEoKSk7XG5cdFx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4yMG0nLCAoKSA9PiB0aGlzLmZvbGRlcnNSZWxvYWQoKSk7XG5cblx0XHRcdFx0XHRcdGNvbnRhY3RzU3luY0ludGVydmFsID0gNSA8PSBjb250YWN0c1N5bmNJbnRlcnZhbCA/IGNvbnRhY3RzU3luY0ludGVydmFsIDogMjA7XG5cdFx0XHRcdFx0XHRjb250YWN0c1N5bmNJbnRlcnZhbCA9IDMyMCA+PSBjb250YWN0c1N5bmNJbnRlcnZhbCA/IGNvbnRhY3RzU3luY0ludGVydmFsIDogMzIwO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMuY29udGFjdHNTeW5jKCksIE1hZ2ljcy5UaW1lMTBzKTtcblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5mb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KHRydWUpLCBNYWdpY3MuVGltZTJzKTtcblxuXHRcdFx0XHRcdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IHRoaXMuY29udGFjdHNTeW5jKCksIGNvbnRhY3RzU3luY0ludGVydmFsICogNjAwMDAgKyA1MDAwKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hY2NvdW50c0FuZElkZW50aXRpZXModHJ1ZSk7XG5cblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzRiA9IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZ2V0Rm9sZGVySW5ib3hOYW1lKCkgIT09IHNGKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5mb2xkZXJJbmZvcm1hdGlvbihzRik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sIDEwMDApO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMucXVvdGEoKSwgNTAwMCk7XG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IFJlbW90ZS5hcHBEZWxheVN0YXJ0KG5vb3ApLCAzNTAwMCk7XG5cblx0XHRcdFx0XHRcdEV2ZW50cy5zdWIoJ3JsLmF1dG8tbG9nb3V0JywgKCkgPT4gdGhpcy5sb2dvdXQoKSk7XG5cblx0XHRcdFx0XHRcdHJ1bkhvb2soJ3JsLXN0YXJ0LXVzZXItc2NyZWVucycpO1xuXHRcdFx0XHRcdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0LXVzZXItc2NyZWVucycpO1xuXG5cdFx0XHRcdFx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpIHtcblx0XHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmJvb3RzdGFydFdlbGNvbWVQb3B1cChTZXR0aW5ncy5zZXR0aW5nc0dldCgnV2VsY29tZVBhZ2VVcmwnKSksIDEwMDApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FjY291bnRTaWduTWUnKSAmJlxuXHRcdFx0XHRcdFx0XHR3aW5kb3cubmF2aWdhdG9yLnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyICYmXG5cdFx0XHRcdFx0XHRcdFNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3Nlcilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93Lm5hdmlnYXRvci5yZWdpc3RlclByb3RvY29sSGFuZGxlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J21haWx0bycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICc/bWFpbHRvJnRvPSVzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0JycgKyAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RpdGxlJykgfHwgJ1JhaW5Mb29wJylcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdNYWlsVG9FbWFpbCcpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtYWlsVG9IZWxwZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ01haWxUb0VtYWlsJyksIHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0XHRcdFx0XHRfLmRlZmVyKCgpID0+IHRoaXMuaW5pdFZlcnRpY2FsTGF5b3V0UmVzaXplcihDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJMaXN0U2l6ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxvZ291dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gfSk7IC8vIHJlcXVpcmUgY29kZSBzcGxpdHRpbmdcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ib290ZW5kKCk7XG5cdFx0XHR0aGlzLmJvb3RzdGFydExvZ2luU2NyZWVuKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGFsbG93R29vZ2xlKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2dvb2dsZV9zZXJ2aWNlJ10gPSAoKSA9PiB7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nKHRydWUpO1xuXHRcdFx0XHR0aGlzLnNvY2lhbFVzZXJzKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhbGxvd0ZhY2Vib29rKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2ZhY2Vib29rX3NlcnZpY2UnXSA9ICgpID0+IHtcblx0XHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2subG9hZGluZyh0cnVlKTtcblx0XHRcdFx0dGhpcy5zb2NpYWxVc2VycygpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYWxsb3dUd2l0dGVyKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX3R3aXR0ZXJfc2VydmljZSddID0gKCkgPT4ge1xuXHRcdFx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuc29jaWFsVXNlcnMoKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMW0nLCAoKSA9PiBtb21lbnRSZWxvYWQoKSk7XG5cblx0XHRydW5Ib29rKCdybC1zdGFydC1zY3JlZW5zJyk7XG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0LWVuZCcpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBcHBVc2VyKCk7XG4iLCIvLyBCYXNlNjQgZW5jb2RlIC8gZGVjb2RlXG4vLyBodHRwOi8vd3d3LndlYnRvb2xraXQuaW5mby9cblxuY29uc3QgQkFTRV82NF9DSFIgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAgKi9cbmNvbnN0IEJhc2U2NCA9IHtcblx0Ly8gcHVibGljIG1ldGhvZCBmb3IgdXJsc2FmZSBlbmNvZGluZ1xuXHR1cmxzYWZlX2VuY29kZTogKGlucHV0KSA9PlxuXHRcdEJhc2U2NC5lbmNvZGUoaW5wdXQpXG5cdFx0XHQucmVwbGFjZSgvWytdL2csICctJylcblx0XHRcdC5yZXBsYWNlKC9bXFwvXS9nLCAnXycpXG5cdFx0XHQucmVwbGFjZSgvWz1dL2csICcnKSxcblxuXHQvLyBwdWJsaWMgbWV0aG9kIGZvciBlbmNvZGluZ1xuXHRlbmNvZGU6IChpbnB1dCkgPT4ge1xuXHRcdGxldCBvdXRwdXQgPSAnJyxcblx0XHRcdGNocjEsXG5cdFx0XHRjaHIyLFxuXHRcdFx0Y2hyMyxcblx0XHRcdGVuYzEsXG5cdFx0XHRlbmMyLFxuXHRcdFx0ZW5jMyxcblx0XHRcdGVuYzQsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlucHV0ID0gQmFzZTY0Ll91dGY4X2VuY29kZShpbnB1dCk7XG5cblx0XHR3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xuXHRcdFx0Y2hyMSA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcblx0XHRcdGNocjIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XG5cdFx0XHRjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuXG5cdFx0XHRlbmMxID0gY2hyMSA+PiAyO1xuXHRcdFx0ZW5jMiA9ICgoY2hyMSAmIDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7XG5cdFx0XHRlbmMzID0gKChjaHIyICYgMTUpIDw8IDIpIHwgKGNocjMgPj4gNik7XG5cdFx0XHRlbmM0ID0gY2hyMyAmIDYzO1xuXG5cdFx0XHRpZiAoaXNOYU4oY2hyMikpIHtcblx0XHRcdFx0ZW5jMyA9IGVuYzQgPSA2NDtcblx0XHRcdH0gZWxzZSBpZiAoaXNOYU4oY2hyMykpIHtcblx0XHRcdFx0ZW5jNCA9IDY0O1xuXHRcdFx0fVxuXG5cdFx0XHRvdXRwdXQgPVxuXHRcdFx0XHRvdXRwdXQgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jMSkgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jMikgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jMykgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jNCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fSxcblxuXHQvLyBwdWJsaWMgbWV0aG9kIGZvciBkZWNvZGluZ1xuXHRkZWNvZGU6IChpbnB1dCkgPT4ge1xuXHRcdGxldCBvdXRwdXQgPSAnJyxcblx0XHRcdGNocjEsXG5cdFx0XHRjaHIyLFxuXHRcdFx0Y2hyMyxcblx0XHRcdGVuYzEsXG5cdFx0XHRlbmMyLFxuXHRcdFx0ZW5jMyxcblx0XHRcdGVuYzQsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9cXD1dL2csICcnKTtcblxuXHRcdHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XG5cdFx0XHRlbmMxID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRlbmMyID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRlbmMzID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRlbmM0ID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cblx0XHRcdGNocjEgPSAoZW5jMSA8PCAyKSB8IChlbmMyID4+IDQpO1xuXHRcdFx0Y2hyMiA9ICgoZW5jMiAmIDE1KSA8PCA0KSB8IChlbmMzID4+IDIpO1xuXHRcdFx0Y2hyMyA9ICgoZW5jMyAmIDMpIDw8IDYpIHwgZW5jNDtcblxuXHRcdFx0b3V0cHV0ID0gb3V0cHV0ICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaHIxKTtcblxuXHRcdFx0aWYgKGVuYzMgIT09IDY0KSB7XG5cdFx0XHRcdG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbmM0ICE9PSA2NCkge1xuXHRcdFx0XHRvdXRwdXQgPSBvdXRwdXQgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBCYXNlNjQuX3V0ZjhfZGVjb2RlKG91dHB1dCk7XG5cdH0sXG5cblx0Ly8gcHJpdmF0ZSBtZXRob2QgZm9yIFVURi04IGVuY29kaW5nXG5cdF91dGY4X2VuY29kZTogKHN0cmluZykgPT4ge1xuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xuXG5cdFx0bGV0IHV0ZnRleHQgPSAnJyxcblx0XHRcdG4gPSAwLFxuXHRcdFx0bCA9IHN0cmluZy5sZW5ndGgsXG5cdFx0XHRjID0gMDtcblxuXHRcdGZvciAoOyBuIDwgbDsgbisrKSB7XG5cdFx0XHRjID0gc3RyaW5nLmNoYXJDb2RlQXQobik7XG5cblx0XHRcdGlmIChjIDwgMTI4KSB7XG5cdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcblx0XHRcdH0gZWxzZSBpZiAoYyA+IDEyNyAmJiBjIDwgMjA0OCkge1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgPj4gNikgfCAxOTIpO1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiA2MykgfCAxMjgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEyKSB8IDIyNCk7XG5cdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgPj4gNikgJiA2MykgfCAxMjgpO1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiA2MykgfCAxMjgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1dGZ0ZXh0O1xuXHR9LFxuXG5cdC8vIHByaXZhdGUgbWV0aG9kIGZvciBVVEYtOCBkZWNvZGluZ1xuXHRfdXRmOF9kZWNvZGU6ICh1dGZ0ZXh0KSA9PiB7XG5cdFx0bGV0IHN0cmluZyA9ICcnLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRjID0gMCxcblx0XHRcdGMyID0gMCxcblx0XHRcdGMzID0gMDtcblxuXHRcdHdoaWxlIChpIDwgdXRmdGV4dC5sZW5ndGgpIHtcblx0XHRcdGMgPSB1dGZ0ZXh0LmNoYXJDb2RlQXQoaSk7XG5cblx0XHRcdGlmIChjIDwgMTI4KSB7XG5cdFx0XHRcdHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2UgaWYgKGMgPiAxOTEgJiYgYyA8IDIyNCkge1xuXHRcdFx0XHRjMiA9IHV0ZnRleHQuY2hhckNvZGVBdChpICsgMSk7XG5cdFx0XHRcdHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XG5cdFx0XHRcdGkgKz0gMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGMyID0gdXRmdGV4dC5jaGFyQ29kZUF0KGkgKyAxKTtcblx0XHRcdFx0YzMgPSB1dGZ0ZXh0LmNoYXJDb2RlQXQoaSArIDIpO1xuXHRcdFx0XHRzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAxNSkgPDwgMTIpIHwgKChjMiAmIDYzKSA8PCA2KSB8IChjMyAmIDYzKSk7XG5cdFx0XHRcdGkgKz0gMztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlID0gQmFzZTY0LmRlY29kZTtcbmV4cG9ydCBjb25zdCBlbmNvZGUgPSBCYXNlNjQuZW5jb2RlO1xuZXhwb3J0IGNvbnN0IHVybHNhZmVfZW5jb2RlID0gQmFzZTY0LnVybHNhZmVfZW5jb2RlO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTm9ybWFsLCBwSW50LCBpc1VuZCwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBDbGllbnRTaWRlS2V5TmFtZSwgU2VydmVyRm9sZGVyVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBDYWNoZSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCAqIGFzIExvY2FsIGZyb20gJ1N0b3JhZ2UvQ2xpZW50JztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgRm9sZGVyTW9kZWwgfSBmcm9tICdNb2RlbC9Gb2xkZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RCYXNpY1Byb21pc2VzIH0gZnJvbSAnUHJvbWlzZXMvQWJzdHJhY3RCYXNpYyc7XG5cbmNsYXNzIFByb21pc2VzVXNlclBvcHVsYXRvciBleHRlbmRzIEFic3RyYWN0QmFzaWNQcm9taXNlcyB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Z1bGxOYW1lSGFzaFxuXHQgKiBAcGFyYW0ge0FycmF5P30gZXhwYW5kZWRGb2xkZXJzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNGb2xkZXJFeHBhbmRlZChzRnVsbE5hbWVIYXNoLCBleHBhbmRlZEZvbGRlcnMpIHtcblx0XHRyZXR1cm4gZXhwYW5kZWRGb2xkZXJzICYmIGlzQXJyYXkoZXhwYW5kZWRGb2xkZXJzKSAmJiAtMSAhPT0gXy5pbmRleE9mKGV4cGFuZGVkRm9sZGVycywgc0Z1bGxOYW1lSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bm9ybWFsaXplRm9sZGVyKHNGb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdHJldHVybiAnJyA9PT0gc0ZvbGRlckZ1bGxOYW1lUmF3IHx8XG5cdFx0XHRVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBzRm9sZGVyRnVsbE5hbWVSYXcgfHxcblx0XHRcdG51bGwgIT09IENhY2hlLmdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KVxuXHRcdFx0PyBzRm9sZGVyRnVsbE5hbWVSYXdcblx0XHRcdDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lc3BhY2Vcblx0ICogQHBhcmFtIHtBcnJheX0gYUZvbGRlcnNcblx0ICogQHBhcmFtIHtBcnJheT99IGV4cGFuZGVkRm9sZGVyc1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRmb2xkZXJSZXNwb25zZVBhcnNlUmVjKHNOYW1lc3BhY2UsIGFGb2xkZXJzLCBleHBhbmRlZEZvbGRlcnMpIHtcblx0XHRjb25zdCBiRGlzcGxheVNwZWNTZXR0aW5nID0gRm9sZGVyU3RvcmUuZGlzcGxheVNwZWNTZXR0aW5nKCksXG5cdFx0XHRhTGlzdCA9IFtdO1xuXG5cdFx0Xy5lYWNoKGFGb2xkZXJzLCAob0ZvbGRlcikgPT4ge1xuXHRcdFx0aWYgKG9Gb2xkZXIpIHtcblx0XHRcdFx0bGV0IG9DYWNoZUZvbGRlciA9IENhY2hlLmdldEZvbGRlckZyb21DYWNoZUxpc3Qob0ZvbGRlci5GdWxsTmFtZVJhdyk7XG5cdFx0XHRcdGlmICghb0NhY2hlRm9sZGVyKSB7XG5cdFx0XHRcdFx0b0NhY2hlRm9sZGVyID0gRm9sZGVyTW9kZWwubmV3SW5zdGFuY2VGcm9tSnNvbihvRm9sZGVyKTtcblx0XHRcdFx0XHRpZiAob0NhY2hlRm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRDYWNoZS5zZXRGb2xkZXJUb0NhY2hlTGlzdChvRm9sZGVyLkZ1bGxOYW1lUmF3LCBvQ2FjaGVGb2xkZXIpO1xuXHRcdFx0XHRcdFx0Q2FjaGUuc2V0Rm9sZGVyRnVsbE5hbWVSYXcob0NhY2hlRm9sZGVyLmZ1bGxOYW1lSGFzaCwgb0ZvbGRlci5GdWxsTmFtZVJhdywgb0NhY2hlRm9sZGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlRm9sZGVyKSB7XG5cdFx0XHRcdFx0aWYgKGJEaXNwbGF5U3BlY1NldHRpbmcpIHtcblx0XHRcdFx0XHRcdG9DYWNoZUZvbGRlci5jaGVja2FibGUoISFvRm9sZGVyLkNoZWNrYWJsZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9DYWNoZUZvbGRlci5jaGVja2FibGUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b0NhY2hlRm9sZGVyLmNvbGxhcHNlZCghdGhpcy5pc0ZvbGRlckV4cGFuZGVkKG9DYWNoZUZvbGRlci5mdWxsTmFtZUhhc2gsIGV4cGFuZGVkRm9sZGVycykpO1xuXG5cdFx0XHRcdFx0aWYgKG9Gb2xkZXIuRXh0ZW5kZWQpIHtcblx0XHRcdFx0XHRcdGlmIChvRm9sZGVyLkV4dGVuZGVkLkhhc2gpIHtcblx0XHRcdFx0XHRcdFx0Q2FjaGUuc2V0Rm9sZGVySGFzaChvQ2FjaGVGb2xkZXIuZnVsbE5hbWVSYXcsIG9Gb2xkZXIuRXh0ZW5kZWQuSGFzaCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VDb3VudCkpIHtcblx0XHRcdFx0XHRcdFx0b0NhY2hlRm9sZGVyLm1lc3NhZ2VDb3VudEFsbChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VDb3VudCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0b0NhY2hlRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VVbnNlZW5Db3VudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b0ZvbGRlci5TdWJGb2xkZXJzICYmXG5cdFx0XHRcdFx0XHQnQ29sbGVjdGlvbi9Gb2xkZXJDb2xsZWN0aW9uJyA9PT0gb0ZvbGRlci5TdWJGb2xkZXJzWydAT2JqZWN0J10gJiZcblx0XHRcdFx0XHRcdG9Gb2xkZXIuU3ViRm9sZGVyc1snQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0XHRcdFx0aXNBcnJheShvRm9sZGVyLlN1YkZvbGRlcnNbJ0BDb2xsZWN0aW9uJ10pXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvQ2FjaGVGb2xkZXIuc3ViRm9sZGVycyhcblx0XHRcdFx0XHRcdFx0dGhpcy5mb2xkZXJSZXNwb25zZVBhcnNlUmVjKHNOYW1lc3BhY2UsIG9Gb2xkZXIuU3ViRm9sZGVyc1snQENvbGxlY3Rpb24nXSwgZXhwYW5kZWRGb2xkZXJzKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhTGlzdC5wdXNoKG9DYWNoZUZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBhTGlzdDtcblx0fVxuXG5cdGZvbGRlcnNMaXN0KG9EYXRhKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGEgJiZcblx0XHRcdCdDb2xsZWN0aW9uL0ZvbGRlckNvbGxlY3Rpb24nID09PSBvRGF0YVsnQE9iamVjdCddICYmXG5cdFx0XHRvRGF0YVsnQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0aXNBcnJheShvRGF0YVsnQENvbGxlY3Rpb24nXSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IGV4cGFuZGVkRm9sZGVycyA9IExvY2FsLmdldChDbGllbnRTaWRlS2V5TmFtZS5FeHBhbmRlZEZvbGRlcnMpLFxuXHRcdFx0XHRjbnQgPSBwSW50KG9EYXRhLkNvdW50UmVjKTtcblxuXHRcdFx0bGV0IGxpbWl0ID0gcEludChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnZm9sZGVyU3BlY0xpbWl0JykpO1xuXHRcdFx0bGltaXQgPSAxMDAgPCBsaW1pdCA/IDEwMCA6IDEwID4gbGltaXQgPyAxMCA6IGxpbWl0O1xuXG5cdFx0XHRGb2xkZXJTdG9yZS5kaXNwbGF5U3BlY1NldHRpbmcoMCA+PSBjbnQgfHwgbGltaXQgPCBjbnQpO1xuXG5cdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0KFxuXHRcdFx0XHR0aGlzLmZvbGRlclJlc3BvbnNlUGFyc2VSZWMoXG5cdFx0XHRcdFx0aXNVbmQob0RhdGEuTmFtZXNwYWNlKSA/ICcnIDogb0RhdGEuTmFtZXNwYWNlLFxuXHRcdFx0XHRcdG9EYXRhWydAQ29sbGVjdGlvbiddLFxuXHRcdFx0XHRcdGV4cGFuZGVkRm9sZGVyc1xuXHRcdFx0XHQpXG5cdFx0XHQpOyAvLyBAdG9kbyBvcHRpbWl6YXRpb24gcmVxdWlyZWRcblx0XHR9XG5cdH1cblxuXHRmb2xkZXJzQWRkaXRpb25hbFBhcmFtZXRlcnMob0RhdGEpIHtcblx0XHRpZiAoXG5cdFx0XHRvRGF0YSAmJlxuXHRcdFx0b0RhdGEgJiZcblx0XHRcdCdDb2xsZWN0aW9uL0ZvbGRlckNvbGxlY3Rpb24nID09PSBvRGF0YVsnQE9iamVjdCddICYmXG5cdFx0XHRvRGF0YVsnQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0aXNBcnJheShvRGF0YVsnQENvbGxlY3Rpb24nXSlcblx0XHQpIHtcblx0XHRcdGlmICghaXNVbmQob0RhdGEuTmFtZXNwYWNlKSkge1xuXHRcdFx0XHRGb2xkZXJTdG9yZS5uYW1lc3BhY2UgPSBvRGF0YS5OYW1lc3BhY2U7XG5cdFx0XHR9XG5cblx0XHRcdEFwcFN0b3JlLnRocmVhZHNBbGxvd2VkKCEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZUltYXBUaHJlYWQnKSAmJiBvRGF0YS5Jc1RocmVhZHNTdXBwb3J0ZWQgJiYgdHJ1ZSk7XG5cblx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3Qub3B0aW1pemVkKCEhb0RhdGEuT3B0aW1pemVkKTtcblxuXHRcdFx0bGV0IHVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9EYXRhLlN5c3RlbUZvbGRlcnMgJiZcblx0XHRcdFx0JycgPT09XG5cdFx0XHRcdFx0JycgK1xuXHRcdFx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NlbnRGb2xkZXInKSArXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJhZnRGb2xkZXInKSArXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3BhbUZvbGRlcicpICtcblx0XHRcdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdUcmFzaEZvbGRlcicpICtcblx0XHRcdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdBcmNoaXZlRm9sZGVyJykgK1xuXHRcdFx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ051bGxGb2xkZXInKVxuXHRcdFx0KSB7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdTZW50Rm9sZGVyJywgb0RhdGEuU3lzdGVtRm9sZGVyc1tTZXJ2ZXJGb2xkZXJUeXBlLlNFTlRdIHx8IG51bGwpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnRHJhZnRGb2xkZXInLCBvRGF0YS5TeXN0ZW1Gb2xkZXJzW1NlcnZlckZvbGRlclR5cGUuRFJBRlRTXSB8fCBudWxsKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1NwYW1Gb2xkZXInLCBvRGF0YS5TeXN0ZW1Gb2xkZXJzW1NlcnZlckZvbGRlclR5cGUuSlVOS10gfHwgbnVsbCk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdUcmFzaEZvbGRlcicsIG9EYXRhLlN5c3RlbUZvbGRlcnNbU2VydmVyRm9sZGVyVHlwZS5UUkFTSF0gfHwgbnVsbCk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdBcmNoaXZlRm9sZGVyJywgb0RhdGEuU3lzdGVtRm9sZGVyc1tTZXJ2ZXJGb2xkZXJUeXBlLkFMTF0gfHwgbnVsbCk7XG5cblx0XHRcdFx0dXBkYXRlID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Rm9sZGVyU3RvcmUuc2VudEZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnU2VudEZvbGRlcicpKSk7XG5cdFx0XHRGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJhZnRGb2xkZXInKSkpO1xuXHRcdFx0Rm9sZGVyU3RvcmUuc3BhbUZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3BhbUZvbGRlcicpKSk7XG5cdFx0XHRGb2xkZXJTdG9yZS50cmFzaEZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHJhc2hGb2xkZXInKSkpO1xuXHRcdFx0Rm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXJjaGl2ZUZvbGRlcicpKSk7XG5cblx0XHRcdGlmICh1cGRhdGUpIHtcblx0XHRcdFx0UmVtb3RlLnNhdmVTeXN0ZW1Gb2xkZXJzKG5vb3AsIHtcblx0XHRcdFx0XHRTZW50Rm9sZGVyOiBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCksXG5cdFx0XHRcdFx0RHJhZnRGb2xkZXI6IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdFx0U3BhbUZvbGRlcjogRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpLFxuXHRcdFx0XHRcdFRyYXNoRm9sZGVyOiBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpLFxuXHRcdFx0XHRcdEFyY2hpdmVGb2xkZXI6IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSxcblx0XHRcdFx0XHROdWxsRm9sZGVyOiAnTnVsbEZvbGRlcidcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsIG9EYXRhLkZvbGRlcnNIYXNoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFByb21pc2VzVXNlclBvcHVsYXRvcigpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWx0ZXJSdWxlc1R5cGUsIEZpbHRlcnNBY3Rpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcFN0cmluZywgaW5BcnJheSwgaXNOb25FbXB0eUFycmF5LCBmYWtlTWQ1LCBkZWxlZ2F0ZVJ1bk9uRGVzdHJveSwgd2luZG93UmVzaXplQ2FsbGJhY2sgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGdldEZvbGRlckZyb21DYWNoZUxpc3QgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuXG5pbXBvcnQgeyBGaWx0ZXJDb25kaXRpb25Nb2RlbCB9IGZyb20gJ01vZGVsL0ZpbHRlckNvbmRpdGlvbic7XG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIEZpbHRlck1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdGaWx0ZXJNb2RlbCcpO1xuXG5cdFx0dGhpcy5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaWQgPSAnJztcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmFtZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubmFtZS5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNvbmRpdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuY29uZGl0aW9uc1R5cGUgPSBrby5vYnNlcnZhYmxlKEZpbHRlclJ1bGVzVHlwZS5BbnkpO1xuXG5cdFx0Ly8gQWN0aW9uc1xuXHRcdHRoaXMuYWN0aW9uVmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFjdGlvblZhbHVlU2Vjb25kID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZVRoaXJkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aC5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hY3Rpb25NYXJrQXNSZWFkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFjdGlvbktlZXAgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuYWN0aW9uTm9TdG9wID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFjdGlvblR5cGUgPSBrby5vYnNlcnZhYmxlKEZpbHRlcnNBY3Rpb24uTW92ZVRvKTtcblxuXHRcdHRoaXMuYWN0aW9uVHlwZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZSgnJyk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVTZWNvbmQoJycpO1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZVRoaXJkKCcnKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGgoJycpO1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aC5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBmR2V0UmVhbEZvbGRlck5hbWUgPSAoZm9sZGVyRnVsbE5hbWVSYXcpID0+IHtcblx0XHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoZm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdFx0cmV0dXJuIGZvbGRlciA/IGZvbGRlci5mdWxsTmFtZS5yZXBsYWNlKCcuJyA9PT0gZm9sZGVyLmRlbGltaXRlciA/IC9cXC4vIDogL1tcXFxcL10rLywgJyAvICcpIDogZm9sZGVyRnVsbE5hbWVSYXc7XG5cdFx0fTtcblxuXHRcdHRoaXMubmFtZVN1YiA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRcdGNvbnN0IGFjdGlvblZhbHVlID0gdGhpcy5hY3Rpb25WYWx1ZSgpO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuYWN0aW9uVHlwZSgpKSB7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Nb3ZlVG86XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX01PVkVfVE8nLCB7XG5cdFx0XHRcdFx0XHRGT0xERVI6IGZHZXRSZWFsRm9sZGVyTmFtZShhY3Rpb25WYWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLkZvcndhcmQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX0ZPUldBUkRfVE8nLCB7XG5cdFx0XHRcdFx0XHRFTUFJTDogYWN0aW9uVmFsdWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLlZhY2F0aW9uOlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1NFVFRJTkdTX0ZJTFRFUlMvU1VCTkFNRV9WQUNBVElPTl9NRVNTQUdFJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5SZWplY3Q6XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX1JFSkVDVCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uRGlzY2FyZDpcblx0XHRcdFx0XHRyZXN1bHQgPSBpMThuKCdTRVRUSU5HU19GSUxURVJTL1NVQk5BTUVfRElTQ0FSRCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQgPyAnKCcgKyByZXN1bHQgKyAnKScgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuYWN0aW9uVGVtcGxhdGUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cblx0XHRcdHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKCkpIHtcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLkZvcndhcmQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbkZvcndhcmQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uVmFjYXRpb246XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvblZhY2F0aW9uJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLlJlamVjdDpcblx0XHRcdFx0XHRyZXN1bHQgPSAnU2V0dGluZ3NGaWx0ZXJzQWN0aW9uUmVqZWN0Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLk5vbmU6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbk5vbmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uRGlzY2FyZDpcblx0XHRcdFx0XHRyZXN1bHQgPSAnU2V0dGluZ3NGaWx0ZXJzQWN0aW9uRGlzY2FyZCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Nb3ZlVG86XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbk1vdmVUb0ZvbGRlcic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlZ0Rpc3Bvc2FibGVzKHRoaXMuY29uZGl0aW9ucy5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spKTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoXG5cdFx0XHR0aGlzLm5hbWUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5uYW1lLmVycm9yKCcnID09PSBzVmFsdWUpO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvcignJyA9PT0gc1ZhbHVlKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoW3RoaXMuYWN0aW9uTm9TdG9wLCB0aGlzLmFjdGlvblRlbXBsYXRlXSk7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2FuQmVEZWxldGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdGdlbmVyYXRlSUQoKSB7XG5cdFx0dGhpcy5pZCA9IGZha2VNZDUoKTtcblx0fVxuXG5cdHZlcmlmeSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpKSB7XG5cdFx0XHR0aGlzLm5hbWUuZXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPCB0aGlzLmNvbmRpdGlvbnMoKS5sZW5ndGgpIHtcblx0XHRcdGlmIChfLmZpbmQodGhpcy5jb25kaXRpb25zKCksIChjb25kKSA9PiBjb25kICYmICFjb25kLnZlcmlmeSgpKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCcnID09PSB0aGlzLmFjdGlvblZhbHVlKCkpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0LTEgPFxuXHRcdFx0XHRpbkFycmF5KHRoaXMuYWN0aW9uVHlwZSgpLCBbXG5cdFx0XHRcdFx0RmlsdGVyc0FjdGlvbi5Nb3ZlVG8sXG5cdFx0XHRcdFx0RmlsdGVyc0FjdGlvbi5Gb3J3YXJkLFxuXHRcdFx0XHRcdEZpbHRlcnNBY3Rpb24uUmVqZWN0LFxuXHRcdFx0XHRcdEZpbHRlcnNBY3Rpb24uVmFjYXRpb25cblx0XHRcdFx0XSlcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yKHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKEZpbHRlcnNBY3Rpb24uRm9yd2FyZCA9PT0gdGhpcy5hY3Rpb25UeXBlKCkgJiYgLTEgPT09IHRoaXMuYWN0aW9uVmFsdWUoKS5pbmRleE9mKCdAJykpIHtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWUuZXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0RmlsdGVyc0FjdGlvbi5WYWNhdGlvbiA9PT0gdGhpcy5hY3Rpb25UeXBlKCkgJiZcblx0XHRcdCcnICE9PSB0aGlzLmFjdGlvblZhbHVlRm91cnRoKCkgJiZcblx0XHRcdC0xID09PSB0aGlzLmFjdGlvblZhbHVlRm91cnRoKCkuaW5kZXhPZignQCcpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMubmFtZS5lcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvcihmYWxzZSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRvSnNvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0SUQ6IHRoaXMuaWQsXG5cdFx0XHRFbmFibGVkOiB0aGlzLmVuYWJsZWQoKSA/ICcxJyA6ICcwJyxcblx0XHRcdE5hbWU6IHRoaXMubmFtZSgpLFxuXHRcdFx0Q29uZGl0aW9uc1R5cGU6IHRoaXMuY29uZGl0aW9uc1R5cGUoKSxcblx0XHRcdENvbmRpdGlvbnM6IF8ubWFwKHRoaXMuY29uZGl0aW9ucygpLCAoaXRlbSkgPT4gaXRlbS50b0pzb24oKSksXG5cblx0XHRcdEFjdGlvblZhbHVlOiB0aGlzLmFjdGlvblZhbHVlKCksXG5cdFx0XHRBY3Rpb25WYWx1ZVNlY29uZDogdGhpcy5hY3Rpb25WYWx1ZVNlY29uZCgpLFxuXHRcdFx0QWN0aW9uVmFsdWVUaGlyZDogdGhpcy5hY3Rpb25WYWx1ZVRoaXJkKCksXG5cdFx0XHRBY3Rpb25WYWx1ZUZvdXJ0aDogdGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCgpLFxuXHRcdFx0QWN0aW9uVHlwZTogdGhpcy5hY3Rpb25UeXBlKCksXG5cblx0XHRcdFN0b3A6IHRoaXMuYWN0aW9uTm9TdG9wKCkgPyAnMCcgOiAnMScsXG5cdFx0XHRLZWVwOiB0aGlzLmFjdGlvbktlZXAoKSA/ICcxJyA6ICcwJyxcblx0XHRcdE1hcmtBc1JlYWQ6IHRoaXMuYWN0aW9uTWFya0FzUmVhZCgpID8gJzEnIDogJzAnXG5cdFx0fTtcblx0fVxuXG5cdGFkZENvbmRpdGlvbigpIHtcblx0XHR0aGlzLmNvbmRpdGlvbnMucHVzaChuZXcgRmlsdGVyQ29uZGl0aW9uTW9kZWwoKSk7XG5cdH1cblxuXHRyZW1vdmVDb25kaXRpb24ob0NvbmRpdGlvblRvRGVsZXRlKSB7XG5cdFx0dGhpcy5jb25kaXRpb25zLnJlbW92ZShvQ29uZGl0aW9uVG9EZWxldGUpO1xuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KG9Db25kaXRpb25Ub0RlbGV0ZSk7XG5cdH1cblxuXHRzZXRSZWNpcGllbnRzKCkge1xuXHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGgoQWNjb3VudFN0b3JlLmFjY291bnRzRW1haWxzKCkuam9pbignLCAnKSk7XG5cdH1cblxuXHRwYXJzZShqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvRmlsdGVyJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLmlkID0gcFN0cmluZyhqc29uLklEKTtcblx0XHRcdHRoaXMubmFtZShwU3RyaW5nKGpzb24uTmFtZSkpO1xuXHRcdFx0dGhpcy5lbmFibGVkKCEhanNvbi5FbmFibGVkKTtcblxuXHRcdFx0dGhpcy5jb25kaXRpb25zVHlwZShwU3RyaW5nKGpzb24uQ29uZGl0aW9uc1R5cGUpKTtcblxuXHRcdFx0dGhpcy5jb25kaXRpb25zKFtdKTtcblxuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShqc29uLkNvbmRpdGlvbnMpKSB7XG5cdFx0XHRcdHRoaXMuY29uZGl0aW9ucyhcblx0XHRcdFx0XHRfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChqc29uLkNvbmRpdGlvbnMsIChhRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJDb25kaXRpb24gPSBuZXcgRmlsdGVyQ29uZGl0aW9uTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpbHRlckNvbmRpdGlvbiAmJiBmaWx0ZXJDb25kaXRpb24ucGFyc2UoYURhdGEpID8gZmlsdGVyQ29uZGl0aW9uIDogbnVsbDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmFjdGlvblR5cGUocFN0cmluZyhqc29uLkFjdGlvblR5cGUpKTtcblxuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZShwU3RyaW5nKGpzb24uQWN0aW9uVmFsdWUpKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVTZWNvbmQocFN0cmluZyhqc29uLkFjdGlvblZhbHVlU2Vjb25kKSk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlVGhpcmQocFN0cmluZyhqc29uLkFjdGlvblZhbHVlVGhpcmQpKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGgocFN0cmluZyhqc29uLkFjdGlvblZhbHVlRm91cnRoKSk7XG5cblx0XHRcdHRoaXMuYWN0aW9uTm9TdG9wKCFqc29uLlN0b3ApO1xuXHRcdFx0dGhpcy5hY3Rpb25LZWVwKCEhanNvbi5LZWVwKTtcblx0XHRcdHRoaXMuYWN0aW9uTWFya0FzUmVhZCghIWpzb24uTWFya0FzUmVhZCk7XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNsb25lU2VsZigpIHtcblx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTW9kZWwoKTtcblxuXHRcdGZpbHRlci5pZCA9IHRoaXMuaWQ7XG5cblx0XHRmaWx0ZXIuZW5hYmxlZCh0aGlzLmVuYWJsZWQoKSk7XG5cblx0XHRmaWx0ZXIubmFtZSh0aGlzLm5hbWUoKSk7XG5cdFx0ZmlsdGVyLm5hbWUuZXJyb3IodGhpcy5uYW1lLmVycm9yKCkpO1xuXG5cdFx0ZmlsdGVyLmNvbmRpdGlvbnNUeXBlKHRoaXMuY29uZGl0aW9uc1R5cGUoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uTWFya0FzUmVhZCh0aGlzLmFjdGlvbk1hcmtBc1JlYWQoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uVHlwZSh0aGlzLmFjdGlvblR5cGUoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWUodGhpcy5hY3Rpb25WYWx1ZSgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWUuZXJyb3IodGhpcy5hY3Rpb25WYWx1ZS5lcnJvcigpKTtcblxuXHRcdGZpbHRlci5hY3Rpb25WYWx1ZVNlY29uZCh0aGlzLmFjdGlvblZhbHVlU2Vjb25kKCkpO1xuXHRcdGZpbHRlci5hY3Rpb25WYWx1ZVRoaXJkKHRoaXMuYWN0aW9uVmFsdWVUaGlyZCgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWVGb3VydGgodGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCgpKTtcblxuXHRcdGZpbHRlci5hY3Rpb25LZWVwKHRoaXMuYWN0aW9uS2VlcCgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uTm9TdG9wKHRoaXMuYWN0aW9uTm9TdG9wKCkpO1xuXG5cdFx0ZmlsdGVyLmNvbmRpdGlvbnMoXy5tYXAodGhpcy5jb25kaXRpb25zKCksIChpdGVtKSA9PiBpdGVtLmNsb25lU2VsZigpKSk7XG5cblx0XHRyZXR1cm4gZmlsdGVyO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZpbHRlck1vZGVsLCBGaWx0ZXJNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWx0ZXJDb25kaXRpb25GaWVsZCwgRmlsdGVyQ29uZGl0aW9uVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBGaWx0ZXJDb25kaXRpb25Nb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignRmlsdGVyQ29uZGl0aW9uTW9kZWwnKTtcblxuXHRcdHRoaXMuZmllbGQgPSBrby5vYnNlcnZhYmxlKEZpbHRlckNvbmRpdGlvbkZpZWxkLkZyb20pO1xuXHRcdHRoaXMudHlwZSA9IGtvLm9ic2VydmFibGUoRmlsdGVyQ29uZGl0aW9uVHlwZS5Db250YWlucyk7XG5cdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmFsdWUuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudmFsdWVTZWNvbmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZhbHVlU2Vjb25kLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRlbXBsYXRlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHRlbXBsYXRlID0gJyc7XG5cdFx0XHRzd2l0Y2ggKHRoaXMuZmllbGQoKSkge1xuXHRcdFx0XHRjYXNlIEZpbHRlckNvbmRpdGlvbkZpZWxkLlNpemU6XG5cdFx0XHRcdFx0dGVtcGxhdGUgPSAnU2V0dGluZ3NGaWx0ZXJzQ29uZGl0aW9uU2l6ZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyQ29uZGl0aW9uRmllbGQuSGVhZGVyOlxuXHRcdFx0XHRcdHRlbXBsYXRlID0gJ1NldHRpbmdzRmlsdGVyc0NvbmRpdGlvbk1vcmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRlbXBsYXRlID0gJ1NldHRpbmdzRmlsdGVyc0NvbmRpdGlvbkRlZmF1bHQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0fSwgdGhpcyk7XG5cblx0XHR0aGlzLmZpZWxkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnZhbHVlKCcnKTtcblx0XHRcdHRoaXMudmFsdWVTZWNvbmQoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhbdGhpcy50ZW1wbGF0ZV0pO1xuXHR9XG5cblx0dmVyaWZ5KCkge1xuXHRcdGlmICgnJyA9PT0gdGhpcy52YWx1ZSgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChGaWx0ZXJDb25kaXRpb25GaWVsZC5IZWFkZXIgPT09IHRoaXMuZmllbGQoKSAmJiAnJyA9PT0gdGhpcy52YWx1ZVNlY29uZCgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlU2Vjb25kLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cGFyc2UoanNvbikge1xuXHRcdGlmIChqc29uICYmIGpzb24uRmllbGQgJiYganNvbi5UeXBlKSB7XG5cdFx0XHR0aGlzLmZpZWxkKHBTdHJpbmcoanNvbi5GaWVsZCkpO1xuXHRcdFx0dGhpcy50eXBlKHBTdHJpbmcoanNvbi5UeXBlKSk7XG5cdFx0XHR0aGlzLnZhbHVlKHBTdHJpbmcoanNvbi5WYWx1ZSkpO1xuXHRcdFx0dGhpcy52YWx1ZVNlY29uZChwU3RyaW5nKGpzb24uVmFsdWVTZWNvbmQpKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dG9Kc29uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRGaWVsZDogdGhpcy5maWVsZCgpLFxuXHRcdFx0VHlwZTogdGhpcy50eXBlKCksXG5cdFx0XHRWYWx1ZTogdGhpcy52YWx1ZSgpLFxuXHRcdFx0VmFsdWVTZWNvbmQ6IHRoaXMudmFsdWVTZWNvbmQoKVxuXHRcdH07XG5cdH1cblxuXHRjbG9uZVNlbGYoKSB7XG5cdFx0Y29uc3QgZmlsdGVyQ29uZCA9IG5ldyBGaWx0ZXJDb25kaXRpb25Nb2RlbCgpO1xuXG5cdFx0ZmlsdGVyQ29uZC5maWVsZCh0aGlzLmZpZWxkKCkpO1xuXHRcdGZpbHRlckNvbmQudHlwZSh0aGlzLnR5cGUoKSk7XG5cdFx0ZmlsdGVyQ29uZC52YWx1ZSh0aGlzLnZhbHVlKCkpO1xuXHRcdGZpbHRlckNvbmQudmFsdWVTZWNvbmQodGhpcy52YWx1ZVNlY29uZCgpKTtcblxuXHRcdHJldHVybiBmaWx0ZXJDb25kO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZpbHRlckNvbmRpdGlvbk1vZGVsLCBGaWx0ZXJDb25kaXRpb25Nb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5xcjsiLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9LZXlib2FyZFNob3J0Y3V0c0hlbHAnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJ1xufSlcbmNsYXNzIEtleWJvYXJkU2hvcnRjdXRzSGVscFBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwS2V5Ym9hcmRTaG9ydGN1dHNIZWxwO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHRrZXkoXG5cdFx0XHQndGFiLCBzaGlmdCt0YWIsIGxlZnQsIHJpZ2h0Jyxcblx0XHRcdEtleVN0YXRlLlBvcHVwS2V5Ym9hcmRTaG9ydGN1dHNIZWxwLFxuXHRcdFx0Xy50aHJvdHRsZSgoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGhhbmRsZXIpIHtcblx0XHRcdFx0XHRjb25zdCAkdGFicyA9IGRvbS5maW5kKCcubmF2Lm5hdi10YWJzID4gbGknKSxcblx0XHRcdFx0XHRcdGlzTmV4dCA9IGhhbmRsZXIgJiYgKCd0YWInID09PSBoYW5kbGVyLnNob3J0Y3V0IHx8ICdyaWdodCcgPT09IGhhbmRsZXIuc2hvcnRjdXQpO1xuXG5cdFx0XHRcdFx0bGV0IGluZGV4ID0gJHRhYnMuaW5kZXgoJHRhYnMuZmlsdGVyKCcuYWN0aXZlJykpO1xuXHRcdFx0XHRcdGlmICghaXNOZXh0ICYmIDAgPCBpbmRleCkge1xuXHRcdFx0XHRcdFx0aW5kZXggLT0gMTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzTmV4dCAmJiBpbmRleCA8ICR0YWJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gaXNOZXh0ID8gMCA6ICR0YWJzLmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JHRhYnNcblx0XHRcdFx0XHRcdC5lcShpbmRleClcblx0XHRcdFx0XHRcdC5maW5kKCdhW2RhdGEtdG9nZ2xlPVwidGFiXCJdJylcblx0XHRcdFx0XHRcdC50YWIoJ3Nob3cnKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgeyBLZXlib2FyZFNob3J0Y3V0c0hlbHBQb3B1cFZpZXcsIEtleWJvYXJkU2hvcnRjdXRzSGVscFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcbmltcG9ydCBKdWEgZnJvbSAnSnVhJztcblxuaW1wb3J0IHtcblx0U2F2ZVNldHRpbmdzU3RlcCxcblx0Q29udGFjdFByb3BlcnR5VHlwZSxcblx0Q29tcG9zZVR5cGUsXG5cdENhcGEsXG5cdE1hZ2ljcyxcblx0U3RvcmFnZVJlc3VsdFR5cGUsXG5cdE5vdGlmaWNhdGlvbixcblx0S2V5U3RhdGVcbn0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHtcblx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3ksXG5cdGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyLFxuXHRpbkFycmF5LFxuXHR0cmltLFxuXHR3aW5kb3dSZXNpemVDYWxsYmFjayxcblx0aXNOb25FbXB0eUFycmF5LFxuXHRmYWtlTWQ1LFxuXHRwSW50LFxuXHRpc1VuZFxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBDT05UQUNUU19QRVJfUEFHRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICdDb21tb24vU2VsZWN0b3InO1xuaW1wb3J0IHsgZXhwb3J0Q29udGFjdHNWY2YsIGV4cG9ydENvbnRhY3RzQ3N2LCB1cGxvYWRDb250YWN0cyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBpMThuLCBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBDb250YWN0U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQ29udGFjdCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuaW1wb3J0IHsgQ29udGFjdE1vZGVsIH0gZnJvbSAnTW9kZWwvQ29udGFjdCc7XG5pbXBvcnQgeyBDb250YWN0UHJvcGVydHlNb2RlbCB9IGZyb20gJ01vZGVsL0NvbnRhY3RQcm9wZXJ0eSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCwgc2hvd1NjcmVlblBvcHVwLCBoaWRlU2NyZWVuUG9wdXAsIHJvdXRlT24sIHJvdXRlT2ZmIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Db250YWN0cycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNDb250YWN0cydcbn0pXG5jbGFzcyBDb250YWN0c1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Y29uc3QgZkZhc3RDbGVhckVtcHR5TGlzdEhlbHBlciA9IChsaXN0KSA9PiB7XG5cdFx0XHRpZiAobGlzdCAmJiAwIDwgbGlzdC5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy52aWV3UHJvcGVydGllcy5yZW1vdmVBbGwobGlzdCk7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGxpc3QpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmJCYWNrVG9Db21wb3NlID0gZmFsc2U7XG5cdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSAnJztcblxuXHRcdHRoaXMuYWxsb3dDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuYWxsb3dDb250YWN0c1N5bmM7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuZW5hYmxlQ29udGFjdHNTeW5jO1xuXHRcdHRoaXMuYWxsb3dFeHBvcnQgPSAhYk1vYmlsZURldmljZTtcblxuXHRcdHRoaXMuc2VhcmNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb250YWN0c0NvdW50ID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLmNvbnRhY3RzID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzO1xuXG5cdFx0dGhpcy5jdXJyZW50Q29udGFjdCA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLmltcG9ydFVwbG9hZGVyQnV0dG9uID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuY29udGFjdHNQYWdlID0ga28ub2JzZXJ2YWJsZSgxKTtcblx0XHR0aGlzLmNvbnRhY3RzUGFnZUNvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaVBhZ2UgPSB3aW5kb3cuTWF0aC5jZWlsKHRoaXMuY29udGFjdHNDb3VudCgpIC8gQ09OVEFDVFNfUEVSX1BBR0UpO1xuXHRcdFx0cmV0dXJuIDAgPj0gaVBhZ2UgPyAxIDogaVBhZ2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzUGFnZW5hdG9yID0ga28uY29tcHV0ZWQoY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIodGhpcy5jb250YWN0c1BhZ2UsIHRoaXMuY29udGFjdHNQYWdlQ291bnQpKTtcblxuXHRcdHRoaXMuZW1wdHlTZWxlY3Rpb24gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMudmlld0NsZWFyU2VhcmNoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdJRCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1JlYWRPbmx5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnZpZXdTYXZlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNOYW1lcyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcihcblx0XHRcdFx0dGhpcy52aWV3UHJvcGVydGllcygpLFxuXHRcdFx0XHQocHJvcGVydHkpID0+IC0xIDwgaW5BcnJheShwcm9wZXJ0eS50eXBlKCksIFtDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSwgQ29udGFjdFByb3BlcnR5VHlwZS5MYXN0TmFtZV0pXG5cdFx0XHQpXG5cdFx0KTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzT3RoZXIgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllcygpLCAocHJvcGVydHkpID0+IC0xIDwgaW5BcnJheShwcm9wZXJ0eS50eXBlKCksIFtDb250YWN0UHJvcGVydHlUeXBlLk5pY2tdKSlcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc0VtYWlscyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzKCksIChwcm9wZXJ0eSkgPT4gQ29udGFjdFByb3BlcnR5VHlwZS5FbWFpbCA9PT0gcHJvcGVydHkudHlwZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKHByb3BlcnR5KSA9PiBDb250YWN0UHJvcGVydHlUeXBlLldlYiA9PT0gcHJvcGVydHkudHlwZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLnZpZXdIYXNOb25FbXB0eVJlcXVpcmVkUHJvcGVydGllcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWVzID0gdGhpcy52aWV3UHJvcGVydGllc05hbWVzKCksXG5cdFx0XHRcdGVtYWlscyA9IHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHMoKSxcblx0XHRcdFx0ZkZpbHRlciA9IChwcm9wZXJ0eSkgPT4gJycgIT09IHRyaW0ocHJvcGVydHkudmFsdWUoKSk7XG5cblx0XHRcdHJldHVybiAhIShfLmZpbmQobmFtZXMsIGZGaWx0ZXIpIHx8IF8uZmluZChlbWFpbHMsIGZGaWx0ZXIpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNQaG9uZXMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllcygpLCAocHJvcGVydHkpID0+IENvbnRhY3RQcm9wZXJ0eVR5cGUuUGhvbmUgPT09IHByb3BlcnR5LnR5cGUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc0VtYWlsc05vbkVtcHR5ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXNOYW1lcygpLCAocHJvcGVydHkpID0+ICcnICE9PSB0cmltKHByb3BlcnR5LnZhbHVlKCkpKVxuXHRcdCk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eUZvY3VzZWQgPSAocHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGZvY3VzZWQgPSBwcm9wZXJ0eS5mb2N1c2VkKCk7XG5cdFx0XHRyZXR1cm4gJycgPT09IHRyaW0ocHJvcGVydHkudmFsdWUoKSkgJiYgIWZvY3VzZWQ7XG5cdFx0fTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHNFbXB0eUFuZE9uRm9jdXNlZCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzRW1haWxzKCksIHByb3BlcnR5Rm9jdXNlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc1Bob25lc0VtcHR5QW5kT25Gb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXNQaG9uZXMoKSwgcHJvcGVydHlGb2N1c2VkKVxuXHRcdCk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViRW1wdHlBbmRPbkZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViKCksIHByb3BlcnR5Rm9jdXNlZCkpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc090aGVyRW1wdHlBbmRPbkZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllc090aGVyKCksIHByb3BlcnR5Rm9jdXNlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc0VtYWlsc0VtcHR5QW5kT25Gb2N1c2VkLnN1YnNjcmliZShmRmFzdENsZWFyRW1wdHlMaXN0SGVscGVyKTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzUGhvbmVzRW1wdHlBbmRPbkZvY3VzZWQuc3Vic2NyaWJlKGZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIpO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNXZWJFbXB0eUFuZE9uRm9jdXNlZC5zdWJzY3JpYmUoZkZhc3RDbGVhckVtcHR5TGlzdEhlbHBlcik7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllc090aGVyRW1wdHlBbmRPbkZvY3VzZWQuc3Vic2NyaWJlKGZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIpO1xuXG5cdFx0dGhpcy52aWV3U2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QgPSBTZXR0aW5nc1N0b3JlLnVzZUNoZWNrYm94ZXNJbkxpc3Q7XG5cblx0XHR0aGlzLnNlYXJjaC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250YWN0cy5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblxuXHRcdHRoaXMuY29udGFjdHNDaGVja2VkID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5jb250YWN0cygpLCAoaXRlbSkgPT4gaXRlbS5jaGVja2VkKCkpKTtcblxuXHRcdHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSB0aGlzLmNvbnRhY3RzQ2hlY2tlZCgpLFxuXHRcdFx0XHRzZWxlY3RlZCA9IHRoaXMuY3VycmVudENvbnRhY3QoKTtcblxuXHRcdFx0cmV0dXJuIF8udW5pb24oY2hlY2tlZCwgc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkVWlkcyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKSwgKGNvbnRhY3QpID0+IGNvbnRhY3QuaWRDb250YWN0KVxuXHRcdCk7XG5cblx0XHR0aGlzLnNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKFxuXHRcdFx0dGhpcy5jb250YWN0cyxcblx0XHRcdHRoaXMuY3VycmVudENvbnRhY3QsXG5cdFx0XHRudWxsLFxuXHRcdFx0Jy5lLWNvbnRhY3QtaXRlbSAuYWN0aW9uSGFuZGxlJyxcblx0XHRcdCcuZS1jb250YWN0LWl0ZW0uc2VsZWN0ZWQnLFxuXHRcdFx0Jy5lLWNvbnRhY3QtaXRlbSAuY2hlY2tib3hJdGVtJyxcblx0XHRcdCcuZS1jb250YWN0LWl0ZW0uZm9jdXNlZCdcblx0XHQpO1xuXG5cdFx0dGhpcy5zZWxlY3Rvci5vbignb25JdGVtU2VsZWN0JywgKGNvbnRhY3QpID0+IHtcblx0XHRcdHRoaXMucG9wdWxhdGVWaWV3Q29udGFjdChjb250YWN0ID8gY29udGFjdCA6IG51bGwpO1xuXHRcdFx0aWYgKCFjb250YWN0KSB7XG5cdFx0XHRcdHRoaXMuZW1wdHlTZWxlY3Rpb24odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvbkl0ZW1HZXRVaWQnLCAoY29udGFjdCkgPT4gKGNvbnRhY3QgPyBjb250YWN0LmdlbmVyYXRlVWlkKCkgOiAnJykpO1xuXG5cdFx0dGhpcy5iRHJvcFBhZ2VBZnRlckRlbGV0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy53YXRjaERpcnR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy53YXRjaEhhc2ggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudmlld0hhc2ggPSBrby5jb21wdXRlZCgoKSA9PiAnJyArIF8ubWFwKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKG9JdGVtKSA9PiBvSXRlbS52YWx1ZSgpKS5qb2luKCcnKSk7XG5cblx0XHQvLyB0aGlzLnNhdmVDb21tYW5kRGVib3VuY2UgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnNhdmVDb21tYW5kLCB0aGlzKSwgMTAwMCk7XG5cblx0XHR0aGlzLnZpZXdIYXNoLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy53YXRjaEhhc2goKSAmJiAhdGhpcy52aWV3UmVhZE9ubHkoKSAmJiAhdGhpcy53YXRjaERpcnR5KCkpIHtcblx0XHRcdFx0dGhpcy53YXRjaERpcnR5KHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQ29udGFjdExpc3Q7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdG5ld0NvbW1hbmQoKSB7XG5cdFx0dGhpcy5wb3B1bGF0ZVZpZXdDb250YWN0KG51bGwpO1xuXHRcdHRoaXMuY3VycmVudENvbnRhY3QobnVsbCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gMCA8IHNlbGYuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCgpLmxlbmd0aClcblx0ZGVsZXRlQ29tbWFuZCgpIHtcblx0XHR0aGlzLmRlbGV0ZVNlbGVjdGVkQ29udGFjdHMoKTtcblx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uKHRydWUpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IDAgPCBzZWxmLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKS5sZW5ndGgpXG5cdG5ld01lc3NhZ2VDb21tYW5kKCkge1xuXHRcdGlmICghU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBhRSA9IFtdLFxuXHRcdFx0dG9FbWFpbHMgPSBudWxsLFxuXHRcdFx0Y2NFbWFpbHMgPSBudWxsLFxuXHRcdFx0YmNjRW1haWxzID0gbnVsbDtcblxuXHRcdGNvbnN0IGFDID0gdGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhQykpIHtcblx0XHRcdGFFID0gXy5tYXAoYUMsIChvSXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAob0l0ZW0pIHtcblx0XHRcdFx0XHRjb25zdCBkYXRhID0gb0l0ZW0uZ2V0TmFtZUFuZEVtYWlsSGVscGVyKCksXG5cdFx0XHRcdFx0XHRlbWFpbCA9IGRhdGEgPyBuZXcgRW1haWxNb2RlbChkYXRhWzBdLCBkYXRhWzFdKSA6IG51bGw7XG5cblx0XHRcdFx0XHRpZiAoZW1haWwgJiYgZW1haWwudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVtYWlsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSk7XG5cblx0XHRcdGFFID0gXy5jb21wYWN0KGFFKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGFFKSkge1xuXHRcdFx0dGhpcy5iQmFja1RvQ29tcG9zZSA9IGZhbHNlO1xuXG5cdFx0XHRoaWRlU2NyZWVuUG9wdXAoQ29udGFjdHNQb3B1cFZpZXcpO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkKSB7XG5cdFx0XHRcdGNhc2UgJ2NjJzpcblx0XHRcdFx0XHRjY0VtYWlscyA9IGFFO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdiY2MnOlxuXHRcdFx0XHRcdGJjY0VtYWlscyA9IGFFO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0byc6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dG9FbWFpbHMgPSBhRTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSAnJztcblxuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSwgW0NvbXBvc2VUeXBlLkVtcHR5LCBudWxsLCB0b0VtYWlscywgY2NFbWFpbHMsIGJjY0VtYWlsc10pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGNsZWFyQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNlYXJjaCgnJyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4ge1xuXHRcdGNvbnN0IGJWID0gc2VsZi52aWV3SGFzTm9uRW1wdHlSZXF1aXJlZFByb3BlcnRpZXMoKSxcblx0XHRcdGJSZWFkT25seSA9IHNlbGYudmlld1JlYWRPbmx5KCk7XG5cdFx0cmV0dXJuICFzZWxmLnZpZXdTYXZpbmcoKSAmJiBiViAmJiAhYlJlYWRPbmx5O1xuXHR9KVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnZpZXdTYXZpbmcodHJ1ZSk7XG5cdFx0dGhpcy52aWV3U2F2ZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblxuXHRcdGNvbnN0IHJlcXVlc3RVaWQgPSBmYWtlTWQ1KCksXG5cdFx0XHRwcm9wZXJ0aWVzID0gW107XG5cblx0XHRfLmVhY2godGhpcy52aWV3UHJvcGVydGllcygpLCAob0l0ZW0pID0+IHtcblx0XHRcdGlmIChvSXRlbS50eXBlKCkgJiYgb0l0ZW0udHlwZSgpICE9PSBDb250YWN0UHJvcGVydHlUeXBlLkZ1bGxOYW1lICYmICcnICE9PSB0cmltKG9JdGVtLnZhbHVlKCkpKSB7XG5cdFx0XHRcdHByb3BlcnRpZXMucHVzaChbb0l0ZW0udHlwZSgpLCBvSXRlbS52YWx1ZSgpLCBvSXRlbS50eXBlU3RyKCldKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdFJlbW90ZS5jb250YWN0U2F2ZShcblx0XHRcdChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMudmlld1NhdmluZyhmYWxzZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiZcblx0XHRcdFx0XHRvRGF0YSAmJlxuXHRcdFx0XHRcdG9EYXRhLlJlc3VsdCAmJlxuXHRcdFx0XHRcdG9EYXRhLlJlc3VsdC5SZXF1ZXN0VWlkID09PSByZXF1ZXN0VWlkICYmXG5cdFx0XHRcdFx0MCA8IHBJbnQob0RhdGEuUmVzdWx0LlJlc3VsdElEKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAoJycgPT09IHRoaXMudmlld0lEKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMudmlld0lEKHBJbnQob0RhdGEuUmVzdWx0LlJlc3VsdElEKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCgpO1xuXHRcdFx0XHRcdHJlcyA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnZpZXdTYXZlVHJpZ2dlcihyZXMgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUzNTBtcyk7XG5cblx0XHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHRcdHRoaXMud2F0Y2hEaXJ0eShmYWxzZSk7XG5cblx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudmlld1NhdmVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyZXF1ZXN0VWlkLFxuXHRcdFx0dGhpcy52aWV3SUQoKSxcblx0XHRcdHByb3BlcnRpZXNcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLmNvbnRhY3RzLnN5bmNpbmcoKSAmJiAhc2VsZi5jb250YWN0cy5pbXBvcnRpbmcoKSlcblx0c3luY0NvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuY29udGFjdHNTeW5jKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdHdpbmRvdy5hbGVydChnZXROb3RpZmljYXRpb24oZGF0YSAmJiBkYXRhLkVycm9yQ29kZSA/IGRhdGEuRXJyb3JDb2RlIDogTm90aWZpY2F0aW9uLkNvbnRhY3RzU3luY0Vycm9yKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRQcm9wZXJ0eVBsYWNlaG9sZGVyKHR5cGUpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlIENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWU6XG5cdFx0XHRcdHJlc3VsdCA9ICdDT05UQUNUUy9QTEFDRUhPTERFUl9FTlRFUl9MQVNUX05BTUUnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQ29udGFjdFByb3BlcnR5VHlwZS5GaXJzdE5hbWU6XG5cdFx0XHRcdHJlc3VsdCA9ICdDT05UQUNUUy9QTEFDRUhPTERFUl9FTlRFUl9GSVJTVF9OQU1FJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIENvbnRhY3RQcm9wZXJ0eVR5cGUuTmljazpcblx0XHRcdFx0cmVzdWx0ID0gJ0NPTlRBQ1RTL1BMQUNFSE9MREVSX0VOVEVSX05JQ0tfTkFNRSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGROZXdQcm9wZXJ0eSh0eXBlLCB0eXBlU3RyKSB7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllcy5wdXNoKFxuXHRcdFx0bmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKHR5cGUsIHR5cGVTdHIgfHwgJycsICcnLCB0cnVlLCB0aGlzLmdldFByb3BlcnR5UGxhY2Vob2xkZXIodHlwZSkpXG5cdFx0KTtcblx0fVxuXG5cdGFkZE5ld09yRm9jdXNQcm9wZXJ0eSh0eXBlLCB0eXBlU3RyKSB7XG5cdFx0Y29uc3QgaXRlbSA9IF8uZmluZCh0aGlzLnZpZXdQcm9wZXJ0aWVzKCksIChwcm9wKSA9PiB0eXBlID09PSBwcm9wLnR5cGUoKSk7XG5cdFx0aWYgKGl0ZW0pIHtcblx0XHRcdGl0ZW0uZm9jdXNlZCh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hZGROZXdQcm9wZXJ0eSh0eXBlLCB0eXBlU3RyKTtcblx0XHR9XG5cdH1cblxuXHRhZGROZXdFbWFpbCgpIHtcblx0XHR0aGlzLmFkZE5ld1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuRW1haWwsICdIb21lJyk7XG5cdH1cblxuXHRhZGROZXdQaG9uZSgpIHtcblx0XHR0aGlzLmFkZE5ld1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuUGhvbmUsICdNb2JpbGUnKTtcblx0fVxuXG5cdGFkZE5ld1dlYigpIHtcblx0XHR0aGlzLmFkZE5ld1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuV2ViKTtcblx0fVxuXG5cdGFkZE5ld05pY2tuYW1lKCkge1xuXHRcdHRoaXMuYWRkTmV3T3JGb2N1c1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuTmljayk7XG5cdH1cblxuXHRhZGROZXdOb3RlcygpIHtcblx0XHR0aGlzLmFkZE5ld09yRm9jdXNQcm9wZXJ0eShDb250YWN0UHJvcGVydHlUeXBlLk5vdGUpO1xuXHR9XG5cblx0YWRkTmV3QmlydGhkYXkoKSB7XG5cdFx0dGhpcy5hZGROZXdPckZvY3VzUHJvcGVydHkoQ29udGFjdFByb3BlcnR5VHlwZS5CaXJ0aGRheSk7XG5cdH1cblxuXHRleHBvcnRWY2YoKSB7XG5cdFx0Z2V0QXBwKCkuZG93bmxvYWQoZXhwb3J0Q29udGFjdHNWY2YoKSk7XG5cdH1cblxuXHRleHBvcnRDc3YoKSB7XG5cdFx0Z2V0QXBwKCkuZG93bmxvYWQoZXhwb3J0Q29udGFjdHNDc3YoKSk7XG5cdH1cblxuXHRpbml0VXBsb2FkZXIoKSB7XG5cdFx0aWYgKHRoaXMuaW1wb3J0VXBsb2FkZXJCdXR0b24oKSkge1xuXHRcdFx0Y29uc3QgaiA9IG5ldyBKdWEoe1xuXHRcdFx0XHQnYWN0aW9uJzogdXBsb2FkQ29udGFjdHMoKSxcblx0XHRcdFx0J25hbWUnOiAndXBsb2FkZXInLFxuXHRcdFx0XHQncXVldWVTaXplJzogMSxcblx0XHRcdFx0J211bHRpcGxlU2l6ZUxpbWl0JzogMSxcblx0XHRcdFx0J2Rpc2FibGVEcmFnQW5kRHJvcCc6IHRydWUsXG5cdFx0XHRcdCdkaXNhYmxlTXVsdGlwbGUnOiB0cnVlLFxuXHRcdFx0XHQnZGlzYWJsZURvY3VtZW50RHJvcFByZXZlbnQnOiB0cnVlLFxuXHRcdFx0XHQnY2xpY2tFbGVtZW50JzogdGhpcy5pbXBvcnRVcGxvYWRlckJ1dHRvbigpXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGopIHtcblx0XHRcdFx0ai5vbignb25TdGFydCcsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzLmltcG9ydGluZyh0cnVlKTtcblx0XHRcdFx0fSkub24oJ29uQ29tcGxldGUnLCAoaWQsIHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY29udGFjdHMuaW1wb3J0aW5nKGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLnJlbG9hZENvbnRhY3RMaXN0KCk7XG5cdFx0XHRcdFx0aWYgKCFpZCB8fCAhcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0d2luZG93LmFsZXJ0KGkxOG4oJ0NPTlRBQ1RTL0VSUk9SX0lNUE9SVF9GSUxFJykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlQ2hlY2tlZE9yU2VsZWN0ZWRDb250YWN0c0Zyb21MaXN0KCkge1xuXHRcdGNvbnN0IGtvQ29udGFjdHMgPSB0aGlzLmNvbnRhY3RzLFxuXHRcdFx0Y29udGFjdHMgPSB0aGlzLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKTtcblxuXHRcdGxldCBjdXJyZW50Q29udGFjdCA9IHRoaXMuY3VycmVudENvbnRhY3QoKSxcblx0XHRcdGNvdW50ID0gdGhpcy5jb250YWN0cygpLmxlbmd0aDtcblxuXHRcdGlmICgwIDwgY29udGFjdHMubGVuZ3RoKSB7XG5cdFx0XHRfLmVhY2goY29udGFjdHMsIChjb250YWN0KSA9PiB7XG5cdFx0XHRcdGlmIChjdXJyZW50Q29udGFjdCAmJiBjdXJyZW50Q29udGFjdC5pZENvbnRhY3QgPT09IGNvbnRhY3QuaWRDb250YWN0KSB7XG5cdFx0XHRcdFx0Y3VycmVudENvbnRhY3QgPSBudWxsO1xuXHRcdFx0XHRcdHRoaXMuY3VycmVudENvbnRhY3QobnVsbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb250YWN0LmRlbGV0ZWQodHJ1ZSk7XG5cdFx0XHRcdGNvdW50IC09IDE7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKDAgPj0gY291bnQpIHtcblx0XHRcdFx0dGhpcy5iRHJvcFBhZ2VBZnRlckRlbGV0ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRfLmVhY2goY29udGFjdHMsIChjb250YWN0KSA9PiB7XG5cdFx0XHRcdFx0a29Db250YWN0cy5yZW1vdmUoY29udGFjdCk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koY29udGFjdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0ZGVsZXRlU2VsZWN0ZWRDb250YWN0cygpIHtcblx0XHRpZiAoMCA8IHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCgpLmxlbmd0aCkge1xuXHRcdFx0UmVtb3RlLmNvbnRhY3RzRGVsZXRlKF8uYmluZCh0aGlzLmRlbGV0ZVJlc3BvbnNlLCB0aGlzKSwgdGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkVWlkcygpKTtcblxuXHRcdFx0dGhpcy5yZW1vdmVDaGVja2VkT3JTZWxlY3RlZENvbnRhY3RzRnJvbUxpc3QoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXN1bHRcblx0ICogQHBhcmFtIHtBamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICovXG5cdGRlbGV0ZVJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0aWYgKE1hZ2ljcy5UaW1lNTAwbXMgPCAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5UaW1lID8gcEludChvRGF0YS5UaW1lKSA6IDApKSB7XG5cdFx0XHR0aGlzLnJlbG9hZENvbnRhY3RMaXN0KHRoaXMuYkRyb3BQYWdlQWZ0ZXJEZWxldGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCh0aGlzLmJEcm9wUGFnZUFmdGVyRGVsZXRlKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZVByb3BlcnR5KG9Qcm9wKSB7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllcy5yZW1vdmUob1Byb3ApO1xuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KG9Qcm9wKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9Db250YWN0TW9kZWx9IGNvbnRhY3Rcblx0ICovXG5cdHBvcHVsYXRlVmlld0NvbnRhY3QoY29udGFjdCkge1xuXHRcdGxldCBpZCA9ICcnLFxuXHRcdFx0bGFzdE5hbWUgPSAnJyxcblx0XHRcdGZpcnN0TmFtZSA9ICcnO1xuXHRcdGNvbnN0IGxpc3QgPSBbXTtcblxuXHRcdHRoaXMud2F0Y2hIYXNoKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1wdHlTZWxlY3Rpb24oZmFsc2UpO1xuXHRcdHRoaXMudmlld1JlYWRPbmx5KGZhbHNlKTtcblxuXHRcdGlmIChjb250YWN0KSB7XG5cdFx0XHRpZCA9IGNvbnRhY3QuaWRDb250YWN0O1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb250YWN0LnByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdF8uZWFjaChjb250YWN0LnByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0aWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWUgPT09IHByb3BlcnR5WzBdKSB7XG5cdFx0XHRcdFx0XHRcdGxhc3ROYW1lID0gcHJvcGVydHlbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuRmlyc3ROYW1lID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0XHRmaXJzdE5hbWUgPSBwcm9wZXJ0eVsxXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpc3QucHVzaChuZXcgQ29udGFjdFByb3BlcnR5TW9kZWwocHJvcGVydHlbMF0sIHByb3BlcnR5WzJdIHx8ICcnLCBwcm9wZXJ0eVsxXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudmlld1JlYWRPbmx5KCEhY29udGFjdC5yZWFkT25seSk7XG5cdFx0fVxuXG5cdFx0bGlzdC51bnNoaWZ0KFxuXHRcdFx0bmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKFxuXHRcdFx0XHRDb250YWN0UHJvcGVydHlUeXBlLkxhc3ROYW1lLFxuXHRcdFx0XHQnJyxcblx0XHRcdFx0bGFzdE5hbWUsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHR0aGlzLmdldFByb3BlcnR5UGxhY2Vob2xkZXIoQ29udGFjdFByb3BlcnR5VHlwZS5MYXN0TmFtZSlcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0bGlzdC51bnNoaWZ0KFxuXHRcdFx0bmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKFxuXHRcdFx0XHRDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSxcblx0XHRcdFx0JycsXG5cdFx0XHRcdGZpcnN0TmFtZSxcblx0XHRcdFx0IWNvbnRhY3QsXG5cdFx0XHRcdHRoaXMuZ2V0UHJvcGVydHlQbGFjZWhvbGRlcihDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSlcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3SUQoaWQpO1xuXG5cdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3kodGhpcy52aWV3UHJvcGVydGllcygpKTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMoW10pO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMobGlzdCk7XG5cblx0XHR0aGlzLndhdGNoRGlydHkoZmFsc2UpO1xuXHRcdHRoaXMud2F0Y2hIYXNoKHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGRyb3BQYWdlUG9zaXRpb24gPSBmYWxzZVxuXHQgKi9cblx0cmVsb2FkQ29udGFjdExpc3QoZHJvcFBhZ2VQb3NpdGlvbiA9IGZhbHNlKSB7XG5cdFx0bGV0IG9mZnNldCA9ICh0aGlzLmNvbnRhY3RzUGFnZSgpIC0gMSkgKiBDT05UQUNUU19QRVJfUEFHRTtcblxuXHRcdHRoaXMuYkRyb3BQYWdlQWZ0ZXJEZWxldGUgPSBmYWxzZTtcblxuXHRcdGlmIChkcm9wUGFnZVBvc2l0aW9uKSB7XG5cdFx0XHR0aGlzLmNvbnRhY3RzUGFnZSgxKTtcblx0XHRcdG9mZnNldCA9IDA7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb250YWN0cy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jb250YWN0cyhcblx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0bGV0IGNvdW50ID0gMCxcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0Lkxpc3QpIHtcblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGRhdGEuUmVzdWx0Lkxpc3QpKSB7XG5cdFx0XHRcdFx0XHRsaXN0ID0gXy5tYXAoZGF0YS5SZXN1bHQuTGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29udGFjdCA9IG5ldyBDb250YWN0TW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRhY3QucGFyc2UoaXRlbSkgPyBjb250YWN0IDogbnVsbDtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRsaXN0ID0gXy5jb21wYWN0KGxpc3QpO1xuXG5cdFx0XHRcdFx0XHRjb3VudCA9IHBJbnQoZGF0YS5SZXN1bHQuQ291bnQpO1xuXHRcdFx0XHRcdFx0Y291bnQgPSAwIDwgY291bnQgPyBjb3VudCA6IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb250YWN0c0NvdW50KGNvdW50KTtcblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSh0aGlzLmNvbnRhY3RzKCkpO1xuXHRcdFx0XHR0aGlzLmNvbnRhY3RzKGxpc3QpO1xuXG5cdFx0XHRcdHRoaXMuY29udGFjdHMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdHRoaXMudmlld0NsZWFyU2VhcmNoKCcnICE9PSB0aGlzLnNlYXJjaCgpKTtcblx0XHRcdH0sXG5cdFx0XHRvZmZzZXQsXG5cdFx0XHRDT05UQUNUU19QRVJfUEFHRSxcblx0XHRcdHRoaXMuc2VhcmNoKClcblx0XHQpO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHR0aGlzLm9Db250ZW50VmlzaWJsZSA9ICQoJy5iLWxpc3QtY29udGVudCcsIGRvbSk7XG5cdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUgPSAkKCcuY29udGVudCcsIHRoaXMub0NvbnRlbnRWaXNpYmxlKTtcblxuXHRcdHRoaXMuc2VsZWN0b3IuaW5pdCh0aGlzLm9Db250ZW50VmlzaWJsZSwgdGhpcy5vQ29udGVudFNjcm9sbGFibGUsIEtleVN0YXRlLkNvbnRhY3RMaXN0KTtcblxuXHRcdGtleSgnZGVsZXRlJywgS2V5U3RhdGUuQ29udGFjdExpc3QsICgpID0+IHtcblx0XHRcdHRoaXMuZGVsZXRlQ29tbWFuZCgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdjLCB3JywgS2V5U3RhdGUuQ29udGFjdExpc3QsICgpID0+IHtcblx0XHRcdHRoaXMubmV3TWVzc2FnZUNvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0ZG9tLm9uKCdjbGljaycsICcuZS1wYWdlbmF0b3IgLmUtcGFnZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdGNvbnN0IHBhZ2UgPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0aWYgKHBhZ2UpIHtcblx0XHRcdFx0c2VsZi5jb250YWN0c1BhZ2UocEludChwYWdlLnZhbHVlKSk7XG5cdFx0XHRcdHNlbGYucmVsb2FkQ29udGFjdExpc3QoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaW5pdFVwbG9hZGVyKCk7XG5cdH1cblxuXHRvblNob3coYkJhY2tUb0NvbXBvc2UsIHNMYXN0Q29tcG9zZUZvY3VzZWRGaWVsZCkge1xuXHRcdHRoaXMuYkJhY2tUb0NvbXBvc2UgPSBpc1VuZChiQmFja1RvQ29tcG9zZSkgPyBmYWxzZSA6ICEhYkJhY2tUb0NvbXBvc2U7XG5cdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSBpc1VuZChzTGFzdENvbXBvc2VGb2N1c2VkRmllbGQpID8gJycgOiBzTGFzdENvbXBvc2VGb2N1c2VkRmllbGQ7XG5cblx0XHRyb3V0ZU9mZigpO1xuXHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QodHJ1ZSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0cm91dGVPbigpO1xuXG5cdFx0dGhpcy5jdXJyZW50Q29udGFjdChudWxsKTtcblx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uKHRydWUpO1xuXHRcdHRoaXMuc2VhcmNoKCcnKTtcblx0XHR0aGlzLmNvbnRhY3RzQ291bnQoMCk7XG5cblx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSh0aGlzLmNvbnRhY3RzKCkpO1xuXHRcdHRoaXMuY29udGFjdHMoW10pO1xuXG5cdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSAnJztcblxuXHRcdGlmICh0aGlzLmJCYWNrVG9Db21wb3NlKSB7XG5cdFx0XHR0aGlzLmJCYWNrVG9Db21wb3NlID0gZmFsc2U7XG5cblx0XHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzUG9wdXBWaWV3LCBDb250YWN0c1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgVU5VU0VEX09QVElPTl9WQUxVRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHRyaW0sIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciwgZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5cbmltcG9ydCBQcm9taXNlcyBmcm9tICdQcm9taXNlcy9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0ZvbGRlckNyZWF0ZScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNGb2xkZXJDcmVhdGUnXG59KVxuY2xhc3MgRm9sZGVyQ3JlYXRlVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5mb2xkZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mb2xkZXJOYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRQYXJlbnRWYWx1ZSA9IGtvLm9ic2VydmFibGUoVU5VU0VEX09QVElPTl9WQUxVRSk7XG5cblx0XHR0aGlzLnBhcmVudEZvbGRlclNlbGVjdExpc3QgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0b3AgPSBbXSxcblx0XHRcdFx0bGlzdCA9IEZvbGRlclN0b3JlLmZvbGRlckxpc3QoKSxcblx0XHRcdFx0ZlJlbmFtZUNhbGxiYWNrID0gKG9JdGVtKSA9PlxuXHRcdFx0XHRcdG9JdGVtID8gKG9JdGVtLmlzU3lzdGVtRm9sZGVyKCkgPyBvSXRlbS5uYW1lKCkgKyAnICcgKyBvSXRlbS5tYW5hZ2VGb2xkZXJTeXN0ZW1OYW1lKCkgOiBvSXRlbS5uYW1lKCkpIDogJyc7XG5cblx0XHRcdHRvcC5wdXNoKFsnJywgJyddKTtcblxuXHRcdFx0bGV0IGZEaXNhYmxlQ2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0aWYgKCcnICE9PSBGb2xkZXJTdG9yZS5uYW1lc3BhY2UpIHtcblx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayA9IChpdGVtKSA9PiBGb2xkZXJTdG9yZS5uYW1lc3BhY2UgIT09IGl0ZW0uZnVsbE5hbWVSYXcuc3Vic3RyKDAsIEZvbGRlclN0b3JlLm5hbWVzcGFjZS5sZW5ndGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFtdLCBsaXN0LCBbXSwgdG9wLCBudWxsLCBmRGlzYWJsZUNhbGxiYWNrLCBudWxsLCBmUmVuYW1lQ2FsbGJhY2spO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5zaW1wbGVGb2xkZXJOYW1lVmFsaWRhdGlvbihzZWxmLmZvbGRlck5hbWUoKSkpXG5cdGNyZWF0ZUZvbGRlckNvbW1hbmQoKSB7XG5cdFx0bGV0IHBhcmVudEZvbGRlck5hbWUgPSB0aGlzLnNlbGVjdGVkUGFyZW50VmFsdWUoKTtcblx0XHRpZiAoJycgPT09IHBhcmVudEZvbGRlck5hbWUgJiYgMSA8IEZvbGRlclN0b3JlLm5hbWVzcGFjZS5sZW5ndGgpIHtcblx0XHRcdHBhcmVudEZvbGRlck5hbWUgPSBGb2xkZXJTdG9yZS5uYW1lc3BhY2Uuc3Vic3RyKDAsIEZvbGRlclN0b3JlLm5hbWVzcGFjZS5sZW5ndGggLSAxKTtcblx0XHR9XG5cblx0XHRnZXRBcHAoKS5mb2xkZXJzUHJvbWlzZXNBY3Rpb25IZWxwZXIoXG5cdFx0XHRQcm9taXNlcy5mb2xkZXJDcmVhdGUodGhpcy5mb2xkZXJOYW1lKCksIHBhcmVudEZvbGRlck5hbWUsIEZvbGRlclN0b3JlLmZvbGRlcnNDcmVhdGluZyksXG5cdFx0XHROb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlclxuXHRcdCk7XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxuXG5cdHNpbXBsZUZvbGRlck5hbWVWYWxpZGF0aW9uKHNOYW1lKSB7XG5cdFx0cmV0dXJuIC9eW15cXFxcL10rJC9nLnRlc3QodHJpbShzTmFtZSkpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmZvbGRlck5hbWUoJycpO1xuXHRcdHRoaXMuc2VsZWN0ZWRQYXJlbnRWYWx1ZSgnJyk7XG5cdFx0dGhpcy5mb2xkZXJOYW1lLmZvY3VzZWQoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5mb2xkZXJOYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlckNyZWF0ZVZpZXcsIEZvbGRlckNyZWF0ZVZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWx0ZXJzQWN0aW9uLCBGaWx0ZXJDb25kaXRpb25GaWVsZCwgRmlsdGVyQ29uZGl0aW9uVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyLCBkZWxlZ2F0ZVJ1biB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IEZpbHRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZpbHRlcic7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0ZpbHRlcicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNGaWx0ZXInXG59KVxuY2xhc3MgRmlsdGVyUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmlzTmV3ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMubW9kdWxlcyA9IEZpbHRlclN0b3JlLm1vZHVsZXM7XG5cblx0XHR0aGlzLmZUcnVlQ2FsbGJhY2sgPSBudWxsO1xuXHRcdHRoaXMuZmlsdGVyID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuYWxsb3dNYXJrQXNSZWFkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0XHR0aGlzLmZvbGRlclNlbGVjdExpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJNZW51Rm9yRmlsdGVycztcblx0XHR0aGlzLnNlbGVjdGVkRm9sZGVyVmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXJWYWx1ZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZmlsdGVyKCkpIHtcblx0XHRcdFx0dGhpcy5maWx0ZXIoKS5hY3Rpb25WYWx1ZS5lcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmZpZWxkT3B0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50eXBlT3B0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50eXBlT3B0aW9uc1NpemUgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoXy5iaW5kKHRoaXMucG9wdWxhdGVPcHRpb25zLCB0aGlzKSk7XG5cblx0XHR0aGlzLm1vZHVsZXMuc3Vic2NyaWJlKHRoaXMucG9wdWxhdGVPcHRpb25zLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0c2F2ZUZpbHRlckNvbW1hbmQoKSB7XG5cdFx0aWYgKHRoaXMuZmlsdGVyKCkpIHtcblx0XHRcdGlmIChGaWx0ZXJzQWN0aW9uLk1vdmVUbyA9PT0gdGhpcy5maWx0ZXIoKS5hY3Rpb25UeXBlKCkpIHtcblx0XHRcdFx0dGhpcy5maWx0ZXIoKS5hY3Rpb25WYWx1ZSh0aGlzLnNlbGVjdGVkRm9sZGVyVmFsdWUoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghdGhpcy5maWx0ZXIoKS52ZXJpZnkoKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZUcnVlQ2FsbGJhY2spIHtcblx0XHRcdFx0dGhpcy5mVHJ1ZUNhbGxiYWNrKHRoaXMuZmlsdGVyKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2xvc2VDb21tYW5kJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwb3B1bGF0ZU9wdGlvbnMoKSB7XG5cdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucyhbXSk7XG5cblx0XHQvLyB0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goeydpZCc6IEZpbHRlcnNBY3Rpb24uTm9uZSxcblx0XHQvLyAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9OT05FJyl9KTtcblxuXHRcdGNvbnN0IG1vZHVsZXMgPSB0aGlzLm1vZHVsZXMoKTtcblx0XHRpZiAobW9kdWxlcykge1xuXHRcdFx0aWYgKG1vZHVsZXMubWFya2FzcmVhZCkge1xuXHRcdFx0XHR0aGlzLmFsbG93TWFya0FzUmVhZCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1vZHVsZXMubW92ZXRvKSB7XG5cdFx0XHRcdHRoaXMuYWN0aW9uVHlwZU9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0J2lkJzogRmlsdGVyc0FjdGlvbi5Nb3ZlVG8sXG5cdFx0XHRcdFx0J25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fTU9WRV9UTycpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW9kdWxlcy5yZWRpcmVjdCkge1xuXHRcdFx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdCdpZCc6IEZpbHRlcnNBY3Rpb24uRm9yd2FyZCxcblx0XHRcdFx0XHQnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9GT1JXQVJEX1RPJylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtb2R1bGVzLnJlamVjdCkge1xuXHRcdFx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goeyAnaWQnOiBGaWx0ZXJzQWN0aW9uLlJlamVjdCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fUkVKRUNUJykgfSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtb2R1bGVzLnZhY2F0aW9uKSB7XG5cdFx0XHRcdHRoaXMuYWN0aW9uVHlwZU9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0J2lkJzogRmlsdGVyc0FjdGlvbi5WYWNhdGlvbixcblx0XHRcdFx0XHQnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9WQUNBVElPTl9NRVNTQUdFJylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucy5wdXNoKHsgJ2lkJzogRmlsdGVyc0FjdGlvbi5EaXNjYXJkLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9ESVNDQVJEJykgfSk7XG5cblx0XHR0aGlzLmZpZWxkT3B0aW9ucyhbXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLkZyb20sICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfRklFTERfRlJPTScpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLlJlY2lwaWVudCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9SRUNJUElFTlRTJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uRmllbGQuU3ViamVjdCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9TVUJKRUNUJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uRmllbGQuU2l6ZSwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9TSVpFJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uRmllbGQuSGVhZGVyLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0ZJRUxEX0hFQURFUicpIH1cblx0XHRdKTtcblxuXHRcdHRoaXMudHlwZU9wdGlvbnMoW1xuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLkNvbnRhaW5zLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfQ09OVEFJTlMnKSB9LFxuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLk5vdENvbnRhaW5zLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfTk9UX0NPTlRBSU5TJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5FcXVhbFRvLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfRVFVQUxfVE8nKSB9LFxuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLk5vdEVxdWFsVG8sICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfVFlQRV9OT1RfRVFVQUxfVE8nKSB9XG5cdFx0XSk7XG5cblx0XHRpZiAobW9kdWxlcyAmJiBtb2R1bGVzLnJlZ2V4KSB7XG5cdFx0XHR0aGlzLnR5cGVPcHRpb25zLnB1c2goeyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLlJlZ2V4LCAnbmFtZSc6ICdSZWdleCcgfSk7XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlT3B0aW9uc1NpemUoW1xuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLk92ZXIsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfVFlQRV9PVkVSJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5VbmRlciwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9UWVBFX1VOREVSJykgfVxuXHRcdF0pO1xuXHR9XG5cblx0cmVtb3ZlQ29uZGl0aW9uKG9Db25kaXRpb25Ub0RlbGV0ZSkge1xuXHRcdGlmICh0aGlzLmZpbHRlcigpKSB7XG5cdFx0XHR0aGlzLmZpbHRlcigpLnJlbW92ZUNvbmRpdGlvbihvQ29uZGl0aW9uVG9EZWxldGUpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5pc05ldyh0cnVlKTtcblxuXHRcdHRoaXMuZlRydWVDYWxsYmFjayA9IG51bGw7XG5cdFx0dGhpcy5maWx0ZXIobnVsbCk7XG5cdH1cblxuXHRvblNob3cob0ZpbHRlciwgZlRydWVDYWxsYmFjaywgYkVkaXQpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlRydWVDYWxsYmFjayA9IGZUcnVlQ2FsbGJhY2s7XG5cdFx0dGhpcy5maWx0ZXIob0ZpbHRlcik7XG5cblx0XHRpZiAob0ZpbHRlcikge1xuXHRcdFx0dGhpcy5zZWxlY3RlZEZvbGRlclZhbHVlKG9GaWx0ZXIuYWN0aW9uVmFsdWUoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pc05ldyghYkVkaXQpO1xuXG5cdFx0aWYgKCFiRWRpdCAmJiBvRmlsdGVyKSB7XG5cdFx0XHRvRmlsdGVyLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmZpbHRlcigpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLmZpbHRlcigpLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgRmlsdGVyUG9wdXBWaWV3LCBGaWx0ZXJQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHFyIGZyb20gJ3FyJztcblxuaW1wb3J0IHsgQ2FwYSwgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1R3b0ZhY3RvckNvbmZpZ3VyYXRpb24nLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzVHdvRmFjdG9yQ29uZmlndXJhdGlvbidcbn0pXG5jbGFzcyBUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxvY2sgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvciA9IFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpO1xuXG5cdFx0dGhpcy5wcm9jZXNzaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jbGVhcmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VjcmV0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdVc2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d29GYWN0b3JTdGF0dXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1VybFRpdGxlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VXJsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnZpZXdFbmFibGVfID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdFbmFibGUgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0aGlzLnZpZXdFbmFibGVfLFxuXHRcdFx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR2YWx1ZSA9ICEhdmFsdWU7XG5cdFx0XHRcdGlmICh2YWx1ZSAmJiB0aGlzLnR3b0ZhY3RvclRlc3RlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy52aWV3RW5hYmxlXyh2YWx1ZSk7XG5cdFx0XHRcdFx0UmVtb3RlLmVuYWJsZVR3b0ZhY3RvcigocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdFbmFibGVfKGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCB0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnZpZXdFbmFibGVfKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRSZW1vdGUuZW5hYmxlVHdvRmFjdG9yKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudmlld0VuYWJsZV8oZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52aWV3VHdvRmFjdG9yRW5hYmxlVG9vbHRpcCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy50d29GYWN0b3JUZXN0ZWQoKSB8fCB0aGlzLnZpZXdFbmFibGVfKClcblx0XHRcdFx0PyAnJ1xuXHRcdFx0XHQ6IGkxOG4oJ1BPUFVQU19UV09fRkFDVE9SX0NGRy9UV09fRkFDVE9SX1NFQ1JFVF9URVNUX0JFRk9SRV9ERVNDJyk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdUd29GYWN0b3JTdGF0dXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIGkxOG4oXG5cdFx0XHRcdHRoaXMudHdvRmFjdG9yU3RhdHVzKClcblx0XHRcdFx0XHQ/ICdQT1BVUFNfVFdPX0ZBQ1RPUl9DRkcvVFdPX0ZBQ1RPUl9TRUNSRVRfQ09ORklHVVJFRF9ERVNDJ1xuXHRcdFx0XHRcdDogJ1BPUFVQU19UV09fRkFDVE9SX0NGRy9UV09fRkFDVE9SX1NFQ1JFVF9OT1RfQ09ORklHVVJFRF9ERVNDJ1xuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudHdvRmFjdG9yQWxsb3dlZEVuYWJsZSA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMudmlld0VuYWJsZSgpIHx8IHRoaXMudHdvRmFjdG9yVGVzdGVkKCkpO1xuXG5cdFx0dGhpcy5vblJlc3VsdCA9IF8uYmluZCh0aGlzLm9uUmVzdWx0LCB0aGlzKTtcblx0XHR0aGlzLm9uU2hvd1NlY3JldFJlc3VsdCA9IF8uYmluZCh0aGlzLm9uU2hvd1NlY3JldFJlc3VsdCwgdGhpcyk7XG5cdH1cblxuXHRzaG93U2VjcmV0KCkge1xuXHRcdHRoaXMuc2VjcmV0aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5zaG93VHdvRmFjdG9yU2VjcmV0KHRoaXMub25TaG93U2VjcmV0UmVzdWx0KTtcblx0fVxuXG5cdGhpZGVTZWNyZXQoKSB7XG5cdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcygnJyk7XG5cdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdHRoaXMudmlld1VybCgnJyk7XG5cdH1cblxuXHRjcmVhdGVUd29GYWN0b3IoKSB7XG5cdFx0dGhpcy5wcm9jZXNzaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVUd29GYWN0b3IodGhpcy5vblJlc3VsdCk7XG5cdH1cblxuXHRsb2dvdXQoKSB7XG5cdFx0Z2V0QXBwKCkubG9nb3V0KCk7XG5cdH1cblxuXHR0ZXN0VHdvRmFjdG9yKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1R3b0ZhY3RvclRlc3QnKSwgW3RoaXMudHdvRmFjdG9yVGVzdGVkXSk7XG5cdH1cblxuXHRjbGVhclR3b0ZhY3RvcigpIHtcblx0XHR0aGlzLnZpZXdTZWNyZXQoJycpO1xuXHRcdHRoaXMudmlld0JhY2t1cENvZGVzKCcnKTtcblx0XHR0aGlzLnZpZXdVcmxUaXRsZSgnJyk7XG5cdFx0dGhpcy52aWV3VXJsKCcnKTtcblxuXHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkKGZhbHNlKTtcblxuXHRcdHRoaXMuY2xlYXJpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLmNsZWFyVHdvRmFjdG9yKHRoaXMub25SZXN1bHQpO1xuXHR9XG5cblx0b25TaG93KGJMb2NrKSB7XG5cdFx0dGhpcy5sb2NrKCEhYkxvY2spO1xuXG5cdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcygnJyk7XG5cdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdHRoaXMudmlld1VybCgnJyk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMubG9jaygpKSB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UXIoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCdvdHBhdXRoOi8vdG90cC8nICtcblx0XHRcdHdpbmRvdy5lbmNvZGVVUklDb21wb25lbnQodGhpcy52aWV3VXNlcigpKSArXG5cdFx0XHQnP3NlY3JldD0nICtcblx0XHRcdHdpbmRvdy5lbmNvZGVVUklDb21wb25lbnQodGhpcy52aWV3U2VjcmV0KCkpICtcblx0XHRcdCcmaXNzdWVyPScgK1xuXHRcdFx0d2luZG93LmVuY29kZVVSSUNvbXBvbmVudCgnJylcblx0XHQpO1xuXHR9XG5cblx0b25SZXN1bHQoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHR0aGlzLnByb2Nlc3NpbmcoZmFsc2UpO1xuXHRcdHRoaXMuY2xlYXJpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLnZpZXdVc2VyKHBTdHJpbmcob0RhdGEuUmVzdWx0LlVzZXIpKTtcblx0XHRcdHRoaXMudmlld0VuYWJsZV8oISFvRGF0YS5SZXN1bHQuRW5hYmxlKTtcblx0XHRcdHRoaXMudHdvRmFjdG9yU3RhdHVzKCEhb0RhdGEuUmVzdWx0LklzU2V0KTtcblx0XHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkKCEhb0RhdGEuUmVzdWx0LlRlc3RlZCk7XG5cblx0XHRcdHRoaXMudmlld1NlY3JldChwU3RyaW5nKG9EYXRhLlJlc3VsdC5TZWNyZXQpKTtcblx0XHRcdHRoaXMudmlld0JhY2t1cENvZGVzKHBTdHJpbmcob0RhdGEuUmVzdWx0LkJhY2t1cENvZGVzKS5yZXBsYWNlKC9bXFxzXSsvZywgJyAgJykpO1xuXG5cdFx0XHR0aGlzLnZpZXdVcmxUaXRsZShwU3RyaW5nKG9EYXRhLlJlc3VsdC5VcmxUaXRsZSkpO1xuXHRcdFx0dGhpcy52aWV3VXJsKHFyLnRvRGF0YVVSTCh7IGxldmVsOiAnTScsIHNpemU6IDgsIHZhbHVlOiB0aGlzLmdldFFyKCkgfSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZpZXdVc2VyKCcnKTtcblx0XHRcdHRoaXMudmlld0VuYWJsZV8oZmFsc2UpO1xuXHRcdFx0dGhpcy50d29GYWN0b3JTdGF0dXMoZmFsc2UpO1xuXHRcdFx0dGhpcy50d29GYWN0b3JUZXN0ZWQoZmFsc2UpO1xuXG5cdFx0XHR0aGlzLnZpZXdTZWNyZXQoJycpO1xuXHRcdFx0dGhpcy52aWV3QmFja3VwQ29kZXMoJycpO1xuXHRcdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdFx0dGhpcy52aWV3VXJsKCcnKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dTZWNyZXRSZXN1bHQocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zZWNyZXRpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLnZpZXdTZWNyZXQocFN0cmluZyhkYXRhLlJlc3VsdC5TZWNyZXQpKTtcblx0XHRcdHRoaXMudmlld1VybFRpdGxlKHBTdHJpbmcoZGF0YS5SZXN1bHQuVXJsVGl0bGUpKTtcblx0XHRcdHRoaXMudmlld1VybChxci50b0RhdGFVUkwoeyBsZXZlbDogJ00nLCBzaXplOiA2LCB2YWx1ZTogdGhpcy5nZXRRcigpIH0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHRcdHRoaXMudmlld1VybFRpdGxlKCcnKTtcblx0XHRcdHRoaXMudmlld1VybCgnJyk7XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5jYXBhVHdvRmFjdG9yKSB7XG5cdFx0XHR0aGlzLnByb2Nlc3NpbmcodHJ1ZSk7XG5cdFx0XHRSZW1vdGUuZ2V0VHdvRmFjdG9yKHRoaXMub25SZXN1bHQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3LCBUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgaXNOb3JtYWwgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgSHRtbEVkaXRvciB9IGZyb20gJ0NvbW1vbi9IdG1sRWRpdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9UZW1wbGF0ZScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNUZW1wbGF0ZSdcbn0pXG5jbGFzcyBUZW1wbGF0ZVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lZGl0b3IgPSBudWxsO1xuXHRcdHRoaXMuc2lnbmF0dXJlRG9tID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuaWQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmFtZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubmFtZS5mb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5ib2R5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5ib2R5LmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJvZHkuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubmFtZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5uYW1lLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYm9keS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGFkZFRlbXBsYXRlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnBvcHVsYXRlQm9keUZyb21FZGl0b3IoKTtcblxuXHRcdHRoaXMubmFtZS5lcnJvcignJyA9PT0gdHJpbSh0aGlzLm5hbWUoKSkpO1xuXHRcdHRoaXMuYm9keS5lcnJvcignJyA9PT0gdHJpbSh0aGlzLmJvZHkoKSkgfHwgJzpIVE1MOicgPT09IHRyaW0odGhpcy5ib2R5KCkpKTtcblxuXHRcdGlmICh0aGlzLm5hbWUuZXJyb3IoKSB8fCB0aGlzLmJvZHkuZXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZW1wbGF0ZVNldHVwKFxuXHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLnRlbXBsYXRlcygpO1xuXHRcdFx0XHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5pZCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cdFx0XHR0aGlzLmJvZHkoKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5pZCgnJyk7XG5cblx0XHR0aGlzLm5hbWUoJycpO1xuXHRcdHRoaXMubmFtZS5lcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmJvZHkoJycpO1xuXHRcdHRoaXMuYm9keS5sb2FkaW5nKGZhbHNlKTtcblx0XHR0aGlzLmJvZHkuZXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yKCcnKTtcblxuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5lZGl0b3Iuc2V0UGxhaW4oJycsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRwb3B1bGF0ZUJvZHlGcm9tRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5ib2R5KHRoaXMuZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0fVxuXHR9XG5cblx0ZWRpdG9yU2V0Qm9keShzQm9keSkge1xuXHRcdGlmICghdGhpcy5lZGl0b3IgJiYgdGhpcy5zaWduYXR1cmVEb20oKSkge1xuXHRcdFx0dGhpcy5lZGl0b3IgPSBuZXcgSHRtbEVkaXRvcihcblx0XHRcdFx0dGhpcy5zaWduYXR1cmVEb20oKSxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdWxhdGVCb2R5RnJvbUVkaXRvcigpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0SHRtbE9yUGxhaW4oc0JvZHkpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRvci5zZXRIdG1sT3JQbGFpbihzQm9keSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KHRlbXBsYXRlKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHRpZiAodGVtcGxhdGUgJiYgdGVtcGxhdGUuaWQpIHtcblx0XHRcdHRoaXMuaWQodGVtcGxhdGUuaWQpO1xuXHRcdFx0dGhpcy5uYW1lKHRlbXBsYXRlLm5hbWUpO1xuXHRcdFx0dGhpcy5ib2R5KHRlbXBsYXRlLmJvZHkpO1xuXG5cdFx0XHRpZiAodGVtcGxhdGUucG9wdWxhdGVkKSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yU2V0Qm9keSh0aGlzLmJvZHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmJvZHkubG9hZGluZyh0cnVlKTtcblx0XHRcdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblxuXHRcdFx0XHRSZW1vdGUudGVtcGxhdGVHZXRCeUlkKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHR0aGlzLmJvZHkubG9hZGluZyhmYWxzZSk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiZcblx0XHRcdFx0XHRcdGRhdGEgJiZcblx0XHRcdFx0XHRcdGRhdGEuUmVzdWx0ICYmXG5cdFx0XHRcdFx0XHQnT2JqZWN0L1RlbXBsYXRlJyA9PT0gZGF0YS5SZXN1bHRbJ0BPYmplY3QnXSAmJlxuXHRcdFx0XHRcdFx0aXNOb3JtYWwoZGF0YS5SZXN1bHQuQm9keSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRlbXBsYXRlLmJvZHkgPSBkYXRhLlJlc3VsdC5Cb2R5O1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUucG9wdWxhdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0dGhpcy5ib2R5KHRlbXBsYXRlLmJvZHkpO1xuXHRcdFx0XHRcdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5ib2R5KCcnKTtcblx0XHRcdFx0XHRcdHRoaXMuYm9keS5lcnJvcih0cnVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmVkaXRvclNldEJvZHkodGhpcy5ib2R5KCkpO1xuXHRcdFx0XHR9LCB0aGlzLmlkKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRvclNldEJvZHkoJycpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLm5hbWUuZm9jdXModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgVGVtcGxhdGVQb3B1cFZpZXcsIFRlbXBsYXRlUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydFwiKTsiLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE3IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpICYmIGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvKiEgbG96YWQuanMgLSB2MS4xNC4wIC0gMjAxOS0xMC0xOVxuKiBodHRwczovL2dpdGh1Yi5jb20vQXBvb3J2U2F4ZW5hL2xvemFkLmpzXG4qIENvcHlyaWdodCAoYykgMjAxOSBBcG9vcnYgU2F4ZW5hOyBMaWNlbnNlZCBNSVQgKi9cbiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR8fHNlbGYpLmxvemFkPWUoKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO1xuLyoqXG4gICAqIERldGVjdCBJRSBicm93c2VyXG4gICAqIEBjb25zdCB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovdmFyIGQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudE1vZGUsYz17cm9vdE1hcmdpbjpcIjBweFwiLHRocmVzaG9sZDowLGxvYWQ6ZnVuY3Rpb24odCl7aWYoXCJwaWN0dXJlXCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7ZCYmdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWllc3JjXCIpJiYoZS5zcmM9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWllc3JjXCIpKSx0LmdldEF0dHJpYnV0ZShcImRhdGEtYWx0XCIpJiYoZS5hbHQ9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFsdFwiKSksdC5hcHBlbmQoZSl9aWYoXCJ2aWRlb1wiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYhdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNyY1wiKSYmdC5jaGlsZHJlbil7Zm9yKHZhciByPXQuY2hpbGRyZW4sYT12b2lkIDAsbz0wO288PXIubGVuZ3RoLTE7bysrKShhPXJbb10uZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNcIikpJiYocltvXS5zcmM9YSk7dC5sb2FkKCl9aWYodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNyY1wiKSYmKHQuc3JjPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNcIikpLHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNzZXRcIikmJnQuc2V0QXR0cmlidXRlKFwic3Jjc2V0XCIsdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNyY3NldFwiKSksdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJhY2tncm91bmQtaW1hZ2VcIikpdC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9XCJ1cmwoJ1wiK3QuZ2V0QXR0cmlidXRlKFwiZGF0YS1iYWNrZ3JvdW5kLWltYWdlXCIpLnNwbGl0KFwiLFwiKS5qb2luKFwiJyksdXJsKCdcIikrXCInKVwiO2Vsc2UgaWYodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJhY2tncm91bmQtaW1hZ2Utc2V0XCIpKXt2YXIgaT10LmdldEF0dHJpYnV0ZShcImRhdGEtYmFja2dyb3VuZC1pbWFnZS1zZXRcIikuc3BsaXQoXCIsXCIpLG49aVswXS5zdWJzdHIoMCxpWzBdLmluZGV4T2YoXCIgXCIpKXx8aVswXTsvLyBTdWJzdHJpbmcgYmVmb3JlIC4uLiAxeFxubj0tMT09PW4uaW5kZXhPZihcInVybChcIik/XCJ1cmwoXCIrbitcIilcIjpuLDE9PT1pLmxlbmd0aD90LnN0eWxlLmJhY2tncm91bmRJbWFnZT1uOnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwodC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKXx8XCJcIikrXCJiYWNrZ3JvdW5kLWltYWdlOiBcIituK1wiOyBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWltYWdlLXNldChcIitpK1wiKTsgYmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KFwiK2krXCIpXCIpfXQuZ2V0QXR0cmlidXRlKFwiZGF0YS10b2dnbGUtY2xhc3NcIikmJnQuY2xhc3NMaXN0LnRvZ2dsZSh0LmdldEF0dHJpYnV0ZShcImRhdGEtdG9nZ2xlLWNsYXNzXCIpKX0sbG9hZGVkOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gbCh0KXt0LnNldEF0dHJpYnV0ZShcImRhdGEtbG9hZGVkXCIsITApfXZhciBiPWZ1bmN0aW9uKHQpe3JldHVyblwidHJ1ZVwiPT09dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxvYWRlZFwiKX07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYSxvPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpcIi5sb3phZFwiLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGU9T2JqZWN0LmFzc2lnbih7fSxjLHQpLGk9ZS5yb290LG49ZS5yb290TWFyZ2luLGQ9ZS50aHJlc2hvbGQsdT1lLmxvYWQscz1lLmxvYWRlZCxnPXZvaWQgMDtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXImJihnPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigocj11LGE9cyxmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXsoMDx0LmludGVyc2VjdGlvblJhdGlvfHx0LmlzSW50ZXJzZWN0aW5nKSYmKGUudW5vYnNlcnZlKHQudGFyZ2V0KSxiKHQudGFyZ2V0KXx8KHIodC50YXJnZXQpLGwodC50YXJnZXQpLGEodC50YXJnZXQpKSl9KX0pLHtyb290Omkscm9vdE1hcmdpbjpuLHRocmVzaG9sZDpkfSkpLHtvYnNlcnZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciBlPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtyZXR1cm4gdCBpbnN0YW5jZW9mIEVsZW1lbnQ/W3RdOnQgaW5zdGFuY2VvZiBOb2RlTGlzdD90OmUucXVlcnlTZWxlY3RvckFsbCh0KX0obyxpKSxlPTA7ZTx0Lmxlbmd0aDtlKyspYih0W2VdKXx8KGc/Zy5vYnNlcnZlKHRbZV0pOih1KHRbZV0pLGwodFtlXSkscyh0W2VdKSkpfSx0cmlnZ2VyTG9hZDpmdW5jdGlvbih0KXtiKHQpfHwodSh0KSxsKHQpLHModCkpfSxvYnNlcnZlcjpnfX19KTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuY2xhc3MgQ29va2llRHJpdmVyIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2V0KGtleSwgZGF0YSkge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBDb29raWVzLmdldEpTT04oQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FKTtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHQoc3RvcmFnZVJlc3VsdCB8fCAoc3RvcmFnZVJlc3VsdCA9IHt9KSlba2V5XSA9IGRhdGE7XG5cblx0XHR0cnkge1xuXHRcdFx0Q29va2llcy5zZXQoQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FLCBzdG9yYWdlUmVzdWx0LCB7XG5cdFx0XHRcdGV4cGlyZXM6IDMwXG5cdFx0XHR9KTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0bGV0IHJlc3VsdCA9IG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc3RvcmFnZVJlc3VsdCA9IENvb2tpZXMuZ2V0SlNPTihDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUpO1xuXHRcdFx0cmVzdWx0ID0gc3RvcmFnZVJlc3VsdCAmJiAhaXNVbmQoc3RvcmFnZVJlc3VsdFtrZXldKSA/IHN0b3JhZ2VSZXN1bHRba2V5XSA6IG51bGw7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBzdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhKHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5jb29raWVFbmFibGVkKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb29raWVEcml2ZXIsIENvb2tpZURyaXZlciBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpc1N0b3JhZ2VTdXBwb3J0ZWQgfSBmcm9tICdTdG9yYWdlL1JhaW5Mb29wJztcbmltcG9ydCB7IENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuXG5jbGFzcyBMb2NhbFN0b3JhZ2VEcml2ZXIge1xuXHRzID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnMgPSB3aW5kb3cubG9jYWxTdG9yYWdlIHx8IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IGRhdGFcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzZXQoa2V5LCBkYXRhKSB7XG5cdFx0aWYgKCF0aGlzLnMpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgc3RvcmFnZVJlc3VsdCA9IG51bGw7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHN0b3JhZ2VWYWx1ZSA9IHRoaXMucy5nZXRJdGVtKENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSkgfHwgbnVsbDtcblx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBudWxsID09PSBzdG9yYWdlVmFsdWUgPyBudWxsIDogd2luZG93LkpTT04ucGFyc2Uoc3RvcmFnZVZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHQoc3RvcmFnZVJlc3VsdCB8fCAoc3RvcmFnZVJlc3VsdCA9IHt9KSlba2V5XSA9IGRhdGE7XG5cblx0XHR0cnkge1xuXHRcdFx0dGhpcy5zLnNldEl0ZW0oQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FLCB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoc3RvcmFnZVJlc3VsdCkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0aWYgKCF0aGlzLnMpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdG9yYWdlVmFsdWUgPSB0aGlzLnMuZ2V0SXRlbShDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUpIHx8IG51bGwsXG5cdFx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBudWxsID09PSBzdG9yYWdlVmFsdWUgPyBudWxsIDogd2luZG93LkpTT04ucGFyc2Uoc3RvcmFnZVZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHN0b3JhZ2VSZXN1bHQgJiYgIWlzVW5kKHN0b3JhZ2VSZXN1bHRba2V5XSkgPyBzdG9yYWdlUmVzdWx0W2tleV0gOiBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIHN1cHBvcnRlZCgpIHtcblx0XHRyZXR1cm4gaXNTdG9yYWdlU3VwcG9ydGVkKCdsb2NhbFN0b3JhZ2UnKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2NhbFN0b3JhZ2VEcml2ZXIsIExvY2FsU3RvcmFnZURyaXZlciBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaXNQb3NOdW1lcmljIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4sIHRyaWdnZXIgYXMgdHJhbnNsYXRvclRyaWdnZXIgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBnZXRGb2xkZXJJbmJveE5hbWUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIEZvbGRlck1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdGb2xkZXJNb2RlbCcpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mdWxsTmFtZSA9ICcnO1xuXHRcdHRoaXMuZnVsbE5hbWVSYXcgPSAnJztcblx0XHR0aGlzLmZ1bGxOYW1lSGFzaCA9ICcnO1xuXHRcdHRoaXMuZGVsaW1pdGVyID0gJyc7XG5cdFx0dGhpcy5uYW1lc3BhY2UgPSAnJztcblx0XHR0aGlzLmRlZXAgPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWwgPSAwO1xuXG5cdFx0dGhpcy5zZWxlY3RhYmxlID0gZmFsc2U7XG5cdFx0dGhpcy5leGlzdGVuID0gdHJ1ZTtcblxuXHRcdHRoaXMudHlwZSA9IGtvLm9ic2VydmFibGUoRm9sZGVyVHlwZS5Vc2VyKTtcblxuXHRcdHRoaXMuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVkaXRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3ViU2NyaWJlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jaGVja2FibGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1YkZvbGRlcnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuZGVsZXRlQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hY3Rpb25CbGluayA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMTAwMCB9KTtcblxuXHRcdHRoaXMubmFtZUZvckVkaXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudEFsbCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5wcml2YXRlTWVzc2FnZUNvdW50VW5yZWFkID0ga28ub2JzZXJ2YWJsZSgwKTtcblxuXHRcdHRoaXMuY29sbGFwc2VkUHJpdmF0ZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uRm9sZGVyfSBqc29uXG5cdCAqIEByZXR1cm5zIHs/Rm9sZGVyTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgZm9sZGVyID0gbmV3IEZvbGRlck1vZGVsKCk7XG5cdFx0cmV0dXJuIGZvbGRlci5pbml0QnlKc29uKGpzb24pID8gZm9sZGVyLmluaXRDb21wdXRlZCgpIDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Rm9sZGVyTW9kZWx9XG5cdCAqL1xuXHRpbml0Q29tcHV0ZWQoKSB7XG5cdFx0Y29uc3QgaW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCk7XG5cblx0XHR0aGlzLmlzSW5ib3ggPSBrby5jb21wdXRlZCgoKSA9PiBGb2xkZXJUeXBlLkluYm94ID09PSB0aGlzLnR5cGUoKSk7XG5cblx0XHR0aGlzLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHQhIV8uZmluZChcblx0XHRcdFx0XHR0aGlzLnN1YkZvbGRlcnMoKSxcblx0XHRcdFx0XHQob0ZvbGRlcikgPT4gKG9Gb2xkZXIuc3ViU2NyaWJlZCgpIHx8IG9Gb2xkZXIuaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSkgJiYgIW9Gb2xkZXIuaXNTeXN0ZW1Gb2xkZXIoKVxuXHRcdFx0XHQpXG5cdFx0KTtcblxuXHRcdHRoaXMuY2FuQmVFZGl0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiBGb2xkZXJUeXBlLlVzZXIgPT09IHRoaXMudHlwZSgpICYmIHRoaXMuZXhpc3RlbiAmJiB0aGlzLnNlbGVjdGFibGUpO1xuXG5cdFx0dGhpcy52aXNpYmxlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaXNTdWJTY3JpYmVkID0gdGhpcy5zdWJTY3JpYmVkKCksXG5cdFx0XHRcdGlzU3ViRm9sZGVycyA9IHRoaXMuaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKTtcblxuXHRcdFx0cmV0dXJuIGlzU3ViU2NyaWJlZCB8fCAoaXNTdWJGb2xkZXJzICYmICghdGhpcy5leGlzdGVuIHx8ICF0aGlzLnNlbGVjdGFibGUpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuaXNTeXN0ZW1Gb2xkZXIgPSBrby5jb21wdXRlZCgoKSA9PiBGb2xkZXJUeXBlLlVzZXIgIT09IHRoaXMudHlwZSgpKTtcblxuXHRcdHRoaXMuaGlkZGVuID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaXNTeXN0ZW0gPSB0aGlzLmlzU3lzdGVtRm9sZGVyKCksXG5cdFx0XHRcdGlzU3ViRm9sZGVycyA9IHRoaXMuaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKTtcblxuXHRcdFx0cmV0dXJuIChpc1N5c3RlbSAmJiAhaXNTdWJGb2xkZXJzKSB8fCAoIXRoaXMuc2VsZWN0YWJsZSAmJiAhaXNTdWJGb2xkZXJzKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0YWJsZUZvckZvbGRlckxpc3QgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5pc1N5c3RlbUZvbGRlcigpICYmIHRoaXMuc2VsZWN0YWJsZSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VDb3VudEFsbCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRBbGwsXG5cdFx0XHRcdHdyaXRlOiAoaVZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGlzUG9zTnVtZXJpYyhpVmFsdWUsIHRydWUpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRBbGwoaVZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5wcml2YXRlTWVzc2FnZUNvdW50QWxsLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlQ291bnRVbnJlYWQgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKHtcblx0XHRcdFx0cmVhZDogdGhpcy5wcml2YXRlTWVzc2FnZUNvdW50VW5yZWFkLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGlzUG9zTnVtZXJpYyh2YWx1ZSwgdHJ1ZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudFVucmVhZCh2YWx1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudFVucmVhZC52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMucHJpbnRhYmxlVW5yZWFkQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBjb3VudCA9IHRoaXMubWVzc2FnZUNvdW50QWxsKCksXG5cdFx0XHRcdHVucmVhZCA9IHRoaXMubWVzc2FnZUNvdW50VW5yZWFkKCksXG5cdFx0XHRcdHR5cGUgPSB0aGlzLnR5cGUoKTtcblxuXHRcdFx0aWYgKDAgPCBjb3VudCkge1xuXHRcdFx0XHRpZiAoRm9sZGVyVHlwZS5EcmFmdCA9PT0gdHlwZSkge1xuXHRcdFx0XHRcdHJldHVybiAnJyArIGNvdW50O1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdDAgPCB1bnJlYWQgJiZcblx0XHRcdFx0XHRGb2xkZXJUeXBlLlRyYXNoICE9PSB0eXBlICYmXG5cdFx0XHRcdFx0Rm9sZGVyVHlwZS5BcmNoaXZlICE9PSB0eXBlICYmXG5cdFx0XHRcdFx0Rm9sZGVyVHlwZS5TZW50SXRlbXMgIT09IHR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuICcnICsgdW5yZWFkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVEZWxldGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYlN5c3RlbSA9IHRoaXMuaXNTeXN0ZW1Gb2xkZXIoKTtcblx0XHRcdHJldHVybiAhYlN5c3RlbSAmJiAwID09PSB0aGlzLnN1YkZvbGRlcnMoKS5sZW5ndGggJiYgaW5ib3hGb2xkZXJOYW1lICE9PSB0aGlzLmZ1bGxOYW1lUmF3O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYW5CZVN1YlNjcmliZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICF0aGlzLmlzU3lzdGVtRm9sZGVyKCkgJiYgdGhpcy5zZWxlY3RhYmxlICYmIGluYm94Rm9sZGVyTmFtZSAhPT0gdGhpcy5mdWxsTmFtZVJhd1xuXHRcdCk7XG5cblx0XHR0aGlzLmNhbkJlQ2hlY2tlZCA9IHRoaXMuY2FuQmVTdWJTY3JpYmVkO1xuXG5cdFx0dGhpcy5sb2NhbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXG5cdFx0XHRsZXQgbmFtZSA9IHRoaXMubmFtZSgpO1xuXHRcdFx0Y29uc3QgdHlwZSA9IHRoaXMudHlwZSgpO1xuXG5cdFx0XHRpZiAodGhpcy5pc1N5c3RlbUZvbGRlcigpKSB7XG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5JbmJveDpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9JTkJPWF9OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU2VudEl0ZW1zOlxuXHRcdFx0XHRcdFx0bmFtZSA9IGkxOG4oJ0ZPTERFUl9MSVNUL1NFTlRfTkFNRScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLkRyYWZ0OlxuXHRcdFx0XHRcdFx0bmFtZSA9IGkxOG4oJ0ZPTERFUl9MSVNUL0RSQUZUU19OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU3BhbTpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9TUEFNX05BTUUnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5UcmFzaDpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9UUkFTSF9OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuQXJjaGl2ZTpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9BUkNISVZFX05BTUUnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWFuYWdlRm9sZGVyU3lzdGVtTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cblx0XHRcdGxldCBzdWZmaXggPSAnJztcblx0XHRcdGNvbnN0IHR5cGUgPSB0aGlzLnR5cGUoKSxcblx0XHRcdFx0bmFtZSA9IHRoaXMubmFtZSgpO1xuXG5cdFx0XHRpZiAodGhpcy5pc1N5c3RlbUZvbGRlcigpKSB7XG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5JbmJveDpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL0lOQk9YX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5TZW50SXRlbXM6XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9TRU5UX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5EcmFmdDpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL0RSQUZUU19OQU1FJykgKyAnKSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU3BhbTpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL1NQQU1fTkFNRScpICsgJyknO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlRyYXNoOlxuXHRcdFx0XHRcdFx0c3VmZml4ID0gJygnICsgaTE4bignRk9MREVSX0xJU1QvVFJBU0hfTkFNRScpICsgJyknO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLkFyY2hpdmU6XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9BUkNISVZFX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKCcnICE9PSBzdWZmaXggJiYgJygnICsgbmFtZSArICcpJyA9PT0gc3VmZml4KSB8fCAnKGluYm94KScgPT09IHN1ZmZpeC50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRcdHN1ZmZpeCA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc3VmZml4O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb2xsYXBzZWQgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiAoKSA9PiAhdGhpcy5oaWRkZW4oKSAmJiB0aGlzLmNvbGxhcHNlZFByaXZhdGUoKSxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5jb2xsYXBzZWRQcml2YXRlKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaGFzVW5yZWFkTWVzc2FnZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlQ291bnRVbnJlYWQoKSAmJiAnJyAhPT0gdGhpcy5wcmludGFibGVVbnJlYWRDb3VudCgpKTtcblxuXHRcdHRoaXMuaGFzU3ViU2NyaWJlZFVucmVhZE1lc3NhZ2VzU3ViZm9sZGVycyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0ISFfLmZpbmQoXG5cdFx0XHRcdFx0dGhpcy5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0KGZvbGRlcikgPT4gZm9sZGVyLmhhc1VucmVhZE1lc3NhZ2VzKCkgfHwgZm9sZGVyLmhhc1N1YlNjcmliZWRVbnJlYWRNZXNzYWdlc1N1YmZvbGRlcnMoKVxuXHRcdFx0XHQpXG5cdFx0KTtcblxuXHRcdC8vIHN1YnNjcmliZVxuXHRcdHRoaXMubmFtZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLm5hbWVGb3JFZGl0KHZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZWRpdGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLm5hbWVGb3JFZGl0KHRoaXMubmFtZSgpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUNvdW50VW5yZWFkLnN1YnNjcmliZSgodW5yZWFkKSA9PiB7XG5cdFx0XHRpZiAoRm9sZGVyVHlwZS5JbmJveCA9PT0gdGhpcy50eXBlKCkpIHtcblx0XHRcdFx0RXZlbnRzLnB1YignbWFpbGJveC5pbmJveC11bnJlYWQtY291bnQnLCBbdW5yZWFkXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Y29sbGFwc2VkQ3NzKCkge1xuXHRcdHJldHVybiB0aGlzLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKClcblx0XHRcdD8gdGhpcy5jb2xsYXBzZWQoKVxuXHRcdFx0XHQ/ICdpY29uLXJpZ2h0LW1pbmkgZS1jb2xsYXBzZWQtc2lnbidcblx0XHRcdFx0OiAnaWNvbi1kb3duLW1pbmkgZS1jb2xsYXBzZWQtc2lnbidcblx0XHRcdDogJ2ljb24tbm9uZSBlLWNvbGxhcHNlZC1zaWduJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uRm9sZGVyfSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IGJSZXN1bHQgPSBmYWxzZTtcblx0XHRjb25zdCBzSW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCk7XG5cblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0ZvbGRlcicgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5uYW1lKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmRlbGltaXRlciA9IGpzb24uRGVsaW1pdGVyO1xuXHRcdFx0dGhpcy5mdWxsTmFtZSA9IGpzb24uRnVsbE5hbWU7XG5cdFx0XHR0aGlzLmZ1bGxOYW1lUmF3ID0ganNvbi5GdWxsTmFtZVJhdztcblx0XHRcdHRoaXMuZnVsbE5hbWVIYXNoID0ganNvbi5GdWxsTmFtZUhhc2g7XG5cdFx0XHR0aGlzLmRlZXAgPSBqc29uLkZ1bGxOYW1lUmF3LnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5sZW5ndGggLSAxO1xuXHRcdFx0dGhpcy5zZWxlY3RhYmxlID0gISFqc29uLklzU2VsZWN0YWJsZTtcblx0XHRcdHRoaXMuZXhpc3RlbiA9ICEhanNvbi5Jc0V4aXN0cztcblxuXHRcdFx0dGhpcy5zdWJTY3JpYmVkKCEhanNvbi5Jc1N1YnNjcmliZWQpO1xuXHRcdFx0dGhpcy5jaGVja2FibGUoISFqc29uLkNoZWNrYWJsZSk7XG5cblx0XHRcdHRoaXMudHlwZShzSW5ib3hGb2xkZXJOYW1lID09PSB0aGlzLmZ1bGxOYW1lUmF3ID8gRm9sZGVyVHlwZS5JbmJveCA6IEZvbGRlclR5cGUuVXNlcik7XG5cblx0XHRcdGJSZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBiUmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRwcmludGFibGVGdWxsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5mdWxsTmFtZS5zcGxpdCh0aGlzLmRlbGltaXRlcikuam9pbignIC8gJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyTW9kZWwsIEZvbGRlck1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IG1pY3JvdGltZSwgaXNVbmQsIGlzTm9ybWFsLCBwU3RyaW5nLCBwSW50LCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfQUpBWF9USU1FT1VULCBUT0tFTl9FUlJPUl9MSU1JVCwgQUpBWF9FUlJPUl9MSU1JVCB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RCYXNpY1Byb21pc2VzIH0gZnJvbSAnUHJvbWlzZXMvQWJzdHJhY3RCYXNpYyc7XG5cbmNsYXNzIEFic3RyYWN0QWpheFByb21pc2VzIGV4dGVuZHMgQWJzdHJhY3RCYXNpY1Byb21pc2VzIHtcblx0b1JlcXVlc3RzID0ge307XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuY2xlYXIoKTtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHRhYm9ydChzQWN0aW9uLCBiQ2xlYXJPbmx5KSB7XG5cdFx0aWYgKHRoaXMub1JlcXVlc3RzW3NBY3Rpb25dKSB7XG5cdFx0XHRpZiAoIWJDbGVhck9ubHkgJiYgdGhpcy5vUmVxdWVzdHNbc0FjdGlvbl0uYWJvcnQpIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbc0FjdGlvbl0uX19hYm9ydGVkX18gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1tzQWN0aW9uXS5hYm9ydCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm9SZXF1ZXN0c1tzQWN0aW9uXSA9IG51bGw7XG5cdFx0XHRkZWxldGUgdGhpcy5vUmVxdWVzdHNbc0FjdGlvbl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhamF4UmVxdWVzdChhY3Rpb24sIGlzUG9zdCwgdGltZU91dCwgcGFyYW1zLCBhZGRpdGlvbmFsR2V0U3RyaW5nLCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHRcdFx0dGltZU91dCA9IGlzTm9ybWFsKHRpbWVPdXQpID8gdGltZU91dCA6IERFRkFVTFRfQUpBWF9USU1FT1VUO1xuXHRcdFx0YWRkaXRpb25hbEdldFN0cmluZyA9IGlzVW5kKGFkZGl0aW9uYWxHZXRTdHJpbmcpID8gJycgOiBwU3RyaW5nKGFkZGl0aW9uYWxHZXRTdHJpbmcpO1xuXG5cdFx0XHRpZiAoaXNQb3N0KSB7XG5cdFx0XHRcdHBhcmFtcy5YVG9rZW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndG9rZW4nKTtcblx0XHRcdH1cblxuXHRcdFx0UGx1Z2lucy5ydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVxdWVzdCcsIFthY3Rpb24sIHBhcmFtcywgYWRkaXRpb25hbEdldFN0cmluZ10pO1xuXG5cdFx0XHR0aGlzLnNldFRyaWdnZXIoZlRyaWdnZXIsIHRydWUpO1xuXG5cdFx0XHRjb25zdCBvSCA9ICQuYWpheCh7XG5cdFx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0XHR1cmw6IGFqYXgoYWRkaXRpb25hbEdldFN0cmluZyksXG5cdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0XHRkYXRhOiBpc1Bvc3QgPyBwYXJhbXMgfHwge30gOiB7fSxcblx0XHRcdFx0dGltZW91dDogdGltZU91dCxcblx0XHRcdFx0Z2xvYmFsOiB0cnVlXG5cdFx0XHR9KS5hbHdheXMoKGRhdGEsIHRleHRTdGF0dXMpID0+IHtcblx0XHRcdFx0bGV0IGlzQ2FjaGVkID0gZmFsc2UsXG5cdFx0XHRcdFx0ZXJyb3JEYXRhID0gbnVsbDtcblxuXHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLlRpbWUpIHtcblx0XHRcdFx0XHRpc0NhY2hlZCA9IHBJbnQoZGF0YS5UaW1lKSA+IG1pY3JvdGltZSgpIC0gc3RhcnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLlVwZGF0ZVRva2VuKSB7XG5cdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5zZXRDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKGRhdGEuVXBkYXRlVG9rZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGJhY2t3YXJkIGNhcGFiaWxpdHlcblx0XHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRcdFx0Y2FzZSAnc3VjY2VzcycgPT09IHRleHRTdGF0dXMgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBhY3Rpb24gPT09IGRhdGEuQWN0aW9uOlxuXHRcdFx0XHRcdFx0dHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdhYm9ydCcgPT09IHRleHRTdGF0dXMgJiYgKCFkYXRhIHx8ICFkYXRhLl9fYWJvcnRlZF9fKTpcblx0XHRcdFx0XHRcdHR5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3I7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFBsdWdpbnMucnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSB0eXBlID8gZGF0YSA6IG51bGwsXG5cdFx0XHRcdFx0dHlwZSxcblx0XHRcdFx0XHRpc0NhY2hlZCxcblx0XHRcdFx0XHRwYXJhbXNcblx0XHRcdFx0XSk7XG5cblx0XHRcdFx0aWYgKCdzdWNjZXNzJyA9PT0gdGV4dFN0YXR1cykge1xuXHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGFjdGlvbiA9PT0gZGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGRhdGEuX19jYWNoZWRfXyA9IGlzQ2FjaGVkO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGVycm9yRGF0YSA9IGRhdGE7XG5cdFx0XHRcdFx0XHRyZWplY3QoZGF0YS5FcnJvckNvZGUgPyBkYXRhLkVycm9yQ29kZSA6IE5vdGlmaWNhdGlvbi5BamF4RmFsc2UpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlcnJvckRhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdFx0cmVqZWN0KE5vdGlmaWNhdGlvbi5BamF4UGFyc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgndGltZW91dCcgPT09IHRleHRTdGF0dXMpIHtcblx0XHRcdFx0XHRlcnJvckRhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdHJlamVjdChOb3RpZmljYXRpb24uQWpheFRpbWVvdXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCdhYm9ydCcgPT09IHRleHRTdGF0dXMpIHtcblx0XHRcdFx0XHRpZiAoIWRhdGEgfHwgIWRhdGEuX19hYm9ydGVkX18pIHtcblx0XHRcdFx0XHRcdHJlamVjdChOb3RpZmljYXRpb24uQWpheEFib3J0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZXJyb3JEYXRhID0gZGF0YTtcblx0XHRcdFx0XHRyZWplY3QoTm90aWZpY2F0aW9uLkFqYXhQYXJzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9SZXF1ZXN0c1thY3Rpb25dO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRUcmlnZ2VyKGZUcmlnZ2VyLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKGVycm9yRGF0YSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdC0xIDxcblx0XHRcdFx0XHRcdGluQXJyYXkoZXJyb3JEYXRhLkVycm9yQ29kZSwgW1xuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQXV0aEVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjZXNzRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bkVycm9yXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4gPT09IGVycm9yRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQgKz0gMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoVE9LRU5fRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChlcnJvckRhdGEuQ2xlYXJBdXRoIHx8IGVycm9yRGF0YS5Mb2dvdXQgfHwgQUpBWF9FUlJPUl9MSU1JVCA8IEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5jbGVhckNsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmICFlcnJvckRhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKG9IKSB7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMub1JlcXVlc3RzW2FjdGlvbl07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gb0g7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRSZXF1ZXN0KHNBY3Rpb24sIGZUcmlnZ2VyLCBzQWRkaXRpb25hbEdldFN0cmluZywgaVRpbWVPdXQpIHtcblx0XHRzQWRkaXRpb25hbEdldFN0cmluZyA9IGlzVW5kKHNBZGRpdGlvbmFsR2V0U3RyaW5nKSA/ICcnIDogcFN0cmluZyhzQWRkaXRpb25hbEdldFN0cmluZyk7XG5cdFx0c0FkZGl0aW9uYWxHZXRTdHJpbmcgPSBzQWN0aW9uICsgJy8nICsgc0FkZGl0aW9uYWxHZXRTdHJpbmc7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChzQWN0aW9uLCBmYWxzZSwgaVRpbWVPdXQsIG51bGwsIHNBZGRpdGlvbmFsR2V0U3RyaW5nLCBmVHJpZ2dlcik7XG5cdH1cblxuXHRwb3N0UmVxdWVzdChhY3Rpb24sIGZUcmlnZ2VyLCBwYXJhbXMsIHRpbWVPdXQpIHtcblx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0cGFyYW1zLkFjdGlvbiA9IGFjdGlvbjtcblxuXHRcdHJldHVybiB0aGlzLmFqYXhSZXF1ZXN0KGFjdGlvbiwgdHJ1ZSwgdGltZU91dCwgcGFyYW1zLCAnJywgZlRyaWdnZXIpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QWpheFByb21pc2VzLCBBYnN0cmFjdEFqYXhQcm9taXNlcyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBjaGFuZ2UgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIEFjY291bnRNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhbkJlRGVsZXRlID0gdHJ1ZVxuXHQgKiBAcGFyYW0ge251bWJlcj19IGNvdW50ID0gMFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZW1haWwsIGNhbkJlRGVsZXRlID0gdHJ1ZSwgY291bnQgPSAwKSB7XG5cdFx0c3VwZXIoJ0FjY291bnRNb2RlbCcpO1xuXG5cdFx0dGhpcy5lbWFpbCA9IGVtYWlsO1xuXG5cdFx0dGhpcy5jb3VudCA9IGtvLm9ic2VydmFibGUoY291bnQpO1xuXG5cdFx0dGhpcy5kZWxldGVBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNhbkJlRGVsZXRlZCA9IGtvLm9ic2VydmFibGUoISFjYW5CZURlbGV0ZSk7XG5cdFx0dGhpcy5jYW5CZUVkaXQgPSB0aGlzLmNhbkJlRGVsZXRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Y2hhbmdlQWNjb3VudExpbmsoKSB7XG5cdFx0cmV0dXJuIGNoYW5nZSh0aGlzLmVtYWlsKTtcblx0fVxufVxuXG5leHBvcnQgeyBBY2NvdW50TW9kZWwsIEFjY291bnRNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIElkZW50aXR5TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICovXG5cdGNvbnN0cnVjdG9yKGlkLCBlbWFpbCkge1xuXHRcdHN1cGVyKCdJZGVudGl0eU1vZGVsJyk7XG5cblx0XHR0aGlzLmlkID0ga28ub2JzZXJ2YWJsZShpZCB8fCAnJyk7XG5cdFx0dGhpcy5lbWFpbCA9IGtvLm9ic2VydmFibGUoZW1haWwpO1xuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5yZXBseVRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5iY2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2lnbmF0dXJlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaWduYXR1cmVJbnNlcnRCZWZvcmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZGVsZXRlQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jYW5CZURlbGV0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5pZCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Zm9ybWF0dGVkTmFtZSgpIHtcblx0XHRjb25zdCBuYW1lID0gdGhpcy5uYW1lKCksXG5cdFx0XHRlbWFpbCA9IHRoaXMuZW1haWwoKTtcblxuXHRcdHJldHVybiAnJyAhPT0gbmFtZSA/IG5hbWUgKyAnICgnICsgZW1haWwgKyAnKScgOiBlbWFpbDtcblx0fVxufVxuXG5leHBvcnQgeyBJZGVudGl0eU1vZGVsLCBJZGVudGl0eU1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIFRlbXBsYXRlTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYm9keVxuXHQgKi9cblx0Y29uc3RydWN0b3IoaWQsIG5hbWUsIGJvZHkpIHtcblx0XHRzdXBlcignVGVtcGxhdGVNb2RlbCcpO1xuXG5cdFx0dGhpcy5pZCA9IGlkO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5ib2R5ID0gYm9keTtcblx0XHR0aGlzLnBvcHVsYXRlZCA9IHRydWU7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0cGFyc2UoanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L1RlbXBsYXRlJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLmlkID0gcFN0cmluZyhqc29uLklEKTtcblx0XHRcdHRoaXMubmFtZSA9IHBTdHJpbmcoanNvbi5OYW1lKTtcblx0XHRcdHRoaXMuYm9keSA9IHBTdHJpbmcoanNvbi5Cb2R5KTtcblx0XHRcdHRoaXMucG9wdWxhdGVkID0gISFqc29uLlBvcHVsYXRlZDtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG5cbmV4cG9ydCB7IFRlbXBsYXRlTW9kZWwsIFRlbXBsYXRlTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaXNOb25FbXB0eUFycmF5LCBsb2cgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuXG5jbGFzcyBPcGVuUGdwS2V5TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZ3VJRFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gSURcblx0ICogQHBhcmFtIHthcnJheX0gSURzXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHVzZXJJRHNcblx0ICogQHBhcmFtIHthcnJheX0gZW1haWxzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcml2YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhcm1vclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihpbmRleCwgZ3VJRCwgSUQsIElEcywgdXNlcklEcywgZW1haWxzLCBpc1ByaXZhdGUsIGFybW9yLCB1c2VySUQpIHtcblx0XHRzdXBlcignT3BlblBncEtleU1vZGVsJyk7XG5cblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cdFx0dGhpcy5pZCA9IElEO1xuXHRcdHRoaXMuaWRzID0gaXNOb25FbXB0eUFycmF5KElEcykgPyBJRHMgOiBbSURdO1xuXHRcdHRoaXMuZ3VpZCA9IGd1SUQ7XG5cdFx0dGhpcy51c2VyID0gJyc7XG5cdFx0dGhpcy51c2VycyA9IHVzZXJJRHM7XG5cdFx0dGhpcy5lbWFpbCA9ICcnO1xuXHRcdHRoaXMuZW1haWxzID0gZW1haWxzO1xuXHRcdHRoaXMuYXJtb3IgPSBhcm1vcjtcblx0XHR0aGlzLmlzUHJpdmF0ZSA9ICEhaXNQcml2YXRlO1xuXG5cdFx0dGhpcy5zZWxlY3RVc2VyKHVzZXJJRCk7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0Z2V0TmF0aXZlS2V5KCkge1xuXHRcdGxldCBrZXkgPSBudWxsO1xuXHRcdHRyeSB7XG5cdFx0XHRrZXkgPSBQZ3BTdG9yZS5vcGVucGdwLmtleS5yZWFkQXJtb3JlZCh0aGlzLmFybW9yKTtcblx0XHRcdGlmIChrZXkgJiYgIWtleS5lcnIgJiYga2V5LmtleXMgJiYga2V5LmtleXNbMF0pIHtcblx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRsb2coZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXROYXRpdmVLZXlzKCkge1xuXHRcdGNvbnN0IGtleSA9IHRoaXMuZ2V0TmF0aXZlS2V5KCk7XG5cdFx0cmV0dXJuIGtleSAmJiBrZXkua2V5cyA/IGtleS5rZXlzIDogbnVsbDtcblx0fVxuXG5cdHNlbGVjdChwYXR0ZXJuLCBwcm9wZXJ0eSkge1xuXHRcdGlmICh0aGlzW3Byb3BlcnR5XSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzW3Byb3BlcnR5XS5pbmRleE9mKHBhdHRlcm4pO1xuXHRcdFx0aWYgKC0xICE9PSBpbmRleCkge1xuXHRcdFx0XHR0aGlzLnVzZXIgPSB0aGlzLnVzZXJzW2luZGV4XTtcblx0XHRcdFx0dGhpcy5lbWFpbCA9IHRoaXMuZW1haWxzW2luZGV4XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZWxlY3RVc2VyKHVzZXIpIHtcblx0XHR0aGlzLnNlbGVjdCh1c2VyLCAndXNlcnMnKTtcblx0fVxuXG5cdHNlbGVjdEVtYWlsKGVtYWlsKSB7XG5cdFx0dGhpcy5zZWxlY3QoZW1haWwsICdlbWFpbHMnKTtcblx0fVxufVxuXG5leHBvcnQgeyBPcGVuUGdwS2V5TW9kZWwsIE9wZW5QZ3BLZXlNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBBYnN0cmFjdFNjcmVlbiB9IGZyb20gJ0tub2luL0Fic3RyYWN0U2NyZWVuJztcblxuaW1wb3J0IHsgTG9naW5Vc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9Mb2dpbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5jbGFzcyBMb2dpblVzZXJTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdsb2dpbicsIFtMb2dpblVzZXJWaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luVXNlclNjcmVlbiwgTG9naW5Vc2VyU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHtcblx0TG9naW5TaWduTWVUeXBlLFxuXHRMb2dpblNpZ25NZVR5cGVBc1N0cmluZyxcblx0Q2xpZW50U2lkZUtleU5hbWUsXG5cdFN0b3JhZ2VSZXN1bHRUeXBlLFxuXHRNYWdpY3MsXG5cdE5vdGlmaWNhdGlvblxufSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyB0cmltLCBpbkFycmF5LCBwSW50LCBjb252ZXJ0TGFuZ05hbWUsIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7ICR3aW4gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBzb2NpYWxGYWNlYm9vaywgc29jaWFsR29vZ2xlLCBzb2NpYWxUd2l0dGVyIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlLCByZWxvYWQgYXMgdHJhbnNsYXRvclJlbG9hZCB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBMb2NhbCBmcm9tICdTdG9yYWdlL0NsaWVudCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyB2aWV3LCBjb21tYW5kLCBWaWV3VHlwZSwgcm91dGVPZmYsIHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiBbJ1ZpZXcvQXBwL0xvZ2luJywgJ1ZpZXcvVXNlci9Mb2dpbiddLFxuXHR0eXBlOiBWaWV3VHlwZS5DZW50ZXIsXG5cdHRlbXBsYXRlSUQ6ICdMb2dpbidcbn0pXG5jbGFzcyBMb2dpblVzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmhpZGVTdWJtaXRCdXR0b24gPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdoaWRlU3VibWl0QnV0dG9uJyk7XG5cblx0XHR0aGlzLndlbGNvbWUgPSBrby5vYnNlcnZhYmxlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZUxvZ2luV2VsY29tZVBhZ2UnKSk7XG5cblx0XHR0aGlzLmVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lnbk1lID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDUwMCB9KTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlU2lnbk1lID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ29JbWcgPSB0cmltKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMb2dpbkxvZ28nKSk7XG5cdFx0dGhpcy5sb2dpbkRlc2NyaXB0aW9uID0gdHJpbShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTG9naW5EZXNjcmlwdGlvbicpKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuZm9yZ290UGFzc3dvcmRMaW5rVXJsID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2ZvcmdvdFBhc3N3b3JkTGlua1VybCcpO1xuXHRcdHRoaXMucmVnaXN0cmF0aW9uTGlua1VybCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdyZWdpc3RyYXRpb25MaW5rVXJsJyk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWxFcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNTAwIH0pO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNTAwIH0pO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5lbWFpbEVycm9yQW5pbWF0aW9uKCkgfHxcblx0XHRcdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uKCkgfHxcblx0XHRcdFx0KHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpICYmIHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3JBbmltYXRpb24oKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5lbWFpbEZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmVtYWlsRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZSgnJyk7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZW1haWxFcnJvci5zdWJzY3JpYmUoKGJWKSA9PiB7XG5cdFx0XHR0aGlzLmVtYWlsRXJyb3JBbmltYXRpb24oISFiVik7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKChiVikgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uKCEhYlYpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvci5zdWJzY3JpYmUoKGJWKSA9PiB7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yQW5pbWF0aW9uKCEhYlYpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpZGlvbmFsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnN1Ym1pdEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICgnJyA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGlkaW9uYWwoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uTG9naW47XG5cblx0XHR0aGlzLmxhbmdSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5sYW5ndWFnZSA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2U7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlcztcblxuXHRcdHRoaXMuYlNlbmRMYW5ndWFnZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2UoKSkpO1xuXG5cdFx0dGhpcy5zaWduTWVUeXBlID0ga28ub2JzZXJ2YWJsZShMb2dpblNpZ25NZVR5cGUuVW51c2VkKTtcblxuXHRcdHRoaXMuc2lnbk1lVHlwZS5zdWJzY3JpYmUoKGlWYWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5zaWduTWUoTG9naW5TaWduTWVUeXBlLkRlZmF1bHRPbiA9PT0gaVZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2lnbk1lVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IExvZ2luU2lnbk1lVHlwZS5VbnVzZWQgIT09IHRoaXMuc2lnbk1lVHlwZSgpKTtcblxuXHRcdHRoaXMuZmFjZWJvb2tMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZUxvZ2luRW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3aXR0ZXJMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc29jaWFsTG9naW5FbmFibGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYkYgPSB0aGlzLmZhY2Vib29rTG9naW5FbmFibGVkKCksXG5cdFx0XHRcdGJHID0gdGhpcy5nb29nbGVMb2dpbkVuYWJsZWQoKSxcblx0XHRcdFx0YlQgPSB0aGlzLnR3aXR0ZXJMb2dpbkVuYWJsZWQoKTtcblxuXHRcdFx0cmV0dXJuIGJGIHx8IGJHIHx8IGJUO1xuXHRcdH0pO1xuXG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBZGRpdGlvbmFsTG9naW5FcnJvcicpICYmICF0aGlzLnN1Ym1pdEVycm9yKCkpIHtcblx0XHRcdHRoaXMuc3VibWl0RXJyb3IoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FkZGl0aW9uYWxMb2dpbkVycm9yJykpO1xuXHRcdH1cblx0fVxuXG5cdHdpbmRvd09wZW5GZWF0dXJlcyh3aCkge1xuXHRcdHJldHVybiBgbGVmdD0yMDAsdG9wPTEwMCx3aWR0aD0ke3dofSxoZWlnaHQ9JHt3aH0sbWVudWJhcj1ubyxzdGF0dXM9bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllc2A7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpICYmIHNlbGYuZmFjZWJvb2tMb2dpbkVuYWJsZWQoKSlcblx0ZmFjZWJvb2tDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbEZhY2Vib29rKCksICdGYWNlYm9vaycsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDUwMCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSAmJiBzZWxmLmdvb2dsZUxvZ2luRW5hYmxlZCgpKVxuXHRnb29nbGVDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbEdvb2dsZSgpLCAnR29vZ2xlJywgdGhpcy53aW5kb3dPcGVuRmVhdHVyZXMoNTUwKSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpICYmIHNlbGYuZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQoKSlcblx0Z29vZ2xlR21haWxDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbEdvb2dsZSh0cnVlKSwgJ0dvb2dsZScsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDU1MCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSAmJiBzZWxmLnR3aXR0ZXJMb2dpbkVuYWJsZWQoKSlcblx0dHdpdHRlckNvbW1hbmQoKSB7XG5cdFx0d2luZG93Lm9wZW4oc29jaWFsVHdpdHRlcigpLCAnVHdpdHRlcicsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDUwMCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSlcblx0c3VibWl0Q29tbWFuZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UoKTtcblxuXHRcdHRoaXMuZW1haWxFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWxFcnJvcignJyA9PT0gdHJpbSh0aGlzLmVtYWlsKCkpKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoJycgPT09IHRyaW0odGhpcy5wYXNzd29yZCgpKSk7XG5cblx0XHRpZiAodGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkpIHtcblx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvcignJyA9PT0gdHJpbSh0aGlzLmFkZGl0aW9uYWxDb2RlKCkpKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmVtYWlsRXJyb3IoKSB8fFxuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yKCkgfHxcblx0XHRcdCh0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkoKSAmJiB0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKCkpXG5cdFx0KSB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLmVtYWlsRXJyb3IoKTpcblx0XHRcdFx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5wYXNzd29yZEVycm9yKCk6XG5cdFx0XHRcdFx0dGhpcy5wYXNzd29yZEZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpICYmIHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoKTpcblx0XHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmZvY3VzZWQodHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBwbHVnaW5SZXN1bHRDb2RlID0gMCxcblx0XHRcdHBsdWdpblJlc3VsdE1lc3NhZ2UgPSAnJztcblxuXHRcdGNvbnN0IGZTdWJtaXRSZXN1bHQgPSAoaVJlc3VsdENvZGUsIHNSZXN1bHRNZXNzYWdlKSA9PiB7XG5cdFx0XHRwbHVnaW5SZXN1bHRDb2RlID0gaVJlc3VsdENvZGUgfHwgMDtcblx0XHRcdHBsdWdpblJlc3VsdE1lc3NhZ2UgPSBzUmVzdWx0TWVzc2FnZSB8fCAnJztcblx0XHR9O1xuXG5cdFx0UGx1Z2lucy5ydW5Ib29rKCd1c2VyLWxvZ2luLXN1Ym1pdCcsIFtmU3VibWl0UmVzdWx0XSk7XG5cdFx0aWYgKDAgPCBwbHVnaW5SZXN1bHRDb2RlKSB7XG5cdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihwbHVnaW5SZXN1bHRDb2RlKSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICgnJyAhPT0gcGx1Z2luUmVzdWx0TWVzc2FnZSkge1xuXHRcdFx0dGhpcy5zdWJtaXRFcnJvcihwbHVnaW5SZXN1bHRNZXNzYWdlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cblx0XHRjb25zdCBmTG9naW5SZXF1ZXN0ID0gKHNMb2dpblBhc3N3b3JkKSA9PiB7XG5cdFx0XHRSZW1vdGUubG9naW4oXG5cdFx0XHRcdChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmICdMb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0RhdGEuVHdvRmFjdG9yQXV0aCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUoJycpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmFkZGl0aW9uYWxDb2RlLmZvY3VzZWQodHJ1ZSksIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9EYXRhLkFkbWluKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2V0QXBwKCkucmVkaXJlY3RUb0FkbWluUGFuZWwoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRnZXRBcHAoKS5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdGlmICgtMSA8IGluQXJyYXkob0RhdGEuRXJyb3JDb2RlLCBbTm90aWZpY2F0aW9uLkludmFsaWRJbnB1dEFyZ3VtZW50XSkpIHtcblx0XHRcdFx0XHRcdFx0XHRvRGF0YS5FcnJvckNvZGUgPSBOb3RpZmljYXRpb24uQXV0aEVycm9yO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2Uob0RhdGEpKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoJycgPT09IHRoaXMuc3VibWl0RXJyb3IoKSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvRGF0YS5FcnJvck1lc3NhZ2VBZGRpdGlvbmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGlkaW9uYWwob0RhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVtYWlsKCksXG5cdFx0XHRcdCcnLFxuXHRcdFx0XHRzTG9naW5QYXNzd29yZCxcblx0XHRcdFx0ISF0aGlzLnNpZ25NZSgpLFxuXHRcdFx0XHR0aGlzLmJTZW5kTGFuZ3VhZ2UgPyB0aGlzLmxhbmd1YWdlKCkgOiAnJyxcblx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkgPyB0aGlzLmFkZGl0aW9uYWxDb2RlKCkgOiAnJyxcblx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkgPyAhIXRoaXMuYWRkaXRpb25hbENvZGVTaWduTWUoKSA6IGZhbHNlXG5cdFx0XHQpO1xuXG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFNpZ25NZSwgdGhpcy5zaWduTWUoKSA/ICctMS0nIDogJy0wLScpO1xuXHRcdH07XG5cblx0XHRmTG9naW5SZXF1ZXN0KHRoaXMucGFzc3dvcmQoKSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGRpc3BsYXlNYWluRm9ybSgpIHtcblx0XHR0aGlzLndlbGNvbWUoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnICE9PSB0aGlzLmVtYWlsKCkgJiYgJycgIT09IHRoaXMucGFzc3dvcmQoKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZEZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoJycgPT09IHRoaXMuZW1haWwoKSkge1xuXHRcdFx0dGhpcy5lbWFpbEZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoJycgPT09IHRoaXMucGFzc3dvcmQoKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZEZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHRoaXMuZW1haWxGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEZvY3VzKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Y29uc3Qgc2lnbk1lTG9jYWwgPSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFNpZ25NZSksXG5cdFx0XHRzaWduTWUgPSAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NpZ25NZScpIHx8ICd1bnVzZWQnKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0anNIYXNoID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2pzSGFzaCcpLFxuXHRcdFx0ZlNvY2lhbCA9IChpRXJyb3JDb2RlKSA9PiB7XG5cdFx0XHRcdGlFcnJvckNvZGUgPSBwSW50KGlFcnJvckNvZGUpO1xuXHRcdFx0XHRpZiAoMCA9PT0gaUVycm9yQ29kZSkge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblx0XHRcdFx0XHRnZXRBcHAoKS5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oaUVycm9yQ29kZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0dGhpcy5mYWNlYm9va0xvZ2luRW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0ZhY2Vib29rU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlckxvZ2luRW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKSk7XG5cdFx0dGhpcy5nb29nbGVMb2dpbkVuYWJsZWQoXG5cdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmICEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aCcpXG5cdFx0KTtcblx0XHR0aGlzLmdvb2dsZUdtYWlsTG9naW5FbmFibGVkKFxuXHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGhHbWFpbCcpXG5cdFx0KTtcblxuXHRcdHN3aXRjaCAoc2lnbk1lKSB7XG5cdFx0XHRjYXNlIExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nLkRlZmF1bHRPZmY6XG5cdFx0XHRjYXNlIExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nLkRlZmF1bHRPbjpcblx0XHRcdFx0dGhpcy5zaWduTWVUeXBlKFxuXHRcdFx0XHRcdExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nLkRlZmF1bHRPbiA9PT0gc2lnbk1lID8gTG9naW5TaWduTWVUeXBlLkRlZmF1bHRPbiA6IExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T2ZmXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0c3dpdGNoIChzaWduTWVMb2NhbCkge1xuXHRcdFx0XHRcdGNhc2UgJy0xLSc6XG5cdFx0XHRcdFx0XHR0aGlzLnNpZ25NZVR5cGUoTG9naW5TaWduTWVUeXBlLkRlZmF1bHRPbik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICctMC0nOlxuXHRcdFx0XHRcdFx0dGhpcy5zaWduTWVUeXBlKExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T2ZmKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBMb2dpblNpZ25NZVR5cGVBc1N0cmluZy5VbnVzZWQ6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLnNpZ25NZVR5cGUoTG9naW5TaWduTWVUeXBlLlVudXNlZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHRoaXMuZW1haWwoQXBwU3RvcmUuZGV2RW1haWwpO1xuXHRcdHRoaXMucGFzc3dvcmQoQXBwU3RvcmUuZGV2UGFzc3dvcmQpO1xuXG5cdFx0aWYgKHRoaXMuZ29vZ2xlTG9naW5FbmFibGVkKCkgfHwgdGhpcy5nb29nbGVHbWFpbExvZ2luRW5hYmxlZCgpKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2dvb2dsZV9sb2dpbl9zZXJ2aWNlJ10gPSBmU29jaWFsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmZhY2Vib29rTG9naW5FbmFibGVkKCkpIHtcblx0XHRcdHdpbmRvd1sncmxfJyArIGpzSGFzaCArICdfZmFjZWJvb2tfbG9naW5fc2VydmljZSddID0gZlNvY2lhbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50d2l0dGVyTG9naW5FbmFibGVkKCkpIHtcblx0XHRcdHdpbmRvd1sncmxfJyArIGpzSGFzaCArICdfdHdpdHRlcl9sb2dpbl9zZXJ2aWNlJ10gPSBmU29jaWFsO1xuXHRcdH1cblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0TGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFuZ1JlcXVlc3QodHJ1ZSk7XG5cblx0XHRcdFx0dHJhbnNsYXRvclJlbG9hZChmYWxzZSwgdmFsdWUpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5sYW5nUmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmJTZW5kTGFuZ3VhZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5sYW5nUmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblxuXHRcdHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSh0cnVlKTtcblx0fVxuXG5cdHN1Ym1pdEZvcm0oKSB7XG5cdFx0dGhpcy5zdWJtaXRDb21tYW5kKCk7XG5cdH1cblxuXHRzZWxlY3RMYW5ndWFnZSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW3RoaXMubGFuZ3VhZ2UsIHRoaXMubGFuZ3VhZ2VzKCksIExhbmd1YWdlU3RvcmUudXNlckxhbmd1YWdlKCldKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlT25UYWIoYlNoaWZ0KSB7XG5cdFx0aWYgKCFiU2hpZnQpIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0IHsgTG9naW5Vc2VyVmlldywgTG9naW5Vc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcblxuaW1wb3J0IHsgRm9jdXNlZCwgQ2FwYSwgQ2xpZW50U2lkZUtleU5hbWUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkaHRtbCwgbGVmdFBhbmVsRGlzYWJsZWQsIGxlZnRQYW5lbFR5cGUsIG1vdmVBY3Rpb24sIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBwU3RyaW5nLCBwSW50LCBkZWNvZGVVUkksIHdpbmRvd1Jlc2l6ZUNhbGxiYWNrIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldEZvbGRlckZyb21DYWNoZUxpc3QsIGdldEZvbGRlckZ1bGxOYW1lUmF3LCBnZXRGb2xkZXJJbmJveE5hbWUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IHsgU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvTWFpbEJveC9TeXN0ZW1Ecm9wRG93bic7XG5pbXBvcnQgeyBGb2xkZXJMaXN0TWFpbEJveFVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL01haWxCb3gvRm9sZGVyTGlzdCc7XG5pbXBvcnQgeyBNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VMaXN0JztcbmltcG9ydCB7IE1lc3NhZ2VWaWV3TWFpbEJveFVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL01haWxCb3gvTWVzc2FnZVZpZXcnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgd2FybVVwU2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBNYWlsQm94VXNlclNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ21haWxib3gnLCBbXG5cdFx0XHRTeXN0ZW1Ecm9wRG93bk1haWxCb3hVc2VyVmlldyxcblx0XHRcdEZvbGRlckxpc3RNYWlsQm94VXNlclZpZXcsXG5cdFx0XHRNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldyxcblx0XHRcdE1lc3NhZ2VWaWV3TWFpbEJveFVzZXJWaWV3XG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHR1cGRhdGVXaW5kb3dUaXRsZSgpIHtcblx0XHRsZXQgZm9sZGVyc0luYm94VW5yZWFkQ291bnQgPSBGb2xkZXJTdG9yZS5mb2xkZXJzSW5ib3hVbnJlYWRDb3VudCgpO1xuXHRcdGNvbnN0IGVtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xpc3RQZXJtYW5lbnRGaWx0ZXJlZCcpKSB7XG5cdFx0XHRmb2xkZXJzSW5ib3hVbnJlYWRDb3VudCA9IDA7XG5cdFx0fVxuXG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoXG5cdFx0XHQoJycgPT09IGVtYWlsXG5cdFx0XHRcdD8gJydcblx0XHRcdFx0OiAnJyArICgwIDwgZm9sZGVyc0luYm94VW5yZWFkQ291bnQgPyAnKCcgKyBmb2xkZXJzSW5ib3hVbnJlYWRDb3VudCArICcpICcgOiAnICcpICsgZW1haWwgKyAnIC0gJykgK1xuXHRcdFx0XHRpMThuKCdUSVRMRVMvTUFJTEJPWCcpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnVwZGF0ZVdpbmRvd1RpdGxlKCk7XG5cblx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5Ob25lKTtcblx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpKSB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAoIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKSkge1xuXHRcdFx0bGVmdFBhbmVsVHlwZShTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpIHx8IFNldHRpbmdzLmNhcGEoQ2FwYS5Db250YWN0cykgPyAnc2hvcnQnIDogJ25vbmUnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGVmdFBhbmVsVHlwZSgnJyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJIYXNoXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblJvdXRlKGZvbGRlckhhc2gsIHBhZ2UsIHNlYXJjaCkge1xuXHRcdGxldCB0aHJlYWRVaWQgPSBmb2xkZXJIYXNoLnJlcGxhY2UoL14oLispfihbXFxkXSspJC8sICckMicpO1xuXHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoZ2V0Rm9sZGVyRnVsbE5hbWVSYXcoZm9sZGVySGFzaC5yZXBsYWNlKC9+KFtcXGRdKykkLywgJycpKSk7XG5cblx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRpZiAoZm9sZGVySGFzaCA9PT0gdGhyZWFkVWlkKSB7XG5cdFx0XHRcdHRocmVhZFVpZCA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKGZvbGRlcik7XG5cblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UocGFnZSk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goc2VhcmNoKTtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFRocmVhZFVpZCh0aHJlYWRVaWQpO1xuXG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU3RhcnQoKSB7XG5cdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdC5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0LnN1YnNjcmliZSh3aW5kb3dSZXNpemVDYWxsYmFjayk7XG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2Uuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4gU2V0dGluZ3NTdG9yZS5sYXlvdXQudmFsdWVIYXNNdXRhdGVkKCksIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdFx0Xy5kZWxheSgoKSA9PiB3YXJtVXBTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSksIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5pbmJveC11bnJlYWQtY291bnQnLCAoY291bnQpID0+IHtcblx0XHRcdEZvbGRlclN0b3JlLmZvbGRlcnNJbmJveFVucmVhZENvdW50KGNvdW50KTtcblxuXHRcdFx0Y29uc3QgZW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWwoKTtcblx0XHRcdF8uZWFjaChBY2NvdW50U3RvcmUuYWNjb3VudHMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgZW1haWwgPT09IGl0ZW0uZW1haWwpIHtcblx0XHRcdFx0XHRpdGVtLmNvdW50KGNvdW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudXBkYXRlV2luZG93VGl0bGUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKCFiTW9iaWxlRGV2aWNlICYmICFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJykpIHtcblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHRnZXRBcHAoKS5pbml0SG9yaXpvbnRhbExheW91dFJlc2l6ZXIoQ2xpZW50U2lkZUtleU5hbWUuTWVzc2FnZUxpc3RTaXplKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdCRodG1sLm9uKCdjbGljaycsICcjcmwtcmlnaHQnLCAoKSA9PiB7XG5cdFx0XHRtb3ZlQWN0aW9uKGZhbHNlKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgaW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCksXG5cdFx0XHRmTm9ybVMgPSAocmVxdWVzdCwgdmFscykgPT4ge1xuXHRcdFx0XHR2YWxzWzBdID0gcFN0cmluZyh2YWxzWzBdKTtcblx0XHRcdFx0dmFsc1sxXSA9IHBJbnQodmFsc1sxXSk7XG5cdFx0XHRcdHZhbHNbMV0gPSAwID49IHZhbHNbMV0gPyAxIDogdmFsc1sxXTtcblx0XHRcdFx0dmFsc1syXSA9IHBTdHJpbmcodmFsc1syXSk7XG5cblx0XHRcdFx0aWYgKCcnID09PSByZXF1ZXN0KSB7XG5cdFx0XHRcdFx0dmFsc1swXSA9IGluYm94Rm9sZGVyTmFtZTtcblx0XHRcdFx0XHR2YWxzWzFdID0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbZGVjb2RlVVJJKHZhbHNbMF0pLCB2YWxzWzFdLCBkZWNvZGVVUkkodmFsc1syXSldO1xuXHRcdFx0fSxcblx0XHRcdGZOb3JtRCA9IChyZXF1ZXN0LCB2YWxzKSA9PiB7XG5cdFx0XHRcdHZhbHNbMF0gPSBwU3RyaW5nKHZhbHNbMF0pO1xuXHRcdFx0XHR2YWxzWzFdID0gcFN0cmluZyh2YWxzWzFdKTtcblxuXHRcdFx0XHRpZiAoJycgPT09IHJlcXVlc3QpIHtcblx0XHRcdFx0XHR2YWxzWzBdID0gaW5ib3hGb2xkZXJOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtkZWNvZGVVUkkodmFsc1swXSksIDEsIGRlY29kZVVSSSh2YWxzWzFdKV07XG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdFsvXihbYS16QS1aMC05fl0rKVxcL3AoWzEtOV1bMC05XSopXFwvKC4rKVxcLz8kLywgeyAnbm9ybWFsaXplXyc6IGZOb3JtUyB9XSxcblx0XHRcdFsvXihbYS16QS1aMC05fl0rKVxcL3AoWzEtOV1bMC05XSopJC8sIHsgJ25vcm1hbGl6ZV8nOiBmTm9ybVMgfV0sXG5cdFx0XHRbL14oW2EtekEtWjAtOX5dKylcXC8oLispXFwvPyQvLCB7ICdub3JtYWxpemVfJzogZk5vcm1EIH1dLFxuXHRcdFx0Wy9eKFteL10qKSQvLCB7ICdub3JtYWxpemVfJzogZk5vcm1TIH1dXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBNYWlsQm94VXNlclNjcmVlbiwgTWFpbEJveFVzZXJTY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgdmlldywgVmlld1R5cGUgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvQWJzdHJhY3RTeXN0ZW1Ecm9wRG93bic7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9NYWlsQm94L1N5c3RlbURyb3BEb3duJyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdTeXN0ZW1Ecm9wRG93bidcbn0pXG5jbGFzcyBTeXN0ZW1Ecm9wRG93bk1haWxCb3hVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyB7fVxuXG5leHBvcnQgeyBTeXN0ZW1Ecm9wRG93bk1haWxCb3hVc2VyVmlldywgU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyB0cmltLCBpc05vcm1hbCwgaXNBcnJheSwgd2luZG93UmVzaXplIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IENhcGEsIEZvY3VzZWQsIExheW91dCwgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7ICRodG1sLCBsZWZ0UGFuZWxEaXNhYmxlZCwgbW92ZUFjdGlvbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IG1haWxCb3gsIHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHNldEZvbGRlckhhc2ggfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2hvd1NjcmVlblBvcHVwLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L1VzZXIvTWFpbEJveC9Gb2xkZXJMaXN0Jyxcblx0dHlwZTogVmlld1R5cGUuTGVmdCxcblx0dGVtcGxhdGVJRDogJ01haWxGb2xkZXJMaXN0J1xufSlcbmNsYXNzIEZvbGRlckxpc3RNYWlsQm94VXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub0NvbnRlbnRWaXNpYmxlID0gbnVsbDtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9IG51bGw7XG5cblx0XHR0aGlzLmNvbXBvc2VJbkVkaXQgPSBBcHBTdG9yZS5jb21wb3NlSW5FZGl0O1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdDtcblx0XHR0aGlzLmZvbGRlckxpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJMaXN0O1xuXHRcdHRoaXMuZm9sZGVyTGlzdFN5c3RlbSA9IEZvbGRlclN0b3JlLmZvbGRlckxpc3RTeXN0ZW07XG5cdFx0dGhpcy5mb2xkZXJzQ2hhbmdpbmcgPSBGb2xkZXJTdG9yZS5mb2xkZXJzQ2hhbmdpbmc7XG5cblx0XHR0aGlzLm1vdmVBY3Rpb24gPSBtb3ZlQWN0aW9uO1xuXG5cdFx0dGhpcy5mb2xkZXJzTGlzdFdpdGhTaW5nbGVJbmJveFJvb3RGb2xkZXIgPSBGb2xkZXJTdG9yZS5mb2xkZXJzTGlzdFdpdGhTaW5nbGVJbmJveFJvb3RGb2xkZXI7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cblx0XHR0aGlzLmlEcm9wT3ZlclRpbWVyID0gMDtcblxuXHRcdHRoaXMuYWxsb3dDb21wb3NlciA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKTtcblx0XHR0aGlzLmFsbG93Q29udGFjdHMgPSAhIUFwcFN0b3JlLmNvbnRhY3RzSXNBbGxvd2VkKCk7XG5cdFx0dGhpcy5hbGxvd0ZvbGRlcnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKTtcblxuXHRcdHRoaXMuZm9sZGVyTGlzdEZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PiBGb2N1c2VkLkZvbGRlckxpc3QgPT09IEFwcFN0b3JlLmZvY3VzZWRTdGF0ZSgpKTtcblxuXHRcdHRoaXMuaXNJbmJveFN0YXJyZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXIoKSAmJlxuXHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCkuaXNJbmJveCgpICYmXG5cdFx0XHRcdC0xIDwgdHJpbShNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goKSkuaW5kZXhPZignaXM6ZmxhZ2dlZCcpXG5cdFx0KTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0dGhpcy5vQ29udGVudFZpc2libGUgPSAkKCcuYi1jb250ZW50JywgZG9tKTtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9ICQoJy5jb250ZW50JywgdGhpcy5vQ29udGVudFZpc2libGUpO1xuXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXMsXG5cdFx0XHRpc01vYmlsZSA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKSxcblx0XHRcdGZTZWxlY3RGb2xkZXIgPSAoZWwsIGV2ZW50LCBzdGFycmVkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlzTW92ZSA9IG1vdmVBY3Rpb24oKTtcblx0XHRcdFx0aWYgKGlzTW9iaWxlKSB7XG5cdFx0XHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdGlmIChzdGFycmVkKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmb2xkZXIgPSBrby5kYXRhRm9yKGVsKTtcblx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdGlmIChpc01vdmUpIHtcblx0XHRcdFx0XHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHRcdFx0XHRcdFx0Z2V0QXBwKCkubW92ZU1lc3NhZ2VzVG9Gb2xkZXIoXG5cdFx0XHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdFx0XHRcdFx0Zm9sZGVyLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKExheW91dC5Ob1ByZXZpZXcgPT09IFNldHRpbmdzU3RvcmUubGF5b3V0KCkpIHtcblx0XHRcdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChmb2xkZXIuZnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKSB7XG5cdFx0XHRcdFx0XHRcdHNldEZvbGRlckhhc2goZm9sZGVyLmZ1bGxOYW1lUmF3LCAnJyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChzdGFycmVkKSB7XG5cdFx0XHRcdFx0XHRcdHNldEhhc2gobWFpbEJveChmb2xkZXIuZnVsbE5hbWVIYXNoLCAxLCAnaXM6ZmxhZ2dlZCcpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNldEhhc2gobWFpbEJveChmb2xkZXIuZnVsbE5hbWVIYXNoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9tXG5cdFx0XHQub24oJ2NsaWNrJywgJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rIC5lLWNvbGxhcHNlZC1zaWduJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgZm9sZGVyID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGZvbGRlciAmJiBldmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxhcHNlZCA9IGZvbGRlci5jb2xsYXBzZWQoKTtcblx0XHRcdFx0XHRnZXRBcHAoKS5zZXRFeHBhbmRlZEZvbGRlcihmb2xkZXIuZnVsbE5hbWVIYXNoLCBjb2xsYXBzZWQpO1xuXG5cdFx0XHRcdFx0Zm9sZGVyLmNvbGxhcHNlZCghY29sbGFwc2VkKTtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluay5zZWxlY3RhYmxlIC5pbmJveC1zdGFyLWljb24nLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRmU2VsZWN0Rm9sZGVyKHRoaXMsIGV2ZW50LCAhc2VsZi5pc0luYm94U3RhcnJlZCgpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rLnNlbGVjdGFibGUnLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRmU2VsZWN0Rm9sZGVyKHRoaXMsIGV2ZW50LCBmYWxzZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KTtcblxuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5Gb2xkZXJMaXN0LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdGNvbnN0IGtleUNvZGUgPSBoYW5kbGVyICYmICd1cCcgPT09IGhhbmRsZXIuc2hvcnRjdXQgPyBFdmVudEtleUNvZGUuVXAgOiBFdmVudEtleUNvZGUuRG93bixcblx0XHRcdFx0JGl0ZW1zID0gJCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbms6bm90KC5oaWRkZW4pOnZpc2libGUnLCBkb20pO1xuXG5cdFx0XHRpZiAoZXZlbnQgJiYgJGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRsZXQgaW5kZXggPSAkaXRlbXMuaW5kZXgoJGl0ZW1zLmZpbHRlcignLmZvY3VzZWQnKSk7XG5cdFx0XHRcdGlmICgtMSA8IGluZGV4KSB7XG5cdFx0XHRcdFx0JGl0ZW1zLmVxKGluZGV4KS5yZW1vdmVDbGFzcygnZm9jdXNlZCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKEV2ZW50S2V5Q29kZS5VcCA9PT0ga2V5Q29kZSAmJiAwIDwgaW5kZXgpIHtcblx0XHRcdFx0XHRpbmRleCAtPSAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5Eb3duID09PSBrZXlDb2RlICYmIGluZGV4IDwgJGl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRpbmRleCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JGl0ZW1zLmVxKGluZGV4KS5hZGRDbGFzcygnZm9jdXNlZCcpO1xuXHRcdFx0XHRzZWxmLnNjcm9sbFRvRm9jdXNlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2VudGVyJywgS2V5U3RhdGUuRm9sZGVyTGlzdCwgKCkgPT4ge1xuXHRcdFx0Y29uc3QgJGl0ZW1zID0gJCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbms6bm90KC5oaWRkZW4pLmZvY3VzZWQnLCBkb20pO1xuXHRcdFx0aWYgKCRpdGVtcy5sZW5ndGggJiYgJGl0ZW1zWzBdKSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0JGl0ZW1zLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnc3BhY2UnLCBLZXlTdGF0ZS5Gb2xkZXJMaXN0LCAoKSA9PiB7XG5cdFx0XHRjb25zdCAkaXRlbXMgPSAkKCcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluazpub3QoLmhpZGRlbikuZm9jdXNlZCcsIGRvbSk7XG5cdFx0XHRpZiAoJGl0ZW1zLmxlbmd0aCAmJiAkaXRlbXNbMF0pIHtcblx0XHRcdFx0Y29uc3QgZm9sZGVyID0ga28uZGF0YUZvcigkaXRlbXNbMF0pO1xuXHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGFwc2VkID0gZm9sZGVyLmNvbGxhcHNlZCgpO1xuXHRcdFx0XHRcdGdldEFwcCgpLnNldEV4cGFuZGVkRm9sZGVyKGZvbGRlci5mdWxsTmFtZUhhc2gsIGNvbGxhcHNlZCk7XG5cdFx0XHRcdFx0Zm9sZGVyLmNvbGxhcHNlZCghY29sbGFwc2VkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2VzYywgdGFiLCBzaGlmdCt0YWIsIHJpZ2h0JywgS2V5U3RhdGUuRm9sZGVyTGlzdCwgKCkgPT4ge1xuXHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0JCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbmsuZm9jdXNlZCcsIGRvbSkucmVtb3ZlQ2xhc3MoJ2ZvY3VzZWQnKTtcblx0XHRcdGlmIChGb2N1c2VkLkZvbGRlckxpc3QgPT09IHZhbHVlKSB7XG5cdFx0XHRcdCQoJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rLnNlbGVjdGVkJywgZG9tKS5hZGRDbGFzcygnZm9jdXNlZCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bWVzc2FnZXNEcm9wT3Zlcihmb2xkZXIpIHtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaURyb3BPdmVyVGltZXIpO1xuXHRcdGlmIChmb2xkZXIgJiYgZm9sZGVyLmNvbGxhcHNlZCgpKSB7XG5cdFx0XHR0aGlzLmlEcm9wT3ZlclRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmb2xkZXIuY29sbGFwc2VkKGZhbHNlKTtcblx0XHRcdFx0Z2V0QXBwKCkuc2V0RXhwYW5kZWRGb2xkZXIoZm9sZGVyLmZ1bGxOYW1lSGFzaCwgdHJ1ZSk7XG5cdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0bWVzc2FnZXNEcm9wT3V0KCkge1xuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pRHJvcE92ZXJUaW1lcik7XG5cdH1cblxuXHRzY3JvbGxUb0ZvY3VzZWQoKSB7XG5cdFx0aWYgKCF0aGlzLm9Db250ZW50VmlzaWJsZSB8fCAhdGhpcy5vQ29udGVudFNjcm9sbGFibGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBvZmZzZXQgPSAyMCxcblx0XHRcdGZvY3VzZWQgPSAkKCcuZS1pdGVtIC5lLWxpbmsuZm9jdXNlZCcsIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSxcblx0XHRcdHBvcyA9IGZvY3VzZWQucG9zaXRpb24oKSxcblx0XHRcdHZpc2libGVIZWlnaHQgPSB0aGlzLm9Db250ZW50VmlzaWJsZS5oZWlnaHQoKSxcblx0XHRcdGZvY3VzZWRIZWlnaHQgPSBmb2N1c2VkLm91dGVySGVpZ2h0KCk7XG5cblx0XHRpZiAocG9zICYmICgwID4gcG9zLnRvcCB8fCBwb3MudG9wICsgZm9jdXNlZEhlaWdodCA+IHZpc2libGVIZWlnaHQpKSB7XG5cdFx0XHRpZiAoMCA+IHBvcy50b3ApIHtcblx0XHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcCgpICsgcG9zLnRvcCAtIG9mZnNldCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoXG5cdFx0XHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKCkgKyBwb3MudG9wIC0gdmlzaWJsZUhlaWdodCArIGZvY3VzZWRIZWlnaHQgKyBvZmZzZXRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Rm9sZGVyTW9kZWx9IHRvRm9sZGVyXG5cdCAqIEBwYXJhbSB7e2hlbHBlcjpqUXVlcnl9fSB1aVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG1lc3NhZ2VzRHJvcCh0b0ZvbGRlciwgdWkpIHtcblx0XHRpZiAodG9Gb2xkZXIgJiYgdWkgJiYgdWkuaGVscGVyKSB7XG5cdFx0XHRjb25zdCBmcm9tRm9sZGVyRnVsbE5hbWVSYXcgPSB1aS5oZWxwZXIuZGF0YSgncmwtZm9sZGVyJyksXG5cdFx0XHRcdGNvcHkgPSAkaHRtbC5oYXNDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpLFxuXHRcdFx0XHR1aWRzID0gdWkuaGVscGVyLmRhdGEoJ3JsLXVpZHMnKTtcblxuXHRcdFx0aWYgKGlzTm9ybWFsKGZyb21Gb2xkZXJGdWxsTmFtZVJhdykgJiYgJycgIT09IGZyb21Gb2xkZXJGdWxsTmFtZVJhdyAmJiBpc0FycmF5KHVpZHMpKSB7XG5cdFx0XHRcdGdldEFwcCgpLm1vdmVNZXNzYWdlc1RvRm9sZGVyKGZyb21Gb2xkZXJGdWxsTmFtZVJhdywgdWlkcywgdG9Gb2xkZXIuZnVsbE5hbWVSYXcsIGNvcHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbXBvc2VDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVGb2xkZXIoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyQ3JlYXRlJykpO1xuXHR9XG5cblx0Y29uZmlndXJlRm9sZGVycygpIHtcblx0XHRzZXRIYXNoKHNldHRpbmdzKCdmb2xkZXJzJykpO1xuXHR9XG5cblx0Y29udGFjdHNDbGljaygpIHtcblx0XHRpZiAodGhpcy5hbGxvd0NvbnRhY3RzKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db250YWN0cycpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyTGlzdE1haWxCb3hVc2VyVmlldywgRm9sZGVyTGlzdE1haWxCb3hVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENvbnRhY3RQcm9wZXJ0eVR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgaXNOb25FbXB0eUFycmF5LCBpc05vcm1hbCwgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBlbXB0eUNvbnRhY3RQaWMgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIENvbnRhY3RNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignQ29udGFjdE1vZGVsJyk7XG5cblx0XHR0aGlzLmlkQ29udGFjdCA9IDA7XG5cdFx0dGhpcy5kaXNwbGF5ID0gJyc7XG5cdFx0dGhpcy5wcm9wZXJ0aWVzID0gW107XG5cdFx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zZWxlY3RlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2hlY2tlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZGVsZXRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheXxudWxsfVxuXHQgKi9cblx0Z2V0TmFtZUFuZEVtYWlsSGVscGVyKCkge1xuXHRcdGxldCBuYW1lID0gJycsXG5cdFx0XHRlbWFpbCA9ICcnO1xuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheSh0aGlzLnByb3BlcnRpZXMpKSB7XG5cdFx0XHRfLmVhY2godGhpcy5wcm9wZXJ0aWVzLCAocHJvcGVydHkpID0+IHtcblx0XHRcdFx0aWYgKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0aWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuRmlyc3ROYW1lID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHRyaW0ocHJvcGVydHlbMV0gKyAnICcgKyBuYW1lKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWUgPT09IHByb3BlcnR5WzBdKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gdHJpbShuYW1lICsgJyAnICsgcHJvcGVydHlbMV0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoJycgPT09IGVtYWlsICYmIENvbnRhY3RQcm9wZXJ0eVR5cGUuRW1haWwgPT09IHByb3BlcnR5WzBdKSB7XG5cdFx0XHRcdFx0XHRlbWFpbCA9IHByb3BlcnR5WzFdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnID09PSBlbWFpbCA/IG51bGwgOiBbZW1haWwsIG5hbWVdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvSXRlbVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHBhcnNlKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9Db250YWN0JyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLmlkQ29udGFjdCA9IHBJbnQoanNvbi5JZENvbnRhY3QpO1xuXHRcdFx0dGhpcy5kaXNwbGF5ID0gcFN0cmluZyhqc29uLkRpc3BsYXkpO1xuXHRcdFx0dGhpcy5yZWFkT25seSA9ICEhanNvbi5SZWFkT25seTtcblxuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShqc29uLlByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdF8uZWFjaChqc29uLlByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5UeXBlICYmIGlzTm9ybWFsKHByb3BlcnR5LlZhbHVlKSAmJiBpc05vcm1hbChwcm9wZXJ0eS5UeXBlU3RyKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wZXJ0aWVzLnB1c2goW3BJbnQocHJvcGVydHkuVHlwZSksIHBTdHJpbmcocHJvcGVydHkuVmFsdWUpLCBwU3RyaW5nKHByb3BlcnR5LlR5cGVTdHIpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzcmNBdHRyKCkge1xuXHRcdHJldHVybiBlbXB0eUNvbnRhY3RQaWMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2VuZXJhdGVVaWQoKSB7XG5cdFx0cmV0dXJuIHBTdHJpbmcodGhpcy5pZENvbnRhY3QpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gc3RyaW5nXG5cdCAqL1xuXHRsaW5lQXNDc3MoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0aWYgKHRoaXMuZGVsZXRlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnZGVsZXRlZCcpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zZWxlY3RlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnc2VsZWN0ZWQnKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY2hlY2tlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnY2hlY2tlZCcpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5mb2N1c2VkKCkpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdmb2N1c2VkJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29udGFjdE1vZGVsLCBDb250YWN0TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgSnVhIGZyb20gJ0p1YSc7XG5pbXBvcnQgaWZ2aXNpYmxlIGZyb20gJ2lmdmlzaWJsZSc7XG5cbmltcG9ydCB7XG5cdENhcGEsXG5cdExheW91dCxcblx0Rm9jdXNlZCxcblx0Q29tcG9zZVR5cGUsXG5cdEZvbGRlclR5cGUsXG5cdE1hZ2ljcyxcblx0TWVzc2FnZVNldEFjdGlvbixcblx0S2V5U3RhdGUsXG5cdFN0b3JhZ2VSZXN1bHRUeXBlXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuaW1wb3J0IHsgYk1vYmlsZURldmljZSwgcG9wdXBWaXNpYmlsaXR5LCBsZWZ0UGFuZWxEaXNhYmxlZCwgbW92ZUFjdGlvbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgbm9vcCwgbm9vcEZhbHNlLCBjb21wdXRlZFBhZ2VuYXRvckhlbHBlciwgZHJhZ2dhYmxlUGxhY2UsIGZyaWVuZGx5U2l6ZSwgaW5BcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBtYWlsQm94LCBhcHBlbmQgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICdDb21tb24vU2VsZWN0b3InO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuXG5pbXBvcnQgeyBpMThuLCBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHtcblx0Z2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCxcblx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcixcblx0aGFzUmVxdWVzdGVkTWVzc2FnZSxcblx0YWRkUmVxdWVzdGVkTWVzc2FnZVxufSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBRdW90YVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1F1b3RhJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgdmlldywgY29tbWFuZCwgVmlld1R5cGUsIHNob3dTY3JlZW5Qb3B1cCwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuY29uc3QgY2FuQmVNb3ZlZEhlbHBlciA9IChzZWxmKSA9PiBzZWxmLmNhbkJlTW92ZWQoKTtcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL01haWxCb3gvTWVzc2FnZUxpc3QnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ01haWxNZXNzYWdlTGlzdCdcbn0pXG5jbGFzcyBNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zTGFzdFVpZCA9IG51bGw7XG5cdFx0dGhpcy5iUHJlZmV0Y2ggPSBmYWxzZTtcblx0XHR0aGlzLmVtcHR5U3ViamVjdFZhbHVlID0gJyc7XG5cblx0XHR0aGlzLmlHb1RvVXBVcE9yRG93bkRvd25UaW1lb3V0ID0gMDtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIgPSBBcHBTdG9yZS5uZXdNb3ZlVG9Gb2xkZXI7XG5cblx0XHR0aGlzLmFsbG93UmVsb2FkID0gISFTZXR0aW5ncy5jYXBhKENhcGEuUmVsb2FkKTtcblx0XHR0aGlzLmFsbG93U2VhcmNoID0gISFTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoKTtcblx0XHR0aGlzLmFsbG93U2VhcmNoQWR2ID0gISFTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoQWR2KTtcblx0XHR0aGlzLmFsbG93Q29tcG9zZXIgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3Nlcik7XG5cdFx0dGhpcy5hbGxvd01lc3NhZ2VMaXN0QWN0aW9ucyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VMaXN0QWN0aW9ucyk7XG5cdFx0dGhpcy5hbGxvd0Rhbmdlcm91c0FjdGlvbnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5EYW5nZXJvdXNBY3Rpb25zKTtcblx0XHR0aGlzLmFsbG93Rm9sZGVycyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkZvbGRlcnMpO1xuXG5cdFx0dGhpcy5wb3B1cFZpc2liaWxpdHkgPSBwb3B1cFZpc2liaWxpdHk7XG5cblx0XHR0aGlzLm1lc3NhZ2UgPSBNZXNzYWdlU3RvcmUubWVzc2FnZTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0ID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0O1xuXHRcdHRoaXMubWVzc2FnZUxpc3REaXNhYmxlQXV0b1NlbGVjdCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdERpc2FibGVBdXRvU2VsZWN0O1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0ID0gRm9sZGVyU3RvcmUuZm9sZGVyTGlzdDtcblxuXHRcdHRoaXMuY29tcG9zZUluRWRpdCA9IEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQ7XG5cdFx0dGhpcy5sZWZ0UGFuZWxEaXNhYmxlZCA9IGxlZnRQYW5lbERpc2FibGVkO1xuXG5cdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZDtcblx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQgPSBNZXNzYWdlU3RvcmUuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZDtcblx0XHR0aGlzLmlzTWVzc2FnZVNlbGVjdGVkID0gTWVzc2FnZVN0b3JlLmlzTWVzc2FnZVNlbGVjdGVkO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2ggPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2g7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFRocmVhZFVpZDtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RXJyb3IgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFcnJvcjtcblx0XHR0aGlzLmZvbGRlck1lbnVGb3JNb3ZlID0gRm9sZGVyU3RvcmUuZm9sZGVyTWVudUZvck1vdmU7XG5cblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QgPSBTZXR0aW5nc1N0b3JlLnVzZUNoZWNrYm94ZXNJbkxpc3Q7XG5cblx0XHR0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCA9IE1lc3NhZ2VTdG9yZS5tYWluTWVzc2FnZUxpc3RTZWFyY2g7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlciA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZEZvbGRlcjtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWQgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHM7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGU7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlRm9yQW5pbWF0aW9uID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGVGb3JBbmltYXRpb247XG5cblx0XHRpbml0T25TdGFydE9yTGFuZ0NoYW5nZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmVtcHR5U3ViamVjdFZhbHVlID0gaTE4bignTUVTU0FHRV9MSVNUL0VNUFRZX1NVQkpFQ1RfVEVYVCcpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy51c2VyUXVvdGEgPSBRdW90YVN0b3JlLnF1b3RhO1xuXHRcdHRoaXMudXNlclVzYWdlU2l6ZSA9IFF1b3RhU3RvcmUudXNhZ2U7XG5cdFx0dGhpcy51c2VyVXNhZ2VQcm9jID0gUXVvdGFTdG9yZS5wZXJjZW50YWdlO1xuXG5cdFx0dGhpcy5tb3ZlRHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5tb3JlRHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHQvLyBhcHBlbmQgZHJhZyBhbmQgZHJvcFxuXHRcdHRoaXMuZHJhZ092ZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxIH0pO1xuXHRcdHRoaXMuZHJhZ092ZXJFbnRlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICd0aHJvdHRsZSc6IDEgfSk7XG5cdFx0dGhpcy5kcmFnT3ZlckFyZWEgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuZHJhZ092ZXJCb2R5QXJlYSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0SXRlbVRlbXBsYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdHRoaXMubW9iaWxlIHx8IExheW91dC5TaWRlUHJldmlldyA9PT0gU2V0dGluZ3NTdG9yZS5sYXlvdXQoKVxuXHRcdFx0XHQ/ICdNYWlsTWVzc2FnZUxpc3RJdGVtJ1xuXHRcdFx0XHQ6ICdNYWlsTWVzc2FnZUxpc3RJdGVtTm9QcmV2aWV3UGFuZSdcblx0XHQpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaERlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZFNlYXJjaCgpO1xuXHRcdFx0cmV0dXJuICcnID09PSB2YWx1ZSA/ICcnIDogaTE4bignTUVTU0FHRV9MSVNUL1NFQVJDSF9SRVNVTFRfRk9SJywgeyAnU0VBUkNIJzogdmFsdWUgfSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZW5hdG9yID0ga28uY29tcHV0ZWQoXG5cdFx0XHRjb21wdXRlZFBhZ2VuYXRvckhlbHBlcihNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlLCBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlQ291bnQpXG5cdFx0KTtcblxuXHRcdHRoaXMuY2hlY2tBbGwgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiAoKSA9PiAwIDwgTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aCxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dmFsdWUgPSAhIXZhbHVlO1xuXHRcdFx0XHRfLmVhY2goTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCksIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZS5jaGVja2VkKHZhbHVlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zTGFzdFNlYXJjaFZhbHVlID0gJyc7XG5cdFx0dGhpcy5pbnB1dFByb3h5TWVzc2FnZUxpc3RTZWFyY2ggPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5zTGFzdFNlYXJjaFZhbHVlID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlzSW5jb21wbGV0ZUNoZWNrZWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCkubGVuZ3RoLFxuXHRcdFx0XHRjID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aDtcblx0XHRcdHJldHVybiAwIDwgbSAmJiAwIDwgYyAmJiBtID4gYztcblx0XHR9KTtcblxuXHRcdHRoaXMuaGFzTWVzc2FnZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlTGlzdCgpLmxlbmd0aCk7XG5cblx0XHR0aGlzLmhhc0NoZWNrZWRPclNlbGVjdGVkTGluZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMuaXNTcGFtRm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkgPT09IHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIoKSAmJiAnJyAhPT0gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNTcGFtRGlzYWJsZWQgPSBrby5jb21wdXRlZCgoKSA9PiBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkpO1xuXG5cdFx0dGhpcy5pc1RyYXNoRm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpID09PSB0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKCkgJiYgJycgIT09IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0RyYWZ0Rm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpID09PSB0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKCkgJiYgJycgIT09IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc1NlbnRGb2xkZXIgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IEZvbGRlclN0b3JlLnNlbnRGb2xkZXIoKSA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICYmICcnICE9PSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0FyY2hpdmVGb2xkZXIgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICYmICcnICE9PSBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0FyY2hpdmVEaXNhYmxlZCA9IGtvLmNvbXB1dGVkKCgpID0+IFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSk7XG5cblx0XHR0aGlzLmlzQXJjaGl2ZVZpc2libGUgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICF0aGlzLmlzQXJjaGl2ZUZvbGRlcigpICYmICF0aGlzLmlzQXJjaGl2ZURpc2FibGVkKCkgJiYgIXRoaXMuaXNEcmFmdEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNTcGFtVmlzaWJsZSA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gIXRoaXMuaXNTcGFtRm9sZGVyKCkgJiYgIXRoaXMuaXNTcGFtRGlzYWJsZWQoKSAmJiAhdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgJiYgIXRoaXMuaXNTZW50Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc1VuU3BhbVZpc2libGUgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IHRoaXMuaXNTcGFtRm9sZGVyKCkgJiYgIXRoaXMuaXNTcGFtRGlzYWJsZWQoKSAmJiAhdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgJiYgIXRoaXMuaXNTZW50Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5tb2JpbGVDaGVja2VkU3RhdGVTaG93ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IDAgPCB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aDtcblx0XHRcdHJldHVybiB0aGlzLm1vYmlsZSA/IGNoZWNrZWQgOiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tb2JpbGVDaGVja2VkU3RhdGVIaWRlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IDAgPCB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aDtcblx0XHRcdHJldHVybiB0aGlzLm1vYmlsZSA/ICFjaGVja2VkIDogdHJ1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RGb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT4gRm9jdXNlZC5NZXNzYWdlTGlzdCA9PT0gQXBwU3RvcmUuZm9jdXNlZFN0YXRlKCkpO1xuXG5cdFx0dGhpcy5jYW5CZU1vdmVkID0gdGhpcy5oYXNDaGVja2VkT3JTZWxlY3RlZExpbmVzO1xuXG5cdFx0dGhpcy5xdW90YVRvb2x0aXAgPSBfLmJpbmQodGhpcy5xdW90YVRvb2x0aXAsIHRoaXMpO1xuXG5cdFx0dGhpcy5zZWxlY3RvciA9IG5ldyBTZWxlY3Rvcihcblx0XHRcdHRoaXMubWVzc2FnZUxpc3QsXG5cdFx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkLFxuXHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkLFxuXHRcdFx0Jy5tZXNzYWdlTGlzdEl0ZW0gLmFjdGlvbkhhbmRsZScsXG5cdFx0XHQnLm1lc3NhZ2VMaXN0SXRlbS5zZWxlY3RlZCcsXG5cdFx0XHQnLm1lc3NhZ2VMaXN0SXRlbSAuY2hlY2tib3hNZXNzYWdlJyxcblx0XHRcdCcubWVzc2FnZUxpc3RJdGVtLmZvY3VzZWQnXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VsZWN0b3Iub24oJ29uSXRlbVNlbGVjdCcsIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRNZXNzYWdlU3RvcmUuc2VsZWN0TWVzc2FnZShtZXNzYWdlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0b3Iub24oJ29uSXRlbUdldFVpZCcsIChtZXNzYWdlKSA9PiAobWVzc2FnZSA/IG1lc3NhZ2UuZ2VuZXJhdGVVaWQoKSA6ICcnKSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvbkF1dG9TZWxlY3QnLCAoKSA9PiB0aGlzLnVzZUF1dG9TZWxlY3QoKSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvblVwVXBPckRvd25Eb3duJywgKHYpID0+IHtcblx0XHRcdHRoaXMuZ29Ub1VwVXBPckRvd25Eb3duKHYpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5tZXNzYWdlLWxpc3Quc2VsZWN0b3IuZ28tZG93bicsIChzZWxlY3QpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0b3IuZ29Eb3duKHNlbGVjdCk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCdtYWlsYm94Lm1lc3NhZ2UtbGlzdC5zZWxlY3Rvci5nby11cCcsIChzZWxlY3QpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0b3IuZ29VcChzZWxlY3QpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5tZXNzYWdlLnNob3cnLCAoc0ZvbGRlciwgc1VpZCkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IF8uZmluZChcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdCgpLFxuXHRcdFx0XHQoaXRlbSkgPT4gaXRlbSAmJiBzRm9sZGVyID09PSBpdGVtLmZvbGRlckZ1bGxOYW1lUmF3ICYmIHNVaWQgPT09IGl0ZW0udWlkXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoJ0lOQk9YJyA9PT0gc0ZvbGRlcikge1xuXHRcdFx0XHRzZXRIYXNoKG1haWxCb3goc0ZvbGRlciwgMSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdG9yLnNlbGVjdE1lc3NhZ2VJdGVtKG1lc3NhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCdJTkJPWCcgIT09IHNGb2xkZXIpIHtcblx0XHRcdFx0XHRzZXRIYXNoKG1haWxCb3goc0ZvbGRlciwgMSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0TWVzc2FnZVN0b3JlLnNlbGVjdE1lc3NhZ2VCeUZvbGRlckFuZFVpZChzRm9sZGVyLCBzVWlkKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZEhhc2guc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0b3Iuc2Nyb2xsVG9Ub3AoKTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0Y2xlYXJDb21tYW5kKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuRGFuZ2Vyb3VzQWN0aW9ucykpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlckNsZWFyJyksIFtGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCldKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHJlbG9hZENvbW1hbmQoKSB7XG5cdFx0aWYgKCFNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZUZvckFuaW1hdGlvbigpICYmIHRoaXMuYWxsb3dSZWxvYWQpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZE1lc3NhZ2VMaXN0KGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRtdWx0eUZvcndhcmRDb21tYW5kKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJyksIFtcblx0XHRcdFx0Q29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudCxcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0ZGVsZXRlV2l0aG91dE1vdmVDb21tYW5kKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuRGFuZ2Vyb3VzQWN0aW9ucykpIHtcblx0XHRcdGdldEFwcCgpLmRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcihcblx0XHRcdFx0Rm9sZGVyVHlwZS5UcmFzaCxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRkZWxldGVDb21tYW5kKCkge1xuXHRcdGdldEFwcCgpLmRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcihcblx0XHRcdEZvbGRlclR5cGUuVHJhc2gsXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRhcmNoaXZlQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLkFyY2hpdmUsXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRzcGFtQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLlNwYW0sXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRub3RTcGFtQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLk5vdFNwYW0sXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRtb3ZlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRtb3ZlTmV3Q29tbWFuZCh2bSwgZXZlbnQpIHtcblx0XHRpZiAodGhpcy5uZXdNb3ZlVG9Gb2xkZXIoKSAmJiB0aGlzLm1vYmlsZUNoZWNrZWRTdGF0ZVNob3coKSkge1xuXHRcdFx0aWYgKHZtICYmIGV2ZW50ICYmIGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW92ZUFjdGlvbigpKSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5Gb2xkZXJMaXN0KTtcblx0XHRcdFx0bW92ZUFjdGlvbih0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoaWRlTGVmdChpdGVtLCBldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0fVxuXG5cdHNob3dMZWZ0KGl0ZW0sIGV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0fVxuXG5cdGNvbXBvc2VDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHR9XG5cdH1cblxuXHRnb1RvVXBVcE9yRG93bkRvd24odXApIHtcblx0XHRpZiAoMCA8IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkKCkubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlHb1RvVXBVcE9yRG93bkRvd25UaW1lb3V0KTtcblx0XHR0aGlzLmlHb1RvVXBVcE9yRG93bkRvd25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0bGV0IHByZXYgPSBudWxsLFxuXHRcdFx0XHRuZXh0ID0gbnVsbCxcblx0XHRcdFx0dGVtcCA9IG51bGwsXG5cdFx0XHRcdGN1cnJlbnQgPSBudWxsO1xuXG5cdFx0XHRfLmZpbmQodGhpcy5tZXNzYWdlTGlzdFBhZ2VuYXRvcigpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50KSB7XG5cdFx0XHRcdFx0XHRuZXh0ID0gaXRlbTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXRlbS5jdXJyZW50KSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50ID0gaXRlbTtcblx0XHRcdFx0XHRcdHByZXYgPSB0ZW1wO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChuZXh0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0ZW1wID0gaXRlbTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoTGF5b3V0Lk5vUHJldmlldyA9PT0gU2V0dGluZ3NTdG9yZS5sYXlvdXQoKSAmJiAhdGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci5pRm9jdXNlZE5leHRIZWxwZXIgPSB1cCA/IC0xIDogMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0b3IuaVNlbGVjdE5leHRIZWxwZXIgPSB1cCA/IC0xIDogMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHVwID8gcHJldiA6IG5leHQpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci51bnNlbGVjdCgpO1xuXHRcdFx0XHR0aGlzLmdvdG9QYWdlKHVwID8gcHJldiA6IG5leHQpO1xuXHRcdFx0fVxuXHRcdH0sIE1hZ2ljcy5UaW1lMzUwbXMpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR1c2VBdXRvU2VsZWN0KCkge1xuXHRcdGlmICh0aGlzLm1lc3NhZ2VMaXN0RGlzYWJsZUF1dG9TZWxlY3QoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICgvaXM6dW5zZWVuLy50ZXN0KHRoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoKCkpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIExheW91dC5Ob1ByZXZpZXcgIT09IFNldHRpbmdzU3RvcmUubGF5b3V0KCk7XG5cdH1cblxuXHRzZWFyY2hFbnRlckFjdGlvbigpIHtcblx0XHR0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCh0aGlzLnNMYXN0U2VhcmNoVmFsdWUpO1xuXHRcdHRoaXMuaW5wdXRNZXNzYWdlTGlzdFNlYXJjaEZvY3VzKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cHJpbnRhYmxlTWVzc2FnZUNvdW50Rm9yRGVsZXRpb24oKSB7XG5cdFx0Y29uc3QgY250ID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLmxlbmd0aDtcblx0XHRyZXR1cm4gMSA8IGNudCA/ICcgKCcgKyAoMTAwID4gY250ID8gY250IDogJzk5KycpICsgJyknIDogJyc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuXHR9XG5cblx0Y2FuY2VsU2VhcmNoKCkge1xuXHRcdHRoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoKCcnKTtcblx0XHR0aGlzLmlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyhmYWxzZSk7XG5cdH1cblxuXHRjYW5jZWxUaHJlYWRVaWQoKSB7XG5cdFx0c2V0SGFzaChcblx0XHRcdG1haWxCb3goXG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZUJlZm9yZVRocmVhZCgpLFxuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkNvcHlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRtb3ZlU2VsZWN0ZWRNZXNzYWdlc1RvRm9sZGVyKHNUb0ZvbGRlckZ1bGxOYW1lUmF3LCBiQ29weSkge1xuXHRcdGlmICh0aGlzLmNhbkJlTW92ZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkubW92ZU1lc3NhZ2VzVG9Gb2xkZXIoXG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdFx0c1RvRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdGJDb3B5XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGRyYWdBbmREcm9uSGVscGVyKG9NZXNzYWdlTGlzdEl0ZW0pIHtcblx0XHRpZiAob01lc3NhZ2VMaXN0SXRlbSkge1xuXHRcdFx0b01lc3NhZ2VMaXN0SXRlbS5jaGVja2VkKHRydWUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsID0gZHJhZ2dhYmxlUGxhY2UoKSxcblx0XHRcdHVwZGF0ZVVpZHNJbmZvID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB1aWRzID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzKCk7XG5cdFx0XHRcdGVsLmRhdGEoJ3JsLXVpZHMnLCB1aWRzKTtcblx0XHRcdFx0ZWwuZmluZCgnLnRleHQnKS50ZXh0KCcnICsgdWlkcy5sZW5ndGgpO1xuXHRcdFx0fTtcblxuXHRcdGVsLmRhdGEoJ3JsLWZvbGRlcicsIEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKTtcblxuXHRcdHVwZGF0ZVVpZHNJbmZvKCk7XG5cdFx0Xy5kZWZlcih1cGRhdGVVaWRzSW5mbyk7XG5cblx0XHRyZXR1cm4gZWw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge251bWJlcn0gaVNldEFjdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5PX0gYU1lc3NhZ2VzID0gbnVsbFxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldEFjdGlvbihzRm9sZGVyRnVsbE5hbWVSYXcsIGlTZXRBY3Rpb24sIGFNZXNzYWdlcykge1xuXHRcdGdldEFwcCgpLm1lc3NhZ2VMaXN0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgaVNldEFjdGlvbiwgYU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpU2V0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGhyZWFkVWlkID0gJydcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzZXRBY3Rpb25Gb3JBbGwoc0ZvbGRlckZ1bGxOYW1lUmF3LCBpU2V0QWN0aW9uLCBzVGhyZWFkVWlkID0gJycpIHtcblx0XHRpZiAoJycgIT09IHNGb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdFx0bGV0IGNudCA9IDA7XG5cdFx0XHRjb25zdCB1aWRzID0gW107XG5cblx0XHRcdGxldCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdHN3aXRjaCAoaVNldEFjdGlvbikge1xuXHRcdFx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuOlxuXHRcdFx0XHRcdFx0Zm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChzRm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdFx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdFx0XHRfLmVhY2goTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCksIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1lc3NhZ2UudW5zZWVuKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNudCArPSAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UudW5zZWVuKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHR1aWRzLnB1c2gobWVzc2FnZS51aWQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoc1RocmVhZFVpZCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoZm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgpIC0gY250KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoMCA+IGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgwKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgwKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0UmVtb3RlLm1lc3NhZ2VTZXRTZWVuVG9BbGwobm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCB0cnVlLCBzVGhyZWFkVWlkID8gdWlkcyA6IG51bGwpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbjpcblx0XHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0Xy5lYWNoKE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdCgpLCAobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghbWVzc2FnZS51bnNlZW4oKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y250ICs9IDE7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZS51bnNlZW4odHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0dWlkcy5wdXNoKG1lc3NhZ2UudWlkKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHNUaHJlYWRVaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSArIGNudCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSA8IGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChmb2xkZXIubWVzc2FnZUNvdW50QWxsKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2VlblRvQWxsKG5vb3AsIHNGb2xkZXJGdWxsTmFtZVJhdywgZmFsc2UsIHNUaHJlYWRVaWQgPyB1aWRzIDogbnVsbCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsaXN0U2V0U2VlbigpIHtcblx0XHR0aGlzLnNldEFjdGlvbihcblx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0TWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRsaXN0U2V0QWxsU2VlbigpIHtcblx0XHR0aGlzLnNldEFjdGlvbkZvckFsbChcblx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0TWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuLFxuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCgpXG5cdFx0KTtcblx0fVxuXG5cdGxpc3RVbnNldFNlZW4oKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRsaXN0U2V0RmxhZ3MoKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uU2V0RmxhZyxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKClcblx0XHQpO1xuXHR9XG5cblx0bGlzdFVuc2V0RmxhZ3MoKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRmbGFnTWVzc2FnZXMoY3VycmVudE1lc3NhZ2UpIHtcblx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKGN1cnJlbnRNZXNzYWdlKSB7XG5cdFx0XHRjb25zdCBjaGVja2VkVWlkcyA9IF8ubWFwKGNoZWNrZWQsIChtZXNzYWdlKSA9PiBtZXNzYWdlLnVpZCk7XG5cdFx0XHRpZiAoMCA8IGNoZWNrZWRVaWRzLmxlbmd0aCAmJiAtMSA8IGluQXJyYXkoY3VycmVudE1lc3NhZ2UudWlkLCBjaGVja2VkVWlkcykpIHtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0Y2hlY2tlZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0W2N1cnJlbnRNZXNzYWdlXVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZsYWdNZXNzYWdlc0Zhc3QoYkZsYWcpIHtcblx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKDAgPCBjaGVja2VkLmxlbmd0aCkge1xuXHRcdFx0aWYgKGlzVW5kKGJGbGFnKSkge1xuXHRcdFx0XHRjb25zdCBmbGFnZ2VkID0gXy5maWx0ZXIoY2hlY2tlZCwgKG1lc3NhZ2UpID0+IG1lc3NhZ2UuZmxhZ2dlZCgpKTtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y2hlY2tlZFswXS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRjaGVja2VkLmxlbmd0aCA9PT0gZmxhZ2dlZC5sZW5ndGggPyBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0RmxhZyA6IE1lc3NhZ2VTZXRBY3Rpb24uU2V0RmxhZyxcblx0XHRcdFx0XHRjaGVja2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEFjdGlvbihcblx0XHRcdFx0XHRjaGVja2VkWzBdLmZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdCFiRmxhZyA/IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnIDogTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZWVuTWVzc2FnZXNGYXN0KHNlZW4pIHtcblx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKDAgPCBjaGVja2VkLmxlbmd0aCkge1xuXHRcdFx0aWYgKGlzVW5kKHNlZW4pKSB7XG5cdFx0XHRcdGNvbnN0IHVuc2VlbiA9IF8uZmlsdGVyKGNoZWNrZWQsIChtZXNzYWdlKSA9PiBtZXNzYWdlLnVuc2VlbigpKTtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y2hlY2tlZFswXS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHQwIDwgdW5zZWVuLmxlbmd0aCA/IE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2VlbiA6IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0XHRcdGNoZWNrZWRbMF0uZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0c2VlbiA/IE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2VlbiA6IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnb3RvUGFnZShwYWdlKSB7XG5cdFx0aWYgKHBhZ2UpIHtcblx0XHRcdHNldEhhc2goXG5cdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdHBhZ2UudmFsdWUsXG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRnb3RvVGhyZWFkKG1lc3NhZ2UpIHtcblx0XHRpZiAobWVzc2FnZSAmJiAwIDwgbWVzc2FnZS50aHJlYWRzTGVuKCkpIHtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2VCZWZvcmVUaHJlYWQoTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZSgpKTtcblxuXHRcdFx0c2V0SGFzaChtYWlsQm94KEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSwgMSwgTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksIG1lc3NhZ2UudWlkKSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJMaXN0SXNWaXNpYmxlKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQnJyA9PT0gdGhpcy5tZXNzYWdlTGlzdFNlYXJjaERlc2MoKSAmJlxuXHRcdFx0JycgPT09IHRoaXMubWVzc2FnZUxpc3RFcnJvcigpICYmXG5cdFx0XHQnJyA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCgpICYmXG5cdFx0XHQwIDwgdGhpcy5tZXNzYWdlTGlzdCgpLmxlbmd0aCAmJlxuXHRcdFx0KHRoaXMuaXNTcGFtRm9sZGVyKCkgfHwgdGhpcy5pc1RyYXNoRm9sZGVyKCkpXG5cdFx0KTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHR0aGlzLm9Db250ZW50VmlzaWJsZSA9ICQoJy5iLWNvbnRlbnQnLCBkb20pO1xuXHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlID0gJCgnLmNvbnRlbnQnLCB0aGlzLm9Db250ZW50VmlzaWJsZSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLmluaXQodGhpcy5vQ29udGVudFZpc2libGUsIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLCBLZXlTdGF0ZS5NZXNzYWdlTGlzdCk7XG5cblx0XHRpZiAodGhpcy5tb2JpbGUpIHtcblx0XHRcdGRvbS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZG9tXG5cdFx0XHQub24oJ2NsaWNrJywgJy5tZXNzYWdlTGlzdCAuYi1tZXNzYWdlLWxpc3Qtd3JhcHBlcicsICgpID0+IHtcblx0XHRcdFx0aWYgKEZvY3VzZWQuTWVzc2FnZVZpZXcgPT09IEFwcFN0b3JlLmZvY3VzZWRTdGF0ZSgpKSB7XG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1wYWdlbmF0b3IgLmUtcGFnZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRzZWxmLmdvdG9QYWdlKGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5jaGVja2JveENrZWNrQWxsJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNoZWNrQWxsKCF0aGlzLmNoZWNrQWxsKCkpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5tZXNzYWdlTGlzdEl0ZW0gLmZsYWdQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0c2VsZi5mbGFnTWVzc2FnZXMoa28uZGF0YUZvcih0aGlzKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcubWVzc2FnZUxpc3QgLm1lc3NhZ2VMaXN0SXRlbSAudGhyZWFkcy1sZW4nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0c2VsZi5nb3RvVGhyZWFkKGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSlcblx0XHRcdC5vbignZGJsY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5tZXNzYWdlTGlzdEl0ZW0gLmFjdGlvbkhhbmRsZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRzZWxmLmdvdG9UaHJlYWQoa28uZGF0YUZvcih0aGlzKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuaW5pdFVwbG9hZGVyRm9yQXBwZW5kKCk7XG5cdFx0dGhpcy5pbml0U2hvcnRjdXRzKCk7XG5cblx0XHRpZiAoIWJNb2JpbGVEZXZpY2UgJiYgaWZ2aXNpYmxlICYmIFNldHRpbmdzLmNhcGEoQ2FwYS5QcmVmZXRjaCkpIHtcblx0XHRcdGlmdmlzaWJsZS5zZXRJZGxlRHVyYXRpb24oTWFnaWNzLmlmdmlzaWJsZUlkbGUxMHMpO1xuXG5cdFx0XHRpZnZpc2libGUuaWRsZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucHJlZmV0Y2hOZXh0VGljaygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aW5pdFNob3J0Y3V0cygpIHtcblx0XHRrZXkoJ2VudGVyJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1lc3NhZ2UoKSAmJiB0aGlzLnVzZUF1dG9TZWxlY3QoKSkge1xuXHRcdFx0XHRFdmVudHMucHViKCdtYWlsYm94Lm1lc3NhZ2Utdmlldy50b2dnbGUtZnVsbC1zY3JlZW4nKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKSkge1xuXHRcdFx0Ly8gYXJjaGl2ZSAoemlwKVxuXHRcdFx0a2V5KCd6JywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0dGhpcy5hcmNoaXZlQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gZGVsZXRlXG5cdFx0XHRrZXkoJ2RlbGV0ZSwgc2hpZnQrZGVsZXRlLCBzaGlmdCszJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsIChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0XHRpZiAoMCA8IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoaGFuZGxlciAmJiAnc2hpZnQrZGVsZXRlJyA9PT0gaGFuZGxlci5zaG9ydGN1dCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWxldGVDb21tYW5kKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlJlbG9hZCkpIHtcblx0XHRcdC8vIGNoZWNrIG1haWxcblx0XHRcdGtleSgnY3RybCtyLCBjb21tYW5kK3InLCBbS2V5U3RhdGUuRm9sZGVyTGlzdCwgS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlbG9hZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY2hlY2sgYWxsXG5cdFx0a2V5KCdjdHJsK2EsIGNvbW1hbmQrYScsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoKSA9PiB7XG5cdFx0XHR0aGlzLmNoZWNrQWxsKCEodGhpcy5jaGVja0FsbCgpICYmICF0aGlzLmlzSW5jb21wbGV0ZUNoZWNrZWQoKSkpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3NlcikpIHtcblx0XHRcdC8vIHdyaXRlL2NvbXBvc2UgKG9wZW4gY29tcG9zZSBwb3B1cClcblx0XHRcdGtleSgndyxjJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5NZXNzYWdlTGlzdEFjdGlvbnMpKSB7XG5cdFx0XHQvLyBpbXBvcnRhbnQgLSBzdGFyL2ZsYWcgbWVzc2FnZXNcblx0XHRcdGtleSgnaScsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZmxhZ01lc3NhZ2VzRmFzdCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRrZXkoJ3QnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3RdLCAoKSA9PiB7XG5cdFx0XHRsZXQgbWVzc2FnZSA9IHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQoKTtcblx0XHRcdGlmICghbWVzc2FnZSkge1xuXHRcdFx0XHRtZXNzYWdlID0gdGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlICYmIDAgPCBtZXNzYWdlLnRocmVhZHNMZW4oKSkge1xuXHRcdFx0XHR0aGlzLmdvdG9UaHJlYWQobWVzc2FnZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKSkge1xuXHRcdFx0Ly8gbW92ZVxuXHRcdFx0a2V5KCdtJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMubmV3TW92ZVRvRm9sZGVyKCkpIHtcblx0XHRcdFx0XHR0aGlzLm1vdmVOZXdDb21tYW5kKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5tb3ZlRHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5NZXNzYWdlTGlzdEFjdGlvbnMpKSB7XG5cdFx0XHQvLyByZWFkXG5cdFx0XHRrZXkoJ3EnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNlZW5NZXNzYWdlc0Zhc3QodHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyB1bnJlYWRcblx0XHRcdGtleSgndScsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2Vlbk1lc3NhZ2VzRmFzdChmYWxzZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRrZXkoJ3NoaWZ0K2YnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm11bHR5Rm9yd2FyZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5TZWFyY2gpKSB7XG5cdFx0XHQvLyBzZWFyY2ggaW5wdXQgZm9jdXNcblx0XHRcdGtleSgnLycsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaW5wdXRNZXNzYWdlTGlzdFNlYXJjaEZvY3VzKHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBjYW5jZWwgc2VhcmNoXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgKCkgPT4ge1xuXHRcdFx0aWYgKCcnICE9PSB0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoRGVzYygpKSB7XG5cdFx0XHRcdHRoaXMuY2FuY2VsU2VhcmNoKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoJycgIT09IHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQoKSkge1xuXHRcdFx0XHR0aGlzLmNhbmNlbFRocmVhZFVpZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0Ly8gY2hhbmdlIGZvY3VzZWQgc3RhdGVcblx0XHRrZXkoJ3RhYiwgc2hpZnQrdGFiLCBsZWZ0LCByaWdodCcsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiBoYW5kbGVyICYmICgnc2hpZnQrdGFiJyA9PT0gaGFuZGxlci5zaG9ydGN1dCB8fCAnbGVmdCcgPT09IGhhbmRsZXIuc2hvcnRjdXQpKSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLkZvbGRlckxpc3QpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlVmlldyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnY3RybCtsZWZ0LCBjb21tYW5kK2xlZnQnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgbm9vcEZhbHNlKTtcblx0XHRrZXkoJ2N0cmwrcmlnaHQsIGNvbW1hbmQrcmlnaHQnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgbm9vcEZhbHNlKTtcblx0fVxuXG5cdHByZWZldGNoTmV4dFRpY2soKSB7XG5cdFx0aWYgKGlmdmlzaWJsZSAmJiAhdGhpcy5iUHJlZmV0Y2ggJiYgIWlmdmlzaWJsZS5ub3coKSAmJiB0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IF8uZmluZChcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdCgpLFxuXHRcdFx0XHQoaXRlbSkgPT4gaXRlbSAmJiAhaGFzUmVxdWVzdGVkTWVzc2FnZShpdGVtLmZvbGRlckZ1bGxOYW1lUmF3LCBpdGVtLnVpZClcblx0XHRcdCk7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLmJQcmVmZXRjaCA9IHRydWU7XG5cblx0XHRcdFx0YWRkUmVxdWVzdGVkTWVzc2FnZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBtZXNzYWdlLnVpZCk7XG5cblx0XHRcdFx0UmVtb3RlLm1lc3NhZ2UoXG5cdFx0XHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV4dCA9ICEhKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmJQcmVmZXRjaCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZiAobmV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucHJlZmV0Y2hOZXh0VGljaygpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCBNYWdpY3MuVGltZTFzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0bWVzc2FnZS51aWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZHZhbmNlZFNlYXJjaENsaWNrKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoQWR2KSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQWR2YW5jZWRTZWFyY2gnKSwgW3RoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoKCldKTtcblx0XHR9XG5cdH1cblxuXHRxdW90YVRvb2x0aXAoKSB7XG5cdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9RVU9UQV9TSVpFJywge1xuXHRcdFx0J1NJWkUnOiBmcmllbmRseVNpemUodGhpcy51c2VyVXNhZ2VTaXplKCkpLFxuXHRcdFx0J1BST0MnOiB0aGlzLnVzZXJVc2FnZVByb2MoKSxcblx0XHRcdCdMSU1JVCc6IGZyaWVuZGx5U2l6ZSh0aGlzLnVzZXJRdW90YSgpKVxuXHRcdH0pO1xuXHR9XG5cblx0aW5pdFVwbG9hZGVyRm9yQXBwZW5kKCkge1xuXHRcdGlmICghU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93QXBwZW5kTWVzc2FnZScpIHx8ICF0aGlzLmRyYWdPdmVyQXJlYSgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0p1YSA9IG5ldyBKdWEoe1xuXHRcdFx0YWN0aW9uOiBhcHBlbmQoKSxcblx0XHRcdG5hbWU6ICdBcHBlbmRGaWxlJyxcblx0XHRcdHF1ZXVlU2l6ZTogMSxcblx0XHRcdG11bHRpcGxlU2l6ZUxpbWl0OiAxLFxuXHRcdFx0aGlkZGVuOiB7XG5cdFx0XHRcdEZvbGRlcjogKCkgPT4gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KClcblx0XHRcdH0sXG5cdFx0XHRkcmFnQW5kRHJvcEVsZW1lbnQ6IHRoaXMuZHJhZ092ZXJBcmVhKCksXG5cdFx0XHRkcmFnQW5kRHJvcEJvZHlFbGVtZW50OiB0aGlzLmRyYWdPdmVyQm9keUFyZWEoKVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5kcmFnT3Zlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci5zY3JvbGxUb1RvcCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0b0p1YVxuXHRcdFx0Lm9uKCdvbkRyYWdFbnRlcicsICgpID0+IHtcblx0XHRcdFx0dGhpcy5kcmFnT3ZlckVudGVyKHRydWUpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25EcmFnTGVhdmUnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXJFbnRlcihmYWxzZSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdvbkJvZHlEcmFnRW50ZXInLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXIodHJ1ZSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdvbkJvZHlEcmFnTGVhdmUnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXIoZmFsc2UpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25TZWxlY3QnLCAoc1VpZCwgb0RhdGEpID0+IHtcblx0XHRcdFx0aWYgKHNVaWQgJiYgb0RhdGEgJiYgJ21lc3NhZ2UvcmZjODIyJyA9PT0gb0RhdGEuVHlwZSkge1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdExvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdvbkNvbXBsZXRlJywgKCkgPT4ge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCh0cnVlLCB0cnVlKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuICEhb0p1YTtcblx0fVxufVxuXG5leHBvcnQgeyBNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldywgTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDLCBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5cbmltcG9ydCB7XG5cdENhcGEsXG5cdENvbXBvc2VUeXBlLFxuXHRDbGllbnRTaWRlS2V5TmFtZSxcblx0S2V5U3RhdGUsXG5cdEZvbGRlclR5cGUsXG5cdEZvY3VzZWQsXG5cdExheW91dCxcblx0TWFnaWNzLFxuXHRNZXNzYWdlU2V0QWN0aW9uXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7ICRodG1sLCBsZWZ0UGFuZWxEaXNhYmxlZCwga2V5U2NvcGVSZWFsLCB1c2VLZXlib2FyZFNob3J0Y3V0cywgbW92ZUFjdGlvbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHtcblx0aW5BcnJheSxcblx0aXNBcnJheSxcblx0aXNOb25FbXB0eUFycmF5LFxuXHR0cmltLFxuXHRub29wLFxuXHR3aW5kb3dSZXNpemUsXG5cdHdpbmRvd1Jlc2l6ZUNhbGxiYWNrLFxuXHRpbkZvY3VzLFxuXHRyZW1vdmVTZWxlY3Rpb24sXG5cdHJlbW92ZUluRm9jdXMsXG5cdG1haWxUb0hlbHBlcixcblx0aXNUcmFuc3BhcmVudFxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgQXVkaW8gZnJvbSAnQ29tbW9uL0F1ZGlvJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGF0dGFjaG1lbnREb3dubG9hZCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCB7IGdldFVzZXJQaWMsIHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZSB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0ICogYXMgTG9jYWwgZnJvbSAnU3RvcmFnZS9DbGllbnQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCBzaG93U2NyZWVuUG9wdXAsIGNyZWF0ZUNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VWaWV3Jyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdNYWlsTWVzc2FnZVZpZXcnXG59KVxuY2xhc3MgTWVzc2FnZVZpZXdNYWlsQm94VXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGxldCBsYXN0RW1haWwgPSAnJztcblxuXHRcdGNvbnN0IGNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlciA9ICh0eXBlKSA9PlxuXHRcdFx0Y3JlYXRlQ29tbWFuZCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uKHR5cGUpO1xuXHRcdFx0XHR0aGlzLnJlcGx5T3Jmb3J3YXJkKHR5cGUpO1xuXHRcdFx0fSwgdGhpcy5jYW5CZVJlcGxpZWRPckZvcndhcmRlZCk7XG5cblx0XHRjb25zdCBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyID0gKGZvbGRlclR5cGUsIHVzZUZvbGRlcikgPT5cblx0XHRcdGNyZWF0ZUNvbW1hbmQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cdFx0XHRcdGlmIChtZXNzYWdlICYmIHRoaXMuYWxsb3dNZXNzYWdlTGlzdEFjdGlvbnMpIHtcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0Z2V0QXBwKCkuZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKGZvbGRlclR5cGUsIG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIFttZXNzYWdlLnVpZF0sIHVzZUZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXMubWVzc2FnZVZpc2liaWxpdHkpO1xuXG5cdFx0dGhpcy5vRG9tID0gbnVsbDtcblx0XHR0aGlzLm9IZWFkZXJEb20gPSBudWxsO1xuXHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSA9IG51bGw7XG5cblx0XHR0aGlzLmJvZHlCYWNrZ3JvdW5kQ29sb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucHN3cCA9IG51bGw7XG5cblx0XHR0aGlzLm1vdmVBY3Rpb24gPSBtb3ZlQWN0aW9uO1xuXG5cdFx0dGhpcy5hbGxvd0NvbXBvc2VyID0gISFTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpO1xuXHRcdHRoaXMuYWxsb3dNZXNzYWdlQWN0aW9ucyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VBY3Rpb25zKTtcblx0XHR0aGlzLmFsbG93TWVzc2FnZUxpc3RBY3Rpb25zID0gISFTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKTtcblxuXHRcdHRoaXMubG9nb0ltZyA9IHRyaW0oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMb2dvTWVzc2FnZScpKTtcblx0XHR0aGlzLmxvZ29JZnJhbWUgPSB0cmltKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VySWZyYW1lTWVzc2FnZScpKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzQWN0aW9ucyA9IEFwcFN0b3JlLmF0dGFjaG1lbnRzQWN0aW9ucztcblxuXHRcdHRoaXMubWVzc2FnZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZDtcblx0XHR0aGlzLmhhc0NoZWNrZWRNZXNzYWdlcyA9IE1lc3NhZ2VTdG9yZS5oYXNDaGVja2VkTWVzc2FnZXM7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscyA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscztcblx0XHR0aGlzLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxvYWRpbmdUaHJvdHRsZTtcblx0XHR0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VzQm9kaWVzRG9tO1xuXHRcdHRoaXMudXNlVGhyZWFkcyA9IFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcztcblx0XHR0aGlzLnJlcGx5U2FtZUZvbGRlciA9IFNldHRpbmdzU3RvcmUucmVwbHlTYW1lRm9sZGVyO1xuXHRcdHRoaXMubGF5b3V0ID0gU2V0dGluZ3NTdG9yZS5sYXlvdXQ7XG5cdFx0dGhpcy51c2VQcmV2aWV3UGFuZSA9IFNldHRpbmdzU3RvcmUudXNlUHJldmlld1BhbmU7XG5cdFx0dGhpcy5pc01lc3NhZ2VTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5pc01lc3NhZ2VTZWxlY3RlZDtcblx0XHR0aGlzLm1lc3NhZ2VBY3RpdmVEb20gPSBNZXNzYWdlU3RvcmUubWVzc2FnZUFjdGl2ZURvbTtcblx0XHR0aGlzLm1lc3NhZ2VFcnJvciA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlRXJyb3I7XG5cblx0XHR0aGlzLmZ1bGxTY3JlZW5Nb2RlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VGdWxsU2NyZWVuTW9kZTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RPZlRocmVhZHNMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAxIH0pO1xuXHRcdHRoaXMuaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAwIH0pO1xuXG5cdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHNTdGF0ZSA9ICh2KSA9PiB7XG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuTWVzc2FnZUF0dGFjaG1uZXRDb250cm9scywgISF2KTtcblx0XHR9O1xuXG5cdFx0dGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gMCA8IHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKCkubGVuZ3RoICYmIFNldHRpbmdzLmNhcGEoQ2FwYS5BdHRhY2htZW50c0FjdGlvbnMpXG5cdFx0KTtcblxuXHRcdHRoaXMuZG93bmxvYWRBc1ppcEFsbG93ZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IC0xIDwgaW5BcnJheSgnemlwJywgdGhpcy5hdHRhY2htZW50c0FjdGlvbnMoKSkgJiYgdGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scygpXG5cdFx0KTtcblxuXHRcdHRoaXMuZG93bmxvYWRBc1ppcExvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRvd25sb2FkQXNaaXBFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNzAwMCB9KTtcblxuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRBbGxvd2VkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAtMSA8IGluQXJyYXkoJ293bmNsb3VkJywgdGhpcy5hdHRhY2htZW50c0FjdGlvbnMoKSkgJiYgdGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scygpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZFN1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDIwMDAgfSk7XG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiA3MDAwIH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZFN1Y2Nlc3Muc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHR0aGlzLnNhdmVUb093bkNsb3VkRXJyb3IoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZEVycm9yLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0dGhpcy5zYXZlVG9Pd25DbG91ZFN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Ecm9wYm94QWxsb3dlZCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gLTEgPCBpbkFycmF5KCdkcm9wYm94JywgdGhpcy5hdHRhY2htZW50c0FjdGlvbnMoKSkgJiYgdGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scygpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveExvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAwIH0pO1xuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiA3MDAwIH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2Vzcy5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHMuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0Xy5lYWNoKHRoaXMubWVzc2FnZSgpLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdGl0ZW0uY2hlY2tlZCghIXYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbl8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbiA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRoaXMubGFzdFJlcGx5QWN0aW9uXyxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYXN0UmVwbHlBY3Rpb25fKFxuXHRcdFx0XHRcdC0xID09PSBpbkFycmF5KHZhbHVlLCBbQ29tcG9zZVR5cGUuUmVwbHksIENvbXBvc2VUeXBlLlJlcGx5QWxsLCBDb21wb3NlVHlwZS5Gb3J3YXJkXSlcblx0XHRcdFx0XHRcdD8gQ29tcG9zZVR5cGUuUmVwbHlcblx0XHRcdFx0XHRcdDogdmFsdWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uKExvY2FsLmdldChDbGllbnRTaWRlS2V5TmFtZS5MYXN0UmVwbHlBY3Rpb24pIHx8IENvbXBvc2VUeXBlLlJlcGx5KTtcblxuXHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uXy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFJlcGx5QWN0aW9uLCB2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dGdWxsSW5mbyA9IGtvLm9ic2VydmFibGUoJzEnID09PSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuTWVzc2FnZUhlYWRlckZ1bGxJbmZvKSk7XG5cblx0XHR0aGlzLm1vcmVEcm9wZG93blRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm1lc3NhZ2VEb21Gb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUoKSAmJiAhIXRoaXMubWVzc2FnZSgpKTtcblxuXHRcdHRoaXMubWVzc2FnZS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmICghbWVzc2FnZSkge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlUmVwbGllZE9yRm9yd2FyZGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdiA9IHRoaXMubWVzc2FnZVZpc2liaWxpdHkoKTtcblx0XHRcdHJldHVybiAhdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgJiYgdjtcblx0XHR9KTtcblxuXHRcdC8vIGNvbW1hbmRzXG5cdFx0dGhpcy5yZXBseUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kUmVwbHlIZWxwZXIoQ29tcG9zZVR5cGUuUmVwbHkpO1xuXHRcdHRoaXMucmVwbHlBbGxDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLlJlcGx5QWxsKTtcblx0XHR0aGlzLmZvcndhcmRDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLkZvcndhcmQpO1xuXHRcdHRoaXMuZm9yd2FyZEFzQXR0YWNobWVudENvbW1hbmQgPSBjcmVhdGVDb21tYW5kUmVwbHlIZWxwZXIoQ29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudCk7XG5cdFx0dGhpcy5lZGl0QXNOZXdDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLkVkaXRBc05ldyk7XG5cblx0XHR0aGlzLmRlbGV0ZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyKEZvbGRlclR5cGUuVHJhc2gsIHRydWUpO1xuXHRcdHRoaXMuZGVsZXRlV2l0aG91dE1vdmVDb21tYW5kID0gY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlcihGb2xkZXJUeXBlLlRyYXNoLCBmYWxzZSk7XG5cdFx0dGhpcy5hcmNoaXZlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRBY3Rpb25IZWxwZXIoRm9sZGVyVHlwZS5BcmNoaXZlLCB0cnVlKTtcblx0XHR0aGlzLnNwYW1Db21tYW5kID0gY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlcihGb2xkZXJUeXBlLlNwYW0sIHRydWUpO1xuXHRcdHRoaXMubm90U3BhbUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyKEZvbGRlclR5cGUuTm90U3BhbSwgdHJ1ZSk7XG5cblx0XHR0aGlzLmRyb3Bib3hFbmFibGVkID0gU29jaWFsU3RvcmUuZHJvcGJveC5lbmFibGVkO1xuXHRcdHRoaXMuZHJvcGJveEFwaUtleSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guYXBpS2V5O1xuXG5cdFx0Ly8gdmlld2VyXG5cblx0XHR0aGlzLnZpZXdCb2R5VG9wVmFsdWUgPSBrby5vYnNlcnZhYmxlKDApO1xuXG5cdFx0dGhpcy52aWV3Rm9sZGVyID0gJyc7XG5cdFx0dGhpcy52aWV3VWlkID0gJyc7XG5cdFx0dGhpcy52aWV3SGFzaCA9ICcnO1xuXHRcdHRoaXMudmlld1N1YmplY3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdGcm9tU2hvcnQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdGcm9tRGtpbURhdGEgPSBrby5vYnNlcnZhYmxlKFsnbm9uZScsICcnXSk7XG5cdFx0dGhpcy52aWV3VG9TaG9ydCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0Zyb20gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdUbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0NjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3QmNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3UmVwbHlUbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1RpbWVTdGFtcCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy52aWV3U2l6ZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0xpbmVBc0NzcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1ZpZXdMaW5rID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VW5zdWJzY3JpYmVMaW5rID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3RG93bmxvYWRMaW5rID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VXNlclBpYyA9IGtvLm9ic2VydmFibGUoREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMpO1xuXHRcdHRoaXMudmlld1VzZXJQaWNWaXNpYmxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy52aWV3SXNJbXBvcnRhbnQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnZpZXdJc0ZsYWdnZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudmlld0Zyb21Ea2ltVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+ICdub25lJyAhPT0gdGhpcy52aWV3RnJvbURraW1EYXRhKClbMF0pO1xuXG5cdFx0dGhpcy52aWV3RnJvbURraW1TdGF0dXNJY29uQ2xhc3MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRoaXMudmlld0Zyb21Ea2ltRGF0YSgpWzBdKSB7XG5cdFx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHRcdHJldHVybiAnaWNvbi1ub25lIGljb25jb2xvci1kaXNwbGF5LW5vbmUnO1xuXHRcdFx0XHRjYXNlICdwYXNzJzpcblx0XHRcdFx0XHRyZXR1cm4gJ2ljb24tb2sgaWNvbmNvbG9yLWdyZWVuJztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gJ2ljb24td2FybmluZy1hbHQgaWNvbmNvbG9yLXJlZCc7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdGcm9tRGtpbVN0YXR1c1RpdGxlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhdHVzID0gdGhpcy52aWV3RnJvbURraW1EYXRhKCk7XG5cdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHN0YXR1cykpIHtcblx0XHRcdFx0aWYgKHN0YXR1c1swXSAmJiBzdGF0dXNbMV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdHVzWzFdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHN0YXR1c1swXSkge1xuXHRcdFx0XHRcdHJldHVybiAnREtJTTogJyArIHN0YXR1c1swXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VBY3RpdmVEb20uc3Vic2NyaWJlKChkb20pID0+IHtcblx0XHRcdHRoaXMuYm9keUJhY2tncm91bmRDb2xvcihkb20gPyB0aGlzLmRldGVjdERvbUJhY2tncm91bmRDb2xvcihkb20pIDogJycpO1xuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5tZXNzYWdlLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlQWN0aXZlRG9tKG51bGwpO1xuXG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHMoZmFsc2UpO1xuXHRcdFx0XHRpZiAoTG9jYWwuZ2V0KENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMpKSB7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHModHJ1ZSk7XG5cdFx0XHRcdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLnZpZXdIYXNoICE9PSBtZXNzYWdlLmhhc2gpIHtcblx0XHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb1RvcCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy52aWV3Rm9sZGVyID0gbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdztcblx0XHRcdFx0dGhpcy52aWV3VWlkID0gbWVzc2FnZS51aWQ7XG5cdFx0XHRcdHRoaXMudmlld0hhc2ggPSBtZXNzYWdlLmhhc2g7XG5cdFx0XHRcdHRoaXMudmlld1N1YmplY3QobWVzc2FnZS5zdWJqZWN0KCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdGcm9tU2hvcnQobWVzc2FnZS5mcm9tVG9MaW5lKHRydWUsIHRydWUpKTtcblx0XHRcdFx0dGhpcy52aWV3RnJvbURraW1EYXRhKG1lc3NhZ2UuZnJvbURraW1EYXRhKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdUb1Nob3J0KG1lc3NhZ2UudG9Ub0xpbmUodHJ1ZSwgdHJ1ZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdGcm9tKG1lc3NhZ2UuZnJvbVRvTGluZShmYWxzZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdUbyhtZXNzYWdlLnRvVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld0NjKG1lc3NhZ2UuY2NUb0xpbmUoZmFsc2UpKTtcblx0XHRcdFx0dGhpcy52aWV3QmNjKG1lc3NhZ2UuYmNjVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld1JlcGx5VG8obWVzc2FnZS5yZXBseVRvVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld1RpbWVTdGFtcChtZXNzYWdlLmRhdGVUaW1lU3RhbXBJblVUQygpKTtcblx0XHRcdFx0dGhpcy52aWV3U2l6ZShtZXNzYWdlLmZyaWVuZGx5U2l6ZSgpKTtcblx0XHRcdFx0dGhpcy52aWV3TGluZUFzQ3NzKG1lc3NhZ2UubGluZUFzQ3NzKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdWaWV3TGluayhtZXNzYWdlLnZpZXdMaW5rKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdVbnN1YnNjcmliZUxpbmsobWVzc2FnZS5nZXRGaXJzdFVuc3Vic3JpYmVMaW5rKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdEb3dubG9hZExpbmsobWVzc2FnZS5kb3dubG9hZExpbmsoKSk7XG5cdFx0XHRcdHRoaXMudmlld0lzSW1wb3J0YW50KG1lc3NhZ2UuaXNJbXBvcnRhbnQoKSk7XG5cdFx0XHRcdHRoaXMudmlld0lzRmxhZ2dlZChtZXNzYWdlLmZsYWdnZWQoKSk7XG5cblx0XHRcdFx0bGFzdEVtYWlsID0gbWVzc2FnZS5mcm9tQXNTaW5nbGVFbWFpbCgpO1xuXHRcdFx0XHRnZXRVc2VyUGljKGxhc3RFbWFpbCwgKHBpYywgZW1haWwpID0+IHtcblx0XHRcdFx0XHRpZiAocGljICE9PSB0aGlzLnZpZXdVc2VyUGljKCkgJiYgbGFzdEVtYWlsID09PSBlbWFpbCkge1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpY1Zpc2libGUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpYyhEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyk7XG5cdFx0XHRcdFx0XHRpZiAoJycgIT09IHBpYykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdVc2VyUGljVmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpYyhwaWMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnZpZXdGb2xkZXIgPSAnJztcblx0XHRcdFx0dGhpcy52aWV3VWlkID0gJyc7XG5cdFx0XHRcdHRoaXMudmlld0hhc2ggPSAnJztcblxuXHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb1RvcCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlLnZpZXdUcmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLnZpZXdJc0ZsYWdnZWQobWVzc2FnZS5mbGFnZ2VkKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52aWV3SXNGbGFnZ2VkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLW1lc3NhZ2UtZnVsbHNjcmVlbicsIHZhbHVlKTtcblx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTG9hZGluZ1Rocm90dGxlLnN1YnNjcmliZSh3aW5kb3dSZXNpemVDYWxsYmFjayk7XG5cblx0XHR0aGlzLm1lc3NhZ2VGb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT4gRm9jdXNlZC5NZXNzYWdlVmlldyA9PT0gQXBwU3RvcmUuZm9jdXNlZFN0YXRlKCkpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdEFuZE1lc3NhZ2VWaWV3TG9hZGluZyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGUoKSB8fCBNZXNzYWdlU3RvcmUubWVzc2FnZUxvYWRpbmdUaHJvdHRsZSgpXG5cdFx0KTtcblxuXHRcdEV2ZW50cy5zdWIoJ21haWxib3gubWVzc2FnZS12aWV3LnRvZ2dsZS1mdWxsLXNjcmVlbicsICgpID0+IHtcblx0XHRcdHRoaXMudG9nZ2xlRnVsbFNjcmVlbigpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50UHJldmlldyA9IF8uYmluZCh0aGlzLmF0dGFjaG1lbnRQcmV2aWV3LCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0Y2xvc2VNZXNzYWdlQ29tbWFuZCgpIHtcblx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZShudWxsKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLm1lc3NhZ2VWaXNpYmlsaXR5KCkpXG5cdG1lc3NhZ2VWaXNpYmlsaXR5Q29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5tZXNzYWdlVmlzaWJpbGl0eSgpKVxuXHRtZXNzYWdlRWRpdENvbW1hbmQoKSB7XG5cdFx0dGhpcy5lZGl0TWVzc2FnZSgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLm1lc3NhZ2VMaXN0QW5kTWVzc2FnZVZpZXdMb2FkaW5nKCkpXG5cdGdvVXBDb21tYW5kKCkge1xuXHRcdEV2ZW50cy5wdWIoJ21haWxib3gubWVzc2FnZS1saXN0LnNlbGVjdG9yLmdvLXVwJywgW0xheW91dC5Ob1ByZXZpZXcgPT09IHRoaXMubGF5b3V0KCkgPyAhIXRoaXMubWVzc2FnZSgpIDogdHJ1ZV0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLm1lc3NhZ2VMaXN0QW5kTWVzc2FnZVZpZXdMb2FkaW5nKCkpXG5cdGdvRG93bkNvbW1hbmQoKSB7XG5cdFx0RXZlbnRzLnB1YignbWFpbGJveC5tZXNzYWdlLWxpc3Quc2VsZWN0b3IuZ28tZG93bicsIFtMYXlvdXQuTm9QcmV2aWV3ID09PSB0aGlzLmxheW91dCgpID8gISF0aGlzLm1lc3NhZ2UoKSA6IHRydWVdKTtcblx0fVxuXG5cdGRldGVjdERvbUJhY2tncm91bmRDb2xvcihkb20pIHtcblx0XHRsZXQgbGltaXQgPSA1LFxuXHRcdFx0cmVzdWx0ID0gJyc7XG5cblx0XHRjb25zdCBmRmluZERvbSA9IGZ1bmN0aW9uKGlucHV0RG9tKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gaW5wdXREb20gPyBpbnB1dERvbS5jaGlsZHJlbigpIDogbnVsbDtcblx0XHRcdFx0cmV0dXJuIGNoaWxkcmVuICYmIDEgPT09IGNoaWxkcmVuLmxlbmd0aCAmJiBjaGlsZHJlbi5pcygndGFibGUsZGl2LGNlbnRlcicpID8gY2hpbGRyZW4gOiBudWxsO1xuXHRcdFx0fSxcblx0XHRcdGZGaW5kQ29sb3IgPSBmdW5jdGlvbihpbnB1dERvbSkge1xuXHRcdFx0XHRsZXQgY29sb3IgPSAnJztcblx0XHRcdFx0aWYgKGlucHV0RG9tKSB7XG5cdFx0XHRcdFx0Y29sb3IgPSBpbnB1dERvbS5jc3MoJ2JhY2tncm91bmQtY29sb3InKSB8fCAnJztcblx0XHRcdFx0XHRpZiAoIWlucHV0RG9tLmlzKCd0YWJsZScpKSB7XG5cdFx0XHRcdFx0XHRjb2xvciA9IGlzVHJhbnNwYXJlbnQoY29sb3IpID8gJycgOiBjb2xvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY29sb3I7XG5cdFx0XHR9O1xuXG5cdFx0aWYgKGRvbSAmJiAxID09PSBkb20ubGVuZ3RoKSB7XG5cdFx0XHRsZXQgYUMgPSBkb207XG5cdFx0XHR3aGlsZSAoJycgPT09IHJlc3VsdCkge1xuXHRcdFx0XHRsaW1pdCAtPSAxO1xuXHRcdFx0XHRpZiAoMCA+PSBsaW1pdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YUMgPSBmRmluZERvbShhQyk7XG5cdFx0XHRcdGlmIChhQykge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGZGaW5kQ29sb3IoYUMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdCA9IGlzVHJhbnNwYXJlbnQocmVzdWx0KSA/ICcnIDogcmVzdWx0O1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdWxsU2NyZWVuKCkge1xuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUodHJ1ZSk7XG5cdFx0d2luZG93UmVzaXplKCk7XG5cdH1cblxuXHR1bkZ1bGxTY3JlZW4oKSB7XG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZShmYWxzZSk7XG5cdFx0d2luZG93UmVzaXplKCk7XG5cdH1cblxuXHR0b2dnbGVGdWxsU2NyZWVuKCkge1xuXHRcdHJlbW92ZVNlbGVjdGlvbigpO1xuXG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZSghdGhpcy5mdWxsU2NyZWVuTW9kZSgpKTtcblx0XHR3aW5kb3dSZXNpemUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1R5cGVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZXBseU9yZm9yd2FyZChzVHlwZSkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJyksIFtzVHlwZSwgTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKV0pO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrSGVhZGVySGVpZ2h0KCkge1xuXHRcdGlmICh0aGlzLm9IZWFkZXJEb20pIHtcblx0XHRcdHRoaXMudmlld0JvZHlUb3BWYWx1ZShcblx0XHRcdFx0dGhpcy5tZXNzYWdlKClcblx0XHRcdFx0XHQ/IHRoaXMub0hlYWRlckRvbS5oZWlnaHQoKSArXG5cdFx0XHRcdFx0ICBNYWdpY3MuU2l6ZTIwcHggLyogcGFkZGluZy0odG9wL2JvdHRvbSk6IDIwcHggKi8gK1xuXHRcdFx0XHRcdFx0XHRNYWdpY3MuU2l6ZTFweCAvKiBib3JkZWQtYm90dG9tOiAxcHggKi9cblx0XHRcdFx0XHQ6IDBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gIGRpc3BsYXlNYWlsVG9Qb3B1cChzTWFpbFRvVXJsKSB7XG5cdC8vXHRcdHNNYWlsVG9VcmwgPSBzTWFpbFRvVXJsLnJlcGxhY2UoL1xcPy4rJC8sICcnKTtcblx0Ly9cblx0Ly9cdFx0dmFyXG5cdC8vXHRcdFx0c1Jlc3VsdCA9ICcnLFxuXHQvL1x0XHRcdGFUbyA9IFtdLFxuXHQvL1x0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdC8vXHRcdFx0ZlBhcnNlRW1haWxMaW5lID0gZnVuY3Rpb24oc0xpbmUpIHtcblx0Ly9cdFx0XHRcdHJldHVybiBzTGluZSA/IF8uY29tcGFjdChfLm1hcChbd2luZG93LmRlY29kZVVSSUNvbXBvbmVudChzTGluZSldLCBmdW5jdGlvbihzSXRlbSkge1xuXHQvL1x0XHRcdFx0XHRcdHZhciBvRW1haWxNb2RlbCA9IG5ldyBFbWFpbE1vZGVsKCk7XG5cdC8vXHRcdFx0XHRcdFx0b0VtYWlsTW9kZWwucGFyc2Uoc0l0ZW0pO1xuXHQvL1x0XHRcdFx0XHRcdHJldHVybiAnJyAhPT0gb0VtYWlsTW9kZWwuZW1haWwgPyBvRW1haWxNb2RlbCA6IG51bGw7XG5cdC8vXHRcdFx0XHRcdH0pKSA6IG51bGw7XG5cdC8vXHRcdFx0fVxuXHQvL1x0XHQ7XG5cdC8vXG5cdC8vXHRcdGFUbyA9IGZQYXJzZUVtYWlsTGluZShzTWFpbFRvVXJsKTtcblx0Ly9cdFx0c1Jlc3VsdCA9IGFUbyAmJiBhVG9bMF0gPyBhVG9bMF0uZW1haWwgOiAnJztcblx0Ly9cblx0Ly9cdFx0cmV0dXJuIHNSZXN1bHQ7XG5cdC8vXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGF0dGFjaG1lbnRQcmV2aWV3KGF0dGFjaG1lbnQpIHtcblx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmlzSW1hZ2UoKSAmJiAhYXR0YWNobWVudC5pc0xpbmtlZCAmJiB0aGlzLm1lc3NhZ2UoKSAmJiB0aGlzLm1lc3NhZ2UoKS5hdHRhY2htZW50cygpKSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwLFxuXHRcdFx0XHRsaXN0SW5kZXggPSAwO1xuXG5cdFx0XHRjb25zdCBkaXYgPSAkKCc8ZGl2PicpLFxuXHRcdFx0XHRkeW5hbWljRWxzID0gXy5jb21wYWN0KFxuXHRcdFx0XHRcdF8ubWFwKHRoaXMubWVzc2FnZSgpLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiAhaXRlbS5pc0xpbmtlZCAmJiBpdGVtLmlzSW1hZ2UoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSA9PT0gYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4ID0gbGlzdEluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bGlzdEluZGV4ICs9IDE7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzcmM6IGl0ZW0ubGlua1ByZXZpZXcoKSxcblx0XHRcdFx0XHRcdFx0XHR0aHVtYjogaXRlbS5saW5rVGh1bWJuYWlsKCksXG5cdFx0XHRcdFx0XHRcdFx0c3ViSHRtbDogaXRlbS5maWxlTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRkb3dubG9hZFVybDogaXRlbS5saW5rUHJldmlldygpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cblx0XHRcdGlmICgwIDwgZHluYW1pY0Vscy5sZW5ndGgpIHtcblx0XHRcdFx0ZGl2Lm9uKCdvbkJlZm9yZU9wZW4ubGcnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dXNlS2V5Ym9hcmRTaG9ydGN1dHMoZmFsc2UpO1xuXHRcdFx0XHRcdHJlbW92ZUluRm9jdXModHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGRpdi5vbignb25DbG9zZUFmdGVyLmxnJywgKCkgPT4ge1xuXHRcdFx0XHRcdHVzZUtleWJvYXJkU2hvcnRjdXRzKHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRkaXYubGlnaHRHYWxsZXJ5KHtcblx0XHRcdFx0XHRkeW5hbWljOiB0cnVlLFxuXHRcdFx0XHRcdGxvYWRZb3V0dWJlVGh1bWJuYWlsOiBmYWxzZSxcblx0XHRcdFx0XHRsb2FkVmltZW9UaHVtYm5haWw6IGZhbHNlLFxuXHRcdFx0XHRcdHRodW1iV2lkdGg6IDgwLFxuXHRcdFx0XHRcdHRodW1iQ29udEhlaWdodDogOTUsXG5cdFx0XHRcdFx0c2hvd1RodW1iQnlEZWZhdWx0OiBmYWxzZSxcblx0XHRcdFx0XHRtb2RlOiAnbGctbG9sbGlwb3AnLCAvLyAnbGctc2xpZGUnLFxuXHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRkeW5hbWljRWw6IGR5bmFtaWNFbHNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXMsXG5cdFx0XHRmQ2hlY2tIZWFkZXJIZWlnaHQgPSBfLmJpbmQodGhpcy5jaGVja0hlYWRlckhlaWdodCwgdGhpcyk7XG5cblx0XHR0aGlzLm9Eb20gPSBkb207XG5cblx0XHR0aGlzLmZ1bGxTY3JlZW5Nb2RlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiB0aGlzLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlVmlldyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHMuc3Vic2NyaWJlKGZDaGVja0hlYWRlckhlaWdodCk7XG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZS5zdWJzY3JpYmUoZkNoZWNrSGVhZGVySGVpZ2h0KTtcblx0XHR0aGlzLnNob3dGdWxsSW5mby5zdWJzY3JpYmUoZkNoZWNrSGVhZGVySGVpZ2h0KTtcblx0XHR0aGlzLm1lc3NhZ2Uuc3Vic2NyaWJlKGZDaGVja0hlYWRlckhlaWdodCk7XG5cblx0XHRFdmVudHMuc3ViKFxuXHRcdFx0J3dpbmRvdy5yZXNpemUnLFxuXHRcdFx0Xy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdF8uZGVsYXkoZkNoZWNrSGVhZGVySGVpZ2h0LCAxKTtcblx0XHRcdFx0Xy5kZWxheShmQ2hlY2tIZWFkZXJIZWlnaHQsIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHRcdFx0XHRfLmRlbGF5KGZDaGVja0hlYWRlckhlaWdodCwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2hvd0Z1bGxJbmZvLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0d2luZG93UmVzaXplKE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VIZWFkZXJGdWxsSW5mbywgdmFsdWUgPyAnMScgOiAnMCcpO1xuXHRcdH0pO1xuXG5cdFx0U29jaWFsU3RvcmUuYXBwZW5kRHJvcGJveCgpO1xuXG5cdFx0dGhpcy5vSGVhZGVyRG9tID0gJCgnLm1lc3NhZ2VJdGVtSGVhZGVyJywgZG9tKTtcblx0XHR0aGlzLm9IZWFkZXJEb20gPSB0aGlzLm9IZWFkZXJEb21bMF0gPyB0aGlzLm9IZWFkZXJEb20gOiBudWxsO1xuXG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRvbVxuXHRcdFx0Lm9uKCdjbGljaycsICdhJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Ly8gc2V0dXAgbWFpdG8gcHJvdG9jb2xcblx0XHRcdFx0cmV0dXJuICEoXG5cdFx0XHRcdFx0ISFldmVudCAmJlxuXHRcdFx0XHRcdE1hZ2ljcy5FdmVudFdoaWNoTW91c2VNaWRkbGUgIT09IGV2ZW50LndoaWNoICYmXG5cdFx0XHRcdFx0bWFpbFRvSGVscGVyKFxuXHRcdFx0XHRcdFx0JCh0aGlzKS5hdHRyKCdocmVmJyksXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpID8gcmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJykgOiBudWxsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmF0dGFjaG1lbnRzUGxhY2UgLmF0dGFjaG1lbnRJY29uUGFyZW50JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmF0dGFjaG1lbnRzUGxhY2UgLnNob3dQcmVwbGF5JywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIEF1ZGlvLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBdWRpby5zdXBwb3J0ZWRNcDMgJiYgYXR0YWNobWVudC5pc01wMygpOlxuXHRcdFx0XHRcdFx0XHRBdWRpby5wbGF5TXAzKGF0dGFjaG1lbnQubGlua0Rvd25sb2FkKCksIGF0dGFjaG1lbnQuZmlsZU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgQXVkaW8uc3VwcG9ydGVkT2dnICYmIGF0dGFjaG1lbnQuaXNPZ2coKTpcblx0XHRcdFx0XHRcdFx0QXVkaW8ucGxheU9nZyhhdHRhY2htZW50LmxpbmtEb3dubG9hZCgpLCBhdHRhY2htZW50LmZpbGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIEF1ZGlvLnN1cHBvcnRlZFdhdiAmJiBhdHRhY2htZW50LmlzV2F2KCk6XG5cdFx0XHRcdFx0XHRcdEF1ZGlvLnBsYXlXYXYoYXR0YWNobWVudC5saW5rRG93bmxvYWQoKSwgYXR0YWNobWVudC5maWxlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmF0dGFjaG1lbnRzUGxhY2UgLmF0dGFjaG1lbnRJdGVtIC5hdHRhY2htZW50TmFtZVBhcmVudCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC5kb3dubG9hZCkge1xuXHRcdFx0XHRcdGdldEFwcCgpLmRvd25sb2FkKGF0dGFjaG1lbnQubGlua0Rvd25sb2FkKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcubWVzc2FnZUl0ZW1IZWFkZXIgLnN1YmplY3RQYXJlbnQgLmZsYWdQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHNlbGYubWVzc2FnZSgpO1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdGdldEFwcCgpLm1lc3NhZ2VMaXN0QWN0aW9uKFxuXHRcdFx0XHRcdFx0bWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0XHRbbWVzc2FnZV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcudGhyZWFkLWxpc3QgLmZsYWdQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZm9sZGVyICYmIG1lc3NhZ2UudWlkKSB7XG5cdFx0XHRcdFx0Z2V0QXBwKCkubWVzc2FnZUxpc3RBY3Rpb24oXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmZvbGRlcixcblx0XHRcdFx0XHRcdG1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0XHRbbWVzc2FnZV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi50aHJlYWRzRHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChGb2N1c2VkLk1lc3NhZ2VWaWV3ICE9PSB2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb1RvcCgpO1xuXHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb0xlZnQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtleVNjb3BlUmVhbC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VEb21Gb2N1c2VkKEtleVN0YXRlLk1lc3NhZ2VWaWV3ID09PSB2YWx1ZSAmJiAhaW5Gb2N1cygpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSA9IGRvbS5maW5kKCcubWVzc2FnZUl0ZW0gLmNvbnRlbnQnKTtcblx0XHR0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20gPVxuXHRcdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tICYmIHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbVswXSA/IHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSA6IG51bGw7XG5cblx0XHR0aGlzLmluaXRTaG9ydGN1dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGVzY1Nob3J0Y3V0cygpIHtcblx0XHRpZiAodGhpcy52aWV3TW9kZWxWaXNpYmlsaXR5KCkgJiYgdGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdGlmICh0aGlzLmZ1bGxTY3JlZW5Nb2RlKCkpIHtcblx0XHRcdFx0dGhpcy5mdWxsU2NyZWVuTW9kZShmYWxzZSk7XG5cblx0XHRcdFx0aWYgKExheW91dC5Ob1ByZXZpZXcgIT09IHRoaXMubGF5b3V0KCkpIHtcblx0XHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoTGF5b3V0Lk5vUHJldmlldyA9PT0gdGhpcy5sYXlvdXQoKSkge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGluaXRTaG9ydGN1dHMoKSB7XG5cdFx0Ly8gZXhpdCBmdWxsc2NyZWVuLCBiYWNrXG5cdFx0a2V5KCdlc2MsIGJhY2tzcGFjZScsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCBfLmJpbmQodGhpcy5lc2NTaG9ydGN1dHMsIHRoaXMpKTtcblxuXHRcdC8vIGZ1bGxzY3JlZW5cblx0XHRrZXkoJ2VudGVyJywgS2V5U3RhdGUuTWVzc2FnZVZpZXcsICgpID0+IHtcblx0XHRcdHRoaXMudG9nZ2xlRnVsbFNjcmVlbigpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0Ly8gcmVwbHlcblx0XHRrZXkoJ3InLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0aWYgKE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkpIHtcblx0XHRcdFx0dGhpcy5yZXBseUNvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIHJlcGxhQWxsXG5cdFx0a2V5KCdhJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMucmVwbHlBbGxDb21tYW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHQvLyBmb3J3YXJkXG5cdFx0a2V5KCdmJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMuZm9yd2FyZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIG1lc3NhZ2UgaW5mb3JtYXRpb25cblx0XHRrZXkoJ2N0cmwraSwgY29tbWFuZCtpJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0Z1bGxJbmZvKCF0aGlzLnNob3dGdWxsSW5mbygpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIHRvZ2dsZSBtZXNzYWdlIGJsb2NrcXVvdGVzXG5cdFx0a2V5KCdiJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuYm9keSkge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZSgpXG5cdFx0XHRcdFx0LmJvZHkuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHRcdFx0XHQuY2xpY2soKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtleSgnY3RybCt1cCwgY29tbWFuZCt1cCwgY3RybCtsZWZ0LCBjb21tYW5kK2xlZnQnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0dGhpcy5nb1VwQ29tbWFuZCgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdjdHJsK2Rvd24sIGNvbW1hbmQrZG93biwgY3RybCtyaWdodCwgY29tbWFuZCtyaWdodCcsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmdvRG93bkNvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIHByaW50XG5cdFx0a2V5KCdjdHJsK3AsIGNvbW1hbmQrcCcsIFtLZXlTdGF0ZS5NZXNzYWdlVmlldywgS2V5U3RhdGUuTWVzc2FnZUxpc3RdLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlKCkucHJpbnRNZXNzYWdlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIGRlbGV0ZVxuXHRcdGtleSgnZGVsZXRlLCBzaGlmdCtkZWxldGUnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKGhhbmRsZXIgJiYgJ3NoaWZ0K2RlbGV0ZScgPT09IGhhbmRsZXIuc2hvcnRjdXQpIHtcblx0XHRcdFx0XHR0aGlzLmRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZGVsZXRlQ29tbWFuZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIGNoYW5nZSBmb2N1c2VkIHN0YXRlXG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgbGVmdCcsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdGlmICghdGhpcy5mdWxsU2NyZWVuTW9kZSgpICYmIHRoaXMubWVzc2FnZSgpICYmIExheW91dC5Ob1ByZXZpZXcgIT09IHRoaXMubGF5b3V0KCkpIHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGhhbmRsZXIgJiYgJ2xlZnQnID09PSBoYW5kbGVyLnNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSAmJiAwIDwgdGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbExlZnQoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGhpcy5tZXNzYWdlKCkgJiZcblx0XHRcdFx0TGF5b3V0Lk5vUHJldmlldyA9PT0gdGhpcy5sYXlvdXQoKSAmJlxuXHRcdFx0XHRldmVudCAmJlxuXHRcdFx0XHRoYW5kbGVyICYmXG5cdFx0XHRcdCdsZWZ0JyA9PT0gaGFuZGxlci5zaG9ydGN1dFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0RyYWZ0Rm9sZGVyKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCkgPT09IE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1NlbnRGb2xkZXIoKSB7XG5cdFx0cmV0dXJuIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkgJiYgRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpID09PSBNZXNzYWdlU3RvcmUubWVzc2FnZSgpLmZvbGRlckZ1bGxOYW1lUmF3O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNTcGFtRm9sZGVyKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSA9PT0gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKS5mb2xkZXJGdWxsTmFtZVJhdztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzU3BhbURpc2FibGVkKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSA9PT0gVU5VU0VEX09QVElPTl9WQUxVRTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQXJjaGl2ZUZvbGRlcigpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkgPT09IE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0FyY2hpdmVEaXNhYmxlZCgpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkgPT09IFVOVVNFRF9PUFRJT05fVkFMVUU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0RyYWZ0T3JTZW50Rm9sZGVyKCkge1xuXHRcdHJldHVybiB0aGlzLmlzRHJhZnRGb2xkZXIoKSB8fCB0aGlzLmlzU2VudEZvbGRlcigpO1xuXHR9XG5cblx0Y29tcG9zZUNsaWNrKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJykpO1xuXHRcdH1cblx0fVxuXG5cdGVkaXRNZXNzYWdlKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpICYmIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSwgW0NvbXBvc2VUeXBlLkRyYWZ0LCBNZXNzYWdlU3RvcmUubWVzc2FnZSgpXSk7XG5cdFx0fVxuXHR9XG5cblx0c2Nyb2xsTWVzc2FnZVRvVG9wKCkge1xuXHRcdGlmICh0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20pIHtcblx0XHRcdGlmIChNYWdpY3MuU2l6ZTUwcHggPCB0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20uc2Nyb2xsVG9wKCkpIHtcblx0XHRcdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbFRvcChNYWdpY3MuU2l6ZTUwcHgpLmFuaW1hdGUoeyAnc2Nyb2xsVG9wJzogMCB9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbS5zY3JvbGxUb3AoMCk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHNjcm9sbE1lc3NhZ2VUb0xlZnQoKSB7XG5cdFx0aWYgKHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSkge1xuXHRcdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbExlZnQoMCk7XG5cdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRBdHRhY2htZW50c0hhc2hlcygpIHtcblx0XHRjb25zdCBhdHRzID0gdGhpcy5tZXNzYWdlKCkgPyB0aGlzLm1lc3NhZ2UoKS5hdHRhY2htZW50cygpIDogW107XG5cdFx0cmV0dXJuIF8uY29tcGFjdChfLm1hcChhdHRzLCAoaXRlbSkgPT4gKGl0ZW0gJiYgIWl0ZW0uaXNMaW5rZWQgJiYgaXRlbS5jaGVja2VkKCkgPyBpdGVtLmRvd25sb2FkIDogJycpKSk7XG5cdH1cblxuXHRkb3dubG9hZEFzWmlwKCkge1xuXHRcdGNvbnN0IGhhc2hlcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNIYXNoZXMoKTtcblx0XHRpZiAoMCA8IGhhc2hlcy5sZW5ndGgpIHtcblx0XHRcdFByb21pc2VzLmF0dGFjaG1lbnRzQWN0aW9ucygnWmlwJywgaGFzaGVzLCB0aGlzLmRvd25sb2FkQXNaaXBMb2FkaW5nKVxuXHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiByZXN1bHQuUmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQuRmlsZXMgJiYgcmVzdWx0LlJlc3VsdC5GaWxlc1swXSAmJiByZXN1bHQuUmVzdWx0LkZpbGVzWzBdLkhhc2gpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmRvd25sb2FkKGF0dGFjaG1lbnREb3dubG9hZChyZXN1bHQuUmVzdWx0LkZpbGVzWzBdLkhhc2gpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5kb3dubG9hZEFzWmlwRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZG93bmxvYWRBc1ppcEVycm9yKHRydWUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5oaWdobGlnaHRVbnNlbGVjdGVkQXR0YWNobWVudHModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0c2F2ZVRvT3duQ2xvdWQoKSB7XG5cdFx0Y29uc3QgaGFzaGVzID0gdGhpcy5nZXRBdHRhY2htZW50c0hhc2hlcygpO1xuXHRcdGlmICgwIDwgaGFzaGVzLmxlbmd0aCkge1xuXHRcdFx0UHJvbWlzZXMuYXR0YWNobWVudHNBY3Rpb25zKCdPd25DbG91ZCcsIGhhc2hlcywgdGhpcy5zYXZlVG9Pd25DbG91ZExvYWRpbmcpXG5cdFx0XHRcdC50aGVuKChyZXN1bHQpID0+IHtcblx0XHRcdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRTdWNjZXNzKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVUb093bkNsb3VkRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRFcnJvcih0cnVlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNhdmVUb0Ryb3Bib3goKSB7XG5cdFx0Y29uc3QgZmlsZXMgPSBbXSxcblx0XHRcdGhhc2hlcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNIYXNoZXMoKTtcblxuXHRcdGlmICgwIDwgaGFzaGVzLmxlbmd0aCkge1xuXHRcdFx0aWYgKHdpbmRvdy5Ecm9wYm94KSB7XG5cdFx0XHRcdFByb21pc2VzLmF0dGFjaG1lbnRzQWN0aW9ucygnRHJvcGJveCcsIGhhc2hlcywgdGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZylcblx0XHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQgJiYgcmVzdWx0LlJlc3VsdC5VcmwgJiYgcmVzdWx0LlJlc3VsdC5TaG9ydExpZmUgJiYgcmVzdWx0LlJlc3VsdC5GaWxlcykge1xuXHRcdFx0XHRcdFx0XHRpZiAod2luZG93LkRyb3Bib3ggJiYgaXNBcnJheShyZXN1bHQuUmVzdWx0LkZpbGVzKSkge1xuXHRcdFx0XHRcdFx0XHRcdF8uZWFjaChyZXN1bHQuUmVzdWx0LkZpbGVzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVybDogcmVzdWx0LlJlc3VsdC5VcmwgKyBhdHRhY2htZW50RG93bmxvYWQoaXRlbS5IYXNoLCByZXN1bHQuUmVzdWx0LlNob3J0TGlmZSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpbGVuYW1lOiBpdGVtLkZpbGVOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5Ecm9wYm94LnNhdmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXM6IGZpbGVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvZ3Jlc3M6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94RXJyb3IoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hTdWNjZXNzKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjYW5jZWw6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2VzcyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0c3VjY2VzczogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hTdWNjZXNzKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvcih0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94RXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvcih0cnVlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5oaWdobGlnaHRVbnNlbGVjdGVkQXR0YWNobWVudHModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBvTWVzc2FnZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNob3dJbWFnZXMobWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2Uuc2hvd0V4dGVybmFsSW1hZ2VzKSB7XG5cdFx0XHRtZXNzYWdlLnNob3dFeHRlcm5hbEltYWdlcyh0cnVlKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoZWNrSGVhZGVySGVpZ2h0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHByaW50YWJsZUNoZWNrZWRNZXNzYWdlQ291bnQoKSB7XG5cdFx0Y29uc3QgY250ID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLmxlbmd0aDtcblx0XHRyZXR1cm4gMCA8IGNudCA/ICgxMDAgPiBjbnQgPyBjbnQgOiAnOTkrJykgOiAnJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IG9NZXNzYWdlXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVhZFJlY2VpcHQob01lc3NhZ2UpIHtcblx0XHRpZiAob01lc3NhZ2UgJiYgJycgIT09IG9NZXNzYWdlLnJlYWRSZWNlaXB0KCkpIHtcblx0XHRcdFJlbW90ZS5zZW5kUmVhZFJlY2VpcHRNZXNzYWdlKFxuXHRcdFx0XHRub29wLFxuXHRcdFx0XHRvTWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0b01lc3NhZ2UudWlkLFxuXHRcdFx0XHRvTWVzc2FnZS5yZWFkUmVjZWlwdCgpLFxuXHRcdFx0XHRpMThuKCdSRUFEX1JFQ0VJUFQvU1VCSkVDVCcsIHsgJ1NVQkpFQ1QnOiBvTWVzc2FnZS5zdWJqZWN0KCkgfSksXG5cdFx0XHRcdGkxOG4oJ1JFQURfUkVDRUlQVC9CT0RZJywgeyAnUkVBRC1SRUNFSVBUJzogQWNjb3VudFN0b3JlLmVtYWlsKCkgfSlcblx0XHRcdCk7XG5cblx0XHRcdG9NZXNzYWdlLmlzUmVhZFJlY2VpcHQodHJ1ZSk7XG5cblx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZShvTWVzc2FnZSk7XG5cblx0XHRcdGdldEFwcCgpLnJlbG9hZEZsYWdzQ3VycmVudE1lc3NhZ2VMaXN0QW5kTWVzc2FnZUZyb21DYWNoZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hlY2tIZWFkZXJIZWlnaHQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBNZXNzYWdlVmlld01haWxCb3hVc2VyVmlldywgTWVzc2FnZVZpZXdNYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQ2FwYSwgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsga2V5U2NvcGUsIGxlZnRQYW5lbFR5cGUsIGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgYWRkU2V0dGluZ3NWaWV3TW9kZWwgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gfSBmcm9tICdTY3JlZW4vQWJzdHJhY3RTZXR0aW5ncyc7XG5cbmltcG9ydCB7IEdlbmVyYWxVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL0dlbmVyYWwnO1xuaW1wb3J0IHsgQ29udGFjdHNVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL0NvbnRhY3RzJztcbmltcG9ydCB7IEFjY291bnRzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9BY2NvdW50cyc7XG5pbXBvcnQgeyBGaWx0ZXJzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9GaWx0ZXJzJztcbmltcG9ydCB7IFNlY3VyaXR5VXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9TZWN1cml0eSc7XG5pbXBvcnQgeyBTb2NpYWxVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL1NvY2lhbCc7XG5pbXBvcnQgeyBDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvQ2hhbmdlUGFzc3dvcmQnO1xuaW1wb3J0IHsgVGVtcGxhdGVzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9UZW1wbGF0ZXMnO1xuaW1wb3J0IHsgRm9sZGVyc1VzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvRm9sZGVycyc7XG5pbXBvcnQgeyBUaGVtZXNVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL1RoZW1lcyc7XG5pbXBvcnQgeyBPcGVuUGdwVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9PcGVuUGdwJztcblxuaW1wb3J0IHsgU3lzdGVtRHJvcERvd25TZXR0aW5nc1VzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL1NldHRpbmdzL1N5c3RlbURyb3BEb3duJztcbmltcG9ydCB7IE1lbnVTZXR0aW5nc1VzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL1NldHRpbmdzL01lbnUnO1xuaW1wb3J0IHsgUGFuZVNldHRpbmdzVXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvU2V0dGluZ3MvUGFuZSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5jbGFzcyBTZXR0aW5nc1VzZXJTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoW1N5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldywgTWVudVNldHRpbmdzVXNlclZpZXcsIFBhbmVTZXR0aW5nc1VzZXJWaWV3XSk7XG5cblx0XHRpbml0T25TdGFydE9yTGFuZ0NoYW5nZShcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5zU2V0dGluZ3NUaXRsZSA9IGkxOG4oJ1RJVExFUy9TRVRUSU5HUycpO1xuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5zZXRTZXR0aW5nc1RpdGxlKCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkNhbGxiYWNrXG5cdCAqL1xuXHRzZXR1cFNldHRpbmdzKGZDYWxsYmFjayA9IG51bGwpIHtcblx0XHRpZiAoIVNldHRpbmdzLmNhcGEoQ2FwYS5TZXR0aW5ncykpIHtcblx0XHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdFx0ZkNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChHZW5lcmFsVXNlclNldHRpbmdzLCAnU2V0dGluZ3NHZW5lcmFsJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9HRU5FUkFMX05BTUUnLCAnZ2VuZXJhbCcsIHRydWUpO1xuXG5cdFx0aWYgKEFwcFN0b3JlLmNvbnRhY3RzSXNBbGxvd2VkKCkpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKENvbnRhY3RzVXNlclNldHRpbmdzLCAnU2V0dGluZ3NDb250YWN0cycsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfQ09OVEFDVFNfTkFNRScsICdjb250YWN0cycpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKSB8fCBTZXR0aW5ncy5jYXBhKENhcGEuSWRlbnRpdGllcykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0XHRBY2NvdW50c1VzZXJTZXR0aW5ncyxcblx0XHRcdFx0J1NldHRpbmdzQWNjb3VudHMnLFxuXHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKVxuXHRcdFx0XHRcdD8gJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9BQ0NPVU5UU19OQU1FJ1xuXHRcdFx0XHRcdDogJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9JREVOVElUSUVTX05BTUUnLFxuXHRcdFx0XHQnYWNjb3VudHMnXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuU2lldmUpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChGaWx0ZXJzVXNlclNldHRpbmdzLCAnU2V0dGluZ3NGaWx0ZXJzJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9GSUxURVJTX05BTUUnLCAnZmlsdGVycycpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQXV0b0xvZ291dCkgfHwgU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvcikpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFNlY3VyaXR5VXNlclNldHRpbmdzLCAnU2V0dGluZ3NTZWN1cml0eScsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfU0VDVVJJVFlfTkFNRScsICdzZWN1cml0eScpO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdEFjY291bnRTdG9yZS5pc1Jvb3RBY2NvdW50KCkgJiZcblx0XHRcdCgoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykgJiYgU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aCcpKSB8fFxuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dGYWNlYm9va1NvY2lhbCcpIHx8XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKSlcblx0XHQpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFNvY2lhbFVzZXJTZXR0aW5ncywgJ1NldHRpbmdzU29jaWFsJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9TT0NJQUxfTkFNRScsICdzb2NpYWwnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NoYW5nZVBhc3N3b3JkSXNBbGxvd2VkJykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0XHRDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncyxcblx0XHRcdFx0J1NldHRpbmdzQ2hhbmdlUGFzc3dvcmQnLFxuXHRcdFx0XHQnU0VUVElOR1NfTEFCRUxTL0xBQkVMX0NIQU5HRV9QQVNTV09SRF9OQU1FJyxcblx0XHRcdFx0J2NoYW5nZS1wYXNzd29yZCdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5UZW1wbGF0ZXMpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChcblx0XHRcdFx0VGVtcGxhdGVzVXNlclNldHRpbmdzLFxuXHRcdFx0XHQnU2V0dGluZ3NUZW1wbGF0ZXMnLFxuXHRcdFx0XHQnU0VUVElOR1NfTEFCRUxTL0xBQkVMX1RFTVBMQVRFU19OQU1FJyxcblx0XHRcdFx0J3RlbXBsYXRlcydcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKSkge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRm9sZGVyc1VzZXJTZXR0aW5ncywgJ1NldHRpbmdzRm9sZGVycycsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfRk9MREVSU19OQU1FJywgJ2ZvbGRlcnMnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlRoZW1lcykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFRoZW1lc1VzZXJTZXR0aW5ncywgJ1NldHRpbmdzVGhlbWVzJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9USEVNRVNfTkFNRScsICd0aGVtZXMnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLk9wZW5QR1ApKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChPcGVuUGdwVXNlclNldHRpbmdzLCAnU2V0dGluZ3NPcGVuUEdQJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9PUEVOX1BHUF9OQU1FJywgJ29wZW5wZ3AnKTtcblx0XHR9XG5cblx0XHRydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzKGZhbHNlKTtcblxuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuc2V0U2V0dGluZ3NUaXRsZSgpO1xuXHRcdGtleVNjb3BlKEtleVN0YXRlLlNldHRpbmdzKTtcblx0XHRsZWZ0UGFuZWxUeXBlKCcnKTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJykpIHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNldFNldHRpbmdzVGl0bGUoKSB7XG5cdFx0Y29uc3Qgc0VtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCk7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoKCcnID09PSBzRW1haWwgPyAnJyA6IHNFbWFpbCArICcgLSAnKSArIHRoaXMuc1NldHRpbmdzVGl0bGUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNldHRpbmdzVXNlclNjcmVlbiwgU2V0dGluZ3NVc2VyU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MsIEVkaXRvckRlZmF1bHRUeXBlLCBMYXlvdXQgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgY29udmVydExhbmdOYW1lLCBpc0FycmF5LCB0aW1lT3V0QWN0aW9uLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciwgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IElkZW50aXR5U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvSWRlbnRpdHknO1xuaW1wb3J0IE5vdGlmaWNhdGlvblN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL05vdGlmaWNhdGlvbic7XG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBHZW5lcmFsVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5sYW5ndWFnZSA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2U7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlcztcblx0XHR0aGlzLm1lc3NhZ2VzUGVyUGFnZSA9IFNldHRpbmdzU3RvcmUubWVzc2FnZXNQZXJQYWdlO1xuXHRcdHRoaXMubWVzc2FnZXNQZXJQYWdlQXJyYXkgPSBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVM7XG5cblx0XHR0aGlzLmVkaXRvckRlZmF1bHRUeXBlID0gU2V0dGluZ3NTdG9yZS5lZGl0b3JEZWZhdWx0VHlwZTtcblx0XHR0aGlzLmxheW91dCA9IFNldHRpbmdzU3RvcmUubGF5b3V0O1xuXHRcdHRoaXMudXNlUHJldmlld1BhbmUgPSBTZXR0aW5nc1N0b3JlLnVzZVByZXZpZXdQYW5lO1xuXG5cdFx0dGhpcy5zb3VuZE5vdGlmaWNhdGlvbklzU3VwcG9ydGVkID0gTm90aWZpY2F0aW9uU3RvcmUuc291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZDtcblx0XHR0aGlzLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uU3RvcmUuZW5hYmxlU291bmROb3RpZmljYXRpb247XG5cblx0XHR0aGlzLmVuYWJsZURlc2t0b3BOb3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25TdG9yZS5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uO1xuXHRcdHRoaXMuaXNEZXNrdG9wTm90aWZpY2F0aW9uU3VwcG9ydGVkID0gTm90aWZpY2F0aW9uU3RvcmUuaXNEZXNrdG9wTm90aWZpY2F0aW9uU3VwcG9ydGVkO1xuXHRcdHRoaXMuaXNEZXNrdG9wTm90aWZpY2F0aW9uRGVuaWVkID0gTm90aWZpY2F0aW9uU3RvcmUuaXNEZXNrdG9wTm90aWZpY2F0aW9uRGVuaWVkO1xuXG5cdFx0dGhpcy5zaG93SW1hZ2VzID0gU2V0dGluZ3NTdG9yZS5zaG93SW1hZ2VzO1xuXHRcdHRoaXMudXNlQ2hlY2tib3hlc0luTGlzdCA9IFNldHRpbmdzU3RvcmUudXNlQ2hlY2tib3hlc0luTGlzdDtcblx0XHR0aGlzLnRocmVhZHNBbGxvd2VkID0gQXBwU3RvcmUudGhyZWFkc0FsbG93ZWQ7XG5cdFx0dGhpcy51c2VUaHJlYWRzID0gU2V0dGluZ3NTdG9yZS51c2VUaHJlYWRzO1xuXHRcdHRoaXMucmVwbHlTYW1lRm9sZGVyID0gU2V0dGluZ3NTdG9yZS5yZXBseVNhbWVGb2xkZXI7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3M7XG5cblx0XHR0aGlzLmxhbmd1YWdlRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZSgpKSk7XG5cdFx0dGhpcy5sYW5ndWFnZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMTAwbXMgfSk7XG5cblx0XHR0aGlzLm1wcFRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5sYXlvdXRUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy5pc0FuaW1hdGlvblN1cHBvcnRlZCA9IGJBbmltYXRpb25TdXBwb3J0ZWQ7XG5cblx0XHR0aGlzLmlkZW50aXRpZXMgPSBJZGVudGl0eVN0b3JlLmlkZW50aXRpZXM7XG5cblx0XHR0aGlzLmlkZW50aXR5TWFpbiA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmlkZW50aXRpZXMoKTtcblx0XHRcdHJldHVybiBpc0FycmF5KGxpc3QpID8gXy5maW5kKGxpc3QsIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmlkKCkpIDogbnVsbDtcblx0XHR9KTtcblxuXHRcdHRoaXMuaWRlbnRpdHlNYWluRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlkZW50aXR5ID0gdGhpcy5pZGVudGl0eU1haW4oKTtcblx0XHRcdHJldHVybiBpZGVudGl0eSA/IGlkZW50aXR5LmZvcm1hdHRlZE5hbWUoKSA6ICctLS0nO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5IdG1sLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfRURJVE9SX0hUTUwnKSB9LFxuXHRcdFx0XHR7ICdpZCc6IEVkaXRvckRlZmF1bHRUeXBlLlBsYWluLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfRURJVE9SX1BMQUlOJykgfSxcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5IdG1sRm9yY2VkLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfRURJVE9SX0hUTUxfRk9SQ0VEJykgfSxcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbkZvcmNlZCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0VESVRPUl9QTEFJTl9GT1JDRUQnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYXlvdXRUeXBlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7ICdpZCc6IExheW91dC5Ob1ByZXZpZXcsICduYW1lJzogaTE4bignU0VUVElOR1NfR0VORVJBTC9MQUJFTF9MQVlPVVRfTk9fU1BMSVQnKSB9LFxuXHRcdFx0XHR7ICdpZCc6IExheW91dC5TaWRlUHJldmlldywgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0xBWU9VVF9WRVJUSUNBTF9TUExJVCcpIH0sXG5cdFx0XHRcdHsgJ2lkJzogTGF5b3V0LkJvdHRvbVByZXZpZXcsICduYW1lJzogaTE4bignU0VUVElOR1NfR0VORVJBTC9MQUJFTF9MQVlPVVRfSE9SSVpPTlRBTF9TUExJVCcpIH1cblx0XHRcdF07XG5cdFx0fSk7XG5cdH1cblxuXHRlZGl0TWFpbklkZW50aXR5KCkge1xuXHRcdGNvbnN0IGlkZW50aXR5ID0gdGhpcy5pZGVudGl0eU1haW4oKTtcblx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0lkZW50aXR5JyksIFtpZGVudGl0eV0pO1xuXHRcdH1cblx0fVxuXG5cdHRlc3RTb3VuZE5vdGlmaWNhdGlvbigpIHtcblx0XHROb3RpZmljYXRpb25TdG9yZS5wbGF5U291bmROb3RpZmljYXRpb24odHJ1ZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjAgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmVkaXRvckRlZmF1bHRUeXBlVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5tcHBUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxheW91dFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIgPSAoc2F2ZVNldHRpbmdzU3RlcCkgPT4gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFuZ3VhZ2VUcmlnZ2VyKHNhdmVTZXR0aW5nc1N0ZXApO1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5sYW5ndWFnZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXHRcdFx0XHR0cmFuc2xhdG9yUmVsb2FkKGZhbHNlLCB2YWx1ZSlcblx0XHRcdFx0XHQudGhlbihmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KSwgZlJlbG9hZExhbmd1YWdlSGVscGVyKFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHRcdFx0XHQnTGFuZ3VhZ2UnOiB2YWx1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignRWRpdG9yRGVmYXVsdFR5cGUnLCBudWxsLCBmMCkpO1xuXHRcdFx0dGhpcy5tZXNzYWdlc1BlclBhZ2Uuc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ01QUCcsIG51bGwsIGYxKSk7XG5cdFx0XHR0aGlzLnNob3dJbWFnZXMuc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ1Nob3dJbWFnZXMnLCBib29sVG9BamF4KSk7XG5cblx0XHRcdHRoaXMudXNlQ2hlY2tib3hlc0luTGlzdC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignVXNlQ2hlY2tib3hlc0luTGlzdCcsIGJvb2xUb0FqYXgpKTtcblxuXHRcdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGltZU91dEFjdGlvbihcblx0XHRcdFx0XHQnU2F2ZURlc2t0b3BOb3RpZmljYXRpb25zJyxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J0Rlc2t0b3BOb3RpZmljYXRpb25zJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0TWFnaWNzLlRpbWUzc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlU291bmROb3RpZmljYXRpb24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aW1lT3V0QWN0aW9uKFxuXHRcdFx0XHRcdCdTYXZlU291bmROb3RpZmljYXRpb24nLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHRcdFx0XHQnU291bmROb3RpZmljYXRpb24nOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRNYWdpY3MuVGltZTNzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5yZXBseVNhbWVGb2xkZXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aW1lT3V0QWN0aW9uKFxuXHRcdFx0XHRcdCdTYXZlUmVwbHlTYW1lRm9sZGVyJyxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J1JlcGx5U2FtZUZvbGRlcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdE1hZ2ljcy5UaW1lM3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnVzZVRocmVhZHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoW10pO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHQnVXNlVGhyZWFkcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGF5b3V0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KFtdKTtcblx0XHRcdFx0UmVtb3RlLnNhdmVTZXR0aW5ncyhmMiwge1xuXHRcdFx0XHRcdCdMYXlvdXQnOiB2YWx1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2UoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyksIFt0aGlzLmxhbmd1YWdlLCB0aGlzLmxhbmd1YWdlcygpLCBMYW5ndWFnZVN0b3JlLnVzZXJMYW5ndWFnZSgpXSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgR2VuZXJhbFVzZXJTZXR0aW5ncywgR2VuZXJhbFVzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IENvbnRhY3RTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Db250YWN0JztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmNsYXNzIENvbnRhY3RzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlID0gQXBwU3RvcmUuY29udGFjdHNBdXRvc2F2ZTtcblxuXHRcdHRoaXMuYWxsb3dDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuYWxsb3dDb250YWN0c1N5bmM7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuZW5hYmxlQ29udGFjdHNTeW5jO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jVXJsID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzU3luY1VybDtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1VzZXIgPSBDb250YWN0U3RvcmUuY29udGFjdHNTeW5jVXNlcjtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1Bhc3MgPSBDb250YWN0U3RvcmUuY29udGFjdHNTeW5jUGFzcztcblxuXHRcdHRoaXMuc2F2ZVRyaWdnZXIgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKCgpID0+XG5cdFx0XHRcdFtcblx0XHRcdFx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzU3luYygpID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jVXJsKCksXG5cdFx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyKCksXG5cdFx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNQYXNzKClcblx0XHRcdFx0XS5qb2luKCd8Jylcblx0XHRcdClcblx0XHRcdC5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWU1MDBtcyB9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHQnQ29udGFjdHNBdXRvc2F2ZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZVRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQ29udGFjdHNTeW5jRGF0YShcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMoKSxcblx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNVcmwoKSxcblx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyKCksXG5cdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jUGFzcygpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzVXNlclNldHRpbmdzLCBDb250YWN0c1VzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENhcGEsIFN0b3JhZ2VSZXN1bHRUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJvb3QgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBjYXBhIH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgSWRlbnRpdHlTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9JZGVudGl0eSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwLCByb3V0ZU9mZiwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgQWNjb3VudHNVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93QWRkaXRpb25hbEFjY291bnQgPSBjYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKTtcblx0XHR0aGlzLmFsbG93SWRlbnRpdGllcyA9IGNhcGEoQ2FwYS5JZGVudGl0aWVzKTtcblxuXHRcdHRoaXMuYWNjb3VudHMgPSBBY2NvdW50U3RvcmUuYWNjb3VudHM7XG5cdFx0dGhpcy5pZGVudGl0aWVzID0gSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzO1xuXG5cdFx0dGhpcy5hY2NvdW50Rm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXHRcdHRoaXMuaWRlbnRpdHlGb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cdH1cblxuXHRzY3JvbGxhYmxlT3B0aW9ucyh3cmFwcGVyKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG5cdFx0XHRjb250YWlubWVudDogd3JhcHBlciB8fCAncGFyZW50Jyxcblx0XHRcdGF4aXM6ICd5J1xuXHRcdH07XG5cdH1cblxuXHRhZGROZXdBY2NvdW50KCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FjY291bnQnKSk7XG5cdH1cblxuXHRlZGl0QWNjb3VudChhY2NvdW50KSB7XG5cdFx0aWYgKGFjY291bnQgJiYgYWNjb3VudC5jYW5CZUVkaXQoKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQWNjb3VudCcpLCBbYWNjb3VudF0pO1xuXHRcdH1cblx0fVxuXG5cdGFkZE5ld0lkZW50aXR5KCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0lkZW50aXR5JykpO1xuXHR9XG5cblx0ZWRpdElkZW50aXR5KGlkZW50aXR5KSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvSWRlbnRpdHknKSwgW2lkZW50aXR5XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBY2NvdW50TW9kZWx9IGFjY291bnRUb1JlbW92ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGRlbGV0ZUFjY291bnQoYWNjb3VudFRvUmVtb3ZlKSB7XG5cdFx0aWYgKGFjY291bnRUb1JlbW92ZSAmJiBhY2NvdW50VG9SZW1vdmUuZGVsZXRlQWNjZXNzKCkpIHtcblx0XHRcdHRoaXMuYWNjb3VudEZvckRlbGV0aW9uKG51bGwpO1xuXHRcdFx0aWYgKGFjY291bnRUb1JlbW92ZSkge1xuXHRcdFx0XHR0aGlzLmFjY291bnRzLnJlbW92ZSgoYWNjb3VudCkgPT4gYWNjb3VudFRvUmVtb3ZlID09PSBhY2NvdW50KTtcblxuXHRcdFx0XHRSZW1vdGUuYWNjb3VudERlbGV0ZSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0XHRcdFx0c2V0SGFzaChyb290KCksIHRydWUpO1xuXHRcdFx0XHRcdFx0cm91dGVPZmYoKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWZlcigoKSA9PiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5hY2NvdW50c0FuZElkZW50aXRpZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIGFjY291bnRUb1JlbW92ZS5lbWFpbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SWRlbnRpdHlNb2RlbH0gaWRlbnRpdHlUb1JlbW92ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGRlbGV0ZUlkZW50aXR5KGlkZW50aXR5VG9SZW1vdmUpIHtcblx0XHRpZiAoaWRlbnRpdHlUb1JlbW92ZSAmJiBpZGVudGl0eVRvUmVtb3ZlLmRlbGV0ZUFjY2VzcygpKSB7XG5cdFx0XHR0aGlzLmlkZW50aXR5Rm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmIChpZGVudGl0eVRvUmVtb3ZlKSB7XG5cdFx0XHRcdElkZW50aXR5U3RvcmUuaWRlbnRpdGllcy5yZW1vdmUoKG9JZGVudGl0eSkgPT4gaWRlbnRpdHlUb1JlbW92ZSA9PT0gb0lkZW50aXR5KTtcblxuXHRcdFx0XHRSZW1vdGUuaWRlbnRpdHlEZWxldGUoKCkgPT4ge1xuXHRcdFx0XHRcdGdldEFwcCgpLmFjY291bnRzQW5kSWRlbnRpdGllcygpO1xuXHRcdFx0XHR9LCBpZGVudGl0eVRvUmVtb3ZlLmlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhY2NvdW50c0FuZElkZW50aXRpZXNBZnRlck1vdmUoKSB7XG5cdFx0UmVtb3RlLmFjY291bnRzQW5kSWRlbnRpdGllc1NvcnRPcmRlcihudWxsLCBBY2NvdW50U3RvcmUuYWNjb3VudHNFbWFpbHMucGVlaygpLCBJZGVudGl0eVN0b3JlLmlkZW50aXRpZXNJRFMucGVlaygpKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuYWNjb3VudHMtbGlzdCAuYWNjb3VudC1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBhY2NvdW50ID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGFjY291bnQpIHtcblx0XHRcdFx0XHRzZWxmLmVkaXRBY2NvdW50KGFjY291bnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuaWRlbnRpdGllcy1saXN0IC5pZGVudGl0eS1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBpZGVudGl0eSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0XHRcdHNlbGYuZWRpdElkZW50aXR5KGlkZW50aXR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWNjb3VudHNVc2VyU2V0dGluZ3MsIEFjY291bnRzVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgd2luZG93UmVzaXplQ2FsbGJhY2ssIGlzQXJyYXksIHRyaW0sIGRlbGVnYXRlUnVuT25EZXN0cm95IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRmlsdGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRmlsdGVyJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IEZpbHRlck1vZGVsIH0gZnJvbSAnTW9kZWwvRmlsdGVyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBGaWx0ZXJzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5tb2R1bGVzID0gRmlsdGVyU3RvcmUubW9kdWxlcztcblx0XHR0aGlzLmZpbHRlcnMgPSBGaWx0ZXJTdG9yZS5maWx0ZXJzO1xuXG5cdFx0dGhpcy5pbml0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlcnZlckVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zZXJ2ZXJFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmhhdmVDaGFuZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNhdmVFcnJvclRleHQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZmlsdGVycy5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXG5cdFx0dGhpcy5zZXJ2ZXJFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VydmVyRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdHRoaXMuZmlsdGVyUmF3ID0gRmlsdGVyU3RvcmUucmF3O1xuXHRcdHRoaXMuZmlsdGVyUmF3LmNhcGEgPSBGaWx0ZXJTdG9yZS5jYXBhO1xuXHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVyUmF3LmFsbG93ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmlsdGVyRm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXG5cdFx0dGhpcy5maWx0ZXJzLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJSYXcuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuaGF2ZUNoYW5nZXModHJ1ZSk7XG5cdFx0XHR0aGlzLmZpbHRlclJhdy5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmhhdmVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNhdmVFcnJvclRleHQoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJSYXcuYWN0aXZlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGF2ZUNoYW5nZXMoKSlcblx0c2F2ZUNoYW5nZXNDb21tYW5kKCkge1xuXHRcdGlmICghdGhpcy5maWx0ZXJzLnNhdmluZygpKSB7XG5cdFx0XHRpZiAodGhpcy5maWx0ZXJSYXcuYWN0aXZlKCkgJiYgJycgPT09IHRyaW0odGhpcy5maWx0ZXJSYXcoKSkpIHtcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IodHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5maWx0ZXJzLnNhdmluZyh0cnVlKTtcblx0XHRcdHRoaXMuc2F2ZUVycm9yVGV4dCgnJyk7XG5cblx0XHRcdFJlbW90ZS5maWx0ZXJzU2F2ZShcblx0XHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVycy5zYXZpbmcoZmFsc2UpO1xuXG5cdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlTGlzdCgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlRXJyb3JUZXh0KGRhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCB8fCBnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlRXJyb3JUZXh0KGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uQ2FudFNhdmVGaWx0ZXJzKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmZpbHRlcnMoKSxcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcoKSxcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuYWN0aXZlKClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRzY3JvbGxhYmxlT3B0aW9ucyh3cmFwcGVyKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG5cdFx0XHRjb250YWlubWVudDogd3JhcHBlciB8fCAncGFyZW50Jyxcblx0XHRcdGF4aXM6ICd5J1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGVMaXN0KCkge1xuXHRcdGlmICghdGhpcy5maWx0ZXJzLmxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5maWx0ZXJzLmxvYWRpbmcodHJ1ZSk7XG5cblx0XHRcdFJlbW90ZS5maWx0ZXJzR2V0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5maWx0ZXJzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLnNlcnZlckVycm9yKGZhbHNlKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgaXNBcnJheShkYXRhLlJlc3VsdC5GaWx0ZXJzKSkge1xuXHRcdFx0XHRcdHRoaXMuaW5pdGVkKHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuc2VydmVyRXJyb3IoZmFsc2UpO1xuXG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJzKFxuXHRcdFx0XHRcdFx0Xy5jb21wYWN0KFxuXHRcdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5GaWx0ZXJzLCAoYUl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmlsdGVyICYmIGZpbHRlci5wYXJzZShhSXRlbSkgPyBmaWx0ZXIgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLm1vZHVsZXMoZGF0YS5SZXN1bHQuTW9kdWxlcyA/IGRhdGEuUmVzdWx0Lk1vZHVsZXMgOiB7fSk7XG5cblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdyhkYXRhLlJlc3VsdC5SYXcgfHwgJycpO1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmNhcGEoaXNBcnJheShkYXRhLlJlc3VsdC5DYXBhKSA/IGRhdGEuUmVzdWx0LkNhcGEuam9pbignICcpIDogJycpO1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZSghIWRhdGEuUmVzdWx0LlJhd0lzQWN0aXZlKTtcblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdy5hbGxvdyghIWRhdGEuUmVzdWx0LlJhd0lzQWxsb3cpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVycyhbXSk7XG5cdFx0XHRcdFx0dGhpcy5tb2R1bGVzKHt9KTtcblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdygnJyk7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuY2FwYSh7fSk7XG5cblx0XHRcdFx0XHR0aGlzLnNlcnZlckVycm9yKHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuc2VydmVyRXJyb3JEZXNjKFxuXHRcdFx0XHRcdFx0ZGF0YSAmJiBkYXRhLkVycm9yQ29kZSA/IGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkgOiBnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkNhbnRHZXRGaWx0ZXJzKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKGZhbHNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGRlbGV0ZUZpbHRlcihmaWx0ZXIpIHtcblx0XHR0aGlzLmZpbHRlcnMucmVtb3ZlKGZpbHRlcik7XG5cdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koZmlsdGVyKTtcblx0fVxuXG5cdGFkZEZpbHRlcigpIHtcblx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTW9kZWwoKTtcblxuXHRcdGZpbHRlci5nZW5lcmF0ZUlEKCk7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRmlsdGVyJyksIFtcblx0XHRcdGZpbHRlcixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyKTtcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuYWN0aXZlKGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdF0pO1xuXHR9XG5cblx0ZWRpdEZpbHRlcihmaWx0ZXIpIHtcblx0XHRjb25zdCBjbG9uZWRGaWx0ZXIgPSBmaWx0ZXIuY2xvbmVTZWxmKCk7XG5cblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9GaWx0ZXInKSwgW1xuXHRcdFx0Y2xvbmVkRmlsdGVyLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzKCksXG5cdFx0XHRcdFx0aW5kZXggPSBmaWx0ZXJzLmluZGV4T2YoZmlsdGVyKTtcblxuXHRcdFx0XHRpZiAoLTEgPCBpbmRleCAmJiBmaWx0ZXJzW2luZGV4XSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGZpbHRlcnNbaW5kZXhdKTtcblx0XHRcdFx0XHRmaWx0ZXJzW2luZGV4XSA9IGNsb25lZEZpbHRlcjtcblxuXHRcdFx0XHRcdHRoaXMuZmlsdGVycyhmaWx0ZXJzKTtcblx0XHRcdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdF0pO1xuXHR9XG5cblx0b25CdWlsZChvRG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRvRG9tLm9uKCdjbGljaycsICcuZmlsdGVyLWl0ZW0gLmUtYWN0aW9uJywgZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0Y29uc3QgZmlsdGVyID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0c2VsZi5lZGl0RmlsdGVyKGZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy51cGRhdGVMaXN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRmlsdGVyc1VzZXJTZXR0aW5ncywgRmlsdGVyc1VzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHBJbnQsIHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IENhcGEsIFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgY2FwYSB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBTZXR0aW5zU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBTZWN1cml0eVVzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2FwYUF1dG9Mb2dvdXQgPSBjYXBhKENhcGEuQXV0b0xvZ291dCk7XG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yID0gY2FwYShDYXBhLlR3b0ZhY3Rvcik7XG5cblx0XHR0aGlzLmF1dG9Mb2dvdXQgPSBTZXR0aW5zU3RvcmUuYXV0b0xvZ291dDtcblx0XHR0aGlzLmF1dG9Mb2dvdXQudHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuYXV0b0xvZ291dE9wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyAnaWQnOiAwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9ORVZFUl9PUFRJT05fTkFNRScpIH0sXG5cdFx0XHRcdHsgJ2lkJzogNSwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fTUlOVVRFU19PUFRJT05fTkFNRScsIHsgJ01JTlVURVMnOiA1IH0pIH0sXG5cdFx0XHRcdHsgJ2lkJzogMTAsICduYW1lJzogaTE4bignU0VUVElOR1NfU0VDVVJJVFkvQVVUT0xPR0lOX01JTlVURVNfT1BUSU9OX05BTUUnLCB7ICdNSU5VVEVTJzogMTAgfSkgfSxcblx0XHRcdFx0eyAnaWQnOiAzMCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fTUlOVVRFU19PUFRJT05fTkFNRScsIHsgJ01JTlVURVMnOiAzMCB9KSB9LFxuXHRcdFx0XHR7ICdpZCc6IDYwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9NSU5VVEVTX09QVElPTl9OQU1FJywgeyAnTUlOVVRFUyc6IDYwIH0pIH0sXG5cdFx0XHRcdHsgJ2lkJzogNjAgKiAyLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9IT1VSU19PUFRJT05fTkFNRScsIHsgJ0hPVVJTJzogMiB9KSB9LFxuXHRcdFx0XHR7ICdpZCc6IDYwICogNSwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fSE9VUlNfT1BUSU9OX05BTUUnLCB7ICdIT1VSUyc6IDUgfSkgfSxcblx0XHRcdFx0eyAnaWQnOiA2MCAqIDEwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9IT1VSU19PUFRJT05fTkFNRScsIHsgJ0hPVVJTJzogMTAgfSkgfVxuXHRcdFx0XTtcblx0XHR9KTtcblx0fVxuXG5cdGNvbmZpZ3VyZVR3b0ZhY3RvcigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uJykpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5jYXBhQXV0b0xvZ291dCkge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGYwID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5hdXRvTG9nb3V0LnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHRcdHRoaXMuYXV0b0xvZ291dC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignQXV0b0xvZ291dCcsIHBJbnQsIGYwKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgU2VjdXJpdHlVc2VyU2V0dGluZ3MsIFNlY3VyaXR5VXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIFNvY2lhbFVzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmVuYWJsZWQ7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuYXV0aDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGhHbWFpbCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGhHbWFpbDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZURyaXZlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuZHJpdmU7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEucHJldmlldztcblxuXHRcdHRoaXMuZ29vZ2xlQWN0aW9ucyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nO1xuXHRcdHRoaXMuZ29vZ2xlTG9nZ2luZWQgPSBTb2NpYWxTdG9yZS5nb29nbGUubG9nZ2luZWQ7XG5cdFx0dGhpcy5nb29nbGVVc2VyTmFtZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS51c2VyTmFtZTtcblxuXHRcdHRoaXMuZmFjZWJvb2tFbmFibGUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5lbmFibGVkO1xuXG5cdFx0dGhpcy5mYWNlYm9va0FjdGlvbnMgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5sb2FkaW5nO1xuXHRcdHRoaXMuZmFjZWJvb2tMb2dnaW5lZCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmxvZ2dpbmVkO1xuXHRcdHRoaXMuZmFjZWJvb2tVc2VyTmFtZSA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLnVzZXJOYW1lO1xuXG5cdFx0dGhpcy50d2l0dGVyRW5hYmxlID0gU29jaWFsU3RvcmUudHdpdHRlci5lbmFibGVkO1xuXG5cdFx0dGhpcy50d2l0dGVyQWN0aW9ucyA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZztcblx0XHR0aGlzLnR3aXR0ZXJMb2dnaW5lZCA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9nZ2luZWQ7XG5cdFx0dGhpcy50d2l0dGVyVXNlck5hbWUgPSBTb2NpYWxTdG9yZS50d2l0dGVyLnVzZXJOYW1lO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLmdvb2dsZUxvZ2dpbmVkKCkgJiYgIXNlbGYuZ29vZ2xlQWN0aW9ucygpKVxuXHRjb25uZWN0R29vZ2xlQ29tbWFuZCgpIHtcblx0XHRpZiAoIXRoaXMuZ29vZ2xlTG9nZ2luZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkuZ29vZ2xlQ29ubmVjdCgpO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKClcblx0ZGlzY29ubmVjdEdvb2dsZUNvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZ29vZ2xlRGlzY29ubmVjdCgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLmZhY2Vib29rTG9nZ2luZWQoKSAmJiAhc2VsZi5mYWNlYm9va0FjdGlvbnMoKSlcblx0Y29ubmVjdEZhY2Vib29rQ29tbWFuZCgpIHtcblx0XHRpZiAoIXRoaXMuZmFjZWJvb2tMb2dnaW5lZCgpKSB7XG5cdFx0XHRnZXRBcHAoKS5mYWNlYm9va0Nvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGRpc2Nvbm5lY3RGYWNlYm9va0NvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZmFjZWJvb2tEaXNjb25uZWN0KCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYudHdpdHRlckxvZ2dpbmVkKCkgJiYgIXNlbGYudHdpdHRlckFjdGlvbnMoKSlcblx0Y29ubmVjdFR3aXR0ZXJDb21tYW5kKCkge1xuXHRcdGlmICghdGhpcy50d2l0dGVyTG9nZ2luZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkudHdpdHRlckNvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGRpc2Nvbm5lY3RUd2l0dGVyQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS50d2l0dGVyRGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNvY2lhbFVzZXJTZXR0aW5ncywgU29jaWFsVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UsIGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNoYW5nZVByb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmRNaXNtYXRjaCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRVcGRhdGVTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5uZXdQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmV3UGFzc3dvcmQyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubmV3UGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2goZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5uZXdQYXNzd29yZDIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2goZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoXG5cdFx0KHNlbGYpID0+XG5cdFx0XHQhc2VsZi5jaGFuZ2VQcm9jZXNzKCkgJiYgJycgIT09IHNlbGYuY3VycmVudFBhc3N3b3JkKCkgJiYgJycgIT09IHNlbGYubmV3UGFzc3dvcmQoKSAmJiAnJyAhPT0gc2VsZi5uZXdQYXNzd29yZDIoKVxuXHQpXG5cdHNhdmVOZXdQYXNzd29yZENvbW1hbmQoKSB7XG5cdFx0aWYgKHRoaXMubmV3UGFzc3dvcmQoKSAhPT0gdGhpcy5uZXdQYXNzd29yZDIoKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKHRydWUpO1xuXHRcdFx0dGhpcy5lcnJvckRlc2NyaXB0aW9uKGkxOG4oJ1NFVFRJTkdTX0NIQU5HRV9QQVNTV09SRC9FUlJPUl9QQVNTV09SRF9NSVNNQVRDSCcpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jaGFuZ2VQcm9jZXNzKHRydWUpO1xuXG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuZXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbignJyk7XG5cblx0XHRcdFJlbW90ZS5jaGFuZ2VQYXNzd29yZCh0aGlzLm9uQ2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgdGhpcy5jdXJyZW50UGFzc3dvcmQoKSwgdGhpcy5uZXdQYXNzd29yZCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5jaGFuZ2VQcm9jZXNzKGZhbHNlKTtcblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5uZXdQYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5uZXdQYXNzd29yZDIoJycpO1xuXHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbignJyk7XG5cdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvcihmYWxzZSk7XG5cdH1cblxuXHRvbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5jaGFuZ2VQcm9jZXNzKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2goZmFsc2UpO1xuXHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbignJyk7XG5cdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuZXJyb3IoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLm5ld1Bhc3N3b3JkKCcnKTtcblx0XHRcdHRoaXMubmV3UGFzc3dvcmQyKCcnKTtcblxuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZVN1Y2Nlc3ModHJ1ZSk7XG5cdFx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvcihmYWxzZSk7XG5cblx0XHRcdGdldEFwcCgpLnNldENsaWVudFNpZGVUb2tlbihkYXRhLlJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChkYXRhICYmIE5vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLmVycm9yRGVzY3JpcHRpb24oZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKGRhdGEsIE5vdGlmaWNhdGlvbi5Db3VsZE5vdFNhdmVOZXdQYXNzd29yZCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncywgQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFRlbXBsYXRlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvVGVtcGxhdGUnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgVGVtcGxhdGVzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50ZW1wbGF0ZXMgPSBUZW1wbGF0ZVN0b3JlLnRlbXBsYXRlcztcblxuXHRcdHRoaXMucHJvY2Vzc1RleHQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0VGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXMubG9hZGluZygpID8gaTE4bignU0VUVElOR1NfVEVNUExFVFMvTE9BRElOR19QUk9DRVNTJykgOiAnJ1xuXHRcdCk7XG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKCcnID09PSB0aGlzLnByb2Nlc3NUZXh0KCkgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJykpO1xuXG5cdFx0dGhpcy50ZW1wbGF0ZUZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblx0fVxuXG5cdHNjcm9sbGFibGVPcHRpb25zKHNXcmFwcGVyKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG5cdFx0XHRjb250YWlubWVudDogc1dyYXBwZXIgfHwgJ3BhcmVudCcsXG5cdFx0XHRheGlzOiAneSdcblx0XHR9O1xuXHR9XG5cblx0YWRkTmV3VGVtcGxhdGUoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvVGVtcGxhdGUnKSk7XG5cdH1cblxuXHRlZGl0VGVtcGxhdGUob1RlbXBsYXRlSXRlbSkge1xuXHRcdGlmIChvVGVtcGxhdGVJdGVtKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9UZW1wbGF0ZScpLCBbb1RlbXBsYXRlSXRlbV0pO1xuXHRcdH1cblx0fVxuXG5cdGRlbGV0ZVRlbXBsYXRlKHRlbXBsYXRlVG9SZW1vdmUpIHtcblx0XHRpZiAodGVtcGxhdGVUb1JlbW92ZSAmJiB0ZW1wbGF0ZVRvUmVtb3ZlLmRlbGV0ZUFjY2VzcygpKSB7XG5cdFx0XHR0aGlzLnRlbXBsYXRlRm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmICh0ZW1wbGF0ZVRvUmVtb3ZlKSB7XG5cdFx0XHRcdHRoaXMudGVtcGxhdGVzLnJlbW92ZSgodGVtcGxhdGUpID0+IHRlbXBsYXRlVG9SZW1vdmUgPT09IHRlbXBsYXRlKTtcblxuXHRcdFx0XHRSZW1vdGUudGVtcGxhdGVEZWxldGUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVsb2FkVGVtcGxhdGVzKCk7XG5cdFx0XHRcdH0sIHRlbXBsYXRlVG9SZW1vdmUuaWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlbG9hZFRlbXBsYXRlcygpIHtcblx0XHRnZXRBcHAoKS50ZW1wbGF0ZXMoKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbS5vbignY2xpY2snLCAnLnRlbXBsYXRlcy1saXN0IC50ZW1wbGF0ZS1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdGNvbnN0IHRlbXBsYXRlID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmICh0ZW1wbGF0ZSkge1xuXHRcdFx0XHRzZWxmLmVkaXRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlbG9hZFRlbXBsYXRlcygpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFRlbXBsYXRlc1VzZXJTZXR0aW5ncywgVGVtcGxhdGVzVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENsaWVudFNpZGVLZXlOYW1lLCBOb3RpZmljYXRpb24sIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltLCBub29wIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcmVtb3ZlRm9sZGVyRnJvbUNhY2hlTGlzdCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IGFwcFNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBMb2NhbCBmcm9tICdTdG9yYWdlL0NsaWVudCc7XG5cbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuXG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIEZvbGRlcnNVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRpc3BsYXlTcGVjU2V0dGluZyA9IEZvbGRlclN0b3JlLmRpc3BsYXlTcGVjU2V0dGluZztcblx0XHR0aGlzLmZvbGRlckxpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJMaXN0O1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0SGVscCA9IGtvLm9ic2VydmFibGUoJycpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXG5cdFx0dGhpcy5sb2FkaW5nID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbG9hZGluZyA9IEZvbGRlclN0b3JlLmZvbGRlcnNMb2FkaW5nKCksXG5cdFx0XHRcdGNyZWF0aW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc0NyZWF0aW5nKCksXG5cdFx0XHRcdGRlbGV0aW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc0RlbGV0aW5nKCksXG5cdFx0XHRcdHJlbmFtaW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc1JlbmFtaW5nKCk7XG5cblx0XHRcdHJldHVybiBsb2FkaW5nIHx8IGNyZWF0aW5nIHx8IGRlbGV0aW5nIHx8IHJlbmFtaW5nO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5mb2xkZXJGb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cblx0XHR0aGlzLmZvbGRlckZvckVkaXQgPSBrby5vYnNlcnZhYmxlKG51bGwpLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbdGhpcywgJ2VkaXRlZCddIH0pO1xuXG5cdFx0dGhpcy51c2VJbWFwU3Vic2NyaWJlID0gISFhcHBTZXR0aW5nc0dldCgndXNlSW1hcFN1YnNjcmliZScpO1xuXHR9XG5cblx0Zm9sZGVyRWRpdE9uRW50ZXIoZm9sZGVyKSB7XG5cdFx0Y29uc3QgbmFtZVRvRWRpdCA9IGZvbGRlciA/IHRyaW0oZm9sZGVyLm5hbWVGb3JFZGl0KCkpIDogJyc7XG5cblx0XHRpZiAoJycgIT09IG5hbWVUb0VkaXQgJiYgZm9sZGVyLm5hbWUoKSAhPT0gbmFtZVRvRWRpdCkge1xuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkZvbGRlcnNMYXNoSGFzaCwgJycpO1xuXG5cdFx0XHRnZXRBcHAoKS5mb2xkZXJzUHJvbWlzZXNBY3Rpb25IZWxwZXIoXG5cdFx0XHRcdFByb21pc2VzLmZvbGRlclJlbmFtZShmb2xkZXIuZnVsbE5hbWVSYXcsIG5hbWVUb0VkaXQsIEZvbGRlclN0b3JlLmZvbGRlcnNSZW5hbWluZyksXG5cdFx0XHRcdE5vdGlmaWNhdGlvbi5DYW50UmVuYW1lRm9sZGVyXG5cdFx0XHQpO1xuXG5cdFx0XHRyZW1vdmVGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlci5mdWxsTmFtZVJhdyk7XG5cblx0XHRcdGZvbGRlci5uYW1lKG5hbWVUb0VkaXQpO1xuXHRcdH1cblxuXHRcdGZvbGRlci5lZGl0ZWQoZmFsc2UpO1xuXHR9XG5cblx0Zm9sZGVyRWRpdE9uRXNjKGZvbGRlcikge1xuXHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdGZvbGRlci5lZGl0ZWQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0LmVycm9yKCcnKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdG9Eb21cblx0XHRcdC5vbignbW91c2VvdmVyJywgJy5kZWxldGUtZm9sZGVyLXBhcmVudCcsICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2xkZXJMaXN0SGVscChpMThuKCdTRVRUSU5HU19GT0xERVJTL0hFTFBfREVMRVRFX0ZPTERFUicpKTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ21vdXNlb3ZlcicsICcuc3Vic2NyaWJlLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoaTE4bignU0VUVElOR1NfRk9MREVSUy9IRUxQX1NIT1dfSElERV9GT0xERVInKSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdtb3VzZW92ZXInLCAnLmNoZWNrLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoaTE4bignU0VUVElOR1NfRk9MREVSUy9IRUxQX0NIRUNLX0ZPUl9ORVdfTUVTU0FHRVMnKSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdtb3VzZW91dCcsICcuc3Vic2NyaWJlLWZvbGRlci1wYXJlbnQsIC5jaGVjay1mb2xkZXItcGFyZW50LCAuZGVsZXRlLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoJycpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRjcmVhdGVGb2xkZXIoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyQ3JlYXRlJykpO1xuXHR9XG5cblx0c3lzdGVtRm9sZGVyKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlclN5c3RlbScpKTtcblx0fVxuXG5cdGRlbGV0ZUZvbGRlcihmb2xkZXJUb1JlbW92ZSkge1xuXHRcdGlmIChcblx0XHRcdGZvbGRlclRvUmVtb3ZlICYmXG5cdFx0XHRmb2xkZXJUb1JlbW92ZS5jYW5CZURlbGV0ZWQoKSAmJlxuXHRcdFx0Zm9sZGVyVG9SZW1vdmUuZGVsZXRlQWNjZXNzKCkgJiZcblx0XHRcdDAgPT09IGZvbGRlclRvUmVtb3ZlLnByaXZhdGVNZXNzYWdlQ291bnRBbGwoKVxuXHRcdCkge1xuXHRcdFx0dGhpcy5mb2xkZXJGb3JEZWxldGlvbihudWxsKTtcblxuXHRcdFx0aWYgKGZvbGRlclRvUmVtb3ZlKSB7XG5cdFx0XHRcdGNvbnN0IGZSZW1vdmVGb2xkZXIgPSBmdW5jdGlvbihmb2xkZXIpIHtcblx0XHRcdFx0XHRpZiAoZm9sZGVyVG9SZW1vdmUgPT09IGZvbGRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvbGRlci5zdWJGb2xkZXJzLnJlbW92ZShmUmVtb3ZlRm9sZGVyKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkZvbGRlcnNMYXNoSGFzaCwgJycpO1xuXG5cdFx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QucmVtb3ZlKGZSZW1vdmVGb2xkZXIpO1xuXG5cdFx0XHRcdGdldEFwcCgpLmZvbGRlcnNQcm9taXNlc0FjdGlvbkhlbHBlcihcblx0XHRcdFx0XHRQcm9taXNlcy5mb2xkZXJEZWxldGUoZm9sZGVyVG9SZW1vdmUuZnVsbE5hbWVSYXcsIEZvbGRlclN0b3JlLmZvbGRlcnNEZWxldGluZyksXG5cdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkNhbnREZWxldGVGb2xkZXJcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZW1vdmVGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlclRvUmVtb3ZlLmZ1bGxOYW1lUmF3KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKDAgPCBmb2xkZXJUb1JlbW92ZS5wcml2YXRlTWVzc2FnZUNvdW50QWxsKCkpIHtcblx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QuZXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIpKTtcblx0XHR9XG5cdH1cblxuXHRzdWJzY3JpYmVGb2xkZXIoZm9sZGVyKSB7XG5cdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkZvbGRlcnNMYXNoSGFzaCwgJycpO1xuXHRcdFJlbW90ZS5mb2xkZXJTZXRTdWJzY3JpYmUobm9vcCwgZm9sZGVyLmZ1bGxOYW1lUmF3LCB0cnVlKTtcblx0XHRmb2xkZXIuc3ViU2NyaWJlZCh0cnVlKTtcblx0fVxuXG5cdHVuU3Vic2NyaWJlRm9sZGVyKGZvbGRlcikge1xuXHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsICcnKTtcblx0XHRSZW1vdGUuZm9sZGVyU2V0U3Vic2NyaWJlKG5vb3AsIGZvbGRlci5mdWxsTmFtZVJhdywgZmFsc2UpO1xuXHRcdGZvbGRlci5zdWJTY3JpYmVkKGZhbHNlKTtcblx0fVxuXG5cdGNoZWNrYWJsZVRydWVGb2xkZXIoZm9sZGVyKSB7XG5cdFx0UmVtb3RlLmZvbGRlclNldENoZWNrYWJsZShub29wLCBmb2xkZXIuZnVsbE5hbWVSYXcsIHRydWUpO1xuXHRcdGZvbGRlci5jaGVja2FibGUodHJ1ZSk7XG5cdH1cblxuXHRjaGVja2FibGVGYWxzZUZvbGRlcihmb2xkZXIpIHtcblx0XHRSZW1vdGUuZm9sZGVyU2V0Q2hlY2thYmxlKG5vb3AsIGZvbGRlci5mdWxsTmFtZVJhdywgZmFsc2UpO1xuXHRcdGZvbGRlci5jaGVja2FibGUoZmFsc2UpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlcnNVc2VyU2V0dGluZ3MsIEZvbGRlcnNVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCBKdWEgZnJvbSAnSnVhJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgVXBsb2FkRXJyb3JDb2RlLCBDYXBhLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgY2hhbmdlVGhlbWUsIGNvbnZlcnRUaGVtZU5hbWUgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgdXNlckJhY2tncm91bmQsIHRoZW1lUHJldmlld0xpbmssIHVwbG9hZEJhY2tncm91bmQgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgY2FwYSB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgVGhlbWVTdG9yZSBmcm9tICdTdG9yZXMvVGhlbWUnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBUaGVtZXNVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lID0gVGhlbWVTdG9yZS50aGVtZTtcblx0XHR0aGlzLnRoZW1lcyA9IFRoZW1lU3RvcmUudGhlbWVzO1xuXHRcdHRoaXMudGhlbWVzT2JqZWN0cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmJhY2tncm91bmQgPSB7fTtcblx0XHR0aGlzLmJhY2tncm91bmQubmFtZSA9IFRoZW1lU3RvcmUudGhlbWVCYWNrZ3JvdW5kTmFtZTtcblx0XHR0aGlzLmJhY2tncm91bmQuaGFzaCA9IFRoZW1lU3RvcmUudGhlbWVCYWNrZ3JvdW5kSGFzaDtcblx0XHR0aGlzLmJhY2tncm91bmQudXBsb2FkZXJCdXR0b24gPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuYmFja2dyb3VuZC5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoY2FwYShDYXBhLlVzZXJCYWNrZ3JvdW5kKSk7XG5cblx0XHR0aGlzLnRoZW1lVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUxMDBtcyB9KTtcblxuXHRcdHRoaXMuaVRpbWVyID0gMDtcblx0XHR0aGlzLm9UaGVtZUFqYXhSZXF1ZXN0ID0gbnVsbDtcblxuXHRcdHRoaXMudGhlbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0Xy5lYWNoKHRoaXMudGhlbWVzT2JqZWN0cygpLCAodGhlbWUpID0+IHtcblx0XHRcdFx0dGhlbWUuc2VsZWN0ZWQodmFsdWUgPT09IHRoZW1lLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNoYW5nZVRoZW1lKHZhbHVlLCB0aGlzLnRoZW1lVHJpZ2dlcik7XG5cblx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHQnVGhlbWUnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmJhY2tncm91bmQuaGFzaC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCAkYmcgPSAkKCcjcmwtYmcnKTtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0aWYgKCRiZy5kYXRhKCdiYWNrc3RyZXRjaCcpKSB7XG5cdFx0XHRcdFx0JGJnLmJhY2tzdHJldGNoKCdkZXN0cm95JykuYXR0cignc3R5bGUnLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCRiZ1xuXHRcdFx0XHRcdC5hdHRyKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7Jylcblx0XHRcdFx0XHQuYmFja3N0cmV0Y2godXNlckJhY2tncm91bmQodmFsdWUpLCB7XG5cdFx0XHRcdFx0XHRmYWRlOiBNYWdpY3MuVGltZTFzLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRYOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRZOiB0cnVlXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignc3R5bGUnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Y29uc3QgY3VycmVudFRoZW1lID0gdGhpcy50aGVtZSgpO1xuXG5cdFx0dGhpcy50aGVtZXNPYmplY3RzKFxuXHRcdFx0Xy5tYXAodGhpcy50aGVtZXMoKSwgKHRoZW1lKSA9PiAoe1xuXHRcdFx0XHRuYW1lOiB0aGVtZSxcblx0XHRcdFx0bmFtZURpc3BsYXk6IGNvbnZlcnRUaGVtZU5hbWUodGhlbWUpLFxuXHRcdFx0XHRzZWxlY3RlZDoga28ub2JzZXJ2YWJsZSh0aGVtZSA9PT0gY3VycmVudFRoZW1lKSxcblx0XHRcdFx0dGhlbWVQcmV2aWV3U3JjOiB0aGVtZVByZXZpZXdMaW5rKHRoZW1lKVxuXHRcdFx0fSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuaW5pdFVwbG9hZGVyKCk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLmVycm9yKCcnKTtcblx0fVxuXG5cdGNsZWFyQmFja2dyb3VuZCgpIHtcblx0XHRpZiAodGhpcy5jYXBhVXNlckJhY2tncm91bmQoKSkge1xuXHRcdFx0UmVtb3RlLmNsZWFyVXNlckJhY2tncm91bmQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJhY2tncm91bmQubmFtZSgnJyk7XG5cdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5oYXNoKCcnKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGluaXRVcGxvYWRlcigpIHtcblx0XHRpZiAodGhpcy5iYWNrZ3JvdW5kLnVwbG9hZGVyQnV0dG9uKCkgJiYgdGhpcy5jYXBhVXNlckJhY2tncm91bmQoKSkge1xuXHRcdFx0Y29uc3Qgb0p1YSA9IG5ldyBKdWEoe1xuXHRcdFx0XHQnYWN0aW9uJzogdXBsb2FkQmFja2dyb3VuZCgpLFxuXHRcdFx0XHQnbmFtZSc6ICd1cGxvYWRlcicsXG5cdFx0XHRcdCdxdWV1ZVNpemUnOiAxLFxuXHRcdFx0XHQnbXVsdGlwbGVTaXplTGltaXQnOiAxLFxuXHRcdFx0XHQnZGlzYWJsZURyYWdBbmREcm9wJzogdHJ1ZSxcblx0XHRcdFx0J2Rpc2FibGVNdWx0aXBsZSc6IHRydWUsXG5cdFx0XHRcdCdjbGlja0VsZW1lbnQnOiB0aGlzLmJhY2tncm91bmQudXBsb2FkZXJCdXR0b24oKVxuXHRcdFx0fSk7XG5cblx0XHRcdG9KdWFcblx0XHRcdFx0Lm9uKCdvblN0YXJ0JywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5sb2FkaW5nKHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5lcnJvcignJyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignb25Db21wbGV0ZScsIChpZCwgcmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmxvYWRpbmcoZmFsc2UpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiBpZCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0Lk5hbWUgJiYgZGF0YS5SZXN1bHQuSGFzaCkge1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLm5hbWUoZGF0YS5SZXN1bHQuTmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmJhY2tncm91bmQuaGFzaChkYXRhLlJlc3VsdC5IYXNoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLm5hbWUoJycpO1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmhhc2goJycpO1xuXG5cdFx0XHRcdFx0XHRsZXQgZXJyb3JNc2cgPSAnJztcblx0XHRcdFx0XHRcdGlmIChkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZUlzVG9vQmlnOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JNc2cgPSBpMThuKCdTRVRUSU5HU19USEVNRVMvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlVHlwZTpcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yTXNnID0gaTE4bignU0VUVElOR1NfVEhFTUVTL0VSUk9SX0ZJTEVfVFlQRV9FUlJPUicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghZXJyb3JNc2cgJiYgZGF0YS5FcnJvck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JNc2cgPSBkYXRhLkVycm9yTWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmVycm9yKGVycm9yTXNnIHx8IGkxOG4oJ1NFVFRJTkdTX1RIRU1FUy9FUlJPUl9VTktOT1dOJykpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgVGhlbWVzVXNlclNldHRpbmdzLCBUaGVtZXNVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1bk9uRGVzdHJveSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYklzSHR0cHMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBPcGVuUGdwVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5vcGVucGdwa2V5cyA9IFBncFN0b3JlLm9wZW5wZ3BrZXlzO1xuXHRcdHRoaXMub3BlbnBncGtleXNQdWJsaWMgPSBQZ3BTdG9yZS5vcGVucGdwa2V5c1B1YmxpYztcblx0XHR0aGlzLm9wZW5wZ3BrZXlzUHJpdmF0ZSA9IFBncFN0b3JlLm9wZW5wZ3BrZXlzUHJpdmF0ZTtcblxuXHRcdHRoaXMub3BlblBncEtleUZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMuYWxsb3dEcmFmdEF1dG9zYXZlID0gU2V0dGluZ3NTdG9yZS5hbGxvd0RyYWZ0QXV0b3NhdmU7XG5cblx0XHR0aGlzLmlzSHR0cHMgPSBiSXNIdHRwcztcblx0fVxuXG5cdGFkZE9wZW5QZ3BLZXkoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQWRkT3BlblBncEtleScpKTtcblx0fVxuXG5cdGdlbmVyYXRlT3BlblBncEtleSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9OZXdPcGVuUGdwS2V5JykpO1xuXHR9XG5cblx0dmlld09wZW5QZ3BLZXkob3BlblBncEtleSkge1xuXHRcdGlmIChvcGVuUGdwS2V5KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9WaWV3T3BlblBncEtleScpLCBbb3BlblBncEtleV0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09wZW5QZ3BLZXlNb2RlbH0gb3BlblBncEtleVRvUmVtb3ZlXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0ZGVsZXRlT3BlblBncEtleShvcGVuUGdwS2V5VG9SZW1vdmUpIHtcblx0XHRpZiAob3BlblBncEtleVRvUmVtb3ZlICYmIG9wZW5QZ3BLZXlUb1JlbW92ZS5kZWxldGVBY2Nlc3MoKSkge1xuXHRcdFx0dGhpcy5vcGVuUGdwS2V5Rm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmIChvcGVuUGdwS2V5VG9SZW1vdmUgJiYgUGdwU3RvcmUub3BlbnBncEtleXJpbmcpIHtcblx0XHRcdFx0Y29uc3QgZmluZGVkSXRlbSA9IF8uZmluZChQZ3BTdG9yZS5vcGVucGdwa2V5cygpLCAoa2V5KSA9PiBvcGVuUGdwS2V5VG9SZW1vdmUgPT09IGtleSk7XG5cdFx0XHRcdGlmIChmaW5kZWRJdGVtKSB7XG5cdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncGtleXMucmVtb3ZlKGZpbmRlZEl0ZW0pO1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGZpbmRlZEl0ZW0pO1xuXG5cdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncEtleXJpbmdbZmluZGVkSXRlbS5pc1ByaXZhdGUgPyAncHJpdmF0ZUtleXMnIDogJ3B1YmxpY0tleXMnXS5yZW1vdmVGb3JJZChmaW5kZWRJdGVtLmd1aWQpO1xuXG5cdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncEtleXJpbmcuc3RvcmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZE9wZW5QZ3BLZXlzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMuYWxsb3dEcmFmdEF1dG9zYXZlLnN1YnNjcmliZShSZW1vdGUuc2F2ZVNldHRpbmdzSGVscGVyKCdBbGxvd0RyYWZ0QXV0b3NhdmUnLCBib29sVG9BamF4KSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBPcGVuUGdwVXNlclNldHRpbmdzLCBPcGVuUGdwVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHZpZXcsIFZpZXdUeXBlIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL0Fic3RyYWN0U3lzdGVtRHJvcERvd24nO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L1VzZXIvU2V0dGluZ3MvU3lzdGVtRHJvcERvd24nLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ1N5c3RlbURyb3BEb3duJ1xufSlcbmNsYXNzIFN5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyB7fVxuXG5leHBvcnQgeyBTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXcsIFN5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgbGVmdFBhbmVsRGlzYWJsZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBzZXR0aW5ncywgaW5ib3ggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgZ2V0Rm9sZGVySW5ib3hOYW1lIH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IHZpZXcsIFZpZXdUeXBlLCBzZXRIYXNoLCBzZXR0aW5nc01lbnVLZXlzSGFuZGxlciB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL1NldHRpbmdzL01lbnUnLFxuXHR0eXBlOiBWaWV3VHlwZS5MZWZ0LFxuXHR0ZW1wbGF0ZUlEOiAnU2V0dGluZ3NNZW51J1xufSlcbmNsYXNzIE1lbnVTZXR0aW5nc1VzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gc2NyZWVuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihzY3JlZW4pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5sZWZ0UGFuZWxEaXNhYmxlZCA9IGxlZnRQYW5lbERpc2FibGVkO1xuXG5cdFx0dGhpcy5tb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLm1lbnUgPSBzY3JlZW4ubWVudTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgJy5iLXNldHRpbmdzLW1lbnUgLmUtaXRlbS5zZWxlY3RhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5TZXR0aW5ncywgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJCgnLmItc2V0dGluZ3MtbWVudSAuZS1pdGVtJywgZG9tKSkpO1xuXHR9XG5cblx0bGluayhyb3V0ZSkge1xuXHRcdHJldHVybiBzZXR0aW5ncyhyb3V0ZSk7XG5cdH1cblxuXHRiYWNrVG9NYWlsQm94Q2xpY2soKSB7XG5cdFx0c2V0SGFzaChpbmJveChnZXRGb2xkZXJJbmJveE5hbWUoKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lbnVTZXR0aW5nc1VzZXJWaWV3LCBNZW51U2V0dGluZ3NVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBpbmJveCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXRGb2xkZXJJbmJveE5hbWUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuaW1wb3J0IHsgbGVmdFBhbmVsRGlzYWJsZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL1NldHRpbmdzL1BhbmUnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ1NldHRpbmdzUGFuZSdcbn0pXG5jbGFzcyBQYW5lU2V0dGluZ3NVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5tb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdH1cblxuXHRoaWRlTGVmdChpdGVtLCBldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0fVxuXG5cdHNob3dMZWZ0KGl0ZW0sIGV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJhY2tUb01haWxCb3hDbGljaygpIHtcblx0XHRzZXRIYXNoKGluYm94KGdldEZvbGRlckluYm94TmFtZSgpKSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzVXNlclZpZXcsIFBhbmVTZXR0aW5nc1VzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBib290c3RyYXAgZnJvbSAnYm9vdHN0cmFwJztcbmltcG9ydCBBcHAgZnJvbSAnQXBwL1VzZXInO1xuXG5ib290c3RyYXAoQXBwKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29ydCcpO1xuIiwidmFyIHNvcnQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvcnQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29ydDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gc29ydCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb3J0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxudmFyIG5hdGl2ZVNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ3NvcnQnKTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCBTTE9QUFlfTUVUSE9EO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG5hdGl2ZVNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogbmF0aXZlU29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5cbmltcG9ydCB7IHBTdHJpbmcsIGxvZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL01lc3NhZ2VPcGVuUGdwJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc01lc3NhZ2VPcGVuUGdwJ1xufSlcbmNsYXNzIE1lc3NhZ2VPcGVuUGdwUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm5vdGlmaWNhdGlvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEtleSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5wcml2YXRlS2V5cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZC5mb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYnV0dG9uRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBudWxsO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cE1lc3NhZ2VPcGVuUEdQO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSlcblx0ZG9Db21tYW5kKCkge1xuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0bGV0IHByaXZhdGVLZXkgPSBudWxsO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodGhpcy5yZXN1bHRDYWxsYmFjayAmJiB0aGlzLnNlbGVjdGVkS2V5KCkpIHtcblx0XHRcdFx0XHRjb25zdCBwcml2YXRlS2V5cyA9IHRoaXMuc2VsZWN0ZWRLZXkoKS5nZXROYXRpdmVLZXlzKCk7XG5cdFx0XHRcdFx0cHJpdmF0ZUtleSA9IHByaXZhdGVLZXlzICYmIHByaXZhdGVLZXlzWzBdID8gcHJpdmF0ZUtleXNbMF0gOiBudWxsO1xuXG5cdFx0XHRcdFx0aWYgKHByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcHJpdmF0ZUtleS5kZWNyeXB0KHBTdHJpbmcodGhpcy5wYXNzd29yZCgpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2coJ0Vycm9yOiBQcml2YXRlIGtleSBjYW5ub3QgYmUgZGVjcnlwdGVkJyk7XG5cdFx0XHRcdFx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0bG9nKGUpO1xuXHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5ID0gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bG9nKCdFcnJvcjogUHJpdmF0ZSBrZXkgY2Fubm90IGJlIGZvdW5kJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGxvZyhlKTtcblx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cblx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdFx0dGhpcy5yZXN1bHRDYWxsYmFjayhwcml2YXRlS2V5KTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5ub3RpZmljYXRpb24oJycpO1xuXG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZC5mb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5idXR0b25Gb2N1cyhmYWxzZSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkS2V5KGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IG51bGw7XG5cdFx0dGhpcy5wcml2YXRlS2V5cyhbXSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRrZXkoJ3RhYixzaGlmdCt0YWInLCBLZXlTdGF0ZS5Qb3B1cE1lc3NhZ2VPcGVuUEdQLCAoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLnBhc3N3b3JkLmZvY3VzKCk6XG5cdFx0XHRcdFx0dGhpcy5idXR0b25Gb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmJ1dHRvbkZvY3VzKCk6XG5cdFx0XHRcdFx0dGhpcy5wYXNzd29yZC5mb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdG9Eb20ub24oJ2NsaWNrJywgJy5rZXktbGlzdF9faXRlbScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblxuXHRcdFx0b0RvbVxuXHRcdFx0XHQuZmluZCgnLmtleS1saXN0X19pdGVtIC5rZXktbGlzdF9faXRlbV9fcmFkaW8nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ2ljb24tcmFkaW8tdW5jaGVja2VkJylcblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdpY29uLXJhZGlvLWNoZWNrZWQnKTtcblxuXHRcdFx0JCh0aGlzKVxuXHRcdFx0XHQuZmluZCgnLmtleS1saXN0X19pdGVtX19yYWRpbycpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdC5yZW1vdmVDbGFzcygnaWNvbi1yYWRpby11bmNoZWNrZWQnKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ2ljb24tcmFkaW8tY2hlY2tlZCcpO1xuXG5cdFx0XHRzZWxmLnNlbGVjdGVkS2V5KGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRzZWxmLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25IaWRlV2l0aERlbGF5KCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdHRoaXMucGFzc3dvcmQuZm9jdXModHJ1ZSk7XG5cdFx0Ly9cdFx0dGhpcy5idXR0b25Gb2N1cyh0cnVlKTtcblx0fVxuXG5cdG9uU2hvdyhmQ2FsbGJhY2ssIHByaXZhdGVLZXlzKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHR0aGlzLnJlc3VsdENhbGxiYWNrID0gZkNhbGxiYWNrO1xuXHRcdHRoaXMucHJpdmF0ZUtleXMocHJpdmF0ZUtleXMpO1xuXG5cdFx0aWYgKHRoaXMudmlld01vZGVsRG9tKSB7XG5cdFx0XHR0aGlzLnZpZXdNb2RlbERvbVxuXHRcdFx0XHQuZmluZCgnLmtleS1saXN0X19pdGVtJylcblx0XHRcdFx0LmZpcnN0KClcblx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IE1lc3NhZ2VPcGVuUGdwUG9wdXBWaWV3LCBNZXNzYWdlT3BlblBncFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBrZXlzID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5rZXlzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgfHwgRE9NSXRlcmFibGVzLmhhc093blByb3BlcnR5KGNsYXNzb2YoaXQpKSA/IGtleXMgOiBvd247XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5rZXlzO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IGluQXJyYXksIHBTdHJpbmcsIGxvZywgaXNVbmQsIHRyaW0sIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IE1hZ2ljcywgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5cbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5jb25zdCBLRVlfTkFNRV9TVUJTVFIgPSAtODtcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQ29tcG9zZU9wZW5QZ3AnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQ29tcG9zZU9wZW5QZ3AnXG59KVxuY2xhc3MgQ29tcG9zZU9wZW5QZ3BQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucHVibGljS2V5c09wdGlvbnNDYXB0aW9uID0gaTE4bignUEdQX05PVElGSUNBVElPTlMvQUREX0FfUFVCTElDS19LRVknKTtcblx0XHR0aGlzLnByaXZhdGVLZXlzT3B0aW9uc0NhcHRpb24gPSBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9TRUxFQ1RfQV9QUklWQVRFX0tFWScpO1xuXG5cdFx0dGhpcy5ub3RpZmljYXRpb24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2lnbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZW5jcnlwdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQuZm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJ1dHRvbkZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRleHQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNlbGVjdGVkUHJpdmF0ZUtleSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5zZWxlY3RlZFB1YmxpY0tleSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLnNpZ25LZXkgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuZW5jcnlwdEtleXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5lbmNyeXB0S2V5c1ZpZXcgPSBrby5jb21wdXRlZCgoKSA9PiBfLmNvbXBhY3QoXy5tYXAodGhpcy5lbmNyeXB0S2V5cygpLCAob0tleSkgPT4gKG9LZXkgPyBvS2V5LmtleSA6IG51bGwpKSkpO1xuXG5cdFx0dGhpcy5wcml2YXRlS2V5c09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBvcHRzID0gXy5tYXAoUGdwU3RvcmUub3BlbnBncGtleXNQcml2YXRlKCksIChvS2V5LCBpSW5kZXgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc2lnbktleSgpICYmIHRoaXMuc2lnbktleSgpLmtleS5pZCA9PT0gb0tleS5pZCkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfLm1hcChvS2V5LnVzZXJzLCAodXNlcikgPT4gKHtcblx0XHRcdFx0XHQnaWQnOiBvS2V5Lmd1aWQsXG5cdFx0XHRcdFx0J25hbWUnOiAnKCcgKyBvS2V5LmlkLnN1YnN0cihLRVlfTkFNRV9TVUJTVFIpLnRvVXBwZXJDYXNlKCkgKyAnKSAnICsgdXNlcixcblx0XHRcdFx0XHQna2V5Jzogb0tleSxcblx0XHRcdFx0XHQnY2xhc3MnOiBpSW5kZXggJSAyID8gJ29kZCcgOiAnZXZlbidcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBfLmNvbXBhY3QoXy5mbGF0dGVuKG9wdHMsIHRydWUpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucHVibGljS2V5c09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBvcHRzID0gXy5tYXAoUGdwU3RvcmUub3BlbnBncGtleXNQdWJsaWMoKSwgKG9LZXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlmICgtMSA8IGluQXJyYXkob0tleSwgdGhpcy5lbmNyeXB0S2V5c1ZpZXcoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gXy5tYXAob0tleS51c2VycywgKHVzZXIpID0+ICh7XG5cdFx0XHRcdFx0J2lkJzogb0tleS5ndWlkLFxuXHRcdFx0XHRcdCduYW1lJzogJygnICsgb0tleS5pZC5zdWJzdHIoS0VZX05BTUVfU1VCU1RSKS50b1VwcGVyQ2FzZSgpICsgJykgJyArIHVzZXIsXG5cdFx0XHRcdFx0J2tleSc6IG9LZXksXG5cdFx0XHRcdFx0J2NsYXNzJzogaW5kZXggJSAyID8gJ29kZCcgOiAnZXZlbidcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gXy5jb21wYWN0KF8uZmxhdHRlbihvcHRzLCB0cnVlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBudWxsO1xuXG5cdFx0dGhpcy5zZWxlY3RlZFByaXZhdGVLZXkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0Q29tbWFuZCgpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbW1hbmQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRQdWJsaWNLZXkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuUG9wdXBDb21wb3NlT3BlblBHUDtcblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXG5cdFx0dGhpcy5hZGRPcHRpb25DbGFzcyA9IChkb21PcHRpb24sIGl0ZW0pID0+IHtcblx0XHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyKGRvbU9wdGlvbiwgaXRlbSk7XG5cblx0XHRcdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmNsYXNzKSAmJiBkb21PcHRpb24pIHtcblx0XHRcdFx0JChkb21PcHRpb24pLmFkZENsYXNzKGl0ZW0uY2xhc3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmRlbGV0ZVB1YmxpY2tLZXkgPSBfLmJpbmQodGhpcy5kZWxldGVQdWJsaWNrS2V5LCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkgJiYgKHNlbGYuc2lnbigpIHx8IHNlbGYuZW5jcnlwdCgpKSlcblx0ZG9Db21tYW5kKCkge1xuXHRcdGxldCByZXN1bHQgPSB0cnVlLFxuXHRcdFx0cHJpdmF0ZUtleSA9IG51bGwsXG5cdFx0XHRhUHVibGljS2V5cyA9IFtdO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXG5cdFx0aWYgKHJlc3VsdCAmJiB0aGlzLnNpZ24oKSkge1xuXHRcdFx0aWYgKCF0aGlzLnNpZ25LZXkoKSkge1xuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QUklWQVRFX0tFWV9GT1VORCcpKTtcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLnNpZ25LZXkoKS5rZXkpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oXG5cdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvTk9fUFJJVkFURV9LRVlfRk9VTkRfRk9SJywge1xuXHRcdFx0XHRcdFx0J0VNQUlMJzogdGhpcy5zaWduS2V5KCkuZW1haWxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdGNvbnN0IHByaXZhdGVLZXlzID0gdGhpcy5zaWduS2V5KCkua2V5LmdldE5hdGl2ZUtleXMoKTtcblx0XHRcdFx0cHJpdmF0ZUtleSA9IHByaXZhdGVLZXlzWzBdIHx8IG51bGw7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAocHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdFx0cHJpdmF0ZUtleS5kZWNyeXB0KHBTdHJpbmcodGhpcy5wYXNzd29yZCgpKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QUklWQVRFX0tFWV9GT1VORCcpKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXN1bHQgJiYgdGhpcy5lbmNyeXB0KCkpIHtcblx0XHRcdGlmICgwID09PSB0aGlzLmVuY3J5cHRLZXlzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL05PX1BVQkxJQ19LRVlTX0ZPVU5EJykpO1xuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5lbmNyeXB0S2V5cygpKSB7XG5cdFx0XHRcdGFQdWJsaWNLZXlzID0gW107XG5cblx0XHRcdFx0Xy5lYWNoKHRoaXMuZW5jcnlwdEtleXMoKSwgKG9LZXkpID0+IHtcblx0XHRcdFx0XHRpZiAob0tleSAmJiBvS2V5LmtleSkge1xuXHRcdFx0XHRcdFx0YVB1YmxpY0tleXMgPSBhUHVibGljS2V5cy5jb25jYXQoXy5jb21wYWN0KF8uZmxhdHRlbihvS2V5LmtleS5nZXROYXRpdmVLZXlzKCkpKSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvS2V5ICYmIG9LZXkuZW1haWwpIHtcblx0XHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QVUJMSUNfS0VZU19GT1VORF9GT1InLCB7XG5cdFx0XHRcdFx0XHRcdFx0J0VNQUlMJzogb0tleS5lbWFpbFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAocmVzdWx0ICYmICgwID09PSBhUHVibGljS2V5cy5sZW5ndGggfHwgdGhpcy5lbmNyeXB0S2V5cygpLmxlbmd0aCAhPT0gYVB1YmxpY0tleXMubGVuZ3RoKSkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAmJiB0aGlzLnJlc3VsdENhbGxiYWNrKSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0bGV0IHBncFByb21pc2UgPSBudWxsO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHByaXZhdGVLZXkgJiYgMCA9PT0gYVB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRwZ3BQcm9taXNlID0gUGdwU3RvcmUub3BlbnBncC5zaWduKHtcblx0XHRcdFx0XHRcdFx0ZGF0YTogdGhpcy50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdHByaXZhdGVLZXlzOiBbcHJpdmF0ZUtleV1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocHJpdmF0ZUtleSAmJiAwIDwgYVB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRwZ3BQcm9taXNlID0gUGdwU3RvcmUub3BlbnBncC5lbmNyeXB0KHtcblx0XHRcdFx0XHRcdFx0ZGF0YTogdGhpcy50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdHB1YmxpY0tleXM6IGFQdWJsaWNLZXlzLFxuXHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5czogW3ByaXZhdGVLZXldXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFwcml2YXRlS2V5ICYmIDAgPCBhUHVibGljS2V5cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHBncFByb21pc2UgPSBQZ3BTdG9yZS5vcGVucGdwLmVuY3J5cHQoe1xuXHRcdFx0XHRcdFx0XHRkYXRhOiB0aGlzLnRleHQoKSxcblx0XHRcdFx0XHRcdFx0cHVibGljS2V5czogYVB1YmxpY0tleXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGxvZyhlKTtcblxuXHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvUEdQX0VSUk9SJywge1xuXHRcdFx0XHRcdFx0XHQnRVJST1InOiAnJyArIGVcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwZ3BQcm9taXNlKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHBncFByb21pc2Vcblx0XHRcdFx0XHRcdFx0LnRoZW4oKG1EYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXN1bHRDYWxsYmFjayhtRGF0YS5kYXRhKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9QR1BfRVJST1InLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdFUlJPUic6ICcnICsgZVxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvUEdQX0VSUk9SJywge1xuXHRcdFx0XHRcdFx0XHRcdCdFUlJPUic6ICcnICsgZVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRzZWxlY3RDb21tYW5kKCkge1xuXHRcdGNvbnN0IGtleUlkID0gdGhpcy5zZWxlY3RlZFByaXZhdGVLZXkoKSxcblx0XHRcdG9wdGlvbiA9IGtleUlkID8gXy5maW5kKHRoaXMucHJpdmF0ZUtleXNPcHRpb25zKCksIChpdGVtKSA9PiBpdGVtICYmIGtleUlkID09PSBpdGVtLmlkKSA6IG51bGw7XG5cblx0XHRpZiAob3B0aW9uKSB7XG5cdFx0XHR0aGlzLnNpZ25LZXkoe1xuXHRcdFx0XHQnZW1wdHknOiAhb3B0aW9uLmtleSxcblx0XHRcdFx0J3NlbGVjdGVkJzoga28ub2JzZXJ2YWJsZSghIW9wdGlvbi5rZXkpLFxuXHRcdFx0XHQndXNlcnMnOiBvcHRpb24ua2V5LnVzZXJzLFxuXHRcdFx0XHQnaGFzaCc6IG9wdGlvbi5rZXkuaWQuc3Vic3RyKEtFWV9OQU1FX1NVQlNUUikudG9VcHBlckNhc2UoKSxcblx0XHRcdFx0J2tleSc6IG9wdGlvbi5rZXlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKClcblx0YWRkQ29tbWFuZCgpIHtcblx0XHRjb25zdCBrZXlJZCA9IHRoaXMuc2VsZWN0ZWRQdWJsaWNLZXkoKSxcblx0XHRcdGtleXMgPSB0aGlzLmVuY3J5cHRLZXlzKCksXG5cdFx0XHRvcHRpb24gPSBrZXlJZCA/IF8uZmluZCh0aGlzLnB1YmxpY0tleXNPcHRpb25zKCksIChpdGVtKSA9PiBpdGVtICYmIGtleUlkID09PSBpdGVtLmlkKSA6IG51bGw7XG5cblx0XHRpZiAob3B0aW9uKSB7XG5cdFx0XHRrZXlzLnB1c2goe1xuXHRcdFx0XHQnZW1wdHknOiAhb3B0aW9uLmtleSxcblx0XHRcdFx0J3NlbGVjdGVkJzoga28ub2JzZXJ2YWJsZSghIW9wdGlvbi5rZXkpLFxuXHRcdFx0XHQncmVtb3ZhYmxlJzoga28ub2JzZXJ2YWJsZSghdGhpcy5zaWduKCkgfHwgIXRoaXMuc2lnbktleSgpIHx8IHRoaXMuc2lnbktleSgpLmtleS5pZCAhPT0gb3B0aW9uLmtleS5pZCksXG5cdFx0XHRcdCd1c2Vycyc6IG9wdGlvbi5rZXkudXNlcnMsXG5cdFx0XHRcdCdoYXNoJzogb3B0aW9uLmtleS5pZC5zdWJzdHIoS0VZX05BTUVfU1VCU1RSKS50b1VwcGVyQ2FzZSgpLFxuXHRcdFx0XHQna2V5Jzogb3B0aW9uLmtleVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZW5jcnlwdEtleXMoa2V5cyk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHR1cGRhdGVDb21tYW5kKCkge1xuXHRcdF8uZWFjaCh0aGlzLmVuY3J5cHRLZXlzKCksIChvS2V5KSA9PiB7XG5cdFx0XHRvS2V5LnJlbW92YWJsZSghdGhpcy5zaWduKCkgfHwgIXRoaXMuc2lnbktleSgpIHx8IHRoaXMuc2lnbktleSgpLmtleS5pZCAhPT0gb0tleS5rZXkuaWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlUHVibGlja0tleShwdWJsaWNLZXkpIHtcblx0XHR0aGlzLmVuY3J5cHRLZXlzLnJlbW92ZShwdWJsaWNLZXkpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLm5vdGlmaWNhdGlvbignJyk7XG5cblx0XHR0aGlzLnNpZ24oZmFsc2UpO1xuXHRcdHRoaXMuZW5jcnlwdChmYWxzZSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKGZhbHNlKTtcblx0XHR0aGlzLmJ1dHRvbkZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuc2lnbktleShudWxsKTtcblx0XHR0aGlzLmVuY3J5cHRLZXlzKFtdKTtcblx0XHR0aGlzLnRleHQoJycpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IG51bGw7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgndGFiLHNoaWZ0K3RhYicsIEtleVN0YXRlLlBvcHVwQ29tcG9zZU9wZW5QR1AsICgpID0+IHtcblx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRjYXNlIHRoaXMucGFzc3dvcmQuZm9jdXMoKTpcblx0XHRcdFx0XHR0aGlzLmJ1dHRvbkZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIHRoaXMuYnV0dG9uRm9jdXMoKTpcblx0XHRcdFx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkhpZGVXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuc2lnbigpKSB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJ1dHRvbkZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdyhmQ2FsbGJhY2ssIHNUZXh0LCBpZGVudGl0eSwgc1RvLCBzQ2MsIHNCY2MpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdGxldCByZWMgPSBbXSxcblx0XHRcdGVtYWlsTGluZSA9ICcnO1xuXG5cdFx0Y29uc3QgZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IGZDYWxsYmFjaztcblxuXHRcdGlmICgnJyAhPT0gc1RvKSB7XG5cdFx0XHRyZWMucHVzaChzVG8pO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gc0NjKSB7XG5cdFx0XHRyZWMucHVzaChzQ2MpO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gc0JjYykge1xuXHRcdFx0cmVjLnB1c2goc0JjYyk7XG5cdFx0fVxuXG5cdFx0cmVjID0gcmVjLmpvaW4oJywgJykuc3BsaXQoJywnKTtcblx0XHRyZWMgPSBfLmNvbXBhY3QoXG5cdFx0XHRfLm1hcChyZWMsICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRlbWFpbC5jbGVhcigpO1xuXHRcdFx0XHRlbWFpbC5wYXJzZSh0cmltKHZhbHVlKSk7XG5cdFx0XHRcdHJldHVybiAnJyA9PT0gZW1haWwuZW1haWwgPyBmYWxzZSA6IGVtYWlsLmVtYWlsO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0aWYgKGlkZW50aXR5ICYmIGlkZW50aXR5LmVtYWlsKCkpIHtcblx0XHRcdGVtYWlsTGluZSA9IGlkZW50aXR5LmVtYWlsKCk7XG5cdFx0XHRyZWMudW5zaGlmdChlbWFpbExpbmUpO1xuXG5cdFx0XHRjb25zdCBrZXlzID0gUGdwU3RvcmUuZmluZEFsbFByaXZhdGVLZXlzQnlFbWFpbE5vdE5hdGl2ZShlbWFpbExpbmUpO1xuXHRcdFx0aWYgKGtleXMgJiYga2V5c1swXSkge1xuXHRcdFx0XHR0aGlzLnNpZ25LZXkoe1xuXHRcdFx0XHRcdCd1c2Vycyc6IGtleXNbMF0udXNlcnMgfHwgW2VtYWlsTGluZV0sXG5cdFx0XHRcdFx0J2hhc2gnOiBrZXlzWzBdLmlkLnN1YnN0cihLRVlfTkFNRV9TVUJTVFIpLnRvVXBwZXJDYXNlKCksXG5cdFx0XHRcdFx0J2tleSc6IGtleXNbMF1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2lnbktleSgpKSB7XG5cdFx0XHR0aGlzLnNpZ24odHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlYyAmJiAwIDwgcmVjLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5lbmNyeXB0S2V5cyhcblx0XHRcdFx0Xy51bmlxKFxuXHRcdFx0XHRcdF8uY29tcGFjdChcblx0XHRcdFx0XHRcdF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdFx0Xy5tYXAocmVjLCAocmVjRW1haWwpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBrZXlzID0gUGdwU3RvcmUuZmluZEFsbFB1YmxpY0tleXNCeUVtYWlsTm90TmF0aXZlKHJlY0VtYWlsKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5c1xuXHRcdFx0XHRcdFx0XHRcdFx0PyBfLm1hcChrZXlzLCAocHVibGljS2V5KSA9PiAoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdlbXB0eSc6ICFwdWJsaWNLZXksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdGVkJzoga28ub2JzZXJ2YWJsZSghIXB1YmxpY0tleSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbW92YWJsZSc6IGtvLm9ic2VydmFibGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5zaWduKCkgfHwgIXRoaXMuc2lnbktleSgpIHx8IHRoaXMuc2lnbktleSgpLmtleS5pZCAhPT0gcHVibGljS2V5LmlkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndXNlcnMnOiBwdWJsaWNLZXkgPyBwdWJsaWNLZXkudXNlcnMgfHwgW3JlY0VtYWlsXSA6IFtyZWNFbWFpbF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2hhc2gnOiBwdWJsaWNLZXkgPyBwdWJsaWNLZXkuaWQuc3Vic3RyKEtFWV9OQU1FX1NVQlNUUikudG9VcHBlckNhc2UoKSA6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdrZXknOiBwdWJsaWNLZXlcblx0XHRcdFx0XHRcdFx0XHRcdCAgfSkpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IFtdO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0KGVuY3J5cHRLZXkpID0+IGVuY3J5cHRLZXkuaGFzaFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoMCA8IHRoaXMuZW5jcnlwdEtleXMoKS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5lbmNyeXB0KHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudGV4dChzVGV4dCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29tcG9zZU9wZW5QZ3BQb3B1cFZpZXcsIENvbXBvc2VPcGVuUGdwUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biwgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgc2V0Rm9sZGVySGFzaCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRm9sZGVyQ2xlYXInLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRm9sZGVyQ2xlYXInXG59KVxuY2xhc3MgRm9sZGVyQ2xlYXJQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuY2xlYXJpbmdQcm9jZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jbGVhcmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lRm9yQ2xlYXIgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyKCk7XG5cdFx0XHRyZXR1cm4gZm9sZGVyID8gZm9sZGVyLnByaW50YWJsZUZ1bGxOYW1lKCkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZm9sZGVyTmFtZUZvckNsZWFyID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcigpO1xuXHRcdFx0cmV0dXJuIGZvbGRlciA/IGZvbGRlci5sb2NhbE5hbWUoKSA6ICcnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kYW5nZXJEZXNjSHRtbCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRpMThuKCdQT1BVUFNfQ0xFQVJfRk9MREVSL0RBTkdFUl9ERVNDX0hUTUxfMScsIHsgJ0ZPTERFUic6IHRoaXMuZm9sZGVyTmFtZUZvckNsZWFyKCkgfSlcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHtcblx0XHRjb25zdCBmb2xkZXIgPSBzZWxmLnNlbGVjdGVkRm9sZGVyKCksXG5cdFx0XHRpc0NsZWFyaW5nID0gc2VsZi5jbGVhcmluZ1Byb2Nlc3MoKTtcblxuXHRcdHJldHVybiAhaXNDbGVhcmluZyAmJiBudWxsICE9PSBmb2xkZXI7XG5cdH0pXG5cdGNsZWFyQ29tbWFuZCgpIHtcblx0XHRjb25zdCBmb2xkZXJUb0NsZWFyID0gdGhpcy5zZWxlY3RlZEZvbGRlcigpO1xuXHRcdGlmIChmb2xkZXJUb0NsZWFyKSB7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZShudWxsKTtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdChbXSk7XG5cblx0XHRcdHRoaXMuY2xlYXJpbmdQcm9jZXNzKHRydWUpO1xuXG5cdFx0XHRmb2xkZXJUb0NsZWFyLm1lc3NhZ2VDb3VudEFsbCgwKTtcblx0XHRcdGZvbGRlclRvQ2xlYXIubWVzc2FnZUNvdW50VW5yZWFkKDApO1xuXG5cdFx0XHRzZXRGb2xkZXJIYXNoKGZvbGRlclRvQ2xlYXIuZnVsbE5hbWVSYXcsICcnKTtcblxuXHRcdFx0UmVtb3RlLmZvbGRlckNsZWFyKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5jbGVhcmluZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCh0cnVlKTtcblx0XHRcdFx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhcmluZ0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFyaW5nRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIGZvbGRlclRvQ2xlYXIuZnVsbE5hbWVSYXcpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5jbGVhcmluZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXIobnVsbCk7XG5cdH1cblxuXHRvblNob3coZm9sZGVyKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0dGhpcy5zZWxlY3RlZEZvbGRlcihmb2xkZXIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBGb2xkZXJDbGVhclBvcHVwVmlldywgRm9sZGVyQ2xlYXJQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyB0cmltIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4sIHRyaWdnZXIgYXMgdHJhbnNsYXRvclRyaWdnZXIgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIgfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuXG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQWR2YW5jZWRTZWFyY2gnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQWR2YW5jZWRTZWFyY2gnXG59KVxuY2xhc3MgQWR2YW5jZWRTZWFyY2hQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZnJvbUZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZyb20gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zdWJqZWN0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXh0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IGtvLm9ic2VydmFibGUoLTEpO1xuXG5cdFx0dGhpcy5oYXNBdHRhY2htZW50ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdGFycmVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51bnNlZW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7IGlkOiAtMSwgbmFtZTogaTE4bignU0VBUkNIL0xBQkVMX0FEVl9EQVRFX0FMTCcpIH0sXG5cdFx0XHRcdHsgaWQ6IDMsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV8zX0RBWVMnKSB9LFxuXHRcdFx0XHR7IGlkOiA3LCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfN19EQVlTJykgfSxcblx0XHRcdFx0eyBpZDogMzAsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV9NT05USCcpIH0sXG5cdFx0XHRcdHsgaWQ6IDkwLCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfM19NT05USFMnKSB9LFxuXHRcdFx0XHR7IGlkOiAxODAsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV82X01PTlRIUycpIH0sXG5cdFx0XHRcdHsgaWQ6IDM2NSwgbmFtZTogaTE4bignU0VBUkNIL0xBQkVMX0FEVl9EQVRFX1lFQVInKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRzZWFyY2hDb21tYW5kKCkge1xuXHRcdGNvbnN0IHNlYXJjaCA9IHRoaXMuYnVpbGRTZWFyY2hTdHJpbmcoKTtcblx0XHRpZiAoJycgIT09IHNlYXJjaCkge1xuXHRcdFx0TWVzc2FnZVN0b3JlLm1haW5NZXNzYWdlTGlzdFNlYXJjaChzZWFyY2gpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHR9XG5cblx0cGFyc2VTZWFyY2hTdHJpbmdWYWx1ZShzZWFyY2gpIHtcblx0XHRjb25zdCBwYXJ0cyA9IChzZWFyY2ggfHwgJycpLnNwbGl0KC9bXFxzXSsvZyk7XG5cdFx0Xy5lYWNoKHBhcnRzLCAocGFydCkgPT4ge1xuXHRcdFx0c3dpdGNoIChwYXJ0KSB7XG5cdFx0XHRcdGNhc2UgJ2hhczphdHRhY2htZW50Jzpcblx0XHRcdFx0XHR0aGlzLmhhc0F0dGFjaG1lbnQodHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2lzOnVuc2VlbixmbGFnZ2VkJzpcblx0XHRcdFx0XHR0aGlzLnN0YXJyZWQodHJ1ZSk7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAnaXM6dW5zZWVuJzpcblx0XHRcdFx0XHR0aGlzLnVuc2Vlbih0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hTdHJpbmdWYWx1ZSh2YWx1ZSkge1xuXHRcdGlmICgtMSA8IHZhbHVlLmluZGV4T2YoJyAnKSkge1xuXHRcdFx0dmFsdWUgPSAnXCInICsgdmFsdWUgKyAnXCInO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRidWlsZFNlYXJjaFN0cmluZygpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXSxcblx0XHRcdGZyb21fID0gdHJpbSh0aGlzLmZyb20oKSksXG5cdFx0XHR0byA9IHRyaW0odGhpcy50bygpKSxcblx0XHRcdHN1YmplY3QgPSB0cmltKHRoaXMuc3ViamVjdCgpKSxcblx0XHRcdHRleHQgPSB0cmltKHRoaXMudGV4dCgpKSxcblx0XHRcdGlzUGFydCA9IFtdLFxuXHRcdFx0aGFzUGFydCA9IFtdO1xuXG5cdFx0aWYgKGZyb21fICYmICcnICE9PSBmcm9tXykge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2Zyb206JyArIHRoaXMuYnVpbGRTZWFyY2hTdHJpbmdWYWx1ZShmcm9tXykpO1xuXHRcdH1cblxuXHRcdGlmICh0byAmJiAnJyAhPT0gdG8pIHtcblx0XHRcdHJlc3VsdC5wdXNoKCd0bzonICsgdGhpcy5idWlsZFNlYXJjaFN0cmluZ1ZhbHVlKHRvKSk7XG5cdFx0fVxuXG5cdFx0aWYgKHN1YmplY3QgJiYgJycgIT09IHN1YmplY3QpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdzdWJqZWN0OicgKyB0aGlzLmJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmhhc0F0dGFjaG1lbnQoKSkge1xuXHRcdFx0aGFzUGFydC5wdXNoKCdhdHRhY2htZW50Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudW5zZWVuKCkpIHtcblx0XHRcdGlzUGFydC5wdXNoKCd1bnNlZW4nKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdGFycmVkKCkpIHtcblx0XHRcdGlzUGFydC5wdXNoKCdmbGFnZ2VkJyk7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPCBoYXNQYXJ0Lmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2hhczonICsgaGFzUGFydC5qb2luKCcsJykpO1xuXHRcdH1cblxuXHRcdGlmICgwIDwgaXNQYXJ0Lmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2lzOicgKyBpc1BhcnQuam9pbignLCcpKTtcblx0XHR9XG5cblx0XHRpZiAoLTEgPCB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlKCkpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdkYXRlOicgKyBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIodGhpcy5zZWxlY3RlZERhdGVWYWx1ZSgpKSArICcvJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHQgJiYgJycgIT09IHRleHQpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCd0ZXh0OicgKyB0aGlzLmJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUodGV4dCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cmltKHJlc3VsdC5qb2luKCcgJykpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmZyb20oJycpO1xuXHRcdHRoaXMudG8oJycpO1xuXHRcdHRoaXMuc3ViamVjdCgnJyk7XG5cdFx0dGhpcy50ZXh0KCcnKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUoLTEpO1xuXHRcdHRoaXMuaGFzQXR0YWNobWVudChmYWxzZSk7XG5cdFx0dGhpcy5zdGFycmVkKGZhbHNlKTtcblx0XHR0aGlzLnVuc2VlbihmYWxzZSk7XG5cblx0XHR0aGlzLmZyb21Gb2N1cyh0cnVlKTtcblx0fVxuXG5cdG9uU2hvdyhzZWFyY2gpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0XHR0aGlzLnBhcnNlU2VhcmNoU3RyaW5nVmFsdWUoc2VhcmNoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmZyb21Gb2N1cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBBZHZhbmNlZFNlYXJjaFBvcHVwVmlldywgQWR2YW5jZWRTZWFyY2hQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1R3b0ZhY3RvclRlc3QnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzVHdvRmFjdG9yVGVzdCdcbn0pXG5jbGFzcyBUd29GYWN0b3JUZXN0UG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmNvZGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvZGUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29kZS5zdGF0dXMgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5rb1Rlc3RlZFRyaWdnZXIgPSBudWxsO1xuXG5cdFx0dGhpcy50ZXN0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gJycgIT09IHNlbGYuY29kZSgpICYmICFzZWxmLnRlc3RpbmcoKSlcblx0dGVzdENvZGVDb21tYW5kKCkge1xuXHRcdHRoaXMudGVzdGluZyh0cnVlKTtcblx0XHRSZW1vdGUudGVzdFR3b0ZhY3RvcigocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdFx0dGhpcy5jb2RlLnN0YXR1cyhTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiAhIWRhdGEuUmVzdWx0KTtcblxuXHRcdFx0aWYgKHRoaXMua29UZXN0ZWRUcmlnZ2VyICYmIHRoaXMuY29kZS5zdGF0dXMoKSkge1xuXHRcdFx0XHR0aGlzLmtvVGVzdGVkVHJpZ2dlcih0cnVlKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLmNvZGUoKSk7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMuY29kZSgnJyk7XG5cdFx0dGhpcy5jb2RlLmZvY3VzZWQoZmFsc2UpO1xuXHRcdHRoaXMuY29kZS5zdGF0dXMobnVsbCk7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblxuXHRcdHRoaXMua29UZXN0ZWRUcmlnZ2VyID0gbnVsbDtcblx0fVxuXG5cdG9uU2hvdyhrb1Rlc3RlZFRyaWdnZXIpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMua29UZXN0ZWRUcmlnZ2VyID0ga29UZXN0ZWRUcmlnZ2VyO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5jb2RlLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IFR3b0ZhY3RvclRlc3RQb3B1cFZpZXcsIFR3b0ZhY3RvclRlc3RQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IHRyaW0sIGRlbGVnYXRlUnVuLCBsb2cgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9BZGRPcGVuUGdwS2V5Jyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0FkZE9wZW5QZ3BLZXknXG59KVxuY2xhc3MgQWRkT3BlblBncEtleVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5rZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmtleS5mb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMua2V5LmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmtleS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5rZXkuZXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKCcnKTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0YWRkT3BlblBncEtleUNvbW1hbmQoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cblx0XHRjb25zdCByZWcgPSAvWy1dezMsNn1CRUdJTltcXHNdUEdQW1xcc10oUFJJVkFURXxQVUJMSUMpW1xcc11LRVlbXFxzXUJMT0NLWy1dezMsNn1bXFxzXFxTXSs/Wy1dezMsNn1FTkRbXFxzXVBHUFtcXHNdKFBSSVZBVEV8UFVCTElDKVtcXHNdS0VZW1xcc11CTE9DS1stXXszLDZ9L2dpLFxuXHRcdFx0b3BlbnBncEtleXJpbmcgPSBQZ3BTdG9yZS5vcGVucGdwS2V5cmluZztcblxuXHRcdGxldCBrZXlUcmltbWVkID0gdHJpbSh0aGlzLmtleSgpKTtcblxuXHRcdGlmICgvW1xcbl0vLnRlc3Qoa2V5VHJpbW1lZCkpIHtcblx0XHRcdGtleVRyaW1tZWQgPSBrZXlUcmltbWVkLnJlcGxhY2UoL1tcXHJdKy9nLCAnJykucmVwbGFjZSgvW1xcbl17Mix9L2csICdcXG5cXG4nKTtcblx0XHR9XG5cblx0XHR0aGlzLmtleS5lcnJvcignJyA9PT0ga2V5VHJpbW1lZCk7XG5cdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKCcnKTtcblxuXHRcdGlmICghb3BlbnBncEtleXJpbmcgfHwgdGhpcy5rZXkuZXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBtYXRjaCA9IG51bGwsXG5cdFx0XHRjb3VudCA9IDMwLFxuXHRcdFx0ZG9uZSA9IGZhbHNlO1xuXG5cdFx0ZG8ge1xuXHRcdFx0bWF0Y2ggPSByZWcuZXhlYyhrZXlUcmltbWVkKTtcblx0XHRcdGlmIChtYXRjaCAmJiAwIDwgY291bnQpIHtcblx0XHRcdFx0aWYgKG1hdGNoWzBdICYmIG1hdGNoWzFdICYmIG1hdGNoWzJdICYmIG1hdGNoWzFdID09PSBtYXRjaFsyXSkge1xuXHRcdFx0XHRcdGxldCBlcnIgPSBudWxsO1xuXHRcdFx0XHRcdGlmICgnUFJJVkFURScgPT09IG1hdGNoWzFdKSB7XG5cdFx0XHRcdFx0XHRlcnIgPSBvcGVucGdwS2V5cmluZy5wcml2YXRlS2V5cy5pbXBvcnRLZXkobWF0Y2hbMF0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoJ1BVQkxJQycgPT09IG1hdGNoWzFdKSB7XG5cdFx0XHRcdFx0XHRlcnIgPSBvcGVucGdwS2V5cmluZy5wdWJsaWNLZXlzLmltcG9ydEtleShtYXRjaFswXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdFx0dGhpcy5rZXkuZXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmtleS5lcnJvck1lc3NhZ2UoZXJyICYmIGVyclswXSA/ICcnICsgZXJyWzBdIDogJycpO1xuXHRcdFx0XHRcdFx0bG9nKGVycik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y291bnQgLT0gMTtcblx0XHRcdFx0ZG9uZSA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9uZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSB3aGlsZSAoIWRvbmUpO1xuXG5cdFx0b3BlbnBncEtleXJpbmcuc3RvcmUoKTtcblxuXHRcdGdldEFwcCgpLnJlbG9hZE9wZW5QZ3BLZXlzKCk7XG5cblx0XHRpZiAodGhpcy5rZXkuZXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMua2V5KCcnKTtcblx0XHR0aGlzLmtleS5lcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKCcnKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmtleS5mb2N1cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBBZGRPcGVuUGdwS2V5UG9wdXBWaWV3LCBBZGRPcGVuUGdwS2V5UG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0sIGxvZywgZGVsZWdhdGVSdW4sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9OZXdPcGVuUGdwS2V5Jyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc05ld09wZW5QZ3BLZXknXG59KVxuY2xhc3MgTmV3T3BlblBncEtleVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lbWFpbCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZW1haWwuZm9jdXMgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmVtYWlsLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5rZXlCaXRMZW5ndGggPSBrby5vYnNlcnZhYmxlKE1hZ2ljcy5CaXRMZW5ndGgyMDQ4KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZW1haWwuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuZW1haWwuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRnZW5lcmF0ZU9wZW5QZ3BLZXlDb21tYW5kKCkge1xuXHRcdGNvbnN0IHVzZXJJZCA9IHt9LFxuXHRcdFx0b3BlbnBncEtleXJpbmcgPSBQZ3BTdG9yZS5vcGVucGdwS2V5cmluZztcblxuXHRcdHRoaXMuZW1haWwuZXJyb3IoJycgPT09IHRyaW0odGhpcy5lbWFpbCgpKSk7XG5cdFx0aWYgKCFvcGVucGdwS2V5cmluZyB8fCB0aGlzLmVtYWlsLmVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR1c2VySWQuZW1haWwgPSB0aGlzLmVtYWlsKCk7XG5cdFx0aWYgKCcnICE9PSB0aGlzLm5hbWUoKSkge1xuXHRcdFx0dXNlcklkLm5hbWUgPSB0aGlzLm5hbWUoKTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvcignJyk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3Bcblx0XHRcdFx0XHQuZ2VuZXJhdGVLZXkoe1xuXHRcdFx0XHRcdFx0dXNlcklkczogW3VzZXJJZF0sXG5cdFx0XHRcdFx0XHRudW1CaXRzOiBwSW50KHRoaXMua2V5Qml0TGVuZ3RoKCkpLFxuXHRcdFx0XHRcdFx0cGFzc3BocmFzZTogdHJpbSh0aGlzLnBhc3N3b3JkKCkpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbigoa2V5UGFpcikgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGtleVBhaXIgJiYga2V5UGFpci5wcml2YXRlS2V5QXJtb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRvcGVucGdwS2V5cmluZy5wcml2YXRlS2V5cy5pbXBvcnRLZXkoa2V5UGFpci5wcml2YXRlS2V5QXJtb3JlZCk7XG5cdFx0XHRcdFx0XHRcdG9wZW5wZ3BLZXlyaW5nLnB1YmxpY0tleXMuaW1wb3J0S2V5KGtleVBhaXIucHVibGljS2V5QXJtb3JlZCk7XG5cblx0XHRcdFx0XHRcdFx0b3BlbnBncEtleXJpbmcuc3RvcmUoKTtcblxuXHRcdFx0XHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRPcGVuUGdwS2V5cygpO1xuXHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2FuY2VsQ29tbWFuZCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zaG93RXJyb3IoZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdHRoaXMuc2hvd0Vycm9yKGUpO1xuXHRcdFx0fVxuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRzaG93RXJyb3IoZSkge1xuXHRcdGxvZyhlKTtcblx0XHRpZiAoZSAmJiBlLm1lc3NhZ2UpIHtcblx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cblx0XHR0aGlzLmVtYWlsKCcnKTtcblx0XHR0aGlzLmVtYWlsLmVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmtleUJpdExlbmd0aChNYWdpY3MuQml0TGVuZ3RoMjA0OCk7XG5cblx0XHR0aGlzLnN1Ym1pdEVycm9yKCcnKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmVtYWlsLmZvY3VzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE5ld09wZW5QZ3BLZXlQb3B1cFZpZXcsIE5ld09wZW5QZ3BLZXlQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2VsZWN0RWxlbWVudCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9WaWV3T3BlblBncEtleScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNWaWV3T3BlblBncEtleSdcbn0pXG5jbGFzcyBWaWV3T3BlblBncEtleVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5rZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmtleURvbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cFZpZXdPcGVuUEdQO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmtleSgnJyk7XG5cdH1cblxuXHRzZWxlY3RLZXkoKSB7XG5cdFx0Y29uc3QgZWwgPSB0aGlzLmtleURvbSgpO1xuXHRcdGlmIChlbCkge1xuXHRcdFx0c2VsZWN0RWxlbWVudChlbCk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9wZW5QZ3BLZXkpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdGlmIChvcGVuUGdwS2V5KSB7XG5cdFx0XHR0aGlzLmtleShvcGVuUGdwS2V5LmFybW9yKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgnY3RybCthLCBjb21tYW5kK2EnLCBLZXlTdGF0ZS5Qb3B1cFZpZXdPcGVuUEdQLCAoKSA9PiB7XG5cdFx0XHR0aGlzLnNlbGVjdEtleSgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IFZpZXdPcGVuUGdwS2V5UG9wdXBWaWV3LCBWaWV3T3BlblBncEtleVBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1dlbGNvbWVQYWdlJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc1dlbGNvbWVQYWdlJ1xufSlcbmNsYXNzIFdlbGNvbWVQYWdlUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLndlbGNvbWVQYWdlVVJMID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNsb3NlRm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLndlbGNvbWVQYWdlVVJMKCcnKTtcblx0XHR0aGlzLmNsb3NlRm9jdXNlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVcmxcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblNob3coc1VybCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXG5cdFx0dGhpcy53ZWxjb21lUGFnZVVSTChzVXJsKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmNsb3NlRm9jdXNlZCh0cnVlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHRQcm9taXNlcy53ZWxjb21lQ2xvc2UoKTtcblx0fVxufVxuXG5leHBvcnQgeyBXZWxjb21lUGFnZVBvcHVwVmlldywgV2VsY29tZVBhZ2VQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9Gb2xkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NhY2hlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1JlbW90ZS9Vc2VyL0FqYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5rZXlcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL0FwcHMvVXNlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Vmlld05leHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0FwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9TZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL1BncC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmFnZS9DbGllbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL01vbWVudG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5oYXNoZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL01lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdE1vZGVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9MYW5ndWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9FbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0F1ZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdElucHV0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUHJvbWlzZXMvVXNlci9BamF4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5tb21lbnRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cucHJvZ3Jlc3NKc1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9JZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvQ29udGFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0phc3NsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1RoZW1lLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9Ob3RpZmljYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Db21wb3NlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RTY3JlZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuc3NtXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmFnZS9SYWluTG9vcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5jcm9zc3JvYWRzXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbWFpbGpzLWFkZHJlc3NwYXJzZXIvZGlzdC9hZGRyZXNzcGFyc2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5KdWFcIiIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvVGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0F0dGFjaG1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0h0bWxFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2xhc3QtaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0V4dGVybmFsL09wZW50aXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Bpa2FkYXkvcGlrYWRheS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuQXV0b2xpbmtlclwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTWltZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvRmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Bc2suanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL1F1b3RhLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5pZnZpc2libGVcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzLmpzIiwid2VicGFjazovLy8uL2Rldi9ib290c3RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWJzdHJhY3RBcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWJzdHJhY3RTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdEJvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0NvbXBvc2VBdHRhY2htZW50LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9Db250YWN0UHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0ZvbGRlclN5c3RlbS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUHJvbWlzZXMvQWJzdHJhY3RCYXNpYy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL0Fic3RyYWN0U3lzdGVtRHJvcERvd24uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9TZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMtY29va2llL3NyYy9qcy5jb29raWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL2Rldi9IdG1sL1ByZXZpZXdNZXNzYWdlLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvSWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TYXZlVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0lucHV0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2VsZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvUmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9UZXh0QXJlYS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TY3JpcHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL1VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9CYXNlNjQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1Byb21pc2VzL1VzZXIvUG9wdWxhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0ZpbHRlckNvbmRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cucXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9LZXlib2FyZFNob3J0Y3V0c0hlbHAuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQ29udGFjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRm9sZGVyQ3JlYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvemFkL2Rpc3QvbG96YWQubWluLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vQ2xpZW50U3RvcmFnZURyaXZlci9Db29raWUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9DbGllbnRTdG9yYWdlRHJpdmVyL0xvY2FsU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvRm9sZGVyLmpzIiwid2VicGFjazovLy8uL2Rldi9Qcm9taXNlcy9BYnN0cmFjdEFqYXguanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9UZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvT3BlblBncEtleS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL1VzZXIvTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9Mb2dpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL1VzZXIvTWFpbEJveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL01haWxCb3gvU3lzdGVtRHJvcERvd24uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9NYWlsQm94L0ZvbGRlckxpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0NvbnRhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VMaXN0LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTWFpbEJveC9NZXNzYWdlVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL1VzZXIvU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvR2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9Db250YWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9BY2NvdW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9GaWx0ZXJzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL1NlY3VyaXR5LmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL1NvY2lhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9DaGFuZ2VQYXNzd29yZC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9UZW1wbGF0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvRm9sZGVycy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9UaGVtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvT3BlblBncC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL1NldHRpbmdzL1N5c3RlbURyb3BEb3duLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvU2V0dGluZ3MvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL1NldHRpbmdzL1BhbmUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9NZXNzYWdlT3BlblBncC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Db21wb3NlT3BlblBncC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Gb2xkZXJDbGVhci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9BZHZhbmNlZFNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Ud29GYWN0b3JUZXN0LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0FkZE9wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTmV3T3BlblBncEtleS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9WaWV3T3BlblBncEtleS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9XZWxjb21lUGFnZS5qcyJdLCJuYW1lcyI6WyJGaWxlVHlwZSIsIlN0b3JhZ2VSZXN1bHRUeXBlIiwiRm9jdXNlZCIsIlN0YXRlIiwiU3RhdGVUeXBlIiwiQ2FwYSIsIktleVN0YXRlIiwiRm9sZGVyVHlwZSIsIlNlcnZlckZvbGRlclR5cGUiLCJMb2dpblNpZ25NZVR5cGVBc1N0cmluZyIsIkxvZ2luU2lnbk1lVHlwZSIsIkNvbXBvc2VUeXBlIiwiVXBsb2FkRXJyb3JDb2RlIiwiU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiIsIkNsaWVudFNpZGVLZXlOYW1lIiwiRXZlbnRLZXlDb2RlIiwiTWVzc2FnZVNldEFjdGlvbiIsIk1lc3NhZ2VTZWxlY3RBY3Rpb24iLCJEZXNrdG9wTm90aWZpY2F0aW9uIiwiTWVzc2FnZVByaW9yaXR5IiwiRWRpdG9yRGVmYXVsdFR5cGUiLCJTZXJ2ZXJTZWN1cmUiLCJTZWFyY2hEYXRlVHlwZSIsIlNhdmVTZXR0aW5nc1N0ZXAiLCJMYXlvdXQiLCJGaWx0ZXJDb25kaXRpb25GaWVsZCIsIkZpbHRlckNvbmRpdGlvblR5cGUiLCJGaWx0ZXJzQWN0aW9uIiwiRmlsdGVyUnVsZXNUeXBlIiwiU2lnbmVkVmVyaWZ5U3RhdHVzIiwiQ29udGFjdFByb3BlcnR5VHlwZSIsIk1hZ2ljcyIsIlBvcnRzIiwiTm90aWZpY2F0aW9uIiwia28iLCJ3aW5kb3ciLCIkd2luIiwiJCIsImZEaXNwb3NhbFRvb2x0aXBIZWxwZXIiLCJlbGVtZW50IiwidXRpbHMiLCJkb21Ob2RlRGlzcG9zYWwiLCJhZGREaXNwb3NlQ2FsbGJhY2siLCJfX29wZW50aXAiLCJkZWFjdGl2YXRlIiwiYmluZGluZ0hhbmRsZXJzIiwidXBkYXRlV2lkdGgiLCJpbml0IiwiZlZhbHVlQWNjZXNzb3IiLCIkZWwiLCJmVmFsdWUiLCJmSW5pdCIsIndpZHRoIiwic2V0VGltZW91dCIsIlRpbWU1MDBtcyIsIm9uIiwib2ZmIiwiZWRpdG9yIiwiSHRtbEVkaXRvciIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZlVwZGF0ZUVkaXRvclZhbHVlIiwiX19lZGl0b3IiLCJzZXRIdG1sT3JQbGFpbiIsImZVcGRhdGVLb1ZhbHVlIiwiZ2V0RGF0YVdpdGhIdG1sTWFyayIsImZPblJlYWR5IiwiaXNPYnNlcnZhYmxlIiwiX19mZXRjaEVkaXRvclZhbHVlIiwic3Vic2NyaWJlIiwianNvbiIsInRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwidW53cmFwIiwidXBkYXRlIiwic2Nyb2xsZXJTaGFkb3dzIiwibGltaXQiLCJjb250IiwiZkZ1bmMiLCJfIiwidGhyb3R0bGUiLCJ0b2dnbGVDbGFzcyIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsInBpa2FkYXkiLCJmQWxsQmluZGluZ3NBY2Nlc3NvciIsInZpZXdNb2RlbCIsImJpbmRpbmdDb250ZXh0IiwidGV4dElucHV0IiwiUGlrYWRheSIsIl9fcGlrYWRheSIsImZpZWxkIiwidmlzaWJsZUFuaW1hdGVkIiwiYWRkQ2xhc3MiLCJzaG93IiwiaGlkZSIsImRlbGF5IiwicmVtb3ZlQ2xhc3MiLCJ0b29sdGlwIiwiaXNNb2JpbGUiLCJkYXRhIiwiaXNJMThOIiwiR2xvYmFscyIsImJNb2JpbGVEZXZpY2UiLCJzVmFsdWUiLCJpc0Z1bmN0aW9uIiwiT3BlbnRpcCIsImRyb3Bkb3duVmlzaWJpbGl0eSIsInYiLCJzZXRDb250ZW50IiwiYWN0aXZhdGUiLCJUcmFuc2xhdG9yIiwiaTE4biIsInRyaWdnZXIiLCJ0b29sdGlwRXJyb3JUaXAiLCJzdHlsZSIsImhpZGVPbiIsInRpcEpvaW50IiwiZG9jdW1lbnQiLCJ2YWx1ZSIsIm9wZW5UaXBzIiwiaXMiLCJUaW1lMTAwbXMiLCJyZWdpc3RyYXRlQm9vdHN0cmFwRHJvcGRvd24iLCJhQm9vdHN0cmFwRHJvcGRvd25zIiwicHVzaCIsImNsaWNrIiwiZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5Iiwib3BlbkRyb3Bkb3duVHJpZ2dlciIsImhhc0NsYXNzIiwiZHJvcGRvd24iLCJmb2N1cyIsImRyb3Bkb3duQ2xvc2VyIiwiY2xvc2VzdCIsInBvcG92ZXIiLCJjc3N0ZXh0Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJyZXNpemVjcm9wIiwib25LZXlEb3duIiwiZXZlbnQiLCJjYWxsIiwib25FbnRlciIsInBhcnNlSW50Iiwia2V5Q29kZSIsIm9uU3BhY2UiLCJvblRhYiIsInNoaWZ0S2V5Iiwib25Fc2MiLCJjbGlja09uVHJ1ZSIsIm1vZGFsIiwiVXRpbHMiLCJ3aW5kb3dSZXNpemVDYWxsYmFjayIsIiRodG1sIiwibW9tZW50IiwibW9tZW50VG9Ob2RlIiwiaTE4bkluaXQiLCJpMThuVG9Ob2RlcyIsInRyYW5zbGF0b3JJbml0IiwiaTE4blVwZGF0ZSIsImxpbmsiLCJhdHRyIiwidGl0bGUiLCJ0ZXh0RiIsImluaXREb20iLCJpbml0Rml4ZWRUcmlnZ2VyIiwidmFsdWVzIiwidG9wIiwiJGNvbnRhaW5lciIsInJlc2l6ZSIsIm9mZnNldCIsImNzcyIsImluaXRSZXNpemVUcmlnZ2VyIiwib0VsZW1lbnQiLCJwSW50Iiwic2l6ZSIsImhlaWdodCIsImFwcGVuZERvbSIsImVtcHR5IiwiYXBwZW5kIiwiZHJhZ2dhYmxlIiwidHJpZ2dlclpvbmUiLCJzY3JvbGxTcGVlZCIsImZBbGxWYWx1ZUZ1bmMiLCJkcm9wcGFibGVTZWxlY3RvciIsImNvbmYiLCJkaXN0YW5jZSIsImhhbmRsZSIsImN1cnNvckF0IiwibGVmdCIsInJlZnJlc2hQb3NpdGlvbnMiLCJzY3JvbGwiLCJkcmFnIiwic3RvcCIsImhlbHBlciIsImVhY2giLCIkdGhpcyIsImJvdHRvbVBvcyIsImNsZWFySW50ZXJ2YWwiLCJwYWdlWCIsInBhZ2VZIiwibW92ZVVwIiwid2luZG93UmVzaXplIiwic2V0SW50ZXJ2YWwiLCJtb3ZlRG93biIsInRhcmdldCIsImRhdGFGb3IiLCJyZW1vdmVJbkZvY3VzIiwiZHJvcHBhYmxlIiwiZlZhbHVlRnVuYyIsImZPdmVyQ2FsbGJhY2siLCJkcm9wcGFibGVPdmVyIiwiZk91dENhbGxiYWNrIiwiZHJvcHBhYmxlT3V0IiwidG9sZXJhbmNlIiwiaG92ZXJDbGFzcyIsImRyb3AiLCJvdmVyIiwib3V0IiwidWkiLCJuYW5vIiwiU2V0dGluZ3MiLCJiRGlzYWJsZU5hbm9TY3JvbGwiLCJhcHBTZXR0aW5nc0dldCIsIm5hbm9TY3JvbGxlciIsImlPU05hdGl2ZVNjcm9sbGluZyIsInByZXZlbnRQYWdlU2Nyb2xsaW5nIiwic2F2ZVRyaWdnZXIiLCJ0b1N0cmluZyIsImVuZCIsImVtYWlsc1RhZ3MiLCJFbWFpbE1vZGVsIiwiZkFsbEJpbmRpbmdzIiwiZkF1dG9Db21wbGV0ZVNvdXJjZSIsImF1dG9Db21wbGV0ZVNvdXJjZSIsImlucHV0RGVsaW1pdGVycyIsImZGb2N1c0NhbGxiYWNrIiwiZm9jdXNlZCIsImlucHV0b3NhdXJ1cyIsInBhcnNlT25CbHVyIiwiYWxsb3dEcmFnQW5kRHJvcCIsImZvY3VzQ2FsbGJhY2siLCJzcGxpdEhvb2siLCJzdWJzdHIiLCJzcGxpdEVtYWlsTGluZSIsInBhcnNlSG9vayIsImlucHV0IiwiZmxhdHRlbiIsImlucHV0VmFsdWUiLCJwYXJzZUVtYWlsTGluZSIsImxlbmd0aCIsIml0ZW0iLCJpc09iamVjdCIsInRvTGluZSIsImNoYW5nZSIsIiRvRWwiLCJ2YWwiLCJjb21tYW5kIiwianFFbGVtZW50IiwiaXNDb21tYW5kIiwiRXJyb3IiLCJlbmFibGVkIiwib2JzZXJ2YWJsZSIsImNhbkV4ZWN1dGUiLCJfX3JlYWxDYW5FeGVjdXRlIiwiY29tcHV0ZWQiLCJyZXN1bHQiLCJwcm9wIiwiZXh0ZW5kZXJzIiwidHJpbW1lciIsInJlYWQiLCJ3cml0ZSIsIm5ld1ZhbHVlIiwicG9zSW50ZXJlciIsImRlZmF1bHRWYWwiLCJsaW1pdGVkTGlzdCIsImN1cnJlbnRWYWx1ZSIsImxpc3QiLCJpc05vbkVtcHR5QXJyYXkiLCJpbkFycmF5IiwiZXh0ZW5kIiwibm90aWZ5IiwidmFsdWVIYXNNdXRhdGVkIiwicmV2ZXJzaWJsZSIsImNvbW1pdCIsInJldmVyc2UiLCJjb21taXRlZFZhbHVlIiwidG9nZ2xlU3Vic2NyaWJlIiwib3B0aW9ucyIsInRvZ2dsZVN1YnNjcmliZVByb3BlcnR5IiwicHJldiIsIm5leHQiLCJmYWxzZVRpbWVvdXQiLCJvcHRpb24iLCJpRmFsc2VUaW1lb3V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInNwZWNpYWxUaHJvdHRsZSIsImlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUiLCJpU3BlY2lhbFRocm90dGxlVGltZW91dCIsInZhbHVlRm9yUmVhZCIsImJWYWx1ZSIsImlkbGVUcmlnZ2VyIiwiSWRsZSIsImZuIiwidmFsaWRhdGVOb25lIiwiaGFzRXJyb3IiLCJ2YWxpZGF0ZUVtYWlsIiwidGVzdCIsInZhbGlkYXRlU2ltcGxlRW1haWwiLCJkZWxldGVBY2Nlc3NIZWxwZXIiLCJ2YWxpZGF0ZUZ1bmMiLCJoYXNGdW5jRXJyb3IiLCJ0cmltIiwiaXNBcnJheSIsImlzRnVuYyIsImlzVW5kIiwiaXNVbmRlZmluZWQiLCJpc051bGwiLCJoYXMiLCJiaW5kIiwibm9vcCIsIm5vb3BUcnVlIiwibm9vcEZhbHNlIiwic2lsZW50VHJ5Q2F0Y2giLCJmdW5jIiwiZSIsImlzTm9ybWFsIiwiaXNQb3NOdW1lcmljIiwiaW5jbHVkZVplcm8iLCJkZWZhdWx0VmFsdXIiLCJpc05hTiIsInBTdHJpbmciLCJwQm9vbCIsImJvb2xUb0FqYXgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb21wb25lbnQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJkZWNvZGVVUkkiLCJ1cmwiLCJlbmNvZGVVUkkiLCJzaW1wbGVRdWVyeVBhcnNlciIsInF1ZXJ5U3RyaW5nIiwiaW5kZXgiLCJsZW4iLCJ0ZW1wIiwicXVlcmllcyIsInNwbGl0IiwicGFyYW1zIiwiZmFrZU1kNSIsImxpbmUiLCJsaW5lTGVuIiwiTWF0aCIsInJvdW5kIiwicmFuZG9tIiwiZW5jb2RlSHRtbCIsImVzY2FwZSIsInNwbGl0UGxhaW5UZXh0IiwicHJlZml4Iiwic3ViVGV4dCIsInNwYWNlUG9zIiwibmV3TGluZVBvcyIsInN1YnN0cmluZyIsInRpbWVPdXRBY3Rpb24iLCJ0aW1lT3V0cyIsImFjdGlvbiIsImZGdW5jdGlvbiIsInRpbWVPdXQiLCJ0aW1lT3V0QWN0aW9uU2Vjb25kIiwiZGVNb2R1bGUiLCJtIiwiaW5Gb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJfX2luRm9jdXNDYWNoZSIsImZvcmNlIiwiYmx1ciIsImFjdGl2ZUVsIiwicmVtb3ZlU2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwic2VsIiwicmVtb3ZlQWxsUmFuZ2VzIiwic2VsZWN0aW9uIiwicmVwbHlTdWJqZWN0QWRkIiwic3ViamVjdCIsInRvVXBwZXJDYXNlIiwicmVwbGFjZSIsInJlIiwiZndkIiwicGFydHMiLCJwcmVmaXhJc1JlIiwicGFydCIsInRyaW1tZWRQYXJ0Iiwiam9pbiIsInJvdW5kTnVtYmVyIiwibnVtIiwiZGVjIiwicG93IiwiZnJpZW5kbHlTaXplIiwic2l6ZUluQnl0ZXMiLCJsb2ciLCJkZXNjIiwiY29uc29sZSIsImRlbGVnYXRlUnVuIiwib2JqZWN0IiwibWV0aG9kTmFtZSIsImtpbGxDdHJsQUN0cmxTIiwiY3RybEtleSIsImFsdEtleSIsImtleSIsIndoaWNoIiwiUyIsInByZXZlbnREZWZhdWx0IiwiQSIsInNlbmRlciIsInNyY0VsZW1lbnQiLCJjb250ZW50RWRpdGFibGUiLCJ0YWdOYW1lIiwibWF0Y2giLCJjbGVhciIsImNyZWF0ZUNvbW1hbmRMZWdhY3kiLCJjb250ZXh0IiwiZkV4ZWN1dGUiLCJmQ2FuRXhlY3V0ZSIsImZSZXN1bHQiLCJmTm9uRW1wdHkiLCJhcmdzIiwiYXBwbHkiLCJjb252ZXJ0VGhlbWVOYW1lIiwibWVtb2l6ZSIsInRoZW1lIiwicXVvdGVOYW1lIiwibmFtZSIsIm1pY3JvdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidGltZXN0YW1wIiwiY29udmVydExhbmdOYW1lIiwibGFuZ3VhZ2UiLCJpc0VuZyIsImRyYWdnYWJsZVBsYWNlIiwiYXBwZW5kVG8iLCJkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIiLCJkb21JdGVtIiwiZGlzYWJsZWQiLCJjbGVhckJxU3dpdGNoZXIiLCJib2R5IiwicmVtb3ZlIiwicmVtb3ZlQXR0ciIsInByZXZpZXdNZXNzYWdlIiwiaXNIdG1sIiwicHJpbnQiLCJkYXRlIiwiZnJvbUNyZWRzIiwidG9DcmVkcyIsInRvTGFiZWwiLCJjY0NsYXNzIiwiY2NDcmVkcyIsImNjTGFiZWwiLCJ3aW4iLCJvcGVuIiwiZG9jIiwiYm9keUNsb25lIiwiY2xvbmUiLCJib2R5Q2xhc3MiLCJodG1sIiwiY2xvc2UiLCJzZXR0aW5nc1NhdmVIZWxwZXJGdW5jdGlvbiIsImZDYWxsYmFjayIsImtvVHJpZ2dlciIsInRpbWVyIiwidHlwZSIsImNhY2hlZCIsInJlcXVlc3RBY3Rpb24iLCJyZXF1ZXN0UGFyYW1ldGVycyIsIlJlc3VsdCIsIlRydWVSZXN1bHQiLCJGYWxzZVJlc3VsdCIsInNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uIiwic2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24iLCJyZW1vdGUiLCJzZXR0aW5nTmFtZSIsImZUcmlnZ2VyRnVuY3Rpb24iLCJzYXZlQWRtaW5Db25maWciLCJzYXZlU2V0dGluZ3MiLCJmaW5kRW1haWxBbmRMaW5rcyIsIkF1dG9saW5rZXIiLCJuZXdXaW5kb3ciLCJzdHJpcFByZWZpeCIsInVybHMiLCJlbWFpbCIsIm1lbnRpb24iLCJwaG9uZSIsImhhc2h0YWciLCJyZXBsYWNlRm4iLCJnZXRUeXBlIiwibWF0Y2hlZFRleHQiLCJodG1sVG9QbGFpbiIsInBvcyIsImlQMSIsImlQMiIsImlQMyIsImNvbnZlcnRCbG9ja3F1b3RlIiwiYmxvY2txdW90ZVRleHQiLCJjb252ZXJ0RGl2cyIsImRpdlRleHQiLCJjb252ZXJ0UHJlIiwiZml4QXR0aWJ1dGVWYWx1ZSIsImNvbnZlcnRMaW5rcyIsIiRkaXYiLCJwbGFpblRvSHRtbCIsInBsYWluIiwiZmluZEVtYWlsQW5kTGlua3NJblRleHQiLCJiSW4iLCJiRG8iLCJiU3RhcnQiLCJhTmV4dFRleHQiLCJzTGluZSIsImlJbmRleCIsImFUZXh0IiwiZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyIiwiYVN5c3RlbSIsImFMaXN0IiwiYURpc2FibGVkIiwiYUhlYWRlckxpbmVzIiwiaVVuRGVlcCIsImZEaXNhYmxlQ2FsbGJhY2siLCJmVmlzaWJsZUNhbGxiYWNrIiwiZlJlbmFtZUNhbGxiYWNrIiwiYlN5c3RlbSIsImJCdWlsZFVudmlzaWJsZSIsIm9JdGVtIiwiYlNlcCIsImlMZW4iLCJhUmVzdWx0Iiwic0RlZXBQcmVmaXgiLCJpZCIsInN5c3RlbSIsInNlcG9yYXRvciIsImZ1bGxOYW1lUmF3Iiwic2VsZWN0YWJsZSIsInN1YlNjcmliZWQiLCJleGlzdGVuIiwiaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMiLCJVc2VyIiwiQXJyYXkiLCJkZWVwIiwic3ViRm9sZGVycyIsInNlbGVjdEVsZW1lbnQiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZUNvbnRlbnRzIiwiYWRkUmFuZ2UiLCJjcmVhdGVUZXh0UmFuZ2UiLCJtb3ZlVG9FbGVtZW50VGV4dCIsInNlbGVjdCIsImRlYm91bmNlIiwiR2xvYmFsc0RhdGEiLCJ0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UiLCJjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUiLCJnZXRDb25maWd1cmF0aW9uRnJvbVNjcmlwdFRhZyIsImNvbmZpZ3VyYXRpb24iLCJwYXJzZSIsImRpc3Bvc2VPbmUiLCJwcm9wT3JWYWx1ZSIsImRpc3Bvc2FibGUiLCJkaXNwb3NlIiwiZGlzcG9zZU9iamVjdCIsImRpc3Bvc2FibGVzIiwib2JqZWN0Rm9yRWFjaCIsImRlbGVnYXRlUnVuT25EZXN0cm95Iiwib2JqZWN0T3JPYmplY3RzIiwib25EZXN0cm95IiwiYXBwZW5kU3R5bGVzIiwiJHN0eWxlVGFnIiwiX190aGVtZVRpbWVyIiwiX190aGVtZUFqYXgiLCJjaGFuZ2VUaGVtZSIsInRoZW1lVHJpZ2dlciIsInRoZW1lTGluayIsImNsZWFyVGltZXIiLCJ0aGVtZVN0eWxlIiwiQW5pbWF0ZSIsImFib3J0IiwiYWpheCIsImRhdGFUeXBlIiwidGhlbiIsImFmdGVyIiwiY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIiLCJrb0N1cnJlbnRQYWdlIiwia29QYWdlQ291bnQiLCJjdXJyZW50UGFnZSIsInBhZ2VDb3VudCIsImZBZGQiLCJjdXN0b21OYW1lIiwiY3VycmVudCIsImN1c3RvbSIsInVuc2hpZnQiLCJnZXRGaWxlRXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsInBvcCIsIm1pbWVDb250ZW50VHlwZSIsImV4dCIsIk1pbWUiLCJpc1RyYW5zcGFyZW50IiwiY29sb3IiLCJnZXRSZWFsSGVpZ2h0IiwiJGhjb250IiwicmVzaXplQW5kQ3JvcCIsImltZyIsIkltYWdlIiwib25sb2FkIiwiZGlmZiIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJjdHgiLCJnZXRDb250ZXh0IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJzcmMiLCJtYWlsVG9IZWxwZXIiLCJtYWlsVG9VcmwiLCJQb3B1cENvbXBvc2VWaWV3TW9kZWwiLCJ0byIsImNjIiwiYmNjIiwicXVlcnkiLCJzaG93U2NyZWVuUG9wdXAiLCJFbXB0eSIsImRvbVJlYWR5IiwidGltZW91dCIsIlN0cmluZyIsInN0ciIsInN0YXJ0IiwiU0VUVElOR1MiLCJfX3JsYWhfZGF0YSIsIkFQUF9TRVRUSU5HUyIsIlN5c3RlbSIsInNldHRpbmdzR2V0Iiwic2V0dGluZ3NTZXQiLCJjYXBhIiwiX19zaXplcyIsIiRkb2MiLCIkYm9keSIsInBvc2l0aW9uIiwic3RhcnRNaWNyb3RpbWUiLCJjb21tdW5pdHkiLCJSTF9DT01NVU5JVFkiLCJyYXRlTGltaXQiLCJ1c2VLZXlib2FyZFNob3J0Y3V0cyIsInNVc2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJiSUUiLCJiQ2hyb21lIiwiYlNhZmFyaSIsImJBbmltYXRpb25TdXBwb3J0ZWQiLCJiWE1MSHR0cFJlcXVlc3RTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsImJJc0h0dHBzIiwibG9jYXRpb24iLCJwcm90b2NvbCIsImh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnIiwiZ3JvdXBzIiwiaHRtbEVkaXRvckxhbmdzTWFwIiwiYkFsbG93UGRmUHJldmlldyIsIm1pbWVUeXBlcyIsIlZJRVdfTU9ERUxTIiwic2V0dGluZ3MiLCJtb3ZlQWN0aW9uIiwibGVmdFBhbmVsRGlzYWJsZWQiLCJsZWZ0UGFuZWxUeXBlIiwibGVmdFBhbmVsV2lkdGgiLCJwb3B1cFZpc2liaWxpdHlOYW1lcyIsIm9ic2VydmFibGVBcnJheSIsInBvcHVwVmlzaWJpbGl0eSIsImtleVNjb3BlUmVhbCIsIkFsbCIsImtleVNjb3BlRmFrZSIsImtleVNjb3BlIiwiTWVudSIsIkNvbXBvc2UiLCJmaWx0ZXIiLCJlbCIsImNsYXNzTmFtZSIsInNldFNjb3BlIiwiZ2V0U2NvcGUiLCJfX0FQUF9fIiwiaUFqYXhFcnJvckNvdW50IiwiaVRva2VuRXJyb3JDb3VudCIsImlNZXNzYWdlQm9keUNhY2hlQ291bnQiLCJiVW5sb2FkIiwiY3VycmVudFNjcmVlbiIsImRlZmF1bHRTY3JlZW5OYW1lIiwiU0NSRUVOUyIsIlZpZXdUeXBlIiwiUG9wdXAiLCJMZWZ0IiwiUmlnaHQiLCJDZW50ZXIiLCJoaWRlTG9hZGluZyIsImNyZWF0ZUNvbW1hbmQiLCJhZGRTZXR0aW5nc1ZpZXdNb2RlbCIsIlNldHRpbmdzVmlld01vZGVsQ2xhc3MiLCJ0ZW1wbGF0ZSIsImxhYmVsTmFtZSIsInJvdXRlIiwiaXNEZWZhdWx0IiwiX19ybFNldHRpbmdzRGF0YSIsIkxhYmVsIiwiVGVtcGxhdGUiLCJSb3V0ZSIsIklzRGVmYXVsdCIsInJlbW92ZVNldHRpbmdzVmlld01vZGVsIiwiZGlzYWJsZVNldHRpbmdzVmlld01vZGVsIiwicm91dGVPZmYiLCJoYXNoZXIiLCJjaGFuZ2VkIiwiYWN0aXZlIiwicm91dGVPbiIsInNjcmVlbiIsInNjcmVlbk5hbWUiLCJnZXRTY3JlZW5Qb3B1cCIsIlBvcHVWaWV3TW9kZWxDbGFzcyIsImhpZGVTY3JlZW5Qb3B1cCIsIlZpZXdNb2RlbENsYXNzVG9IaWRlIiwiTW9kYWxWaWV3IiwiX192bSIsIl9fZG9tIiwibW9kYWxWaXNpYmlsaXR5Iiwidm1SdW5Ib29rIiwiaG9va05hbWUiLCJWaWV3TW9kZWxDbGFzcyIsIl9fbmFtZXMiLCJydW5Ib29rIiwiYnVpbGRWaWV3TW9kZWwiLCJ2bVNjcmVlbiIsIl9fYnVpbGRlZCIsInZtRG9tIiwidm0iLCJfX3R5cGUiLCJ2bVBsYWNlIiwib25TaG93VHJpZ2dlciIsIm9uSGlkZVRyaWdnZXIiLCJ2aWV3TW9kZWxOYW1lIiwiX19uYW1lIiwidmlld01vZGVsTmFtZXMiLCJ2aWV3TW9kZWxUZW1wbGF0ZUlEIiwiX190ZW1wbGF0ZUlEIiwidmlld01vZGVsUG9zaXRpb24iLCJ2aWV3TW9kZWxEb20iLCJjYW5jZWxDb21tYW5kIiwiY2xvc2VDb21tYW5kIiwic3RvcmVBbmRTZXRLZXlTY29wZSIsInJlc3RvcmVLZXlTY29wZSIsImFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZSIsInJlZ2lzdGVyUG9wdXBLZXlEb3duIiwiVmlld01vZGVsQ2xhc3NUb1Nob3ciLCJ3YXJtVXBTY3JlZW5Qb3B1cCIsImlzUG9wdXBWaXNpYmxlIiwic2NyZWVuT25Sb3V0ZSIsInN1YlBhcnQiLCJpc1NhbWVTY3JlZW4iLCJjcm9zcyIsIl9fc3RhcnRlZCIsInZpZXdNb2RlbHMiLCJkZWZlciIsInZpZXdNb2RlbFZpc2liaWxpdHkiLCJfX2Nyb3NzIiwic3RhcnRTY3JlZW5zIiwic2NyZWVuc0NsYXNzZXMiLCJDU2NyZWVuIiwiX19zdGFydCIsImNyb3Nzcm9hZHMiLCJjcmVhdGUiLCJhZGRSb3V0ZSIsImluaXRpYWxpemVkIiwiYWRkIiwic2V0SGFzaCIsImhhc2giLCJzaWxlbmNlIiwiY21kIiwidmlld0RlY29yYXRvciIsInRlbXBsYXRlSUQiLCJwb3B1cERlY29yYXRvciIsImNvbW1hbmREZWNvcmF0b3IiLCJkZXNjcmlwdG9yIiwiaW5pdGlhbGl6ZXIiLCJub3JtQ2FuRXhlY3V0ZSIsInNldHRpbmdzTWVudUtleXNIYW5kbGVyIiwiJGl0ZW1zIiwiaGFuZGxlciIsInVwIiwic2hvcnRjdXQiLCJyZXN1bHRIYXNoIiwiZXEiLCJUaW1lMjAwbXMiLCJJMThOX0RBVEEiLCJyYWlubG9vcEkxOE4iLCJJMThOX05PVElGSUNBVElPTl9EQVRBIiwiSTE4Tl9OT1RJRklDQVRJT05fTUFQIiwiSW52YWxpZFRva2VuIiwiQXV0aEVycm9yIiwiQWNjZXNzRXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJDYXB0Y2hhRXJyb3IiLCJTb2NpYWxGYWNlYm9va0xvZ2luQWNjZXNzRGlzYWJsZSIsIlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxHb29nbGVMb2dpbkFjY2Vzc0Rpc2FibGUiLCJEb21haW5Ob3RBbGxvd2VkIiwiQWNjb3VudE5vdEFsbG93ZWQiLCJBY2NvdW50VHdvRmFjdG9yQXV0aFJlcXVpcmVkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciIsIkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkIiwiQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0IiwiTmV3UGFzc3dvcmRTaG9ydCIsIk5ld1Bhc3N3b3JkV2VhayIsIk5ld1Bhc3N3b3JkRm9yYmlkZGVuIiwiQ29udGFjdHNTeW5jRXJyb3IiLCJDYW50R2V0TWVzc2FnZUxpc3QiLCJDYW50R2V0TWVzc2FnZSIsIkNhbnREZWxldGVNZXNzYWdlIiwiQ2FudE1vdmVNZXNzYWdlIiwiQ2FudENvcHlNZXNzYWdlIiwiQ2FudFNhdmVNZXNzYWdlIiwiQ2FudFNlbmRNZXNzYWdlIiwiSW52YWxpZFJlY2lwaWVudHMiLCJDYW50U2F2ZUZpbHRlcnMiLCJDYW50R2V0RmlsdGVycyIsIkZpbHRlcnNBcmVOb3RDb3JyZWN0IiwiQ2FudENyZWF0ZUZvbGRlciIsIkNhbnRSZW5hbWVGb2xkZXIiLCJDYW50RGVsZXRlRm9sZGVyIiwiQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyIiwiQ2FudFN1YnNjcmliZUZvbGRlciIsIkNhbnRVbnN1YnNjcmliZUZvbGRlciIsIkNhbnRTYXZlU2V0dGluZ3MiLCJDYW50U2F2ZVBsdWdpblNldHRpbmdzIiwiRG9tYWluQWxyZWFkeUV4aXN0cyIsIkNhbnRJbnN0YWxsUGFja2FnZSIsIkNhbnREZWxldGVQYWNrYWdlIiwiSW52YWxpZFBsdWdpblBhY2thZ2UiLCJVbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UiLCJMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlIiwiTGljZW5zaW5nRXhwaXJlZCIsIkxpY2Vuc2luZ0Jhbm5lZCIsIkRlbW9TZW5kTWVzc2FnZUVycm9yIiwiRGVtb0FjY291bnRFcnJvciIsIkFjY291bnRBbHJlYWR5RXhpc3RzIiwiQWNjb3VudERvZXNOb3RFeGlzdCIsIk1haWxTZXJ2ZXJFcnJvciIsIkludmFsaWRJbnB1dEFyZ3VtZW50IiwiVW5rbm93bk5vdGlmaWNhdGlvbiIsIlVua25vd25FcnJvciIsInZhbHVlTGlzdCIsImRlZmF1bFZhbHVlIiwidmFsdWVOYW1lIiwiaTE4blRvTm9kZSIsImVsZW1lbnRzIiwiYW5pbWF0ZSIsImxldHRlcmZ4IiwicmVsb2FkRGF0YSIsIm1vbWVudG9yUmVsb2FkIiwiaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlIiwiaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UiLCJzdGFydENhbGxiYWNrIiwibGFuZ0NhbGxiYWNrIiwiZ2V0Tm90aWZpY2F0aW9uIiwiY29kZSIsIm1lc3NhZ2UiLCJkZWZDb2RlIiwiQ2xpZW50Vmlld0Vycm9yIiwiZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlIiwicmVzcG9uc2UiLCJFcnJvckNvZGUiLCJFcnJvck1lc3NhZ2UiLCJnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUiLCJGaWxlSXNUb29CaWciLCJGaWxlUGFydGlhbGx5VXBsb2FkZWQiLCJGaWxlTm9VcGxvYWRlZCIsIk1pc3NpbmdUZW1wRm9sZGVyIiwiRmlsZU9uU2F2ZWluZ0Vycm9yIiwicmVsb2FkIiwiYWRtaW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImxhbmdMaW5rIiwiY2FjaGUiLCJpc1J0bCIsIkZvbGRlclVzZXJTdG9yZSIsImRpc3BsYXlTcGVjU2V0dGluZyIsInNlbnRGb2xkZXIiLCJkcmFmdEZvbGRlciIsInNwYW1Gb2xkZXIiLCJ0cmFzaEZvbGRlciIsImFyY2hpdmVGb2xkZXIiLCJuYW1lc3BhY2UiLCJmb2xkZXJMaXN0Iiwib3B0aW1pemVkIiwiZXJyb3IiLCJmb2xkZXJzTG9hZGluZyIsImZvbGRlcnNDcmVhdGluZyIsImZvbGRlcnNEZWxldGluZyIsImZvbGRlcnNSZW5hbWluZyIsImZvbGRlcnNJbmJveFVucmVhZENvdW50IiwiY3VycmVudEZvbGRlciIsInNpZXZlQWxsb3dGaWxlaW50b0luYm94IiwiY29tcHV0ZXJzIiwic3Vic2NyaWJlcnMiLCJkcmFmdEZvbGRlck5vdEVuYWJsZWQiLCJVTlVTRURfT1BUSU9OX1ZBTFVFIiwiZm9sZGVyc0xpc3RXaXRoU2luZ2xlSW5ib3hSb290Rm9sZGVyIiwiZm9sZGVyIiwiaXNTeXN0ZW1Gb2xkZXIiLCJ2aXNpYmxlIiwiY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3IiwiY3VycmVudEZvbGRlckZ1bGxOYW1lIiwiZnVsbE5hbWUiLCJjdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoIiwiZnVsbE5hbWVIYXNoIiwiZm9sZGVyc0NoYW5naW5nIiwibG9hZGluZyIsImNyZWF0aW5nIiwiZGVsZXRpbmciLCJyZW5hbWluZyIsImZvbGRlckxpc3RTeXN0ZW1OYW1lcyIsImdldEZvbGRlckluYm94TmFtZSIsImZvbGRlcnMiLCJmb2xkZXJMaXN0U3lzdGVtIiwiY29tcGFjdCIsImdldEZvbGRlckZyb21DYWNoZUxpc3QiLCJmb2xkZXJNZW51Rm9yTW92ZSIsImxvY2FsTmFtZSIsImZvbGRlck1lbnVGb3JGaWx0ZXJzIiwiZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUiLCJmU2V0U3lzdGVtRm9sZGVyVHlwZSIsIlNlbnRJdGVtcyIsIkRyYWZ0IiwiU3BhbSIsIlRyYXNoIiwiQXJjaGl2ZSIsImdldE5leHRGb2xkZXJOYW1lcyIsInV0YyIsIm1vbWVudE5vd1VuaXgiLCJ0aW1lb3V0cyIsImluYm94Rm9sZGVyTmFtZSIsImZTZWFyY2hGdW5jdGlvbiIsImludGVydmFsIiwiY2hlY2thYmxlIiwiYSIsImIiLCJhSXRlbSIsInVuaXEiLCJNZXNzYWdlVXNlclN0b3JlIiwic3RhdGljTWVzc2FnZSIsIk1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VMaXN0IiwibWVzc2FnZUxpc3RDb3VudCIsIm1lc3NhZ2VMaXN0U2VhcmNoIiwibWVzc2FnZUxpc3RUaHJlYWRVaWQiLCJtZXNzYWdlTGlzdFBhZ2UiLCJtZXNzYWdlTGlzdFBhZ2VCZWZvcmVUaHJlYWQiLCJtZXNzYWdlTGlzdEVycm9yIiwibWVzc2FnZUxpc3RFbmRGb2xkZXIiLCJtZXNzYWdlTGlzdEVuZFNlYXJjaCIsIm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkIiwibWVzc2FnZUxpc3RFbmRQYWdlIiwibWVzc2FnZUxpc3RMb2FkaW5nIiwibWVzc2FnZUxpc3RJc05vdENvbXBsZXRlZCIsIm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGUiLCJtZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlRm9yQW5pbWF0aW9uIiwibWVzc2FnZUxpc3REaXNhYmxlQXV0b1NlbGVjdCIsInNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkIiwic2VsZWN0b3JNZXNzYWdlRm9jdXNlZCIsInZpZXdUcmlnZ2VyIiwibWVzc2FnZUVycm9yIiwibWVzc2FnZUN1cnJlbnRMb2FkaW5nIiwibWVzc2FnZUxvYWRpbmdUaHJvdHRsZSIsIlRpbWU1MG1zIiwibWVzc2FnZUZ1bGxTY3JlZW5Nb2RlIiwibWVzc2FnZXNCb2RpZXNEb20iLCJtZXNzYWdlQWN0aXZlRG9tIiwib25NZXNzYWdlUmVzcG9uc2UiLCJwdXJnZU1lc3NhZ2VCb2R5Q2FjaGVUaHJvdHRsZSIsInB1cmdlTWVzc2FnZUJvZHlDYWNoZSIsIlRpbWUzMHMiLCJtZXNzYWdlTG9hZGluZyIsIm1lc3NhZ2VMaXN0RW5kSGFzaCIsIm1lc3NhZ2VMaXN0UGFnZUNvdW50IiwicGFnZSIsImNlaWwiLCJTZXR0aW5nc1N0b3JlIiwibWVzc2FnZXNQZXJQYWdlIiwibWFpbk1lc3NhZ2VMaXN0U2VhcmNoIiwibWFpbEJveCIsIkZvbGRlclN0b3JlIiwibWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmciLCJvbmUiLCJ0d28iLCJpc01lc3NhZ2VTZWxlY3RlZCIsIm1lc3NhZ2VMaXN0Q2hlY2tlZCIsImNoZWNrZWQiLCJoYXNDaGVja2VkTWVzc2FnZXMiLCJtZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkIiwic2VsZWN0ZWRNZXNzYWdlIiwiZm9jdXNlZE1lc3NhZ2UiLCJ1bmlvbiIsIm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzIiwidWlkIiwidGhyZWFkc0xlbiIsInRocmVhZHMiLCJuZXdGb3JBbmltYXRpb24iLCJOb1ByZXZpZXciLCJsYXlvdXQiLCJBcHBTdG9yZSIsImZvY3VzZWRTdGF0ZSIsIk1lc3NhZ2VWaWV3IiwiTWVzc2FnZUxpc3QiLCJoaWRlTWVzc2FnZUJvZGllcyIsImRvbSIsImZvbGRlckZ1bGxOYW1lUmF3IiwiY291bnQiLCJNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQiLCJtZXNzYWdlc0RvbSIsIlRpbWUzNTBtcyIsImluaXRVaWROZXh0QW5kTmV3TWVzc2FnZXMiLCJ1aWROZXh0IiwibmV3TWVzc2FnZXMiLCJhZGROZXdNZXNzYWdlQ2FjaGUiLCJVaWQiLCJOb3RpZmljYXRpb25TdG9yZSIsInBsYXlTb3VuZE5vdGlmaWNhdGlvbiIsImRpc3BsYXlEZXNrdG9wTm90aWZpY2F0aW9uIiwibm90aWZpY2F0aW9uTWFpbEljb24iLCJBY2NvdW50U3RvcmUiLCJNZXNzYWdlSGVscGVyIiwiRnJvbSIsIlN1YmplY3QiLCJGb2xkZXIiLCJzZXRGb2xkZXJVaWROZXh0IiwicmVtb3ZlTWVzc2FnZXNGcm9tTGlzdCIsImZyb21Gb2xkZXJGdWxsTmFtZVJhdyIsInVpZEZvclJlbW92ZSIsInRvRm9sZGVyRnVsbE5hbWVSYXciLCJjb3B5IiwibVZhbHVlIiwidW5zZWVuQ291bnQiLCJjdXJyZW50TWVzc2FnZSIsImZyb21Gb2xkZXIiLCJ0b0ZvbGRlciIsIm1lc3NhZ2VzIiwidW5zZWVuIiwibWVzc2FnZUNvdW50QWxsIiwibWVzc2FnZUNvdW50VW5yZWFkIiwiYWN0aW9uQmxpbmsiLCJkZWxldGVkIiwic2V0Rm9sZGVySGFzaCIsImluaXRCbG9ja3F1b3RlU3dpdGNoZXIiLCJtZXNzYWdlVGV4dEJvZHkiLCIkb0xpc3QiLCJwYXJlbnQiLCJoIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwiaW5pdE9wZW5QZ3BDb250cm9scyIsIlBncFN0b3JlIiwiaW5pdE1lc3NhZ2VCb2R5Q29udHJvbHMiLCJzZXRNZXNzYWdlIiwiaXNOZXciLCJyZXN1bHRIdG1sIiwicGdwU2lnbmVkIiwibmV3SW5zdGFuY2VGcm9tSnNvbiIsImluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUiLCJwb3B1bGF0ZUJ5TWVzc2FnZUxpc3RJdGVtIiwiaW5pdFVwZGF0ZUJ5TWVzc2FnZUpzb24iLCJhZGRSZXF1ZXN0ZWRNZXNzYWdlIiwiaW5pdEZsYWdzQnlKc29uIiwidGV4dEJvZHkiLCJIdG1sIiwiUGxhaW4iLCJpc1BncFNpZ25lZCIsImlzUGdwRW5jcnlwdGVkIiwiY2FwYU9wZW5QR1AiLCJoYXNJbWFnZXMiLCJIYXNFeHRlcm5hbHMiLCJzdG9yZURhdGFJbkRvbSIsIkhhc0ludGVybmFscyIsInNob3dJbnRlcm5hbEltYWdlcyIsInNob3dJbWFnZXMiLCJzaG93RXh0ZXJuYWxJbWFnZXMiLCJmZXRjaERhdGFGcm9tRG9tIiwiaGFzVW5zZWVuU3ViTWVzc2FnZSIsImdldEFwcCIsIm1lc3NhZ2VMaXN0QWN0aW9uIiwiU2V0U2VlbiIsInN1Yk1lc3NhZ2UiLCJzZWxlY3RNZXNzYWdlIiwib01lc3NhZ2UiLCJwb3B1bGF0ZU1lc3NhZ2VCb2R5Iiwic2VsZWN0TWVzc2FnZUJ5Rm9sZGVyQW5kVWlkIiwic0ZvbGRlciIsInNVaWQiLCJSZW1vdGUiLCJzUmVzdWx0Iiwib0RhdGEiLCJiQ2FjaGVkIiwiU3VjY2VzcyIsIlVubG9hZCIsIkFib3J0IiwiY2FsY3VsYXRlTWVzc2FnZUxpc3RIYXNoIiwiZmxhZ0hhc2giLCJzZXRNZXNzYWdlTGlzdCIsIm5ld0NvdW50IiwidW5yZWFkQ291bnRDaGFuZ2UiLCJpQ291bnQiLCJNZXNzYWdlUmVzdWx0Q291bnQiLCJpT2Zmc2V0IiwiT2Zmc2V0IiwiRm9sZGVySGFzaCIsIk1lc3NhZ2VDb3VudCIsIk1lc3NhZ2VVbnNlZW5Db3VudCIsIlVpZE5leHQiLCJOZXdNZXNzYWdlcyIsImNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIiLCJqc29uTWVzc2FnZSIsImhhc05ld01lc3NhZ2VBbmRSZW1vdmVGcm9tQ2FjaGUiLCJzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGUiLCJTZWFyY2giLCJUaHJlYWRVaWQiLCJjbGVhck5ld01lc3NhZ2VDYWNoZSIsInVzZVRocmVhZHMiLCJmb2xkZXJJbmZvcm1hdGlvbiIsIkZPTERFUlNfQ0FDSEUiLCJGT0xERVJTX05BTUVfQ0FDSEUiLCJGT0xERVJTX0hBU0hfQ0FDSEUiLCJGT0xERVJTX1VJRF9ORVhUX0NBQ0hFIiwiTUVTU0FHRV9GTEFHU19DQUNIRSIsIk5FV19NRVNTQUdFX0NBQ0hFIiwiUkVRVUVTVEVEX01FU1NBR0VfQ0FDSEUiLCJjYXBhR3JhdmF0YXIiLCJHcmF2YXRhciIsImdldFVzZXJQaWMiLCJjYWxsYmFjayIsIkxpbmtzIiwiZ2V0TWVzc2FnZUtleSIsImhhc1JlcXVlc3RlZE1lc3NhZ2UiLCJnZXRGb2xkZXJGdWxsTmFtZVJhdyIsImZvbGRlckhhc2giLCJzZXRGb2xkZXJGdWxsTmFtZVJhdyIsImdldEZvbGRlckhhc2giLCJnZXRGb2xkZXJVaWROZXh0Iiwic2V0Rm9sZGVyVG9DYWNoZUxpc3QiLCJyZW1vdmVGb2xkZXJGcm9tQ2FjaGVMaXN0IiwiZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlIiwiZm9sZGVyRnVsbE5hbWUiLCJzZXRNZXNzYWdlRmxhZ3NUb0NhY2hlIiwiZmxhZ3NDYWNoZSIsImZsYWdzIiwiZmxhZ2dlZCIsImlzU2ltcGxlTWVzc2FnZSIsImFuc3dlcmVkIiwiZm9yd2FyZGVkIiwiaXNSZWFkUmVjZWlwdCIsImRlbGV0ZWRNYXJrIiwidW5zZWVuU3ViVWlkIiwic1N1YlVpZCIsInN1YkZsYWdzIiwiZmxhZ2dlZFN1YlVpZCIsImhhc0ZsYWdnZWRTdWJNZXNzYWdlIiwic3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlGb2xkZXJBbmRVaWQiLCJzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeVNldEFjdGlvbiIsInNldEFjdGlvbiIsInVucmVhZCIsIlVuc2V0U2VlbiIsIlNldEZsYWciLCJVbnNldEZsYWciLCJST09UIiwiSEFTSF9QUkVGSVgiLCJTRVJWRVJfUFJFRklYIiwiU1VCX1FVRVJZX1BSRUZJWCIsIlZFUlNJT04iLCJXRUJfUFJFRklYIiwiVkVSU0lPTl9QUkVGSVgiLCJTVEFUSUNfUFJFRklYIiwiQURNSU5fSE9TVF9VU0UiLCJBRE1JTl9QQVRIIiwiQVVUSF9QUkVGSVgiLCJwb3B1bGF0ZUF1dGhTdWZmaXgiLCJzdWJRdWVyeVByZWZpeCIsInJvb3QiLCJzdGFydHVwVXJsIiwicm9vdEFkbWluIiwicm9vdFVzZXIiLCJhdHRhY2htZW50UmF3IiwiZG93bmxvYWQiLCJjdXN0b21TcGVjU3VmZml4IiwiYXR0YWNobWVudERvd25sb2FkIiwiYXR0YWNobWVudFByZXZpZXciLCJhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyIsImF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbiIsImF0dGFjaG1lbnRGcmFtZWQiLCJzZXJ2ZXJSZXF1ZXN0IiwidXBsb2FkIiwidXBsb2FkQ29udGFjdHMiLCJ1cGxvYWRCYWNrZ3JvdW5kIiwibWVzc2FnZVZpZXdMaW5rIiwicmVxdWVzdEhhc2giLCJtZXNzYWdlRG93bmxvYWRMaW5rIiwiYXZhdGFyTGluayIsInB1YmxpY0xpbmsiLCJ1c2VyQmFja2dyb3VuZCIsInBocEluZm8iLCJsYW5nIiwiaXNBZG1pbiIsImV4cG9ydENvbnRhY3RzVmNmIiwiZXhwb3J0Q29udGFjdHNDc3YiLCJzb2NpYWxHb29nbGUiLCJ4YXV0aCIsInNvY2lhbFR3aXR0ZXIiLCJzb2NpYWxGYWNlYm9vayIsInN0YXRpY1ByZWZpeCIsInBhdGgiLCJlbXB0eUNvbnRhY3RQaWMiLCJzb3VuZCIsIm9wZW5QZ3BKcyIsIm9wZW5QZ3BXb3JrZXJKcyIsIm9wZW5QZ3BXb3JrZXJQYXRoIiwidGhlbWVQcmV2aWV3TGluayIsImluYm94IiwiYWJvdXQiLCJzZWFyY2giLCJ0aHJlYWRVaWQiLCJyZXN1bHRUaHJlYWRVaWQiLCJSZW1vdGVVc2VyQWpheCIsIm9SZXF1ZXN0cyIsImRlZmF1bHRSZXF1ZXN0IiwibG9naW4iLCJzRW1haWwiLCJzTG9naW4iLCJzUGFzc3dvcmQiLCJiU2lnbk1lIiwic0xhbmd1YWdlIiwic0FkZGl0aW9uYWxDb2RlIiwiYkFkZGl0aW9uYWxDb2RlU2lnbk1lIiwiZ2V0VHdvRmFjdG9yIiwiY3JlYXRlVHdvRmFjdG9yIiwiY2xlYXJUd29GYWN0b3IiLCJzaG93VHdvRmFjdG9yU2VjcmV0IiwidGVzdFR3b0ZhY3RvciIsInNDb2RlIiwiZW5hYmxlVHdvRmFjdG9yIiwiYkVuYWJsZSIsImNsZWFyVHdvRmFjdG9ySW5mbyIsImNvbnRhY3RzU3luYyIsIkNPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUIiwic2F2ZUNvbnRhY3RzU3luY0RhdGEiLCJzVXJsIiwic1VzZXIiLCJhY2NvdW50U2V0dXAiLCJiTmV3IiwiYWNjb3VudERlbGV0ZSIsInNFbWFpbFRvRGVsZXRlIiwiYWNjb3VudHNBbmRJZGVudGl0aWVzU29ydE9yZGVyIiwiYUFjY291bnRzIiwiYUlkZW50aXRpZXMiLCJpZGVudGl0eVVwZGF0ZSIsInNJZCIsInNOYW1lIiwic1JlcGx5VG8iLCJzQmNjIiwic1NpZ25hdHVyZSIsImJTaWduYXR1cmVJbnNlcnRCZWZvcmUiLCJpZGVudGl0eURlbGV0ZSIsInNJZFRvRGVsZXRlIiwiYWNjb3VudHNBbmRJZGVudGl0aWVzIiwiYWNjb3VudHNDb3VudHMiLCJmaWx0ZXJzU2F2ZSIsImZpbHRlcnMiLCJyYXciLCJpc1Jhd0lzQWN0aXZlIiwidG9Kc29uIiwiZmlsdGVyc0dldCIsInRlbXBsYXRlcyIsInRlbXBsYXRlR2V0QnlJZCIsInNJRCIsInRlbXBsYXRlRGVsZXRlIiwidGVtcGxhdGVTZXR1cCIsInNCb2R5Iiwic0ZvbGRlckZ1bGxOYW1lUmF3IiwiaUxpbWl0Iiwic1NlYXJjaCIsInNUaHJlYWRVaWQiLCJiU2lsZW50IiwidGhyZWFkc0FsbG93ZWQiLCJpbmJveFVpZE5leHQiLCJERUZBVUxUX0FKQVhfVElNRU9VVCIsIlNFQVJDSF9BSkFYX1RJTUVPVVQiLCJCYXNlNjQiLCJwcm9qZWN0SGFzaCIsImZyb21DaGFyQ29kZSIsIkxpbWl0IiwiVXNlVGhyZWFkcyIsIm1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cyIsImFEb3dubG9hZHMiLCJpVWlkIiwiY29tcG9zZVVwbG9hZEV4dGVybmFscyIsImFFeHRlcm5hbHMiLCJjb21wb3NlVXBsb2FkRHJpdmUiLCJzQWNjZXNzVG9rZW4iLCJyZXF1ZXN0IiwidWlkcyIsIm1lc3NhZ2VMaXN0SXRlbSIsInJlbG9hZEZsYWdzQ3VycmVudE1lc3NhZ2VMaXN0QW5kTWVzc2FnZUZyb21DYWNoZSIsImZvbGRlckluZm9ybWF0aW9uTXVsdGlwbHkiLCJhRm9sZGVycyIsImxvZ291dCIsIm1lc3NhZ2VTZXRGbGFnZ2VkIiwiYVVpZHMiLCJiU2V0RmxhZ2dlZCIsIm1lc3NhZ2VTZXRTZWVuIiwiYlNldFNlZW4iLCJtZXNzYWdlU2V0U2VlblRvQWxsIiwiYVRocmVhZFVpZHMiLCJzYXZlTWVzc2FnZSIsInNJZGVudGl0eUlEIiwic01lc3NhZ2VGb2xkZXIiLCJzTWVzc2FnZVVpZCIsInNEcmFmdEZvbGRlciIsInNUbyIsInNDYyIsInNTdWJqZWN0IiwiYlRleHRJc0h0bWwiLCJzVGV4dCIsImFBdHRhY2htZW50cyIsImFEcmFmdEluZm8iLCJzSW5SZXBseVRvIiwic1JlZmVyZW5jZXMiLCJiTWFya0FzSW1wb3J0YW50IiwiU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCIsInNlbmRSZWFkUmVjZWlwdE1lc3NhZ2UiLCJzUmVhZFJlY2VpcHQiLCJzZW5kTWVzc2FnZSIsInNTZW50Rm9sZGVyIiwiYlJlcXVlc3REc24iLCJiUmVxdWVzdFJlYWRSZWNlaXB0IiwiU0VORF9NRVNTQUdFX0FKQVhfVElNRU9VVCIsInNhdmVTeXN0ZW1Gb2xkZXJzIiwic2F2ZVNldHRpbmdzSGVscGVyIiwidmFsdWVGbiIsImNoYW5nZVBhc3N3b3JkIiwicHJldlBhc3N3b3JkIiwibmV3UGFzc3dvcmQiLCJmb2xkZXJDbGVhciIsImZvbGRlclNldFN1YnNjcmliZSIsImJTdWJzY3JpYmUiLCJmb2xkZXJTZXRDaGVja2FibGUiLCJiQ2hlY2thYmxlIiwibWVzc2FnZXNNb3ZlIiwic1RvRm9sZGVyIiwic0xlYXJuaW5nIiwiYk1hcmtBc1JlYWQiLCJtZXNzYWdlc0NvcHkiLCJtZXNzYWdlc0RlbGV0ZSIsImFwcERlbGF5U3RhcnQiLCJxdW90YSIsImNvbnRhY3RzIiwiY29udGFjdFNhdmUiLCJzUmVxdWVzdFVpZCIsImFQcm9wZXJ0aWVzIiwiY29udGFjdHNEZWxldGUiLCJzdWdnZXN0aW9ucyIsInNRdWVyeSIsImlQYWdlIiwiY2xlYXJVc2VyQmFja2dyb3VuZCIsImZhY2Vib29rVXNlciIsImZhY2Vib29rRGlzY29ubmVjdCIsInR3aXR0ZXJVc2VyIiwidHdpdHRlckRpc2Nvbm5lY3QiLCJnb29nbGVVc2VyIiwiZ29vZ2xlRGlzY29ubmVjdCIsInNvY2lhbFVzZXJzIiwiQWJzdHJhY3RBamF4UmVtb3RlIiwiU1VCUyIsInN1YiIsInN1YkZ1bmMiLCJzdWJOYW1lIiwicHViIiwiUGx1Z2lucyIsIml0ZW1zIiwiTUVTU0FHRVNfUEVSX1BBR0UiLCJNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMiLCJDT05UQUNUU19QRVJfUEFHRSIsIkNMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSIsIklNQVBfREVGQVVMVF9QT1JUIiwiSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU01UUF9ERUZBVUxUX1BPUlQiLCJTTVRQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTSUVWRV9ERUZBVUxUX1BPUlQiLCJBSkFYX0VSUk9SX0xJTUlUIiwiVE9LRU5fRVJST1JfTElNSVQiLCJSQUlOTE9PUF9UUklBTF9LRVkiLCJEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyIsIkRBVEFfSU1BR0VfVFJBTlNQX1BJQyIsIkRBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMiLCJBYnN0cmFjdFZpZXdOZXh0IiwiTm9uZSIsInNDdXJyZW50S2V5U2NvcGUiLCJzRGVmYXVsdEtleVNjb3BlIiwiYkRpc2FiZUNsb3NlT25Fc2MiLCJFc2MiLCJCYWNrc3BhY2UiLCJTb2NpYWxTdG9yZSIsImdvb2dsZSIsInR3aXR0ZXIiLCJmYWNlYm9vayIsImRyb3Bib3giLCJjbGllbnRJRCIsImNsaWVudFNlY3JldCIsImFwaUtleSIsInVzZXJOYW1lIiwibG9nZ2luZWQiLCJhdXRoIiwiYXV0aEdtYWlsIiwiZHJpdmUiLCJwcmV2aWV3IiwiY2xpZW50U2V0dGluZ3MiLCJhcGlLZXlTZXR0aW5ncyIsImFwcElEIiwiYXBwU2VjcmV0Iiwic3VwcG9ydGVkIiwiY29uc3VtZXJLZXkiLCJjb25zdW1lclNlY3JldCIsInBvcHVsYXRlIiwiYXBwZW5kRHJvcGJveCIsIkRyb3Bib3giLCJnZXRFbGVtZW50QnlJZCIsInNjcmlwdCIsImFwcGVuZENoaWxkIiwiQXBwVXNlclN0b3JlIiwiY3VycmVudEF1ZGlvIiwiRm9sZGVyTGlzdCIsImNvbXBvc2VJbkVkaXQiLCJjb250YWN0c0F1dG9zYXZlIiwidXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzIiwiY29udGFjdHNJc0FsbG93ZWQiLCJhdHRhY2htZW50c0FjdGlvbnMiLCJkZXZFbWFpbCIsImRldlBhc3N3b3JkIiwiQWJzdHJhY3RBcHBTdG9yZSIsIkFic3RyYWN0Q29tcG9uZW50IiwiZnVuY1RvRGlzcG9zZSIsImNvbXBvbmVudEV4cG9ydEhlbHBlciIsIkNsYXNzT2JqZWN0IiwiY3JlYXRlVmlld01vZGVsIiwiY29tcG9uZW50SW5mbyIsImlubGluZSIsIlNldHRpbmdzVXNlclN0b3JlIiwiaUF1dG9Mb2dvdXRUaW1lciIsIlNpZGVQcmV2aWV3IiwiQm90dG9tUHJldmlldyIsImVkaXRvckRlZmF1bHRUeXBlIiwiSHRtbEZvcmNlZCIsIlBsYWluRm9yY2VkIiwidXNlQ2hlY2tib3hlc0luTGlzdCIsImFsbG93RHJhZnRBdXRvc2F2ZSIsInJlcGx5U2FtZUZvbGRlciIsImF1dG9Mb2dvdXQiLCJUaW1lMzBtSW5NaW4iLCJ1c2VQcmV2aWV3UGFuZSIsIkV2ZW50cyIsIlRpbWUxbSIsIlNJTVBMRV9IT09LUyIsIlVTRVJfVklFV19NT0RFTFNfSE9PS1MiLCJBRE1JTl9WSUVXX01PREVMU19IT09LUyIsImFkZEhvb2siLCJtYWluU2V0dGluZ3NHZXQiLCJyZW1vdGVSZXF1ZXN0IiwicGFyYW1ldGVycyIsImFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4iLCJydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzIiwiS25vaW4iLCJ2aWV3IiwicGx1Z2luU2VjdGlvbiIsInBsdWdpbnMiLCJQZ3BVc2VyU3RvcmUiLCJvcGVucGdwIiwib3BlbnBncGtleXMiLCJvcGVucGdwS2V5cmluZyIsIm9wZW5wZ3BrZXlzUHVibGljIiwiaXNQcml2YXRlIiwib3BlbnBncGtleXNQcml2YXRlIiwiaXNTdXBwb3J0ZWQiLCJmaW5kS2V5QnlIZXgiLCJrZXlzIiwiaWRzIiwiZmluZFB1YmxpY0tleUJ5SGV4IiwiZmluZFByaXZhdGVLZXlCeUhleCIsImZpbmRQdWJsaWNLZXlzQnlFbWFpbCIsImVtYWlscyIsImdldE5hdGl2ZUtleXMiLCJmaW5kUHVibGljS2V5c0J5U2lnbmluZ0tleUlkcyIsInNpZ25pbmdLZXlJZHMiLCJ0b0hleCIsImZpbmRQcml2YXRlS2V5c0J5RW5jcnlwdGlvbktleUlkcyIsImVuY3J5cHRpb25LZXlJZHMiLCJyZWNpcGllbnRzIiwicmV0dXJuV3JhcEtleXMiLCJmaW5kQWxsUHJpdmF0ZUtleXNCeUVtYWlsTm90TmF0aXZlIiwiZmluZFB1YmxpY0tleUJ5RW1haWxOb3ROYXRpdmUiLCJmaW5kUHJpdmF0ZUtleUJ5RW1haWxOb3ROYXRpdmUiLCJmaW5kQWxsUHVibGljS2V5c0J5RW1haWxOb3ROYXRpdmUiLCJmaW5kUHJpdmF0ZUtleUJ5RW1haWwiLCJwYXNzd29yZCIsInByaXZhdGVLZXkiLCJkZWNyeXB0IiwiZmluZFNlbGZQcml2YXRlS2V5IiwiZGVjcnlwdE1lc3NhZ2UiLCJnZXRFbmNyeXB0aW9uS2V5SWRzIiwicHJpdmF0ZUtleXMiLCJkZWNyeXB0ZWRLZXkiLCJkZWNyeXB0ZWRNZXNzYWdlIiwicHJpbWFyeUtleSIsImtleWlkIiwidmVyaWZ5TWVzc2FnZSIsIm9WYWxpZEtleSIsImFTaWduaW5nS2V5SWRzIiwiZ2V0U2lnbmluZ0tleUlkcyIsInB1YmxpY0tleXMiLCJ2ZXJpZnkiLCJ2YWxpZCIsImNvbnRyb2xzSGVscGVyIiwidmVyQ29udHJvbCIsInN1Y2Nlc3MiLCJkb21Db250cm9sRW5jcnlwdGVkQ2xpY2tIZWxwZXIiLCJzdG9yZSIsImFybW9yZWRNZXNzYWdlIiwicmVhZEFybW9yZWQiLCJnZXRUZXh0IiwidmFsaWRQcml2YXRlS2V5IiwidmFsaWRQdWJsaWNLZXkiLCJ1c2VyIiwia2V5SWRzIiwiYWRkaXRpb25hbCIsImRvbUNvbnRyb2xTaWduZWRDbGlja0hlbHBlciIsImNsZWFydGV4dCIsInZhbGlkS2V5IiwicmFpbkxvb3BNZXNzYWdlIiwiZW5jcnlwdGVkIiwic2lnbmVkIiwiZ2V0RW1haWxzIiwiZG9tVGV4dCIsIkFjY291bnRVc2VyU3RvcmUiLCJwYXJlbnRFbWFpbCIsInNpZ25hdHVyZSIsImFjY291bnRzIiwiYWNjb3VudHNFbWFpbHMiLCJhY2NvdW50c1VucmVhZENvdW50IiwiaXNSb290QWNjb3VudCIsIlN1cHBvcnRlZFN0b3JhZ2VEcml2ZXIiLCJMb2NhbFN0b3JhZ2VEcml2ZXIiLCJDb29raWVEcml2ZXIiLCJTdG9yYWdlRHJpdmVyIiwiZHJpdmVyIiwic2V0IiwiZ2V0IiwiX21vbWVudCIsIl9tb21lbnROb3ciLCJ1cGRhdGVNb21lbnROb3ciLCJ1cGRhdGVNb21lbnROb3dVbml4IiwidW5peCIsIm1vbWVudE5vdyIsInNlYXJjaFN1YnRyYWN0Rm9ybWF0RGF0ZUhlbHBlciIsInN1YnRyYWN0IiwiZm9ybWF0IiwiZm9ybWF0Q3VzdG9tU2hvcnREYXRlIiwibm93IiwiZnJvbU5vdyIsIlRJTUUiLCJ5ZWFyIiwidGltZVN0YW1wSW5VVEMiLCJmb3JtYXRTdHIiLCJ0aW1lIiwiZW1haWxBcnJheVRvU3RyaW5nIiwiZnJpZW5kbHlWaWV3Iiwid3JhcFdpdGhMaW5rIiwiZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIiLCJlbWFpbEFycmF5RnJvbUpzb24iLCJyZXBseUhlbHBlciIsImlucHV0RW1haWxzIiwidW5pYyIsImxvY2FsRW1haWxzIiwiQWJzdHJhY3RNb2RlbCIsIm1vZGVsTmFtZSIsInNNb2RlbE5hbWUiLCJyZWdEaXNwb3NhYmxlcyIsIkxhbmd1YWdlU3RvcmUiLCJsYW5ndWFnZXMiLCJsYW5ndWFnZXNBZG1pbiIsImxhbmd1YWdlQWRtaW4iLCJ1c2VyTGFuZ3VhZ2UiLCJ1c2VyTGFuZ3VhZ2VBZG1pbiIsImFMYW5ndWFnZXMiLCJhTGFuZ3VhZ2VzQWRtaW4iLCJka2ltU3RhdHVzIiwiZGtpbVZhbHVlIiwiY2xlYXJEdXBsaWNhdGVOYW1lIiwiaW5pdEJ5SnNvbiIsInZhbGlkYXRlIiwid2l0aG91dE5hbWUiLCJOYW1lIiwiRW1haWwiLCJEa2ltU3RhdHVzIiwiRGtpbVZhbHVlIiwidXNlRW5jb2RlSHRtbCIsInBhcnNlZFJlc3VsdCIsImFkZHJlc3NwYXJzZXIiLCJleGlzdHMiLCJhZGRyZXNzIiwiZW1haWxBZGRyZXNzIiwiQXVkaW8iLCJwbGF5ZXIiLCJjcmVhdGVOZXdPYmplY3QiLCJwbGF5IiwiY2FuUGxheVR5cGUiLCJzdXBwb3J0ZWRNcDMiLCJzdXBwb3J0ZWRXYXYiLCJzdXBwb3J0ZWRPZ2ciLCJzdXBwb3J0ZWROb3RpZmljYXRpb24iLCJzdG9wRm4iLCJhZGRFdmVudExpc3RlbmVyIiwicGF1c2UiLCJwcmVsb2FkIiwibG9vcCIsImF1dG9wbGF5IiwibXV0ZWQiLCJwYXVzZWQiLCJjbGVhck5hbWUiLCJwbGF5TXAzIiwicGxheU9nZyIsInBsYXlXYXYiLCJwbGF5Tm90aWZpY2F0aW9uIiwibm90aWZpY2F0b3IiLCJBYnN0cmFjdElucHV0IiwibGFiZWwiLCJwcmVMYWJlbCIsImVuYWJsZSIsInBsYWNlaG9sZGVyIiwibGFiZWxlZCIsInByZUxhYmVsZWQiLCJ0cmlnZ2VyZWQiLCJjbGFzc0ZvclRyaWdnZXIiLCJzdWZmaXhWYWx1ZSIsInNldFRyaWdnZXJTdGF0ZSIsIlVzZXJBamF4VXNlclByb21pc2VzIiwiZm9sZGVyc1RpbWVvdXQiLCJmb2xkZXJzUmVsb2FkIiwiZlRyaWdnZXIiLCJwb3N0UmVxdWVzdCIsIlByb21pc2VzUG9wdWxhdG9yIiwiZm9sZGVyc0xpc3QiLCJmb2xkZXJzQWRkaXRpb25hbFBhcmFtZXRlcnMiLCJmb2xkZXJzUmVsb2FkV2l0aFRpbWVvdXQiLCJzZXRUcmlnZ2VyIiwiZm9sZGVyRGVsZXRlIiwiZm9sZGVyQ3JlYXRlIiwic05ld0ZvbGRlck5hbWUiLCJzUGFyZW50TmFtZSIsImZvbGRlclJlbmFtZSIsInNQcmV2Rm9sZGVyRnVsbE5hbWVSYXciLCJzQWN0aW9uIiwiYUhhc2hlcyIsIndlbGNvbWVDbG9zZSIsIkFic3RyYWN0QWpheFByb21pc2VzIiwiSWRlbnRpdHlVc2VyU3RvcmUiLCJpZGVudGl0aWVzIiwiaWRlbnRpdGllc0lEUyIsIkNvbnRhY3RVc2VyU3RvcmUiLCJpbXBvcnRpbmciLCJzeW5jaW5nIiwiZXhwb3J0aW5nVmNmIiwiZXhwb3J0aW5nQ3N2IiwiYWxsb3dDb250YWN0c1N5bmMiLCJlbmFibGVDb250YWN0c1N5bmMiLCJjb250YWN0c1N5bmNVcmwiLCJjb250YWN0c1N5bmNVc2VyIiwiY29udGFjdHNTeW5jUGFzcyIsImphc3NsIiwiYXN5bmMiLCJhbGwiLCJvbmVycm9yIiwiVGhlbWVTdG9yZSIsInRoZW1lcyIsInRoZW1lQmFja2dyb3VuZE5hbWUiLCJ0aGVtZUJhY2tncm91bmRIYXNoIiwiTm90aWZpY2F0aW9uVXNlclN0b3JlIiwiZW5hYmxlU291bmROb3RpZmljYXRpb24iLCJzb3VuZE5vdGlmaWNhdGlvbklzU3VwcG9ydGVkIiwiYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uIiwiZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zIiwiTm90U3VwcG9ydGVkIiwiTm90aWZpY2F0aW9uQ2xhc3MiLCJub3RpZmljYXRpb25DbGFzcyIsInBlcm1pc3Npb24iLCJBbGxvd2VkIiwiRGVuaWVkIiwiTm90QWxsb3dlZCIsIndlYmtpdE5vdGlmaWNhdGlvbnMiLCJjaGVja1Blcm1pc3Npb24iLCJlbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uIiwicmVxdWVzdFBlcm1pc3Npb24iLCJpbml0Tm90aWZpY2F0aW9uUGxheWVyIiwiaXNEZXNrdG9wTm90aWZpY2F0aW9uU3VwcG9ydGVkIiwiaXNEZXNrdG9wTm90aWZpY2F0aW9uRGVuaWVkIiwic2tpcFNldHRpbmciLCJpbWFnZVNyYyIsIm5lc3NhZ2VEYXRhIiwibm90aWZpY2F0aW9uIiwiaWNvbiIsIm9uY2xpY2siLCJsb2NhbE5vdGlmaWNhdGlvbnMiLCJjYW5jZWwiLCJUaW1lN3MiLCJDb21wb3NlUG9wdXBWaWV3IiwicG9wdXAiLCJzZWxmIiwiY2FuQmVTZW50T3JTYXZlZCIsImlzRHJhZnRGb2xkZXJNZXNzYWdlIiwiYWxsb3dDb250YWN0cyIsImRyb3Bib3hFbmFibGVkIiwiZHJpdmVFbmFibGVkIiwiZkVtYWlsT3V0SW5IZWxwZXIiLCJpZGVudGl0eSIsImlzSW4iLCJpZGVudGl0eUVtYWlsIiwib0xhc3RNZXNzYWdlIiwib0VkaXRvciIsImJGcm9tRHJhZnQiLCJzTGFzdEZvY3VzZWRGaWVsZCIsInJlc2l6ZXJUcmlnZ2VyIiwiYWxsb3dGb2xkZXJzIiwiRm9sZGVycyIsImJTa2lwTmV4dEhpZGUiLCJpZGVudGl0aWVzRHJvcGRvd25UcmlnZ2VyIiwicmVwbHlUbyIsInJlcXVlc3REc24iLCJyZXF1ZXN0UmVhZFJlY2VpcHQiLCJtYXJrQXNJbXBvcnRhbnQiLCJzZW5kRXJyb3IiLCJzZW5kU3VjY2Vzc0J1dFNhdmVFcnJvciIsInNhdmVkRXJyb3IiLCJzZW5kQnV0dG9uU3VjY2VzcyIsInNlbmRFcnJvckRlc2MiLCJzYXZlZEVycm9yRGVzYyIsInNhdmVkVGltZSIsInNhdmVkVGltZVRleHQiLCJtb21lbnRvckZvcm1hdCIsImVtcHR5VG9FcnJvciIsImVtcHR5VG9FcnJvclRvb2x0aXAiLCJhdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yIiwiYXR0YWNobWVudHNJbkVycm9yRXJyb3IiLCJhdHRhY2htZW50c0Vycm9yVG9vbHRpcCIsInNob3dDYyIsInNob3dCY2MiLCJzaG93UmVwbHlUbyIsImRyYWZ0VWlkIiwic2VuZGluZyIsInNhdmluZyIsImF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHNJblByb2Nlc3MiLCJjb21wbGV0ZSIsImF0dGFjaG1lbnRzSW5SZWFkeSIsImF0dGFjaG1lbnRzSW5FcnJvciIsImF0dGFjaG1lbnRzQ291bnQiLCJhdHRhY2htZW50c0luRXJyb3JDb3VudCIsImF0dGFjaG1lbnRzSW5Qcm9jZXNzQ291bnQiLCJhdHRhY2htZW50c1BsYWNlIiwiY29tcG9zZVVwbG9hZGVyQnV0dG9uIiwiY29tcG9zZVVwbG9hZGVyRHJvcFBsYWNlIiwiZHJhZ0FuZERyb3BFbmFibGVkIiwiZHJhZ0FuZERyb3BPdmVyIiwiZHJhZ0FuZERyb3BWaXNpYmxlIiwiYXR0YWNoZU11bHRpcGxlQWxsb3dlZCIsImFkZEF0dGFjaG1lbnRFbmFibGVkIiwiY29tcG9zZUVkaXRvckFyZWEiLCJJZGVudGl0eVN0b3JlIiwiaWRlbnRpdGllc09wdGlvbnMiLCJmb3JtYXR0ZWROYW1lIiwiY3VycmVudElkZW50aXR5IiwiY3VycmVudElkZW50aXR5VmlldyIsInJlc2l6ZXIiLCJzZW5kTWVzc2FnZVJlc3BvbnNlIiwic2F2ZU1lc3NhZ2VSZXNwb25zZSIsImlzRW1wdHlGb3JtIiwic2F2ZUNvbW1hbmQiLCJkcm9wYm94QXBpS2V5IiwiZHJpdmVWaXNpYmxlIiwiZHJpdmVDYWxsYmFjayIsIm9uTWVzc2FnZVVwbG9hZEF0dGFjaG1lbnRzIiwidHJ5VG9DbG9zZVBvcHVwIiwiZW1haWxzU291cmNlIiwiYXV0b3NhdmVGdW5jdGlvbiIsImlUaW1lciIsInNlbmRDb21tYW5kIiwiU2VudCIsImdldERhdGEiLCJwcmVwZWFyQXR0YWNobWVudHNGb3JTZW5kT3JTYXZlIiwiYXV0b3NhdmVTdGFydCIsImRlbGV0ZUNvbW1hbmQiLCJQb3B1cHNBc2tWaWV3TW9kZWwiLCJkZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXJXaXRob3V0Q2hlY2siLCJza2lwQ29tbWFuZCIsImNvbnRhY3RzQ29tbWFuZCIsImRyb3Bib3hDb21tYW5kIiwiY2hvb3NlIiwiZmlsZXMiLCJhZGREcm9wYm94QXR0YWNobWVudCIsImxpbmtUeXBlIiwibXVsdGlzZWxlY3QiLCJkcml2ZUNvbW1hbmQiLCJkcml2ZU9wZW5Qb3B1cCIsImF1dG9zYXZlU3RvcCIsImZSZXNwb25zZSIsImdldEF1dG9jb21wbGV0ZSIsInRlcm0iLCJhRGF0YSIsIm9FbWFpbEl0ZW0iLCJvcGVuT3BlblBncFBvcHVwIiwic2V0UGxhaW4iLCJyZWxvYWREcmFmdEZvbGRlciIsInJlbG9hZE1lc3NhZ2VMaXN0IiwiZmluZElkZW50aXR5QnlNZXNzYWdlIiwiY29tcG9zZVR5cGUiLCJyZXN1bHRJbmRleCIsInJlc3VsdElkZW50aXR5IiwiaWRlbnRpdGllc0NhY2hlIiwiZkVhY2hIZWxwZXIiLCJSZXBseSIsIlJlcGx5QWxsIiwiRm9yd2FyZCIsIkZvcndhcmRBc0F0dGFjaG1lbnQiLCJkZWxpdmVyZWRUbyIsImZyb20iLCJzZWxlY3RJZGVudGl0eSIsInNldFNpZ25hdHVyZUZyb21JZGVudGl0eSIsInN0YXR1c1Jlc3VsdCIsIk5ld0ZvbGRlciIsIk5ld1VpZCIsIk1lc3NhZ2VTdG9yZSIsIm9uSGlkZSIsInJlc2V0IiwiZk9uSW5pdCIsImJIdG1sIiwiY29udmVyU2lnbmF0dXJlIiwiZnJvbUxpbmUiLCJtb21lbnRzIiwibW9tZW50UmVneCIsImVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIiLCJleGVjIiwic2V0U2lnbmF0dXJlIiwic2lnbmF0dXJlSW5zZXJ0QmVmb3JlIiwib25TaG93Iiwib01lc3NhZ2VPckFycmF5IiwiYVRvRW1haWxzIiwiYUNjRW1haWxzIiwiYUJjY0VtYWlscyIsInNDdXN0b21TdWJqZWN0Iiwic0N1c3RvbVBsYWluVGV4dCIsImluaXRPblNob3ciLCJhZGRFbWFpbHNUbyIsIm9uV2FybVVwIiwibW9kZVRvZ2dsZSIsImZLb1ZhbHVlIiwiYkZyaWVuZGx5Iiwic1R5cGUiLCJzRnJvbSIsInNEYXRlIiwic1JlcGx5VGl0bGUiLCJleGNsdWRlRW1haWwiLCJtRW1haWwiLCJsaW5lQ29tcG9zZVR5cGUiLCJkYXRlVGltZVN0YW1wSW5VVEMiLCJjbG9uZWRUZXh0IiwicmVzcGx5QWxsUGFydHMiLCJyZXBseUVtYWlscyIsInByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMiLCJzTWVzc2FnZUlkIiwicmVwbHlBbGxFbWFpbHMiLCJyZWZlcmVuY2VzIiwiRWRpdEFzTmV3IiwiZnJvbVRvTGluZSIsInRvVG9MaW5lIiwiY2NUb0xpbmUiLCJzZXRIdG1sIiwic2V0Rm9jdXNJblBvcHVwIiwiYWRkTWVzc2FnZUFzQXR0YWNobWVudCIsImRvd25sb2FkcyIsImdldEF0dGFjaG1lbnRzRG93bmxvYWRzRm9yVXBsb2FkIiwidGVtcE5hbWUiLCJhdHRhY2htZW50IiwiZ2V0QXR0YWNobWVudEJ5SWQiLCJ3YWl0aW5nIiwidXBsb2FkaW5nIiwic2V0TWVzc2FnZUF0dGFjaG1lbnRGYWlsZWREb3dubG9hZFRleHQiLCJvblNob3dXaXRoRGVsYXkiLCJvbkJ1aWxkIiwiaW5pdFVwbG9hZGVyIiwiaGFzRm9jdXMiLCJnZXRTY3JpcHQiLCJnYXBpIiwiVGltZTVzIiwiYWNjZXNzVG9rZW4iLCJwaWNrZXIiLCJSZXNwb25zZSIsIkFDVElPTiIsIkFjdGlvbiIsIlBJQ0tFRCIsIkRPQ1VNRU5UUyIsInNldFJlcXVlc3RIZWFkZXIiLCJyZXNwb25zZVRleHQiLCJmRXhwb3J0IiwibWltZVR5cGUiLCJleHBvcnRMaW5rcyIsImRvd25sb2FkVXJsIiwiYWRkRHJpdmVBdHRhY2htZW50Iiwic2VuZCIsImRyaXZlQ3JlYXRlUGlrZXIiLCJhdXRoVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJsb2FkIiwiZHJpdmVQaWNrZXIiLCJQaWNrZXJCdWlsZGVyIiwiYWRkVmlldyIsIlZpZXdJZCIsIkRPQ1MiLCJzZXRBcHBJZCIsInNldE9BdXRoVG9rZW4iLCJzZXRDYWxsYmFjayIsImVuYWJsZUZlYXR1cmUiLCJGZWF0dXJlIiwiTkFWX0hJRERFTiIsImJ1aWxkIiwic2V0VmlzaWJsZSIsImdldFRva2VuIiwiYXV0aFJlc3VsdCIsInRva2VuIiwiYXV0aG9yaXplIiwiY2FuY2VsQXR0YWNobWVudEhlbHBlciIsIm9KdWEiLCJ1cGxvYWRDYWNoZSIsImF0dGFjaG1lbnRTaXplTGltaXQiLCJKdWEiLCJsb2FkZWQiLCJ0b3RhbCIsInByb2dyZXNzIiwiZmxvb3IiLCJGaWxlTmFtZSIsIlNpemUiLCJDb21wb3NlQXR0YWNobWVudE1vZGVsIiwiZXJyb3JDb2RlIiwiYXR0YWNobWVudEpzb24iLCJBdHRhY2htZW50IiwiaW5pdEJ5VXBsb2FkSnNvbiIsImlzRHJhZ0FuZERyb3BTdXBwb3J0ZWQiLCJpc0lubGluZSIsIkNJRCIsImNvbnRlbnRMb2NhdGlvbiIsImZyb21NZXNzYWdlIiwiYWRkQXR0YWNobWVudEhlbHBlciIsImRyb3Bib3hGaWxlIiwibVNpemUiLCJieXRlcyIsImRyaXZlRmlsZSIsImZpbGVTaXplIiwiaXNMaW5rZWQiLCJlc3RpbWF0ZWRTaXplIiwiY2lkIiwicmVtb3ZlTGlua2VkQXR0YWNobWVudHMiLCJhcnJhY2htZW50IiwiaW5jbHVkZUF0dGFjaG1lbnRJblByb2dyZXNzIiwid2l0aG91dEF0dGFjaG1lbnQiLCJBYnN0cmFjdFNjcmVlbiIsInNTY3JlZW5OYW1lIiwiYVZpZXdNb2RlbHMiLCJyb3V0ZXMiLCJvQ3Jvc3MiLCJmTWF0Y2hlciIsIm9uUm91dGUiLCJydWxlcyIsIlNUT1JBR0VfS0VZIiwiVElNRV9LRVkiLCJpc1N0b3JhZ2VTdXBwb3J0ZWQiLCJzdG9yYWdlTmFtZSIsInN0b3JhZ2VJc0F2YWlsYWJsZSIsInNldEl0ZW0iLCJzIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJTRVNTX1NUT1JBR0UiLCJzZXNzaW9uU3RvcmFnZSIsIldJTl9TVE9SQUdFIiwiX19nZXQiLCJfX3NldCIsInNldFRpbWVzdGFtcCIsImdldFRpbWVzdGFtcCIsImdldEhhc2giLCJhcHBEYXRhIiwiY2xlYXJIYXNoIiwiY2hlY2tUaW1lc3RhbXAiLCJBYnN0cmFjdENoZWNrYm94IiwiZGlzYWJsZSIsInJlYWRPbmx5IiwiaW52ZXJ0ZWQiLCJsYWJlbEFuaW1hdGVkIiwiVGVtcGxhdGVVc2VyU3RvcmUiLCJ0ZW1wbGF0ZXNOYW1lcyIsInNraXBGaXJzdCIsInN0YXRpY0ZpbGVUeXBlIiwiVW5rbm93biIsIm1pbWVUeXBlUGFydHMiLCJWaWRlbyIsIkNvZGUiLCJFbWwiLCJUZXh0IiwiUGRmIiwiQ2VydGlmaWNhdGUiLCJDZXJ0aWZpY2F0ZUJpbiIsIldvcmRUZXh0IiwiU2hlZXQiLCJQcmVzZW50YXRpb24iLCJzdGF0aWNJY29uQ2xhc3MiLCJmaWxlVHlwZSIsInJlc3VsdFRleHQiLCJyZXN1bHRDbGFzcyIsInN0YXRpY0NvbWJpbmVkSWNvbkNsYXNzIiwidHlwZXMiLCJBdHRhY2htZW50TW9kZWwiLCJmaWxlTmFtZUV4dCIsImlzVGh1bWJuYWlsIiwiY2lkV2l0aE91dFRhZ3MiLCJtaW1lSW5kZXgiLCJmcmFtZWQiLCJiUmVzdWx0IiwiTWltZVR5cGUiLCJFc3RpbWF0ZWRTaXplIiwiSXNJbmxpbmUiLCJJc0xpbmtlZCIsIklzVGh1bWJuYWlsIiwiQ29udGVudExvY2F0aW9uIiwiRG93bmxvYWQiLCJNaW1lSW5kZXgiLCJGcmFtZWQiLCJpc0ltYWdlIiwiaXNNcDMiLCJpc09nZyIsImlzV2F2IiwiaGFzVGh1bWJuYWlsIiwiaXNUZXh0IiwiaXNQZGYiLCJpc0ZyYW1lZCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWQiLCJoYXNQcmV2aWV3IiwiaGFzUHJlcGxheSIsImxpbmtEb3dubG9hZCIsImxpbmtQcmV2aWV3IiwibGlua1RodW1ibmFpbCIsImxpbmtUaHVtYm5haWxQcmV2aWV3U3R5bGUiLCJsaW5rRnJhbWVkIiwibGlua1ByZXZpZXdBc1BsYWluIiwibGlua1ByZXZpZXdNYWluIiwiZ2VuZXJhdGVUcmFuc2ZlckRvd25sb2FkVXJsIiwiaG9zdCIsInBhdGhuYW1lIiwiZXZlbnREcmFnU3RhcnQiLCJsb2NhbEV2ZW50Iiwib3JpZ2luYWxFdmVudCIsImRhdGFUcmFuc2ZlciIsInNldERhdGEiLCJpY29uQ2xhc3MiLCJpY29uVGV4dCIsIkNoZWNrYm94Q29tcG9uZW50Iiwib25CbHVyIiwib25SZWFkeSIsIm9uTW9kZUNoYW5nZSIsIiRlbGVtZW50IiwicmVzaXplRWRpdG9yIiwicnVuT25CbHVyIiwiYmx1clRyaWdnZXIiLCJibHVyVGltZXIiLCJmb2N1c1RyaWdnZXIiLCJtb2RlIiwiY2xlYXJDYWNoZWRTaWduYXR1cmUiLCJleGVjQ29tbWFuZCIsImNsZWFyQ2FjaGUiLCJjaGVja0RpcnR5IiwicmVzZXREaXJ0eSIsIndyYXBJc0h0bWwiLCJfX3BsYWluIiwiZ2V0UmF3RGF0YSIsInNldE1vZGUiLCJfX2luaXRlZCIsInJlcGxhY2VIdG1sIiwiZmluZCIsInNldFJhd0RhdGEiLCJpbml0RnVuYyIsImNvbmZpZyIsImFsbG93U291cmNlIiwiYml0aSIsInRvb2xiYXJHcm91cHMiLCJfX2NmZ0luaXRlZCIsInJlbW92ZUJ1dHRvbnMiLCJyZW1vdmVQbHVnaW5zIiwiZW50ZXJNb2RlIiwiQ0tFRElUT1IiLCJFTlRFUl9CUiIsInNoaWZ0RW50ZXJNb2RlIiwiRU5URVJfUCIsImVudiIsImlzQ29tcGF0aWJsZSIsIlRhYiIsIkZpbGVSZWFkZXIiLCJnZXRGaWxlc0NvdW50IiwiZmlsZSIsImdldEZpbGUiLCJpbWFnZUlkIiwicmVhZGVyIiwib25sb2FkZW5kIiwicmVhZEFzRGF0YVVSTCIsInJlbW92ZU1lbnVJdGVtIiwiX19yZXNpemFibGUiLCJfX2luaXRFZGl0b3IiLCJmb2N1c01hbmFnZXIiLCJpbm5lckhlaWdodCIsInNldFJlYWRPbmx5Iiwic3R5bGVzIiwicmFpbmxvb3AiLCJyYWlubG9vcFRpcCIsInJhaW5sb29wRXJyb3JUaXAiLCJGaWx0ZXJVc2VyU3RvcmUiLCJtb2R1bGVzIiwiQXNrUG9wdXBWaWV3IiwiYXNrRGVzYyIsInllc0J1dHRvbiIsIm5vQnV0dG9uIiwieWVzRm9jdXMiLCJub0ZvY3VzIiwiZlllc0FjdGlvbiIsImZOb0FjdGlvbiIsImJGb2N1c1llc09uU2hvdyIsIlBvcHVwQXNrIiwiY2xlYXJQb3B1cCIsInllc0NsaWNrIiwibm9DbGljayIsImZZZXNGdW5jIiwiZk5vRnVuYyIsImlzRm9jdXNZZXNPblNob3ciLCJRdW90YVVzZXJTdG9yZSIsInVzYWdlIiwicGVyY2VudGFnZSIsInBvcHVsYXRlRGF0YSIsIkJpdExlbmd0aDEwMjQiLCJMYW5ndWFnZXNQb3B1cFZpZXciLCJmTGFuZyIsImxhbmdzIiwic2VsZWN0ZWQiLCJzZXRMYW5ndWFnZVNlbGVjdGlvbiIsImxhbmd1YWdlVG9vbHRpcE5hbWUiLCJjdXJyZW50TGFuZyIsIm9uQmVmb3JlU2hvdyIsImZMYW5ndWFnZSIsImNoYW5nZUxhbmd1YWdlIiwiQXBwIiwicmwiLCJwbHVnaW5TZXR0aW5nc0dldCIsInBsdWdpblJlbW90ZVJlcXVlc3QiLCJFbnVtcyIsImJvb3RzdGFydCIsIlRpbWUxMG1zIiwiX19BUFBfQk9PVCIsImZFcnJvckNhbGxiYWNrIiwicmFpbmxvb3BURU1QTEFURVMiLCJpbm5lckhUTUwiLCJhbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MiLCJhbGxvd0xhbmd1YWdlc09uTG9naW4iLCJuZXdNb3ZlVG9Gb2xkZXIiLCJpbnRlcmZhY2VBbmltYXRpb24iLCJhbmltIiwicHJlbSIsImRlZmF1bHRSZXNwb25zZSIsInNSZXF1ZXN0QWN0aW9uIiwib1JlcXVlc3RQYXJhbWV0ZXJzIiwiZkNhbGwiLCJsb2dpbkFuZExvZ291dFJlbG9hZCIsIkNsZWFyQXV0aCIsIkxvZ291dCIsImNsZWFyQ2xpZW50U2lkZVRva2VuIiwiYWpheFJlcXVlc3QiLCJmUmVzdWx0Q2FsbGJhY2siLCJpVGltZU91dCIsInNHZXRBZGQiLCJhYm9ydEFjdGlvbnMiLCJpc1Bvc3QiLCJoZWFkZXJzIiwiYWN0aW9uVG9BYm9ydCIsIl9fYWJvcnRlZCIsIlhUb2tlbiIsIm9EZWZBamF4IiwiZ2xvYmFsIiwiYWx3YXlzIiwiVGltZSIsIlVwZGF0ZVRva2VuIiwic2V0Q2xpZW50U2lkZVRva2VuIiwiY2F0Y2giLCJvUGFyYW1ldGVycyIsImlUaW1lb3V0IiwiYUFib3J0QWN0aW9ucyIsImdldFB1YmxpY0tleSIsImpzVmVyc2lvbiIsInNWZXJzaW9uIiwiQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiIsIm1lbnUiLCJvQ3VycmVudFN1YlNjcmVlbiIsIm9WaWV3TW9kZWxQbGFjZSIsInNldHVwU2V0dGluZ3MiLCJzZXR0aW5nc1NjcmVlbiIsIlJvdXRlZFNldHRpbmdzVmlld01vZGVsIiwidmlld01vZGVsUGxhY2UiLCJTZXR0aW5nc1ZpZXdNb2RlbCIsIkRpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ0bXBsIiwiUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwiLCJEZWZhdWx0Vmlld01vZGVsIiwiZGVmYXVsdFJvdXRlIiwic3VibmFtZSIsIm5vcm1hbGl6ZV8iLCJycXVlc3QiLCJ2YWxzIiwiQWJzdHJhY3RBcHAiLCJnb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUiLCJpc0xvY2FsQXV0b2NvbXBsZXRlIiwiaWZyYW1lIiwibGFzdEVycm9yVGltZSIsImlIIiwiaVciLCJnZXRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJkZWZhdWx0XyIsImFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiIsIm9MaW5rIiwiaHJlZiIsImNyZWF0ZUV2ZW50Iiwib0UiLCJNb3VzZUV2ZW50cyIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJzZXRXaW5kb3dUaXRsZSIsInJlZGlyZWN0VG9BZG1pblBhbmVsIiwiX19ybGFoX2NsZWFyIiwiX19ybGFoX3NldCIsImluSWZyYW1lIiwiY3VzdG9tTG9nb3V0TGluayIsImhpc3RvcnlCYWNrIiwiaGlzdG9yeSIsImJhY2siLCJtb2JpbGUiLCJjb21wb25lbnRzIiwicmVnaXN0ZXIiLCJUaW1lMXMiLCJzc20iLCJhZGRTdGF0ZSIsIm9uTGVhdmUiLCJBYnN0cmFjdEJvb3QiLCJBYnN0cmFjdFJhZGlvIiwicHJvZ3Jlc3NUZXh0IiwicCIsInByb2dyZXNzU3R5bGUiLCJsb2NhbFNpemUiLCJmaWxlRXh0IiwiVGVtcE5hbWUiLCJDb250YWN0UHJvcGVydHlNb2RlbCIsInR5cGVTdHIiLCJwbGFjZWhvbGRlclZhbHVlIiwibGFyZ2VWYWx1ZSIsIk5vdGUiLCJGb2xkZXJTeXN0ZW1Qb3B1cFZpZXciLCJzQ2hvb3NlT25UZXh0Iiwic1VudXNlVGV4dCIsImZvbGRlclNlbGVjdExpc3QiLCJmU2V0U3lzdGVtRm9sZGVycyIsImZTYXZlU3lzdGVtRm9sZGVycyIsIlNlbnRGb2xkZXIiLCJEcmFmdEZvbGRlciIsIlNwYW1Gb2xkZXIiLCJUcmFzaEZvbGRlciIsIkFyY2hpdmVGb2xkZXIiLCJOdWxsRm9sZGVyIiwibm90aWZpY2F0aW9uVHlwZSIsIkFic3RyYWN0QmFzaWNQcm9taXNlcyIsImZhc3RSZXNvbHZlIiwibURhdGEiLCJmYXN0UmVqZWN0IiwiQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IiwibG9nb0ltZyIsImxvZ29UaXRsZSIsIm1vYmlsZURldmljZSIsImFsbG93U2V0dGluZ3MiLCJhbGxvd0hlbHAiLCJIZWxwIiwiYWNjb3VudEVtYWlsIiwiYWNjb3VudE1lbnVEcm9wZG93blRyaWdnZXIiLCJjYXBhQWRkaXRpb25hbEFjY291bnRzIiwiQWRkaXRpb25hbEFjY291bnRzIiwiYWRkQWNjb3VudENsaWNrIiwic3RvcFBsYXkiLCJhY2NvdW50Q2xpY2siLCJhY2NvdW50IiwiZW1haWxUaXRsZSIsInNldHRpbmdzQ2xpY2siLCJzZXR0aW5nc0hlbHAiLCJsb2dvdXRDbGljayIsIlNlbGVjdG9yIiwia29MaXN0Iiwia29TZWxlY3RlZEl0ZW0iLCJrb0ZvY3VzZWRJdGVtIiwic0l0ZW1TZWxlY3RvciIsInNJdGVtU2VsZWN0ZWRTZWxlY3RvciIsInNJdGVtQ2hlY2tlZFNlbGVjdG9yIiwic0l0ZW1Gb2N1c2VkU2VsZWN0b3IiLCJsaXN0Q2hlY2tlZCIsImlzTGlzdENoZWNrZWQiLCJmb2N1c2VkSXRlbSIsInNlbGVjdGVkSXRlbSIsIml0ZW1TZWxlY3RlZFRocm90dGxlIiwiaXRlbVNlbGVjdGVkIiwiYXV0b1NlbGVjdCIsInN1Ykl0ZW0iLCJzZWxlY3RlZEl0ZW1Vc2VDYWxsYmFjayIsInNMYXN0VWlkIiwiZ2V0SXRlbVVpZCIsImFDYWNoZSIsImFDaGVja2VkQ2FjaGUiLCJtRm9jdXNlZCIsIm1TZWxlY3RlZCIsImFJdGVtcyIsImdldE5leHQiLCJpc05leHRGb2N1c2VkIiwiaXNDaGVja2VkIiwiaXNTZWxlY3RlZCIsImlTZWxlY3ROZXh0SGVscGVyIiwiaUZvY3VzZWROZXh0SGVscGVyIiwic2Nyb2xsVG9Gb2N1c2VkIiwib0NhbGxiYWNrcyIsIm9uSXRlbVNlbGVjdCIsImdvRG93biIsImZvcmNlU2VsZWN0IiwibmV3U2VsZWN0UG9zaXRpb24iLCJEb3duIiwiZ29VcCIsIlVwIiwidW5zZWxlY3QiLCJjb250ZW50VmlzaWJsZSIsImNvbnRlbnRTY3JvbGxhYmxlIiwib0NvbnRlbnRWaXNpYmxlIiwib0NvbnRlbnRTY3JvbGxhYmxlIiwiYWN0aW9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiZXZlbnRLZXkiLCJJbnNlcnQiLCJTcGFjZSIsIkhvbWUiLCJFbmQiLCJQYWdlVXAiLCJQYWdlRG93biIsInNoaWZ0Iiwib25BdXRvU2VsZWN0IiwiZG9VcFVwT3JEb3duRG93biIsIm9uVXBVcE9yRG93bkRvd24iLCJnZXRJdGVtVWlkQ2FsbGJhY2siLCJvbkl0ZW1HZXRVaWQiLCJpRXZlbnRLZXlDb2RlIiwiYlNoaWZ0S2V5IiwiYkZvcmNlU2VsZWN0IiwiaXNOZXh0IiwiaXNTdG9wIiwicGFnZVN0ZXAiLCJsaXN0TGVuIiwiJGZvY3VzZWQiLCJ2aXNpYmxlSGVpZ2h0IiwiZm9jdXNlZEhlaWdodCIsIm91dGVySGVpZ2h0Iiwic2Nyb2xsVG9Ub3AiLCJmYXN0IiwiZXZlbnRDbGlja0Z1bmN0aW9uIiwiY2hhbmdlUmFuZ2UiLCJpc0luUmFuZ2UiLCJsaXN0SXRlbSIsImxpbmVVaWQiLCJtZXRhS2V5Iiwic2VsZWN0TWVzc2FnZUl0ZW0iLCJldmVudE5hbWUiLCJtZXNzYWdlSXRlbSIsInN1YmplY3RQcmVmaXgiLCJzdWJqZWN0U3VmZml4IiwicHJpb3JpdHkiLCJOb3JtYWwiLCJwcm94eSIsImZyb21FbWFpbFN0cmluZyIsImZyb21DbGVhckVtYWlsU3RyaW5nIiwidG9FbWFpbHNTdHJpbmciLCJ0b0NsZWFyRW1haWxzU3RyaW5nIiwic2VuZGVyRW1haWxzU3RyaW5nIiwic2VuZGVyQ2xlYXJFbWFpbHNTdHJpbmciLCJ1bnN1YnNyaWJlTGlua3MiLCJoYXNBdHRhY2htZW50cyIsImF0dGFjaG1lbnRzU3BlY0RhdGEiLCJhdHRhY2htZW50SWNvbkNsYXNzIiwicGdwU2lnbmVkVmVyaWZ5U3RhdHVzIiwicGdwU2lnbmVkVmVyaWZ5VXNlciIsInJlYWRSZWNlaXB0IiwiaXNJbXBvcnRhbnQiLCJIaWdoIiwib01lc3NhZ2VNb2RlbCIsInByb3BlcnRpZXMiLCJjYXJyeSIsInByb3BlcnR5IiwiZ2V0UmVjaXBpZW50c0VtYWlscyIsImNvbXB1dGVTZW5kZXJFbWFpbCIsIlByaW9yaXR5IiwiTG93IiwiSGFzaCIsIlJlcXVlc3RIYXNoIiwiRXh0ZXJuYWxQcm94eSIsIlRvIiwiQ2MiLCJCY2MiLCJSZXBseVRvIiwiRGVsaXZlcmVkVG8iLCJVbnN1YnNyaWJlTGlua3MiLCJTdWJqZWN0UGFydHMiLCJEYXRlVGltZVN0YW1wSW5VVEMiLCJIYXNBdHRhY2htZW50cyIsIkF0dGFjaG1lbnRzU3BlY0RhdGEiLCJUaHJlYWRzIiwiRHJhZnRJbmZvIiwiTWVzc2FnZUlkIiwiSW5SZXBseVRvIiwiUmVmZXJlbmNlcyIsIlBncFNpZ25lZCIsIlBncEVuY3J5cHRlZCIsImZvdW5kZWRDSURzIiwiRm91bmRlZENJRHMiLCJpbml0QXR0YWNobWVudHNGcm9tSnNvbiIsIkF0dGFjaG1lbnRzIiwiUmVhZFJlY2VpcHQiLCJoYXNVbnN1YnNyaWJlTGlua3MiLCJnZXRGaXJzdFVuc3Vic3JpYmVMaW5rIiwiSXNTZWVuIiwiSXNGbGFnZ2VkIiwiSXNBbnN3ZXJlZCIsIklzRm9yd2FyZGVkIiwiSXNSZWFkUmVjZWlwdCIsIklzRGVsZXRlZCIsImZyb21Ea2ltRGF0YSIsImJjY1RvTGluZSIsInJlcGx5VG9Ub0xpbmUiLCJsaW5lQXNDc3MiLCJjbGFzc25hbWVzIiwiaGFzVmlzaWJsZUF0dGFjaG1lbnRzIiwiZmluZEF0dGFjaG1lbnRCeUNpZCIsImZpbmRBdHRhY2htZW50QnlDb250ZW50TG9jYXRpb24iLCJtZXNzYWdlSWQiLCJpblJlcGx5VG8iLCJmcm9tQXNTaW5nbGVFbWFpbCIsInZpZXdMaW5rIiwiZG93bmxvYWRMaW5rIiwiZXhjbHVkZUVtYWlscyIsImxhc3QiLCJ0b1Jlc3VsdCIsImNjUmVzdWx0IiwidGV4dEJvZHlUb1N0cmluZyIsImF0dGFjaG1lbnRzVG9TdHJpbmdMaW5lIiwiYXR0YWNoTGluZXMiLCJ2aWV3UG9wdXBNZXNzYWdlIiwic2hvd0xhenlFeHRlcm5hbEltYWdlc0luQm9keSIsImNjTGluZSIsInByaW50TWVzc2FnZSIsImdlbmVyYXRlVWlkIiwibG96YWQiLCJ0aHJlc2hvbGQiLCJkYXRhc2V0Iiwib3JpZ2luYWwiLCJvcGFjaXR5Iiwib2JzZXJ2ZSIsImxhenkiLCJyZXBsYWNlUGxhbmVUZXh0Qm9keSIsIkFjY291bnRQb3B1cFZpZXciLCJzdWJtaXRSZXF1ZXN0IiwiZW1haWxFcnJvciIsInBhc3N3b3JkRXJyb3IiLCJzdWJtaXRFcnJvciIsInN1Ym1pdEVycm9yQWRkaXRpb25hbCIsImVtYWlsRm9jdXMiLCJhZGRBY2NvdW50Q29tbWFuZCIsIkVycm9yTWVzc2FnZUFkZGl0aW9uYWwiLCJjYW5CZUVkaXQiLCJJZGVudGl0eVBvcHVwVmlldyIsImVkaXQiLCJvd25lciIsImFkZE9yRWRpdElkZW50aXR5Q29tbWFuZCIsIm9uSGlkZVdpdGhEZWxheSIsIlNhdmVUcmlnZ2VyQ29tcG9uZW50IiwidmVydGljYWxBbGlnbiIsInNldFN0YXRlIiwiSW5wdXRDb21wb25lbnQiLCJTZWxlY3RDb21wb25lbnQiLCJvcHRpb25zVGV4dCIsIm9wdGlvbnNWYWx1ZSIsIm9wdGlvbnNDYXB0aW9uIiwiUmFkaW9Db21wb25lbnQiLCJERUZBVUxUX1JPV1MiLCJUZXh0QXJlYUNvbXBvbmVudCIsInJvd3MiLCJzcGVsbGNoZWNrIiwiRGF0ZUNvbXBvbmVudCIsIlNjcmlwdENvbXBvbmVudCIsInRlbXBsYXRlTm9kZXMiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsIm5vZGVWYWx1ZSIsIkNoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQiLCJhbmltYXRpb25Cb3giLCJhbmltYXRpb25DaGVja21hcmsiLCJhbmltYXRpb25Cb3hTZXRUcnVlIiwiYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSIsInRyaWdnZXJBbmltYXRpb24iLCJib3giLCJBcHBVc2VyIiwibW92ZUNhY2hlIiwicXVvdGFEZWJvdW5jZSIsIm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyIiwibWVzc2FnZXNNb3ZlVHJpZ2dlciIsIlRpbWUybSIsIlRpbWUzbSIsIlRpbWU1bSIsIlRpbWUxMG0iLCJUaW1lMTVtIiwiVGltZTIwbSIsIndha2VVcCIsIlRpbWU2MG0iLCJiYWNrc3RyZXRjaCIsImZhZGUiLCJjZW50ZXJlZFgiLCJjZW50ZXJlZFkiLCJiRHJvcFBhZ2VQb3NpdGlvbiIsImJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUiLCJyZWNhY2hlSW5ib3hNZXNzYWdlTGlzdCIsImZSZXN1bHRGdW5jIiwib0NvbnRhY3RzIiwiQ29udGFjdFN0b3JlIiwic1RyYXNoRm9sZGVyIiwic1NwYW1Gb2xkZXIiLCJpc1NwYW0iLCJpc1RyYXNoIiwiaXNIYW0iLCJtZXNzYWdlc01vdmVIZWxwZXIiLCJ1aWRzRm9yTW92ZSIsIm1lc3NhZ2VzQ29weUhlbHBlciIsInNGcm9tRm9sZGVyRnVsbE5hbWVSYXciLCJzVG9Gb2xkZXJGdWxsTmFtZVJhdyIsImFVaWRGb3JDb3B5IiwibWVzc2FnZXNEZWxldGVIZWxwZXIiLCJhVWlkRm9yUmVtb3ZlIiwiYWxlcnQiLCJkZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIiLCJpRGVsZXRlVHlwZSIsImJVc2VGb2xkZXIiLCJvTW92ZUZvbGRlciIsIm5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uIiwiTm90U3BhbSIsIm1vdmVNZXNzYWdlc1RvRm9sZGVyIiwiYVVpZEZvck1vdmUiLCJiQ29weSIsIm9Gcm9tRm9sZGVyIiwib1RvRm9sZGVyIiwicHJvbSIsIlByb21pc2VzIiwiZm9sZGVyc1Byb21pc2VzQWN0aW9uSGVscGVyIiwicHJvbWlzZSIsImVycm9yRGVmQ29kZSIsInJlbG9hZE9wZW5QZ3BLZXlzIiwib3BlbnBncEtleXMiLCJnZXRBbGxLZXlzIiwiYUVtYWlscyIsImFVc2VycyIsInByaW1hcnlVc2VyIiwiZ2V0UHJpbWFyeVVzZXIiLCJ1c2VySWQiLCJ1c2VyaWQiLCJ1c2VycyIsIk9wZW5QZ3BLZXlNb2RlbCIsImdldEZpbmdlcnByaW50IiwiZ2V0S2V5SWQiLCJnZXRLZXlJZHMiLCJhcm1vciIsImJCb290IiwiY291bnRzIiwic0FjY291bnRFbWFpbCIsIkFjY291bnRzIiwib0FjY291bnQiLCJBY2NvdW50TW9kZWwiLCJJZGVudGl0aWVzIiwiaWRlbnRpdHlEYXRhIiwiSWQiLCJJZGVudGl0eU1vZGVsIiwiU2lnbmF0dXJlIiwiU2lnbmF0dXJlSW5zZXJ0QmVmb3JlIiwiVGVtcGxhdGVTdG9yZSIsIlRlbXBsYXRlcyIsInRlbXBsYXRlRGF0YSIsIlRlbXBsYXRlTW9kZWwiLCJRdW90YVN0b3JlIiwiY2hlY2siLCJmb2xkZXJGcm9tQ2FjaGUiLCJGbGFncyIsImJvb3QiLCJMaXN0IiwiaVNldEFjdGlvbiIsImFscmVhZHlVbnJlYWQiLCJyb290VWlkcyIsImdvb2dsZUNvbm5lY3QiLCJ0d2l0dGVyQ29ubmVjdCIsImZhY2Vib29rQ29ubmVjdCIsImZpcmVBbGxBY3Rpb25zIiwiR29vZ2xlIiwiRmFjZWJvb2siLCJUd2l0dGVyIiwiYXV0b2NvbXBsZXRlQ2FsbGJhY2siLCJzZXRFeHBhbmRlZEZvbGRlciIsInNGdWxsTmFtZUhhc2giLCJiRXhwYW5kZWQiLCJhRXhwYW5kZWRMaXN0IiwiTG9jYWwiLCJFeHBhbmRlZEZvbGRlcnMiLCJ3aXRob3V0IiwiaW5pdEhvcml6b250YWxMYXlvdXRSZXNpemVyIiwic0NsaWVudFNpZGVLZXlOYW1lIiwiYm90dG9tIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwiZlNldEhlaWdodCIsImZSZXNpemVDcmVhdGVGdW5jdGlvbiIsImZSZXNpemVTdGFydEZ1bmN0aW9uIiwiZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uIiwiZlJlc2l6ZVN0b3BGdW5jdGlvbiIsIm9FdmVudCIsIm9PYmplY3QiLCJvT3B0aW9ucyIsImhhbmRsZXMiLCJmRGlzYWJsZSIsImJEaXNhYmxlIiwicmVzaXphYmxlIiwiaUhlaWdodCIsImluaXRWZXJ0aWNhbExheW91dFJlc2l6ZXIiLCJkaXNhYmxlZFdpZHRoIiwibWluV2lkdGgiLCJsTGVmdCIsInJpZ2h0IiwibUxlZnRXaWR0aCIsImZTZXRXaWR0aCIsImlXaWR0aCIsIm9iaiIsIm1heFdpZHRoIiwiU2l6ZTM1MHB4IiwiYm9vdHN0YXJ0VHdvRmFjdG9yU2NyZWVuIiwiYm9vdHN0YXJ0V2VsY29tZVBvcHVwIiwiYm9vdHN0YXJ0TG9naW5TY3JlZW4iLCJjdXN0b21Mb2dpbkxpbmsiLCJMb2dpblVzZXJTY3JlZW4iLCJib290ZW5kIiwicHJvZ3Jlc3NKcyIsImNvbnRhY3RzU3luY0ludGVydmFsIiwianNIYXNoIiwiYWxsb3dHb29nbGUiLCJhbGxvd0ZhY2Vib29rIiwiYWxsb3dUd2l0dGVyIiwiVHdvRmFjdG9yIiwiVHdvRmFjdG9yRm9yY2UiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJPcGVuUEdQIiwib3BlbnBncENhbGxiYWNrIiwiV29ya2VyIiwiaW5pdFdvcmtlciIsIktleXJpbmciLCJNYWlsQm94VXNlclNjcmVlbiIsIlNldHRpbmdzVXNlclNjcmVlbiIsInNGIiwiVGltZTEwcyIsIlRpbWUycyIsInJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyIiwiQ29tcG9zZXIiLCJGb2xkZXJMaXN0U2l6ZSIsIm1vbWVudFJlbG9hZCIsIkJBU0VfNjRfQ0hSIiwidXJsc2FmZV9lbmNvZGUiLCJlbmNvZGUiLCJvdXRwdXQiLCJjaHIxIiwiY2hyMiIsImNocjMiLCJlbmMxIiwiZW5jMiIsImVuYzMiLCJlbmM0IiwiaSIsIl91dGY4X2VuY29kZSIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJkZWNvZGUiLCJfdXRmOF9kZWNvZGUiLCJzdHJpbmciLCJ1dGZ0ZXh0IiwibiIsImwiLCJjIiwiYzIiLCJjMyIsIlByb21pc2VzVXNlclBvcHVsYXRvciIsImlzRm9sZGVyRXhwYW5kZWQiLCJleHBhbmRlZEZvbGRlcnMiLCJub3JtYWxpemVGb2xkZXIiLCJDYWNoZSIsImZvbGRlclJlc3BvbnNlUGFyc2VSZWMiLCJzTmFtZXNwYWNlIiwiYkRpc3BsYXlTcGVjU2V0dGluZyIsIm9Gb2xkZXIiLCJvQ2FjaGVGb2xkZXIiLCJGdWxsTmFtZVJhdyIsIkZvbGRlck1vZGVsIiwiQ2hlY2thYmxlIiwiY29sbGFwc2VkIiwiRXh0ZW5kZWQiLCJTdWJGb2xkZXJzIiwiY250IiwiQ291bnRSZWMiLCJOYW1lc3BhY2UiLCJJc1RocmVhZHNTdXBwb3J0ZWQiLCJPcHRpbWl6ZWQiLCJTeXN0ZW1Gb2xkZXJzIiwiU0VOVCIsIkRSQUZUUyIsIkpVTksiLCJUUkFTSCIsIkFMTCIsIkZvbGRlcnNMYXNoSGFzaCIsIkZvbGRlcnNIYXNoIiwiRmlsdGVyTW9kZWwiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uc1R5cGUiLCJBbnkiLCJhY3Rpb25WYWx1ZSIsImFjdGlvblZhbHVlU2Vjb25kIiwiYWN0aW9uVmFsdWVUaGlyZCIsImFjdGlvblZhbHVlRm91cnRoIiwiYWN0aW9uTWFya0FzUmVhZCIsImFjdGlvbktlZXAiLCJhY3Rpb25Ob1N0b3AiLCJhY3Rpb25UeXBlIiwiTW92ZVRvIiwiZkdldFJlYWxGb2xkZXJOYW1lIiwiZGVsaW1pdGVyIiwibmFtZVN1YiIsIkZPTERFUiIsIkVNQUlMIiwiVmFjYXRpb24iLCJSZWplY3QiLCJEaXNjYXJkIiwiYWN0aW9uVGVtcGxhdGUiLCJkZWxldGVBY2Nlc3MiLCJjYW5CZURlbGV0ZWQiLCJnZW5lcmF0ZUlEIiwiY29uZCIsIklEIiwiRW5hYmxlZCIsIkNvbmRpdGlvbnNUeXBlIiwiQ29uZGl0aW9ucyIsIkFjdGlvblZhbHVlIiwiQWN0aW9uVmFsdWVTZWNvbmQiLCJBY3Rpb25WYWx1ZVRoaXJkIiwiQWN0aW9uVmFsdWVGb3VydGgiLCJBY3Rpb25UeXBlIiwiU3RvcCIsIktlZXAiLCJNYXJrQXNSZWFkIiwiYWRkQ29uZGl0aW9uIiwiRmlsdGVyQ29uZGl0aW9uTW9kZWwiLCJyZW1vdmVDb25kaXRpb24iLCJvQ29uZGl0aW9uVG9EZWxldGUiLCJzZXRSZWNpcGllbnRzIiwiZmlsdGVyQ29uZGl0aW9uIiwiY2xvbmVTZWxmIiwiQ29udGFpbnMiLCJ2YWx1ZVNlY29uZCIsIkhlYWRlciIsIkZpZWxkIiwiVHlwZSIsIlZhbHVlIiwiVmFsdWVTZWNvbmQiLCJmaWx0ZXJDb25kIiwiS2V5Ym9hcmRTaG9ydGN1dHNIZWxwUG9wdXBWaWV3IiwiUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAiLCIkdGFicyIsInRhYiIsIkNvbnRhY3RzUG9wdXBWaWV3IiwiY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCIsImJWIiwidmlld0hhc05vbkVtcHR5UmVxdWlyZWRQcm9wZXJ0aWVzIiwiYlJlYWRPbmx5Iiwidmlld1JlYWRPbmx5Iiwidmlld1NhdmluZyIsImZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIiLCJ2aWV3UHJvcGVydGllcyIsInJlbW92ZUFsbCIsImJCYWNrVG9Db21wb3NlIiwic0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkIiwiYWxsb3dFeHBvcnQiLCJjb250YWN0c0NvdW50IiwiY3VycmVudENvbnRhY3QiLCJpbXBvcnRVcGxvYWRlckJ1dHRvbiIsImNvbnRhY3RzUGFnZSIsImNvbnRhY3RzUGFnZUNvdW50IiwiY29udGFjdHNQYWdlbmF0b3IiLCJlbXB0eVNlbGVjdGlvbiIsInZpZXdDbGVhclNlYXJjaCIsInZpZXdJRCIsInZpZXdTYXZlVHJpZ2dlciIsInZpZXdQcm9wZXJ0aWVzTmFtZXMiLCJGaXJzdE5hbWUiLCJMYXN0TmFtZSIsInZpZXdQcm9wZXJ0aWVzT3RoZXIiLCJOaWNrIiwidmlld1Byb3BlcnRpZXNFbWFpbHMiLCJ2aWV3UHJvcGVydGllc1dlYiIsIldlYiIsIm5hbWVzIiwiZkZpbHRlciIsInZpZXdQcm9wZXJ0aWVzUGhvbmVzIiwiUGhvbmUiLCJ2aWV3UHJvcGVydGllc0VtYWlsc05vbkVtcHR5IiwicHJvcGVydHlGb2N1c2VkIiwidmlld1Byb3BlcnRpZXNFbWFpbHNFbXB0eUFuZE9uRm9jdXNlZCIsInZpZXdQcm9wZXJ0aWVzUGhvbmVzRW1wdHlBbmRPbkZvY3VzZWQiLCJ2aWV3UHJvcGVydGllc1dlYkVtcHR5QW5kT25Gb2N1c2VkIiwidmlld1Byb3BlcnRpZXNPdGhlckVtcHR5QW5kT25Gb2N1c2VkIiwicmVsb2FkQ29udGFjdExpc3QiLCJjb250YWN0c0NoZWNrZWQiLCJjb250YWN0c0NoZWNrZWRPclNlbGVjdGVkVWlkcyIsImNvbnRhY3QiLCJpZENvbnRhY3QiLCJzZWxlY3RvciIsInBvcHVsYXRlVmlld0NvbnRhY3QiLCJiRHJvcFBhZ2VBZnRlckRlbGV0ZSIsIndhdGNoRGlydHkiLCJ3YXRjaEhhc2giLCJ2aWV3SGFzaCIsIkNvbnRhY3RMaXN0IiwibmV3Q29tbWFuZCIsImRlbGV0ZVNlbGVjdGVkQ29udGFjdHMiLCJuZXdNZXNzYWdlQ29tbWFuZCIsImFFIiwidG9FbWFpbHMiLCJjY0VtYWlscyIsImJjY0VtYWlscyIsImFDIiwiZ2V0TmFtZUFuZEVtYWlsSGVscGVyIiwiY2xlYXJDb21tYW5kIiwicmVxdWVzdFVpZCIsIkZ1bGxOYW1lIiwicmVzIiwiUmVxdWVzdFVpZCIsIlJlc3VsdElEIiwic3luY0NvbW1hbmQiLCJnZXRQcm9wZXJ0eVBsYWNlaG9sZGVyIiwiYWRkTmV3UHJvcGVydHkiLCJhZGROZXdPckZvY3VzUHJvcGVydHkiLCJhZGROZXdFbWFpbCIsImFkZE5ld1Bob25lIiwiYWRkTmV3V2ViIiwiYWRkTmV3Tmlja25hbWUiLCJhZGROZXdOb3RlcyIsImFkZE5ld0JpcnRoZGF5IiwiQmlydGhkYXkiLCJleHBvcnRWY2YiLCJleHBvcnRDc3YiLCJqIiwicmVtb3ZlQ2hlY2tlZE9yU2VsZWN0ZWRDb250YWN0c0Zyb21MaXN0Iiwia29Db250YWN0cyIsImRlbGV0ZVJlc3BvbnNlIiwicmVtb3ZlUHJvcGVydHkiLCJvUHJvcCIsImxhc3ROYW1lIiwiZmlyc3ROYW1lIiwiZHJvcFBhZ2VQb3NpdGlvbiIsIkNvbnRhY3RNb2RlbCIsIkNvdW50IiwiRm9sZGVyQ3JlYXRlVmlldyIsInNpbXBsZUZvbGRlck5hbWVWYWxpZGF0aW9uIiwiZm9sZGVyTmFtZSIsInNlbGVjdGVkUGFyZW50VmFsdWUiLCJwYXJlbnRGb2xkZXJTZWxlY3RMaXN0IiwibWFuYWdlRm9sZGVyU3lzdGVtTmFtZSIsImNyZWF0ZUZvbGRlckNvbW1hbmQiLCJwYXJlbnRGb2xkZXJOYW1lIiwiRmlsdGVyUG9wdXBWaWV3IiwiRmlsdGVyU3RvcmUiLCJmVHJ1ZUNhbGxiYWNrIiwiYWxsb3dNYXJrQXNSZWFkIiwic2VsZWN0ZWRGb2xkZXJWYWx1ZSIsImFjdGlvblR5cGVPcHRpb25zIiwiZmllbGRPcHRpb25zIiwidHlwZU9wdGlvbnMiLCJ0eXBlT3B0aW9uc1NpemUiLCJwb3B1bGF0ZU9wdGlvbnMiLCJzYXZlRmlsdGVyQ29tbWFuZCIsIm1hcmthc3JlYWQiLCJtb3ZldG8iLCJyZWRpcmVjdCIsInZhY2F0aW9uIiwiUmVjaXBpZW50IiwiTm90Q29udGFpbnMiLCJFcXVhbFRvIiwiTm90RXF1YWxUbyIsInJlZ2V4IiwiUmVnZXgiLCJPdmVyIiwiVW5kZXIiLCJvRmlsdGVyIiwiYkVkaXQiLCJUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3IiwibG9jayIsImNhcGFUd29GYWN0b3IiLCJwcm9jZXNzaW5nIiwiY2xlYXJpbmciLCJzZWNyZXRpbmciLCJ2aWV3VXNlciIsInR3b0ZhY3RvclN0YXR1cyIsInR3b0ZhY3RvclRlc3RlZCIsInZpZXdTZWNyZXQiLCJ2aWV3QmFja3VwQ29kZXMiLCJ2aWV3VXJsVGl0bGUiLCJ2aWV3VXJsIiwidmlld0VuYWJsZV8iLCJ2aWV3RW5hYmxlIiwidmlld1R3b0ZhY3RvckVuYWJsZVRvb2x0aXAiLCJ0cmFuc2xhdG9yVHJpZ2dlciIsInZpZXdUd29GYWN0b3JTdGF0dXMiLCJ0d29GYWN0b3JBbGxvd2VkRW5hYmxlIiwib25SZXN1bHQiLCJvblNob3dTZWNyZXRSZXN1bHQiLCJzaG93U2VjcmV0IiwiaGlkZVNlY3JldCIsImJMb2NrIiwiZ2V0UXIiLCJFbmFibGUiLCJJc1NldCIsIlRlc3RlZCIsIlNlY3JldCIsIkJhY2t1cENvZGVzIiwiVXJsVGl0bGUiLCJxciIsImxldmVsIiwiVGVtcGxhdGVQb3B1cFZpZXciLCJzaWduYXR1cmVEb20iLCJhZGRUZW1wbGF0ZUNvbW1hbmQiLCJwb3B1bGF0ZUJvZHlGcm9tRWRpdG9yIiwiZWRpdG9yU2V0Qm9keSIsInBvcHVsYXRlZCIsIkJvZHkiLCJzdG9yYWdlUmVzdWx0IiwiQ29va2llcyIsImdldEpTT04iLCJleHBpcmVzIiwiY29va2llRW5hYmxlZCIsImxvY2FsU3RvcmFnZSIsInN0b3JhZ2VWYWx1ZSIsImVkaXRlZCIsIm5hbWVGb3JFZGl0IiwicHJpdmF0ZU1lc3NhZ2VDb3VudEFsbCIsInByaXZhdGVNZXNzYWdlQ291bnRVbnJlYWQiLCJjb2xsYXBzZWRQcml2YXRlIiwiaW5pdENvbXB1dGVkIiwiaXNJbmJveCIsIkluYm94IiwiY2FuQmVFZGl0ZWQiLCJpc1N1YlNjcmliZWQiLCJpc1N1YkZvbGRlcnMiLCJoaWRkZW4iLCJpc1N5c3RlbSIsInNlbGVjdGFibGVGb3JGb2xkZXJMaXN0IiwiaVZhbHVlIiwicHJpbnRhYmxlVW5yZWFkQ291bnQiLCJjYW5CZVN1YlNjcmliZWQiLCJjYW5CZUNoZWNrZWQiLCJzdWZmaXgiLCJoYXNVbnJlYWRNZXNzYWdlcyIsImhhc1N1YlNjcmliZWRVbnJlYWRNZXNzYWdlc1N1YmZvbGRlcnMiLCJjb2xsYXBzZWRDc3MiLCJzSW5ib3hGb2xkZXJOYW1lIiwiRGVsaW1pdGVyIiwiRnVsbE5hbWVIYXNoIiwiSXNTZWxlY3RhYmxlIiwiSXNFeGlzdHMiLCJJc1N1YnNjcmliZWQiLCJwcmludGFibGVGdWxsTmFtZSIsImJDbGVhck9ubHkiLCJfX2Fib3J0ZWRfXyIsImFkZGl0aW9uYWxHZXRTdHJpbmciLCJvSCIsInRleHRTdGF0dXMiLCJpc0NhY2hlZCIsImVycm9yRGF0YSIsIl9fY2FjaGVkX18iLCJBamF4RmFsc2UiLCJBamF4UGFyc2UiLCJBamF4VGltZW91dCIsIkFqYXhBYm9ydCIsImdldFJlcXVlc3QiLCJzQWRkaXRpb25hbEdldFN0cmluZyIsImNhbkJlRGVsZXRlIiwiY2hhbmdlQWNjb3VudExpbmsiLCJQb3B1bGF0ZWQiLCJndUlEIiwiSURzIiwidXNlcklEcyIsInVzZXJJRCIsImd1aWQiLCJzZWxlY3RVc2VyIiwiZ2V0TmF0aXZlS2V5IiwiZXJyIiwicGF0dGVybiIsInNlbGVjdEVtYWlsIiwiTG9naW5Vc2VyVmlldyIsImZhY2Vib29rTG9naW5FbmFibGVkIiwiZ29vZ2xlTG9naW5FbmFibGVkIiwiZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQiLCJ0d2l0dGVyTG9naW5FbmFibGVkIiwiaGlkZVN1Ym1pdEJ1dHRvbiIsIndlbGNvbWUiLCJzaWduTWUiLCJhZGRpdGlvbmFsQ29kZSIsImVycm9yQW5pbWF0aW9uIiwidmlzaWJpbGl0eSIsImFkZGl0aW9uYWxDb2RlU2lnbk1lIiwibG9naW5EZXNjcmlwdGlvbiIsImZvcmdvdFBhc3N3b3JkTGlua1VybCIsInJlZ2lzdHJhdGlvbkxpbmtVcmwiLCJlbWFpbEVycm9yQW5pbWF0aW9uIiwicGFzc3dvcmRFcnJvckFuaW1hdGlvbiIsImZvcm1IaWRkZW4iLCJmb3JtRXJyb3IiLCJwYXNzd29yZEZvY3VzIiwic3VibWl0RXJyb3JBZGRpZGlvbmFsIiwibGFuZ1JlcXVlc3QiLCJiU2VuZExhbmd1YWdlIiwibGFuZ3VhZ2VGdWxsTmFtZSIsInNpZ25NZVR5cGUiLCJVbnVzZWQiLCJEZWZhdWx0T24iLCJzaWduTWVWaXNpYmlsaXR5Iiwic29jaWFsTG9naW5FbmFibGVkIiwiYkYiLCJiRyIsImJUIiwid2luZG93T3BlbkZlYXR1cmVzIiwid2giLCJmYWNlYm9va0NvbW1hbmQiLCJnb29nbGVDb21tYW5kIiwiZ29vZ2xlR21haWxDb21tYW5kIiwidHdpdHRlckNvbW1hbmQiLCJzdWJtaXRDb21tYW5kIiwicGx1Z2luUmVzdWx0Q29kZSIsInBsdWdpblJlc3VsdE1lc3NhZ2UiLCJmU3VibWl0UmVzdWx0IiwiaVJlc3VsdENvZGUiLCJzUmVzdWx0TWVzc2FnZSIsImZMb2dpblJlcXVlc3QiLCJzTG9naW5QYXNzd29yZCIsIlR3b0ZhY3RvckF1dGgiLCJBZG1pbiIsIkxhc3RTaWduTWUiLCJkaXNwbGF5TWFpbkZvcm0iLCJzaWduTWVMb2NhbCIsImZTb2NpYWwiLCJpRXJyb3JDb2RlIiwiRGVmYXVsdE9mZiIsInRyYW5zbGF0b3JSZWxvYWQiLCJzdWJtaXRGb3JtIiwic2VsZWN0TGFuZ3VhZ2UiLCJzZWxlY3RMYW5ndWFnZU9uVGFiIiwiYlNoaWZ0IiwiU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXciLCJGb2xkZXJMaXN0TWFpbEJveFVzZXJWaWV3IiwiTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXciLCJNZXNzYWdlVmlld01haWxCb3hVc2VyVmlldyIsInVwZGF0ZVdpbmRvd1RpdGxlIiwiQ29udGFjdHMiLCJvblN0YXJ0IiwiTWVzc2FnZUxpc3RTaXplIiwiZk5vcm1TIiwiZk5vcm1EIiwiaURyb3BPdmVyVGltZXIiLCJhbGxvd0NvbXBvc2VyIiwiZm9sZGVyTGlzdEZvY3VzZWQiLCJpc0luYm94U3RhcnJlZCIsImZTZWxlY3RGb2xkZXIiLCJzdGFycmVkIiwiaXNNb3ZlIiwic3RvcFByb3BhZ2F0aW9uIiwibWVzc2FnZXNEcm9wT3ZlciIsIm1lc3NhZ2VzRHJvcE91dCIsIm1lc3NhZ2VzRHJvcCIsImNvbXBvc2VDbGljayIsImNyZWF0ZUZvbGRlciIsImNvbmZpZ3VyZUZvbGRlcnMiLCJjb250YWN0c0NsaWNrIiwiZGlzcGxheSIsIklkQ29udGFjdCIsIkRpc3BsYXkiLCJSZWFkT25seSIsIlByb3BlcnRpZXMiLCJUeXBlU3RyIiwic3JjQXR0ciIsImNhbkJlTW92ZWRIZWxwZXIiLCJjYW5CZU1vdmVkIiwiYlByZWZldGNoIiwiZW1wdHlTdWJqZWN0VmFsdWUiLCJpR29Ub1VwVXBPckRvd25Eb3duVGltZW91dCIsImFsbG93UmVsb2FkIiwiUmVsb2FkIiwiYWxsb3dTZWFyY2giLCJhbGxvd1NlYXJjaEFkdiIsIlNlYXJjaEFkdiIsImFsbG93TWVzc2FnZUxpc3RBY3Rpb25zIiwiTWVzc2FnZUxpc3RBY3Rpb25zIiwiYWxsb3dEYW5nZXJvdXNBY3Rpb25zIiwiRGFuZ2Vyb3VzQWN0aW9ucyIsInVzZXJRdW90YSIsInVzZXJVc2FnZVNpemUiLCJ1c2VyVXNhZ2VQcm9jIiwibW92ZURyb3Bkb3duVHJpZ2dlciIsIm1vcmVEcm9wZG93blRyaWdnZXIiLCJkcmFnT3ZlciIsImRyYWdPdmVyRW50ZXIiLCJkcmFnT3ZlckFyZWEiLCJkcmFnT3ZlckJvZHlBcmVhIiwibWVzc2FnZUxpc3RJdGVtVGVtcGxhdGUiLCJtZXNzYWdlTGlzdFNlYXJjaERlc2MiLCJtZXNzYWdlTGlzdFBhZ2VuYXRvciIsImNoZWNrQWxsIiwiaW5wdXRNZXNzYWdlTGlzdFNlYXJjaEZvY3VzIiwic0xhc3RTZWFyY2hWYWx1ZSIsImlucHV0UHJveHlNZXNzYWdlTGlzdFNlYXJjaCIsImlzSW5jb21wbGV0ZUNoZWNrZWQiLCJoYXNNZXNzYWdlcyIsImhhc0NoZWNrZWRPclNlbGVjdGVkTGluZXMiLCJpc1NwYW1Gb2xkZXIiLCJpc1NwYW1EaXNhYmxlZCIsImlzVHJhc2hGb2xkZXIiLCJpc0RyYWZ0Rm9sZGVyIiwiaXNTZW50Rm9sZGVyIiwiaXNBcmNoaXZlRm9sZGVyIiwiaXNBcmNoaXZlRGlzYWJsZWQiLCJpc0FyY2hpdmVWaXNpYmxlIiwiaXNTcGFtVmlzaWJsZSIsImlzVW5TcGFtVmlzaWJsZSIsIm1vYmlsZUNoZWNrZWRTdGF0ZVNob3ciLCJtb2JpbGVDaGVja2VkU3RhdGVIaWRlIiwibWVzc2FnZUxpc3RGb2N1c2VkIiwicXVvdGFUb29sdGlwIiwidXNlQXV0b1NlbGVjdCIsImdvVG9VcFVwT3JEb3duRG93biIsInJlbG9hZENvbW1hbmQiLCJtdWx0eUZvcndhcmRDb21tYW5kIiwiZGVsZXRlV2l0aG91dE1vdmVDb21tYW5kIiwiYXJjaGl2ZUNvbW1hbmQiLCJzcGFtQ29tbWFuZCIsIm5vdFNwYW1Db21tYW5kIiwibW92ZUNvbW1hbmQiLCJtb3ZlTmV3Q29tbWFuZCIsImhpZGVMZWZ0Iiwic2hvd0xlZnQiLCJnb3RvUGFnZSIsInNlYXJjaEVudGVyQWN0aW9uIiwicHJpbnRhYmxlTWVzc2FnZUNvdW50Rm9yRGVsZXRpb24iLCJjYW5jZWxTZWFyY2giLCJjYW5jZWxUaHJlYWRVaWQiLCJtb3ZlU2VsZWN0ZWRNZXNzYWdlc1RvRm9sZGVyIiwiZHJhZ0FuZERyb25IZWxwZXIiLCJvTWVzc2FnZUxpc3RJdGVtIiwidXBkYXRlVWlkc0luZm8iLCJhTWVzc2FnZXMiLCJzZXRBY3Rpb25Gb3JBbGwiLCJsaXN0U2V0U2VlbiIsImxpc3RTZXRBbGxTZWVuIiwibGlzdFVuc2V0U2VlbiIsImxpc3RTZXRGbGFncyIsImxpc3RVbnNldEZsYWdzIiwiZmxhZ01lc3NhZ2VzIiwiY2hlY2tlZFVpZHMiLCJmbGFnTWVzc2FnZXNGYXN0IiwiYkZsYWciLCJzZWVuTWVzc2FnZXNGYXN0Iiwic2VlbiIsImdvdG9UaHJlYWQiLCJjbGVhckxpc3RJc1Zpc2libGUiLCJpbml0VXBsb2FkZXJGb3JBcHBlbmQiLCJpbml0U2hvcnRjdXRzIiwiaWZ2aXNpYmxlIiwiUHJlZmV0Y2giLCJzZXRJZGxlRHVyYXRpb24iLCJpZnZpc2libGVJZGxlMTBzIiwiaWRsZSIsInByZWZldGNoTmV4dFRpY2siLCJhZHZhbmNlZFNlYXJjaENsaWNrIiwicXVldWVTaXplIiwibXVsdGlwbGVTaXplTGltaXQiLCJkcmFnQW5kRHJvcEVsZW1lbnQiLCJkcmFnQW5kRHJvcEJvZHlFbGVtZW50IiwibWVzc2FnZVZpc2liaWxpdHkiLCJtZXNzYWdlTGlzdEFuZE1lc3NhZ2VWaWV3TG9hZGluZyIsImxhc3RFbWFpbCIsImNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlciIsImxhc3RSZXBseUFjdGlvbiIsInJlcGx5T3Jmb3J3YXJkIiwiY2FuQmVSZXBsaWVkT3JGb3J3YXJkZWQiLCJjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyIiwiZm9sZGVyVHlwZSIsInVzZUZvbGRlciIsIm9Eb20iLCJvSGVhZGVyRG9tIiwib01lc3NhZ2VTY3JvbGxlckRvbSIsImJvZHlCYWNrZ3JvdW5kQ29sb3IiLCJwc3dwIiwiYWxsb3dNZXNzYWdlQWN0aW9ucyIsIk1lc3NhZ2VBY3Rpb25zIiwibG9nb0lmcmFtZSIsImZ1bGxTY3JlZW5Nb2RlIiwibWVzc2FnZUxpc3RPZlRocmVhZHNMb2FkaW5nIiwiaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzIiwic2hvd0F0dGFjaG1uZXRDb250cm9scyIsInNob3dBdHRhY2htbmV0Q29udHJvbHNTdGF0ZSIsIk1lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMiLCJhbGxvd0F0dGFjaG1uZXRDb250cm9scyIsIkF0dGFjaG1lbnRzQWN0aW9ucyIsImRvd25sb2FkQXNaaXBBbGxvd2VkIiwiZG93bmxvYWRBc1ppcExvYWRpbmciLCJkb3dubG9hZEFzWmlwRXJyb3IiLCJzYXZlVG9Pd25DbG91ZEFsbG93ZWQiLCJzYXZlVG9Pd25DbG91ZExvYWRpbmciLCJzYXZlVG9Pd25DbG91ZFN1Y2Nlc3MiLCJzYXZlVG9Pd25DbG91ZEVycm9yIiwic2F2ZVRvRHJvcGJveEFsbG93ZWQiLCJzYXZlVG9Ecm9wYm94TG9hZGluZyIsInNhdmVUb0Ryb3Bib3hTdWNjZXNzIiwic2F2ZVRvRHJvcGJveEVycm9yIiwibGFzdFJlcGx5QWN0aW9uXyIsIkxhc3RSZXBseUFjdGlvbiIsInNob3dGdWxsSW5mbyIsIk1lc3NhZ2VIZWFkZXJGdWxsSW5mbyIsIm1lc3NhZ2VEb21Gb2N1c2VkIiwicmVwbHlDb21tYW5kIiwicmVwbHlBbGxDb21tYW5kIiwiZm9yd2FyZENvbW1hbmQiLCJmb3J3YXJkQXNBdHRhY2htZW50Q29tbWFuZCIsImVkaXRBc05ld0NvbW1hbmQiLCJ2aWV3Qm9keVRvcFZhbHVlIiwidmlld0ZvbGRlciIsInZpZXdVaWQiLCJ2aWV3U3ViamVjdCIsInZpZXdGcm9tU2hvcnQiLCJ2aWV3RnJvbURraW1EYXRhIiwidmlld1RvU2hvcnQiLCJ2aWV3RnJvbSIsInZpZXdUbyIsInZpZXdDYyIsInZpZXdCY2MiLCJ2aWV3UmVwbHlUbyIsInZpZXdUaW1lU3RhbXAiLCJ2aWV3U2l6ZSIsInZpZXdMaW5lQXNDc3MiLCJ2aWV3Vmlld0xpbmsiLCJ2aWV3VW5zdWJzY3JpYmVMaW5rIiwidmlld0Rvd25sb2FkTGluayIsInZpZXdVc2VyUGljIiwidmlld1VzZXJQaWNWaXNpYmxlIiwidmlld0lzSW1wb3J0YW50Iiwidmlld0lzRmxhZ2dlZCIsInZpZXdGcm9tRGtpbVZpc2liaWxpdHkiLCJ2aWV3RnJvbURraW1TdGF0dXNJY29uQ2xhc3MiLCJ2aWV3RnJvbURraW1TdGF0dXNUaXRsZSIsInN0YXR1cyIsImRldGVjdERvbUJhY2tncm91bmRDb2xvciIsInNjcm9sbE1lc3NhZ2VUb1RvcCIsInBpYyIsIm1lc3NhZ2VGb2N1c2VkIiwidG9nZ2xlRnVsbFNjcmVlbiIsImNsb3NlTWVzc2FnZUNvbW1hbmQiLCJtZXNzYWdlVmlzaWJpbGl0eUNvbW1hbmQiLCJtZXNzYWdlRWRpdENvbW1hbmQiLCJlZGl0TWVzc2FnZSIsImdvVXBDb21tYW5kIiwiZ29Eb3duQ29tbWFuZCIsImZGaW5kRG9tIiwiaW5wdXREb20iLCJjaGlsZHJlbiIsImZGaW5kQ29sb3IiLCJmdWxsU2NyZWVuIiwidW5GdWxsU2NyZWVuIiwiY2hlY2tIZWFkZXJIZWlnaHQiLCJTaXplMjBweCIsIlNpemUxcHgiLCJsaXN0SW5kZXgiLCJkaXYiLCJkeW5hbWljRWxzIiwidGh1bWIiLCJzdWJIdG1sIiwibGlnaHRHYWxsZXJ5IiwiZHluYW1pYyIsImxvYWRZb3V0dWJlVGh1bWJuYWlsIiwibG9hZFZpbWVvVGh1bWJuYWlsIiwidGh1bWJXaWR0aCIsInRodW1iQ29udEhlaWdodCIsInNob3dUaHVtYkJ5RGVmYXVsdCIsImR5bmFtaWNFbCIsImZDaGVja0hlYWRlckhlaWdodCIsIkV2ZW50V2hpY2hNb3VzZU1pZGRsZSIsInRocmVhZHNEcm9wZG93blRyaWdnZXIiLCJzY3JvbGxNZXNzYWdlVG9MZWZ0IiwiZXNjU2hvcnRjdXRzIiwic2Nyb2xsTGVmdCIsImlzRHJhZnRPclNlbnRGb2xkZXIiLCJTaXplNTBweCIsImdldEF0dGFjaG1lbnRzSGFzaGVzIiwiYXR0cyIsImRvd25sb2FkQXNaaXAiLCJoYXNoZXMiLCJGaWxlcyIsInNhdmVUb093bkNsb3VkIiwic2F2ZVRvRHJvcGJveCIsIlVybCIsIlNob3J0TGlmZSIsImZpbGVuYW1lIiwic2F2ZSIsInByaW50YWJsZUNoZWNrZWRNZXNzYWdlQ291bnQiLCJTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXciLCJNZW51U2V0dGluZ3NVc2VyVmlldyIsIlBhbmVTZXR0aW5nc1VzZXJWaWV3Iiwic1NldHRpbmdzVGl0bGUiLCJzZXRTZXR0aW5nc1RpdGxlIiwiR2VuZXJhbFVzZXJTZXR0aW5ncyIsIkNvbnRhY3RzVXNlclNldHRpbmdzIiwiQWNjb3VudHNVc2VyU2V0dGluZ3MiLCJTaWV2ZSIsIkZpbHRlcnNVc2VyU2V0dGluZ3MiLCJBdXRvTG9nb3V0IiwiU2VjdXJpdHlVc2VyU2V0dGluZ3MiLCJTb2NpYWxVc2VyU2V0dGluZ3MiLCJDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncyIsIlRlbXBsYXRlc1VzZXJTZXR0aW5ncyIsIkZvbGRlcnNVc2VyU2V0dGluZ3MiLCJUaGVtZXMiLCJUaGVtZXNVc2VyU2V0dGluZ3MiLCJPcGVuUGdwVXNlclNldHRpbmdzIiwibWVzc2FnZXNQZXJQYWdlQXJyYXkiLCJsYW5ndWFnZVRyaWdnZXIiLCJtcHBUcmlnZ2VyIiwiZWRpdG9yRGVmYXVsdFR5cGVUcmlnZ2VyIiwibGF5b3V0VHJpZ2dlciIsImlzQW5pbWF0aW9uU3VwcG9ydGVkIiwiaWRlbnRpdHlNYWluIiwiaWRlbnRpdHlNYWluRGVzYyIsImVkaXRvckRlZmF1bHRUeXBlcyIsImxheW91dFR5cGVzIiwiZWRpdE1haW5JZGVudGl0eSIsInRlc3RTb3VuZE5vdGlmaWNhdGlvbiIsImYwIiwiZjEiLCJmMiIsImZSZWxvYWRMYW5ndWFnZUhlbHBlciIsInNhdmVTZXR0aW5nc1N0ZXAiLCJUaW1lM3MiLCJhbGxvd0FkZGl0aW9uYWxBY2NvdW50IiwiYWxsb3dJZGVudGl0aWVzIiwiYWNjb3VudEZvckRlbGV0aW9uIiwiaWRlbnRpdHlGb3JEZWxldGlvbiIsInNjcm9sbGFibGVPcHRpb25zIiwid3JhcHBlciIsImNvbnRhaW5tZW50IiwiYXhpcyIsImFkZE5ld0FjY291bnQiLCJlZGl0QWNjb3VudCIsImFkZE5ld0lkZW50aXR5IiwiZWRpdElkZW50aXR5IiwiZGVsZXRlQWNjb3VudCIsImFjY291bnRUb1JlbW92ZSIsImRlbGV0ZUlkZW50aXR5IiwiaWRlbnRpdHlUb1JlbW92ZSIsIm9JZGVudGl0eSIsImFjY291bnRzQW5kSWRlbnRpdGllc0FmdGVyTW92ZSIsInBlZWsiLCJoYXZlQ2hhbmdlcyIsImluaXRlZCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JEZXNjIiwic2F2ZUVycm9yVGV4dCIsImZpbHRlclJhdyIsImFsbG93IiwiZmlsdGVyRm9yRGVsZXRpb24iLCJzYXZlQ2hhbmdlc0NvbW1hbmQiLCJ1cGRhdGVMaXN0IiwiRmlsdGVycyIsIk1vZHVsZXMiLCJSYXciLCJSYXdJc0FjdGl2ZSIsIlJhd0lzQWxsb3ciLCJkZWxldGVGaWx0ZXIiLCJhZGRGaWx0ZXIiLCJlZGl0RmlsdGVyIiwiY2xvbmVkRmlsdGVyIiwiY2FwYUF1dG9Mb2dvdXQiLCJTZXR0aW5zU3RvcmUiLCJhdXRvTG9nb3V0T3B0aW9ucyIsImNvbmZpZ3VyZVR3b0ZhY3RvciIsImdvb2dsZUxvZ2dpbmVkIiwiZ29vZ2xlQWN0aW9ucyIsImZhY2Vib29rTG9nZ2luZWQiLCJmYWNlYm9va0FjdGlvbnMiLCJ0d2l0dGVyTG9nZ2luZWQiLCJ0d2l0dGVyQWN0aW9ucyIsImdvb2dsZUVuYWJsZSIsImdvb2dsZUVuYWJsZUF1dGgiLCJnb29nbGVFbmFibGVBdXRoR21haWwiLCJnb29nbGVFbmFibGVEcml2ZSIsImdvb2dsZUVuYWJsZVByZXZpZXciLCJnb29nbGVVc2VyTmFtZSIsImZhY2Vib29rRW5hYmxlIiwiZmFjZWJvb2tVc2VyTmFtZSIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyVXNlck5hbWUiLCJjb25uZWN0R29vZ2xlQ29tbWFuZCIsImRpc2Nvbm5lY3RHb29nbGVDb21tYW5kIiwiY29ubmVjdEZhY2Vib29rQ29tbWFuZCIsImRpc2Nvbm5lY3RGYWNlYm9va0NvbW1hbmQiLCJjb25uZWN0VHdpdHRlckNvbW1hbmQiLCJkaXNjb25uZWN0VHdpdHRlckNvbW1hbmQiLCJjaGFuZ2VQcm9jZXNzIiwiY3VycmVudFBhc3N3b3JkIiwibmV3UGFzc3dvcmQyIiwiZXJyb3JEZXNjcmlwdGlvbiIsInBhc3N3b3JkTWlzbWF0Y2giLCJwYXNzd29yZFVwZGF0ZUVycm9yIiwicGFzc3dvcmRVcGRhdGVTdWNjZXNzIiwib25DaGFuZ2VQYXNzd29yZFJlc3BvbnNlIiwic2F2ZU5ld1Bhc3N3b3JkQ29tbWFuZCIsInByb2Nlc3NUZXh0IiwidGVtcGxhdGVGb3JEZWxldGlvbiIsInNXcmFwcGVyIiwiYWRkTmV3VGVtcGxhdGUiLCJlZGl0VGVtcGxhdGUiLCJvVGVtcGxhdGVJdGVtIiwiZGVsZXRlVGVtcGxhdGUiLCJ0ZW1wbGF0ZVRvUmVtb3ZlIiwicmVsb2FkVGVtcGxhdGVzIiwiZm9sZGVyTGlzdEhlbHAiLCJmb2xkZXJGb3JEZWxldGlvbiIsImZvbGRlckZvckVkaXQiLCJ1c2VJbWFwU3Vic2NyaWJlIiwiZm9sZGVyRWRpdE9uRW50ZXIiLCJuYW1lVG9FZGl0IiwiZm9sZGVyRWRpdE9uRXNjIiwic3lzdGVtRm9sZGVyIiwiZGVsZXRlRm9sZGVyIiwiZm9sZGVyVG9SZW1vdmUiLCJmUmVtb3ZlRm9sZGVyIiwic3Vic2NyaWJlRm9sZGVyIiwidW5TdWJzY3JpYmVGb2xkZXIiLCJjaGVja2FibGVUcnVlRm9sZGVyIiwiY2hlY2thYmxlRmFsc2VGb2xkZXIiLCJ0aGVtZXNPYmplY3RzIiwiYmFja2dyb3VuZCIsInVwbG9hZGVyQnV0dG9uIiwiY2FwYVVzZXJCYWNrZ3JvdW5kIiwiVXNlckJhY2tncm91bmQiLCJvVGhlbWVBamF4UmVxdWVzdCIsIiRiZyIsImN1cnJlbnRUaGVtZSIsIm5hbWVEaXNwbGF5IiwidGhlbWVQcmV2aWV3U3JjIiwiY2xlYXJCYWNrZ3JvdW5kIiwiZXJyb3JNc2ciLCJvcGVuUGdwS2V5Rm9yRGVsZXRpb24iLCJpc0h0dHBzIiwiYWRkT3BlblBncEtleSIsImdlbmVyYXRlT3BlblBncEtleSIsInZpZXdPcGVuUGdwS2V5Iiwib3BlblBncEtleSIsImRlbGV0ZU9wZW5QZ3BLZXkiLCJvcGVuUGdwS2V5VG9SZW1vdmUiLCJmaW5kZWRJdGVtIiwicmVtb3ZlRm9ySWQiLCJiYWNrVG9NYWlsQm94Q2xpY2siLCJib290c3RyYXAiLCJNZXNzYWdlT3BlblBncFBvcHVwVmlldyIsInNlbGVjdGVkS2V5IiwiYnV0dG9uRm9jdXMiLCJyZXN1bHRDYWxsYmFjayIsIlBvcHVwTWVzc2FnZU9wZW5QR1AiLCJkb0NvbW1hbmQiLCJmaXJzdCIsIktFWV9OQU1FX1NVQlNUUiIsIkNvbXBvc2VPcGVuUGdwUG9wdXBWaWV3Iiwic2lnbiIsImVuY3J5cHQiLCJwdWJsaWNLZXlzT3B0aW9uc0NhcHRpb24iLCJwcml2YXRlS2V5c09wdGlvbnNDYXB0aW9uIiwic2VsZWN0ZWRQcml2YXRlS2V5Iiwic2VsZWN0ZWRQdWJsaWNLZXkiLCJzaWduS2V5IiwiZW5jcnlwdEtleXMiLCJlbmNyeXB0S2V5c1ZpZXciLCJvS2V5IiwicHJpdmF0ZUtleXNPcHRpb25zIiwib3B0cyIsInB1YmxpY0tleXNPcHRpb25zIiwic2VsZWN0Q29tbWFuZCIsInVwZGF0ZUNvbW1hbmQiLCJhZGRDb21tYW5kIiwiUG9wdXBDb21wb3NlT3BlblBHUCIsImFkZE9wdGlvbkNsYXNzIiwiZG9tT3B0aW9uIiwiY2xhc3MiLCJkZWxldGVQdWJsaWNrS2V5IiwiYVB1YmxpY0tleXMiLCJwZ3BQcm9taXNlIiwiVGltZTIwbXMiLCJrZXlJZCIsInJlbW92YWJsZSIsInB1YmxpY0tleSIsInJlYyIsImVtYWlsTGluZSIsInJlY0VtYWlsIiwiZW5jcnlwdEtleSIsIkZvbGRlckNsZWFyUG9wdXBWaWV3Iiwic2VsZWN0ZWRGb2xkZXIiLCJpc0NsZWFyaW5nIiwiY2xlYXJpbmdQcm9jZXNzIiwiY2xlYXJpbmdFcnJvciIsImZvbGRlckZ1bGxOYW1lRm9yQ2xlYXIiLCJmb2xkZXJOYW1lRm9yQ2xlYXIiLCJkYW5nZXJEZXNjSHRtbCIsImZvbGRlclRvQ2xlYXIiLCJBZHZhbmNlZFNlYXJjaFBvcHVwVmlldyIsImZyb21Gb2N1cyIsInNlbGVjdGVkRGF0ZVZhbHVlIiwiaGFzQXR0YWNobWVudCIsInNlbGVjdGVkRGF0ZXMiLCJzZWFyY2hDb21tYW5kIiwiYnVpbGRTZWFyY2hTdHJpbmciLCJwYXJzZVNlYXJjaFN0cmluZ1ZhbHVlIiwiYnVpbGRTZWFyY2hTdHJpbmdWYWx1ZSIsImZyb21fIiwiaXNQYXJ0IiwiaGFzUGFydCIsIlR3b0ZhY3RvclRlc3RQb3B1cFZpZXciLCJ0ZXN0aW5nIiwia29UZXN0ZWRUcmlnZ2VyIiwidGVzdENvZGVDb21tYW5kIiwiQWRkT3BlblBncEtleVBvcHVwVmlldyIsImVycm9yTWVzc2FnZSIsImFkZE9wZW5QZ3BLZXlDb21tYW5kIiwicmVnIiwia2V5VHJpbW1lZCIsImRvbmUiLCJpbXBvcnRLZXkiLCJOZXdPcGVuUGdwS2V5UG9wdXBWaWV3Iiwia2V5Qml0TGVuZ3RoIiwiQml0TGVuZ3RoMjA0OCIsImdlbmVyYXRlT3BlblBncEtleUNvbW1hbmQiLCJnZW5lcmF0ZUtleSIsInVzZXJJZHMiLCJudW1CaXRzIiwicGFzc3BocmFzZSIsImtleVBhaXIiLCJwcml2YXRlS2V5QXJtb3JlZCIsInB1YmxpY0tleUFybW9yZWQiLCJzaG93RXJyb3IiLCJWaWV3T3BlblBncEtleVBvcHVwVmlldyIsImtleURvbSIsIlBvcHVwVmlld09wZW5QR1AiLCJzZWxlY3RLZXkiLCJXZWxjb21lUGFnZVBvcHVwVmlldyIsIndlbGNvbWVQYWdlVVJMIiwiY2xvc2VGb2N1c2VkIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFB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QUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQix3Q0FBd0M7QUFDeEM7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsNEJBQTRCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdELGdCQUFnQjtBQUN4RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9ELGdCQUFnQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsMkJBQTJCLDRCQUE0QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkIseUJBQXlCO0FBQ3BEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7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Q2J0QztBQUVBO0FBRUE7QUFDQTtJQU1Na3BFLG9CLFdBSkxuMUQseURBQUssQ0FBQztBQUNOL3dDLE1BQUksRUFBRSx3QkFEQTtBQUVOa1csWUFBVSxFQUFFO0FBRk4sQ0FBRCxDOzs7QUFLTCxrQ0FBYztBQUFBOztBQUNiO0FBRUEsVUFBS2l3RixjQUFMLEdBQXNCai9HLGtEQUFFLENBQUNzTyxVQUFILENBQWMsRUFBZCxDQUF0QjtBQUVBLFVBQUs0d0csWUFBTCxHQUFvQmwvRyxrREFBRSxDQUFDc08sVUFBSCxDQUFjLEtBQWQsQ0FBcEI7QUFMYTtBQU1iOzs7O1NBRURpMkQsVSxHQUFBLHNCQUFhO0FBQ1osU0FBSzA2QyxjQUFMLENBQW9CLEVBQXBCO0FBQ0EsU0FBS0MsWUFBTCxDQUFrQixLQUFsQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7OztTQUNDNXNELE0sR0FBQSxnQkFBTzVsQixJQUFQLEVBQWE7QUFDWixTQUFLNjNCLFVBQUw7QUFFQSxTQUFLMDZDLGNBQUwsQ0FBb0J2eUUsSUFBcEI7QUFDQSxHOztTQUVEdW9CLGUsR0FBQSwyQkFBa0I7QUFDakIsU0FBS2lxRCxZQUFMLENBQWtCLElBQWxCO0FBQ0EsRzs7U0FFRHh0RCxNLEdBQUEsa0JBQVM7QUFDUit0QixzRUFBUSxDQUFDaDVCLFlBQVQ7QUFDQSxHOzs7RUE5QmlDM1EsK0UiLCJmaWxlIjoianMvYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJyYWlubG9vcC92LzAuMC4wL3N0YXRpYy9qcy9cIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDUyMyk7XG4iLCIvKiBlc2xpbnQgcXVvdGUtcHJvcHM6IDAgKi9cblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsZVR5cGUgPSB7XG5cdCdVbmtub3duJzogJ3Vua25vd24nLFxuXHQnVGV4dCc6ICd0ZXh0Jyxcblx0J0h0bWwnOiAnaHRtbCcsXG5cdCdDb2RlJzogJ2NvZGUnLFxuXHQnRW1sJzogJ2VtbCcsXG5cdCdXb3JkVGV4dCc6ICd3b3JkLXRleHQnLFxuXHQnUGRmJzogJ3BkZicsXG5cdCdJbWFnZSc6ICdpbWFnZScsXG5cdCdBdWRpbyc6ICdhdWRpbycsXG5cdCdWaWRlbyc6ICd2aWRlbycsXG5cdCdTaGVldCc6ICdzaGVldCcsXG5cdCdQcmVzZW50YXRpb24nOiAncHJlc2VudGF0aW9uJyxcblx0J0NlcnRpZmljYXRlJzogJ2NlcnRpZmljYXRlJyxcblx0J0NlcnRpZmljYXRlQmluJzogJ2NlcnRpZmljYXRlLWJpbicsXG5cdCdBcmNoaXZlJzogJ2FyY2hpdmUnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTdG9yYWdlUmVzdWx0VHlwZSA9IHtcblx0J1N1Y2Nlc3MnOiAnc3VjY2VzcycsXG5cdCdBYm9ydCc6ICdhYm9ydCcsXG5cdCdFcnJvcic6ICdlcnJvcicsXG5cdCdVbmxvYWQnOiAndW5sb2FkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRm9jdXNlZCA9IHtcblx0J05vbmUnOiAnbm9uZScsXG5cdCdNZXNzYWdlTGlzdCc6ICdtZXNzYWdlLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZSA9IHtcblx0J0VtcHR5JzogMTAsXG5cdCdMb2dpbic6IDIwLFxuXHQnQXV0aCc6IDMwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZVR5cGUgPSB7XG5cdCdXZWJtYWlsJzogMCxcblx0J0FkbWluJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgQ2FwYSA9IHtcblx0J1R3b0ZhY3Rvcic6ICdUV09fRkFDVE9SJyxcblx0J1R3b0ZhY3RvckZvcmNlJzogJ1RXT19GQUNUT1JfRk9SQ0UnLFxuXHQnT3BlblBHUCc6ICdPUEVOX1BHUCcsXG5cdCdQcmVmZXRjaCc6ICdQUkVGRVRDSCcsXG5cdCdHcmF2YXRhcic6ICdHUkFWQVRBUicsXG5cdCdGb2xkZXJzJzogJ0ZPTERFUlMnLFxuXHQnQ29tcG9zZXInOiAnQ09NUE9TRVInLFxuXHQnQ29udGFjdHMnOiAnQ09OVEFDVFMnLFxuXHQnUmVsb2FkJzogJ1JFTE9BRCcsXG5cdCdTZWFyY2gnOiAnU0VBUkNIJyxcblx0J1NlYXJjaEFkdic6ICdTRUFSQ0hfQURWJyxcblx0J01lc3NhZ2VBY3Rpb25zJzogJ01FU1NBR0VfQUNUSU9OUycsXG5cdCdNZXNzYWdlTGlzdEFjdGlvbnMnOiAnTUVTU0FHRUxJU1RfQUNUSU9OUycsXG5cdCdBdHRhY2htZW50c0FjdGlvbnMnOiAnQVRUQUNITUVOVFNfQUNUSU9OUycsXG5cdCdEYW5nZXJvdXNBY3Rpb25zJzogJ0RBTkdFUk9VU19BQ1RJT05TJyxcblx0J1NldHRpbmdzJzogJ1NFVFRJTkdTJyxcblx0J0hlbHAnOiAnSEVMUCcsXG5cdCdUaGVtZXMnOiAnVEhFTUVTJyxcblx0J1VzZXJCYWNrZ3JvdW5kJzogJ1VTRVJfQkFDS0dST1VORCcsXG5cdCdTaWV2ZSc6ICdTSUVWRScsXG5cdCdGaWx0ZXJzJzogJ0ZJTFRFUlMnLFxuXHQnQXR0YWNobWVudFRodW1ibmFpbHMnOiAnQVRUQUNITUVOVF9USFVNQk5BSUxTJyxcblx0J1RlbXBsYXRlcyc6ICdURU1QTEFURVMnLFxuXHQnQXV0b0xvZ291dCc6ICdBVVRPTE9HT1VUJyxcblx0J0FkZGl0aW9uYWxBY2NvdW50cyc6ICdBRERJVElPTkFMX0FDQ09VTlRTJyxcblx0J0lkZW50aXRpZXMnOiAnSURFTlRJVElFUydcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEtleVN0YXRlID0ge1xuXHQnQWxsJzogJ2FsbCcsXG5cdCdOb25lJzogJ25vbmUnLFxuXHQnQ29udGFjdExpc3QnOiAnY29udGFjdC1saXN0Jyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdGb2xkZXJMaXN0JzogJ2ZvbGRlci1saXN0Jyxcblx0J01lc3NhZ2VWaWV3JzogJ21lc3NhZ2UtdmlldycsXG5cdCdDb21wb3NlJzogJ2NvbXBvc2UnLFxuXHQnU2V0dGluZ3MnOiAnc2V0dGluZ3MnLFxuXHQnTWVudSc6ICdtZW51Jyxcblx0J1BvcHVwQ29tcG9zZU9wZW5QR1AnOiAnY29tcG9zZS1vcGVuLXBncCcsXG5cdCdQb3B1cE1lc3NhZ2VPcGVuUEdQJzogJ21lc3NhZ2Utb3Blbi1wZ3AnLFxuXHQnUG9wdXBWaWV3T3BlblBHUCc6ICd2aWV3LW9wZW4tcGdwJyxcblx0J1BvcHVwS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJzogJ3BvcHVwLWtleWJvYXJkLXNob3J0Y3V0cy1oZWxwJyxcblx0J1BvcHVwQXNrJzogJ3BvcHVwLWFzaydcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEZvbGRlclR5cGUgPSB7XG5cdCdJbmJveCc6IDEwLFxuXHQnU2VudEl0ZW1zJzogMTEsXG5cdCdEcmFmdCc6IDEyLFxuXHQnVHJhc2gnOiAxMyxcblx0J1NwYW0nOiAxNCxcblx0J0FyY2hpdmUnOiAxNSxcblx0J05vdFNwYW0nOiA4MCxcblx0J1VzZXInOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyRm9sZGVyVHlwZSA9IHtcblx0J1VTRVInOiAwLFxuXHQnSU5CT1gnOiAxLFxuXHQnU0VOVCc6IDIsXG5cdCdEUkFGVFMnOiAzLFxuXHQnSlVOSyc6IDQsXG5cdCdUUkFTSCc6IDUsXG5cdCdJTVBPUlRBTlQnOiAxMCxcblx0J0ZMQUdHRUQnOiAxMSxcblx0J0FMTCc6IDEyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBMb2dpblNpZ25NZVR5cGVBc1N0cmluZyA9IHtcblx0J0RlZmF1bHRPZmYnOiAnZGVmYXVsdG9mZicsXG5cdCdEZWZhdWx0T24nOiAnZGVmYXVsdG9uJyxcblx0J1VudXNlZCc6ICd1bnVzZWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMb2dpblNpZ25NZVR5cGUgPSB7XG5cdCdEZWZhdWx0T2ZmJzogMCxcblx0J0RlZmF1bHRPbic6IDEsXG5cdCdVbnVzZWQnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDb21wb3NlVHlwZSA9IHtcblx0J0VtcHR5JzogJ2VtcHR5Jyxcblx0J1JlcGx5JzogJ3JlcGx5Jyxcblx0J1JlcGx5QWxsJzogJ3JlcGx5YWxsJyxcblx0J0ZvcndhcmQnOiAnZm9yd2FyZCcsXG5cdCdGb3J3YXJkQXNBdHRhY2htZW50JzogJ2ZvcndhcmQtYXMtYXR0YWNobWVudCcsXG5cdCdEcmFmdCc6ICdkcmFmdCcsXG5cdCdFZGl0QXNOZXcnOiAnZWRpdGFzbmV3J1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgVXBsb2FkRXJyb3JDb2RlID0ge1xuXHQnTm9ybWFsJzogMCxcblx0J0ZpbGVJc1Rvb0JpZyc6IDEsXG5cdCdGaWxlUGFydGlhbGx5VXBsb2FkZWQnOiAyLFxuXHQnRmlsZU5vVXBsb2FkZWQnOiAzLFxuXHQnTWlzc2luZ1RlbXBGb2xkZXInOiA0LFxuXHQnRmlsZU9uU2F2ZWluZ0Vycm9yJzogNSxcblx0J0ZpbGVUeXBlJzogOTgsXG5cdCdVbmtub3duJzogOTlcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24gPSB7XG5cdCdOb25lJzogMCxcblx0J1NlbnQnOiAxLFxuXHQnRHJhZnQnOiAyLFxuXHQnU3BhbSc6IDMsXG5cdCdUcmFzaCc6IDQsXG5cdCdBcmNoaXZlJzogNVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgQ2xpZW50U2lkZUtleU5hbWUgPSB7XG5cdCdGb2xkZXJzTGFzaEhhc2gnOiAwLFxuXHQnTWVzc2FnZXNJbmJveExhc3RIYXNoJzogMSxcblx0J01haWxCb3hMaXN0U2l6ZSc6IDIsXG5cdCdFeHBhbmRlZEZvbGRlcnMnOiAzLFxuXHQnRm9sZGVyTGlzdFNpemUnOiA0LFxuXHQnTWVzc2FnZUxpc3RTaXplJzogNSxcblx0J0xhc3RSZXBseUFjdGlvbic6IDYsXG5cdCdMYXN0U2lnbk1lJzogNyxcblx0J0NvbXBvc2VMYXN0SWRlbnRpdHlJRCc6IDgsXG5cdCdNZXNzYWdlSGVhZGVyRnVsbEluZm8nOiA5LFxuXHQnTWVzc2FnZUF0dGFjaG1uZXRDb250cm9scyc6IDEwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBFdmVudEtleUNvZGUgPSB7XG5cdCdCYWNrc3BhY2UnOiA4LFxuXHQnVGFiJzogOSxcblx0J0VudGVyJzogMTMsXG5cdCdFc2MnOiAyNyxcblx0J1BhZ2VVcCc6IDMzLFxuXHQnUGFnZURvd24nOiAzNCxcblx0J0xlZnQnOiAzNyxcblx0J1JpZ2h0JzogMzksXG5cdCdVcCc6IDM4LFxuXHQnRG93bic6IDQwLFxuXHQnRW5kJzogMzUsXG5cdCdIb21lJzogMzYsXG5cdCdTcGFjZSc6IDMyLFxuXHQnSW5zZXJ0JzogNDUsXG5cdCdEZWxldGUnOiA0Nixcblx0J0EnOiA2NSxcblx0J1MnOiA4M1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVNldEFjdGlvbiA9IHtcblx0J1NldFNlZW4nOiAwLFxuXHQnVW5zZXRTZWVuJzogMSxcblx0J1NldEZsYWcnOiAyLFxuXHQnVW5zZXRGbGFnJzogM1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVNlbGVjdEFjdGlvbiA9IHtcblx0J0FsbCc6IDAsXG5cdCdOb25lJzogMSxcblx0J0ludmVydCc6IDIsXG5cdCdVbnNlZW4nOiAzLFxuXHQnU2Vlbic6IDQsXG5cdCdGbGFnZ2VkJzogNSxcblx0J1VuZmxhZ2dlZCc6IDZcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IERlc2t0b3BOb3RpZmljYXRpb24gPSB7XG5cdCdBbGxvd2VkJzogMCxcblx0J05vdEFsbG93ZWQnOiAxLFxuXHQnRGVuaWVkJzogMixcblx0J05vdFN1cHBvcnRlZCc6IDlcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VQcmlvcml0eSA9IHtcblx0J0xvdyc6IDUsXG5cdCdOb3JtYWwnOiAzLFxuXHQnSGlnaCc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEVkaXRvckRlZmF1bHRUeXBlID0ge1xuXHQnSHRtbCc6ICdIdG1sJyxcblx0J1BsYWluJzogJ1BsYWluJyxcblx0J0h0bWxGb3JjZWQnOiAnSHRtbEZvcmNlZCcsXG5cdCdQbGFpbkZvcmNlZCc6ICdQbGFpbkZvcmNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclNlY3VyZSA9IHtcblx0J05vbmUnOiAwLFxuXHQnU1NMJzogMSxcblx0J1RMUyc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNlYXJjaERhdGVUeXBlID0ge1xuXHQnQWxsJzogLTEsXG5cdCdEYXlzMyc6IDMsXG5cdCdEYXlzNyc6IDcsXG5cdCdNb250aCc6IDMwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTYXZlU2V0dGluZ3NTdGVwID0ge1xuXHQnQW5pbWF0ZSc6IC0yLFxuXHQnSWRsZSc6IC0xLFxuXHQnVHJ1ZVJlc3VsdCc6IDEsXG5cdCdGYWxzZVJlc3VsdCc6IDBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExheW91dCA9IHtcblx0J05vUHJldmlldyc6IDAsXG5cdCdTaWRlUHJldmlldyc6IDEsXG5cdCdCb3R0b21QcmV2aWV3JzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyQ29uZGl0aW9uRmllbGQgPSB7XG5cdCdGcm9tJzogJ0Zyb20nLFxuXHQnUmVjaXBpZW50JzogJ1JlY2lwaWVudCcsXG5cdCdTdWJqZWN0JzogJ1N1YmplY3QnLFxuXHQnSGVhZGVyJzogJ0hlYWRlcicsXG5cdCdTaXplJzogJ1NpemUnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25UeXBlID0ge1xuXHQnQ29udGFpbnMnOiAnQ29udGFpbnMnLFxuXHQnTm90Q29udGFpbnMnOiAnTm90Q29udGFpbnMnLFxuXHQnRXF1YWxUbyc6ICdFcXVhbFRvJyxcblx0J05vdEVxdWFsVG8nOiAnTm90RXF1YWxUbycsXG5cdCdSZWdleCc6ICdSZWdleCcsXG5cdCdPdmVyJzogJ092ZXInLFxuXHQnVW5kZXInOiAnVW5kZXInXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJzQWN0aW9uID0ge1xuXHQnTm9uZSc6ICdOb25lJyxcblx0J01vdmVUbyc6ICdNb3ZlVG8nLFxuXHQnRGlzY2FyZCc6ICdEaXNjYXJkJyxcblx0J1ZhY2F0aW9uJzogJ1ZhY2F0aW9uJyxcblx0J1JlamVjdCc6ICdSZWplY3QnLFxuXHQnRm9yd2FyZCc6ICdGb3J3YXJkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyUnVsZXNUeXBlID0ge1xuXHQnQWxsJzogJ0FsbCcsXG5cdCdBbnknOiAnQW55J1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2lnbmVkVmVyaWZ5U3RhdHVzID0ge1xuXHQnVW5rbm93blB1YmxpY0tleXMnOiAtNCxcblx0J1Vua25vd25Qcml2YXRlS2V5JzogLTMsXG5cdCdVbnZlcmlmaWVkJzogLTIsXG5cdCdFcnJvcic6IC0xLFxuXHQnTm9uZSc6IDAsXG5cdCdTdWNjZXNzJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgQ29udGFjdFByb3BlcnR5VHlwZSA9IHtcblx0J1Vua25vd24nOiAwLFxuXG5cdCdGdWxsTmFtZSc6IDEwLFxuXG5cdCdGaXJzdE5hbWUnOiAxNSxcblx0J0xhc3ROYW1lJzogMTYsXG5cdCdNaWRkbGVOYW1lJzogMTYsXG5cdCdOaWNrJzogMTgsXG5cblx0J05hbWVQcmVmaXgnOiAyMCxcblx0J05hbWVTdWZmaXgnOiAyMSxcblxuXHQnRW1haWwnOiAzMCxcblx0J1Bob25lJzogMzEsXG5cdCdXZWInOiAzMixcblxuXHQnQmlydGhkYXknOiA0MCxcblxuXHQnRmFjZWJvb2snOiA5MCxcblx0J1NreXBlJzogOTEsXG5cdCdHaXRIdWInOiA5MixcblxuXHQnTm90ZSc6IDExMCxcblxuXHQnQ3VzdG9tJzogMjUwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNYWdpY3MgPSB7XG5cdCdFdmVudFdoaWNoTW91c2VNaWRkbGUnOiAzLFxuXHQnaWZ2aXNpYmxlSWRsZTEwcyc6IDEwLFxuXG5cdCdCaXRMZW5ndGgyMDQ4JzogMjA0OCxcblx0J0JpdExlbmd0aDEwMjQnOiAxMDI0LFxuXG5cdCdTaXplMzUwcHgnOiAzNTAsXG5cdCdTaXplNTBweCc6IDUwLFxuXHQnU2l6ZTIwcHgnOiAyMCxcblx0J1NpemUxcHgnOiAxLFxuXG5cdCdUaW1lMzBtSW5NaW4nOiAzMCxcblxuXHQnVGltZTYwbSc6IDYwMDAwICogNjAsXG5cdCdUaW1lMzBtJzogNjAwMDAgKiAzMCxcblx0J1RpbWUyMG0nOiA2MDAwMCAqIDIwLFxuXHQnVGltZTE1bSc6IDYwMDAwICogMTUsXG5cdCdUaW1lMTBtJzogNjAwMDAgKiAxMCxcblx0J1RpbWU1bSc6IDYwMDAwICogNSxcblx0J1RpbWUzbSc6IDYwMDAwICogMyxcblx0J1RpbWUybSc6IDYwMDAwICogMixcblx0J1RpbWUxbSc6IDYwMDAwLFxuXHQnVGltZTMwcyc6IDMwMDAwLFxuXHQnVGltZTEwcyc6IDEwMDAwLFxuXHQnVGltZTdzJzogNzAwMCxcblx0J1RpbWU1cyc6IDUwMDAsXG5cdCdUaW1lM3MnOiAzMDAwLFxuXHQnVGltZTFzJzogMTAwMCxcblx0J1RpbWU1MDBtcyc6IDUwMCxcblx0J1RpbWUzNTBtcyc6IDM1MCxcblx0J1RpbWUyNTBtcyc6IDI1MCxcblx0J1RpbWUyMDBtcyc6IDIwMCxcblx0J1RpbWUxMDBtcyc6IDEwMCxcblx0J1RpbWU1MG1zJzogNTAsXG5cdCdUaW1lMjBtcyc6IDIwLFxuXHQnVGltZTEwbXMnOiAxMCxcblx0J1RpbWUxbXMnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBQb3J0cyA9IHtcblx0J0ltYXAnOiAxNDMsXG5cdCdJbWFwU3NsJzogOTkzLFxuXHQnU210cCc6IDI1LFxuXHQnU210cFNzbCc6IDQ2NSxcblx0J1NtdHBTdGFydFRscyc6IDU4N1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTm90aWZpY2F0aW9uID0ge1xuXHQnSW52YWxpZFRva2VuJzogMTAxLFxuXHQnQXV0aEVycm9yJzogMTAyLFxuXHQnQWNjZXNzRXJyb3InOiAxMDMsXG5cdCdDb25uZWN0aW9uRXJyb3InOiAxMDQsXG5cdCdDYXB0Y2hhRXJyb3InOiAxMDUsXG5cdCdTb2NpYWxGYWNlYm9va0xvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNixcblx0J1NvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUnOiAxMDcsXG5cdCdTb2NpYWxHb29nbGVMb2dpbkFjY2Vzc0Rpc2FibGUnOiAxMDgsXG5cdCdEb21haW5Ob3RBbGxvd2VkJzogMTA5LFxuXHQnQWNjb3VudE5vdEFsbG93ZWQnOiAxMTAsXG5cblx0J0FjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQnOiAxMjAsXG5cdCdBY2NvdW50VHdvRmFjdG9yQXV0aEVycm9yJzogMTIxLFxuXG5cdCdDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCc6IDEzMCxcblx0J0N1cnJlbnRQYXNzd29yZEluY29ycmVjdCc6IDEzMSxcblx0J05ld1Bhc3N3b3JkU2hvcnQnOiAxMzIsXG5cdCdOZXdQYXNzd29yZFdlYWsnOiAxMzMsXG5cdCdOZXdQYXNzd29yZEZvcmJpZGRlbic6IDEzNCxcblxuXHQnQ29udGFjdHNTeW5jRXJyb3InOiAxNDAsXG5cblx0J0NhbnRHZXRNZXNzYWdlTGlzdCc6IDIwMSxcblx0J0NhbnRHZXRNZXNzYWdlJzogMjAyLFxuXHQnQ2FudERlbGV0ZU1lc3NhZ2UnOiAyMDMsXG5cdCdDYW50TW92ZU1lc3NhZ2UnOiAyMDQsXG5cdCdDYW50Q29weU1lc3NhZ2UnOiAyMDUsXG5cblx0J0NhbnRTYXZlTWVzc2FnZSc6IDMwMSxcblx0J0NhbnRTZW5kTWVzc2FnZSc6IDMwMixcblx0J0ludmFsaWRSZWNpcGllbnRzJzogMzAzLFxuXG5cdCdDYW50U2F2ZUZpbHRlcnMnOiAzNTEsXG5cdCdDYW50R2V0RmlsdGVycyc6IDM1Mixcblx0J0ZpbHRlcnNBcmVOb3RDb3JyZWN0JzogMzU1LFxuXG5cdCdDYW50Q3JlYXRlRm9sZGVyJzogNDAwLFxuXHQnQ2FudFJlbmFtZUZvbGRlcic6IDQwMSxcblx0J0NhbnREZWxldGVGb2xkZXInOiA0MDIsXG5cdCdDYW50U3Vic2NyaWJlRm9sZGVyJzogNDAzLFxuXHQnQ2FudFVuc3Vic2NyaWJlRm9sZGVyJzogNDA0LFxuXHQnQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyJzogNDA1LFxuXG5cdCdDYW50U2F2ZVNldHRpbmdzJzogNTAxLFxuXHQnQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyc6IDUwMixcblxuXHQnRG9tYWluQWxyZWFkeUV4aXN0cyc6IDYwMSxcblxuXHQnQ2FudEluc3RhbGxQYWNrYWdlJzogNzAxLFxuXHQnQ2FudERlbGV0ZVBhY2thZ2UnOiA3MDIsXG5cdCdJbnZhbGlkUGx1Z2luUGFja2FnZSc6IDcwMyxcblx0J1Vuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSc6IDcwNCxcblxuXHQnTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSc6IDcxMCxcblx0J0xpY2Vuc2luZ0V4cGlyZWQnOiA3MTEsXG5cdCdMaWNlbnNpbmdCYW5uZWQnOiA3MTIsXG5cblx0J0RlbW9TZW5kTWVzc2FnZUVycm9yJzogNzUwLFxuXHQnRGVtb0FjY291bnRFcnJvcic6IDc1MSxcblxuXHQnQWNjb3VudEFscmVhZHlFeGlzdHMnOiA4MDEsXG5cdCdBY2NvdW50RG9lc05vdEV4aXN0JzogODAyLFxuXG5cdCdNYWlsU2VydmVyRXJyb3InOiA5MDEsXG5cdCdDbGllbnRWaWV3RXJyb3InOiA5MDIsXG5cdCdJbnZhbGlkSW5wdXRBcmd1bWVudCc6IDkwMyxcblxuXHQnQWpheEZhbHNlJzogOTUwLFxuXHQnQWpheEFib3J0JzogOTUxLFxuXHQnQWpheFBhcnNlJzogOTUyLFxuXHQnQWpheFRpbWVvdXQnOiA5NTMsXG5cblx0J1Vua25vd25Ob3RpZmljYXRpb24nOiA5OTksXG5cdCdVbmtub3duRXJyb3InOiA5OTlcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IE9wZW50aXAgZnJvbSAnT3BlbnRpcCc7XG5pbXBvcnQgUGlrYWRheSBmcm9tICdwaWthZGF5JztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY29uc3Qga28gPSB3aW5kb3cua28sXG5cdCR3aW4gPSAkKHdpbmRvdyksXG5cdGZEaXNwb3NhbFRvb2x0aXBIZWxwZXIgPSAoZWxlbWVudCkgPT4ge1xuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fX29wZW50aXApIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudXBkYXRlV2lkdGggPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0ZkluaXQgPSAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZSgkZWwud2lkdGgoKSk7XG5cdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRmVmFsdWUoJGVsLndpZHRoKCkpO1xuXHRcdFx0XHR9LCBNYWdpY3MuVGltZTUwMG1zKTtcblx0XHRcdH07XG5cblx0XHQkd2luLm9uKCdyZXNpemUnLCBmSW5pdCk7XG5cdFx0ZkluaXQoKTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JHdpbi5vZmYoJ3Jlc2l6ZScsIGZJbml0KTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmVkaXRvciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0bGV0IGVkaXRvciA9IG51bGw7XG5cblx0XHRjb25zdCBmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0SHRtbEVkaXRvciA9IHJlcXVpcmUoJ0NvbW1vbi9IdG1sRWRpdG9yJykuZGVmYXVsdCxcblx0XHRcdGZVcGRhdGVFZGl0b3JWYWx1ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuX19lZGl0b3IpIHtcblx0XHRcdFx0XHRmVmFsdWUuX19lZGl0b3Iuc2V0SHRtbE9yUGxhaW4oZlZhbHVlKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZlVwZGF0ZUtvVmFsdWUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLl9fZWRpdG9yKSB7XG5cdFx0XHRcdFx0ZlZhbHVlKGZWYWx1ZS5fX2VkaXRvci5nZXREYXRhV2l0aEh0bWxNYXJrKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Zk9uUmVhZHkgPSAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZS5fX2VkaXRvciA9IGVkaXRvcjtcblx0XHRcdFx0ZlVwZGF0ZUVkaXRvclZhbHVlKCk7XG5cdFx0XHR9O1xuXG5cdFx0aWYgKGtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIEh0bWxFZGl0b3IpIHtcblx0XHRcdGVkaXRvciA9IG5ldyBIdG1sRWRpdG9yKGVsZW1lbnQsIGZVcGRhdGVLb1ZhbHVlLCBmT25SZWFkeSwgZlVwZGF0ZUtvVmFsdWUpO1xuXG5cdFx0XHRmVmFsdWUuX19mZXRjaEVkaXRvclZhbHVlID0gZlVwZGF0ZUtvVmFsdWU7XG5cblx0XHRcdGZWYWx1ZS5zdWJzY3JpYmUoZlVwZGF0ZUVkaXRvclZhbHVlKTtcblxuXHRcdFx0Ly8ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5qc29uID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHQkKGVsZW1lbnQpLnRleHQod2luZG93LkpTT04uc3RyaW5naWZ5KGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudCkudGV4dCh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5zY3JvbGxlclNoYWRvd3MgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgbGltaXQgPSA4LFxuXHRcdFx0JGVsID0gJChlbGVtZW50KSxcblx0XHRcdGNvbnQgPSAkZWwuZmluZCgnW2RhdGEtc2Nyb2xsZXItc2hhZG93cy1jb250ZW50XScpWzBdIHx8IG51bGwsXG5cdFx0XHRmRnVuYyA9IF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHQkZWxcblx0XHRcdFx0XHQudG9nZ2xlQ2xhc3MoJ3Njcm9sbGVyLXNoYWRvdy10b3AnLCBsaW1pdCA8IGNvbnQuc2Nyb2xsVG9wKVxuXHRcdFx0XHRcdC50b2dnbGVDbGFzcygnc2Nyb2xsZXItc2hhZG93LWJvdHRvbScsIGNvbnQuc2Nyb2xsVG9wICsgbGltaXQgPCBjb250LnNjcm9sbEhlaWdodCAtIGNvbnQuY2xpZW50SGVpZ2h0KTtcblx0XHRcdH0sIDEwMCk7XG5cblx0XHRpZiAoY29udCkge1xuXHRcdFx0JChjb250KS5vbignc2Nyb2xsIHJlc2l6ZScsIGZGdW5jKTtcblx0XHRcdCR3aW4ub24oJ3Jlc2l6ZScsIGZGdW5jKTtcblxuXHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhjb250LCAoKSA9PiB7XG5cdFx0XHRcdCQoY29udCkub2ZmKCk7XG5cdFx0XHRcdCR3aW4ub2ZmKCdyZXNpemUnLCBmRnVuYyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5waWthZGF5ID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSA9PiB7XG5cdFx0a28uYmluZGluZ0hhbmRsZXJzLnRleHRJbnB1dC5pbml0KGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRpZiAoUGlrYWRheSkge1xuXHRcdFx0ZWxlbWVudC5fX3Bpa2FkYXkgPSBuZXcgUGlrYWRheSh7XG5cdFx0XHRcdGZpZWxkOiBlbGVtZW50XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy52aXNpYmxlQW5pbWF0ZWQgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0JGVsLmFkZENsYXNzKCdybC1hbmltYXRlZC1pbml0ZWQnKTtcblx0XHRpZiAoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSB7XG5cdFx0XHQkZWwuc2hvdygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuaGlkZSgpO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCRlbC5hZGRDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJykuc2hvdygpO1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdCRlbC5yZW1vdmVDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJyk7XG5cdFx0XHR9LCAxMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5oaWRlKCkucmVtb3ZlQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRvb2x0aXAgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0aXNNb2JpbGUgPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtbW9iaWxlJykgfHwgJ29mZicpLFxuXHRcdFx0aXNJMThOID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLWkxOG4nKSB8fCAnb24nKSxcblx0XHRcdEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UgfHwgaXNNb2JpbGUpIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSk7XG5cblx0XHRcdGVsZW1lbnQuX19vcGVudGlwID0gbmV3IE9wZW50aXAoZWxlbWVudCwge1xuXHRcdFx0XHQnc3R5bGUnOiAncmFpbmxvb3BUaXAnLFxuXHRcdFx0XHQnZWxlbWVudCc6IGVsZW1lbnQsXG5cdFx0XHRcdCd0aXBKb2ludCc6ICRlbC5kYXRhKCd0b29sdGlwLWpvaW4nKSB8fCAnYm90dG9tJ1xuXHRcdFx0fSk7XG5cblx0XHRcdEdsb2JhbHMuZHJvcGRvd25WaXNpYmlsaXR5LnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0XHRpZiAodikge1xuXHRcdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmICgnJyA9PT0gc1ZhbHVlKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KCcnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0kxOE4pIHtcblx0XHRcdFx0Y29uc3QgVHJhbnNsYXRvciA9IHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJyk7XG5cblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cblx0XHRcdFx0VHJhbnNsYXRvci50cmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdEdsb2JhbHMuZHJvcGRvd25WaXNpYmlsaXR5LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fX29wZW50aXApIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KHNWYWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdCR3aW4ub24oJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdCR3aW4ub24oJ3JsLnRvb2x0aXBzLmFjdGl2YXRlJywgKCkgPT4ge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0aXNNb2JpbGUgPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtbW9iaWxlJykgfHwgJ29mZicpLFxuXHRcdFx0aXNJMThOID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLWkxOG4nKSB8fCAnb24nKSxcblx0XHRcdEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXG5cdFx0aWYgKCghR2xvYmFscy5iTW9iaWxlRGV2aWNlIHx8IGlzTW9iaWxlKSAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKTtcblx0XHRcdGlmIChzVmFsdWUpIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChpc0kxOE4gPyByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG4oc1ZhbHVlKSA6IHNWYWx1ZSk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudG9vbHRpcEVycm9yVGlwID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHRcdGVsZW1lbnQuX19vcGVudGlwID0gbmV3IE9wZW50aXAoZWxlbWVudCwge1xuXHRcdFx0c3R5bGU6ICdyYWlubG9vcEVycm9yVGlwJyxcblx0XHRcdGhpZGVPbjogJ21vdXNlb3V0IGNsaWNrJyxcblx0XHRcdGVsZW1lbnQ6IGVsZW1lbnQsXG5cdFx0XHR0aXBKb2ludDogJGVsLmRhdGEoJ3Rvb2x0aXAtam9pbicpIHx8ICd0b3AnXG5cdFx0fSk7XG5cblx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cblx0XHQkKHdpbmRvdy5kb2N1bWVudCkub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fX29wZW50aXApIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlcihlbGVtZW50KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdHZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKSxcblx0XHRcdG9wZW5UaXBzID0gZWxlbWVudC5fX29wZW50aXA7XG5cblx0XHRpZiAob3BlblRpcHMpIHtcblx0XHRcdGlmICgnJyA9PT0gdmFsdWUpIHtcblx0XHRcdFx0b3BlblRpcHMuaGlkZSgpO1xuXHRcdFx0XHRvcGVuVGlwcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCRlbC5pcygnOnZpc2libGUnKSkge1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5hY3RpdmF0ZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5oaWRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KCcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnJlZ2lzdHJhdGVCb290c3RyYXBEcm9wZG93biA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblx0XHRpZiAoR2xvYmFscyAmJiBHbG9iYWxzLmRhdGEuYUJvb3RzdHJhcERyb3Bkb3ducykge1xuXHRcdFx0R2xvYmFscy5kYXRhLmFCb290c3RyYXBEcm9wZG93bnMucHVzaCgkKGVsZW1lbnQpKTtcblxuXHRcdFx0JChlbGVtZW50KS5jbGljaygoKSA9PiB7XG5cdFx0XHRcdHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLmRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0Ly8gfSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub3BlbkRyb3Bkb3duVHJpZ2dlciA9IHtcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRpZiAoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSB7XG5cdFx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXHRcdFx0aWYgKCEkZWwuaGFzQ2xhc3MoJ29wZW4nKSkge1xuXHRcdFx0XHQkZWwuZmluZCgnLmRyb3Bkb3duLXRvZ2dsZScpLmRyb3Bkb3duKCd0b2dnbGUnKTtcblx0XHRcdH1cblxuXHRcdFx0JGVsLmZpbmQoJy5kcm9wZG93bi10b2dnbGUnKS5mb2N1cygpO1xuXG5cdFx0XHRyZXF1aXJlKCdDb21tb24vVXRpbHMnKS5kZXRlY3REcm9wZG93blZpc2liaWxpdHkoKTtcblx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkoZmFsc2UpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyb3Bkb3duQ2xvc2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5jbG9zZXN0KCcuZHJvcGRvd24nKVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1pdGVtJywgKCkgPT4ge1xuXHRcdFx0XHQkKGVsZW1lbnQpLmRyb3Bkb3duKCd0b2dnbGUnKTtcblx0XHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucG9wb3ZlciA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLnBvcG92ZXIoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5wb3BvdmVyKCdkZXN0cm95Jyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0ID0ge307XG5rby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dC5pbml0ID0ga28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQudXBkYXRlID0gKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuc3R5bGVTaGVldCAmJiAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0KSB7XG5cdFx0ZWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdH0gZWxzZSB7XG5cdFx0JChlbGVtZW50KS50ZXh0KGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5yZXNpemVjcm9wID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5hZGRDbGFzcygncmVzaXplY3JvcCcpXG5cdFx0XHQucmVzaXplY3JvcCh7XG5cdFx0XHRcdCd3aWR0aCc6ICcxMDAnLFxuXHRcdFx0XHQnaGVpZ2h0JzogJzEwMCcsXG5cdFx0XHRcdCd3cmFwcGVyQ1NTJzoge1xuXHRcdFx0XHRcdCdib3JkZXItcmFkaXVzJzogJzEwcHgnXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGZWYWx1ZUFjY2Vzc29yKCkoKTtcblx0XHQkKGVsZW1lbnQpLnJlc2l6ZWNyb3Aoe1xuXHRcdFx0J3dpZHRoJzogJzEwMCcsXG5cdFx0XHQnaGVpZ2h0JzogJzEwMCdcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uS2V5RG93biA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5ZG93bi5rb09uS2V5RG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50KSB7XG5cdFx0XHRcdHJldHVybiBmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCBldmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5ZG93bi5rb09uS2V5RG93bicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25FbnRlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5cHJlc3Mua29PbkVudGVyJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMTMgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0JChlbGVtZW50KS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlwcmVzcy5rb09uRW50ZXInKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uU3BhY2UgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXVwLmtvT25TcGFjZScsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDMyID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIGV2ZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXVwLmtvT25TcGFjZScpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25UYWIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleWRvd24ua29PblRhYicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDkgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0cmV0dXJuIGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsICEhZXZlbnQuc2hpZnRLZXkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlkb3duLmtvT25UYWInKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uRXNjID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXl1cC5rb09uRXNjJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMjcgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0JChlbGVtZW50KS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXl1cC5rb09uRXNjJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5jbGlja09uVHJ1ZSA9IHtcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRpZiAoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSB7XG5cdFx0XHQkKGVsZW1lbnQpLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubW9kYWwgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0VXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKTtcblxuXHRcdCQoZWxlbWVudClcblx0XHRcdC50b2dnbGVDbGFzcygnZmFkZScsICFHbG9iYWxzLmJNb2JpbGVEZXZpY2UpXG5cdFx0XHQubW9kYWwoe1xuXHRcdFx0XHQna2V5Ym9hcmQnOiBmYWxzZSxcblx0XHRcdFx0J3Nob3cnOiBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSlcblx0XHRcdH0pXG5cdFx0XHQub24oJ3Nob3duLmtvTW9kYWwnLCBVdGlscy53aW5kb3dSZXNpemVDYWxsYmFjaylcblx0XHRcdC5maW5kKCcuY2xvc2UnKVxuXHRcdFx0Lm9uKCdjbGljay5rb01vZGFsJywgKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpKGZhbHNlKTtcblx0XHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5vZmYoJ3Nob3duLmtvTW9kYWwnKVxuXHRcdFx0XHQuZmluZCgnLmNsb3NlJylcblx0XHRcdFx0Lm9mZignY2xpY2sua29Nb2RhbCcpO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXG5cdFx0JChlbGVtZW50KS5tb2RhbChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkgPyAnc2hvdycgOiAnaGlkZScpO1xuXG5cdFx0aWYgKEdsb2JhbHMuJGh0bWwuaGFzQ2xhc3MoJ3JsLWFuaW0nKSkge1xuXHRcdFx0R2xvYmFscy4kaHRtbC5hZGRDbGFzcygncmwtbW9kYWwtYW5pbWF0aW9uJyk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0R2xvYmFscy4kaHRtbC5yZW1vdmVDbGFzcygncmwtbW9kYWwtYW5pbWF0aW9uJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwMG1zKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5tb21lbnQgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9Nb21lbnRvcicpLm1vbWVudFRvTm9kZShcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0LmFkZENsYXNzKCdtb21lbnQnKVxuXHRcdFx0XHQuZGF0YSgnbW9tZW50LXRpbWUnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpXG5cdFx0KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vTW9tZW50b3InKS5tb21lbnRUb05vZGUoJChlbGVtZW50KS5kYXRhKCdtb21lbnQtdGltZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaTE4bkluaXQgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRyYW5zbGF0b3JJbml0ID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pMThuVXBkYXRlID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubGluayA9IHtcblx0dXBkYXRlOiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkuYXR0cignaHJlZicsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50aXRsZSA9IHtcblx0dXBkYXRlOiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkuYXR0cigndGl0bGUnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudGV4dEYgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS50ZXh0KGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0RG9tID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdGZWYWx1ZUFjY2Vzc29yKCkoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0Rml4ZWRUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSksXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0dG9wID0gdmFsdWVzWzFdIHx8IDA7XG5cblx0XHRsZXQgJGNvbnRhaW5lciA9ICQodmFsdWVzWzBdIHx8IG51bGwpO1xuXHRcdCRjb250YWluZXIgPSAkY29udGFpbmVyWzBdID8gJGNvbnRhaW5lciA6IG51bGw7XG5cdFx0aWYgKCRjb250YWluZXIpIHtcblx0XHRcdCR3aW4ucmVzaXplKCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2Zmc2V0ID0gJGNvbnRhaW5lciA/ICRjb250YWluZXIub2Zmc2V0KCkgOiBudWxsO1xuXHRcdFx0XHRpZiAob2Zmc2V0ICYmIG9mZnNldC50b3ApIHtcblx0XHRcdFx0XHQkZWwuY3NzKCd0b3AnLCBvZmZzZXQudG9wICsgdG9wKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdFJlc2l6ZVRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0XHQkKGVsZW1lbnQpLmNzcyh7XG5cdFx0XHQnaGVpZ2h0JzogdmFsdWVzWzFdLFxuXHRcdFx0J21pbi1oZWlnaHQnOiB2YWx1ZXNbMV1cblx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAob0VsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRcdEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0dmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXG5cdFx0bGV0IHZhbHVlID0gVXRpbHMucEludCh2YWx1ZXNbMV0pLFxuXHRcdFx0c2l6ZSA9IDAsXG5cdFx0XHRvZmZzZXQgPSAkKG9FbGVtZW50KS5vZmZzZXQoKS50b3A7XG5cblx0XHRpZiAoMCA8IG9mZnNldCkge1xuXHRcdFx0b2Zmc2V0ICs9IFV0aWxzLnBJbnQodmFsdWVzWzJdKTtcblx0XHRcdHNpemUgPSBHbG9iYWxzLiR3aW4uaGVpZ2h0KCkgLSBvZmZzZXQ7XG5cblx0XHRcdGlmICh2YWx1ZSA8IHNpemUpIHtcblx0XHRcdFx0dmFsdWUgPSBzaXplO1xuXHRcdFx0fVxuXG5cdFx0XHQkKG9FbGVtZW50KS5jc3Moe1xuXHRcdFx0XHQnaGVpZ2h0JzogdmFsdWUsXG5cdFx0XHRcdCdtaW4taGVpZ2h0JzogdmFsdWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmFwcGVuZERvbSA9IHtcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuaGlkZSgpXG5cdFx0XHQuZW1wdHkoKVxuXHRcdFx0LmFwcGVuZChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpXG5cdFx0XHQuc2hvdygpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJhZ2dhYmxlID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdGNvbnN0IHRyaWdnZXJab25lID0gMTAwLFxuXHRcdFx0XHRzY3JvbGxTcGVlZCA9IDMsXG5cdFx0XHRcdGZBbGxWYWx1ZUZ1bmMgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0XHRkcm9wcGFibGVTZWxlY3RvciA9IGZBbGxWYWx1ZUZ1bmMgJiYgZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVTZWxlY3RvciA/IGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlU2VsZWN0b3IgOiAnJyxcblx0XHRcdFx0Y29uZiA9IHtcblx0XHRcdFx0XHRkaXN0YW5jZTogMjAsXG5cdFx0XHRcdFx0aGFuZGxlOiAnLmRyYWdIYW5kbGUnLFxuXHRcdFx0XHRcdGN1cnNvckF0OiB7IHRvcDogMjIsIGxlZnQ6IDMgfSxcblx0XHRcdFx0XHRyZWZyZXNoUG9zaXRpb25zOiB0cnVlLFxuXHRcdFx0XHRcdHNjcm9sbDogdHJ1ZSxcblx0XHRcdFx0XHRkcmFnOiBudWxsLFxuXHRcdFx0XHRcdHN0b3A6IG51bGwsXG5cdFx0XHRcdFx0aGVscGVyOiBudWxsXG5cdFx0XHRcdH07XG5cblx0XHRcdGlmIChkcm9wcGFibGVTZWxlY3Rvcikge1xuXHRcdFx0XHRjb25mLmRyYWcgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHQkKGRyb3BwYWJsZVNlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRcdFx0XHRvZmZzZXQgPSAkdGhpcy5vZmZzZXQoKSxcblx0XHRcdFx0XHRcdFx0Ym90dG9tUG9zID0gb2Zmc2V0LnRvcCArICR0aGlzLmhlaWdodCgpO1xuXG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCgkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcpKTtcblx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVggPj0gb2Zmc2V0LmxlZnQgJiYgZXZlbnQucGFnZVggPD0gb2Zmc2V0LmxlZnQgKyAkdGhpcy53aWR0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWSA+PSBib3R0b21Qb3MgLSB0cmlnZ2VyWm9uZSAmJiBldmVudC5wYWdlWSA8PSBib3R0b21Qb3MpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb3ZlVXAgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zY3JvbGxUb3AoJHRoaXMuc2Nyb2xsVG9wKCkgKyBzY3JvbGxTcGVlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRVdGlscy53aW5kb3dSZXNpemUoKTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCB3aW5kb3cuc2V0SW50ZXJ2YWwobW92ZVVwLCAxMCkpO1xuXHRcdFx0XHRcdFx0XHRcdG1vdmVVcCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VZID49IG9mZnNldC50b3AgJiYgZXZlbnQucGFnZVkgPD0gb2Zmc2V0LnRvcCArIHRyaWdnZXJab25lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbW92ZURvd24gPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zY3JvbGxUb3AoJHRoaXMuc2Nyb2xsVG9wKCkgLSBzY3JvbGxTcGVlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRVdGlscy53aW5kb3dSZXNpemUoKTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCB3aW5kb3cuc2V0SW50ZXJ2YWwobW92ZURvd24sIDEwKSk7XG5cdFx0XHRcdFx0XHRcdFx0bW92ZURvd24oKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbmYuc3RvcCA9ICgpID0+IHtcblx0XHRcdFx0XHQkKGRyb3BwYWJsZVNlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwoJHRoaXMuZGF0YSgndGltZXJTY3JvbGwnKSk7XG5cdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIGZhbHNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0Y29uZi5oZWxwZXIgPSAoZXZlbnQpID0+IGZWYWx1ZUFjY2Vzc29yKCkoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ID8ga28uZGF0YUZvcihldmVudC50YXJnZXQpIDogbnVsbCk7XG5cblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0LmRyYWdnYWJsZShjb25mKVxuXHRcdFx0XHQub24oJ21vdXNlZG93bi5rb0RyYWdnYWJsZScsICgpID0+IHtcblx0XHRcdFx0XHRVdGlscy5yZW1vdmVJbkZvY3VzKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHRcdC5vZmYoJ21vdXNlZG93bi5rb0RyYWdnYWJsZScpXG5cdFx0XHRcdFx0LmRyYWdnYWJsZSgnZGVzdHJveScpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJvcHBhYmxlID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cdFx0aWYgKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdGNvbnN0IGZWYWx1ZUZ1bmMgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0XHRmQWxsVmFsdWVGdW5jID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdFx0Zk92ZXJDYWxsYmFjayA9IGZBbGxWYWx1ZUZ1bmMgJiYgZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdmVyID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdmVyIDogbnVsbCxcblx0XHRcdFx0Zk91dENhbGxiYWNrID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU91dCA/IGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3V0IDogbnVsbCxcblx0XHRcdFx0Y29uZiA9IHtcblx0XHRcdFx0XHR0b2xlcmFuY2U6ICdwb2ludGVyJyxcblx0XHRcdFx0XHRob3ZlckNsYXNzOiAnZHJvcHBhYmxlSG92ZXInLFxuXHRcdFx0XHRcdGRyb3A6IG51bGwsXG5cdFx0XHRcdFx0b3ZlcjogbnVsbCxcblx0XHRcdFx0XHRvdXQ6IG51bGxcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKGZWYWx1ZUZ1bmMpIHtcblx0XHRcdFx0Y29uZi5kcm9wID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdGZWYWx1ZUZ1bmMoZXZlbnQsIHVpKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAoZk92ZXJDYWxsYmFjaykge1xuXHRcdFx0XHRcdGNvbmYub3ZlciA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRcdGZPdmVyQ2FsbGJhY2soZXZlbnQsIHVpKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZPdXRDYWxsYmFjaykge1xuXHRcdFx0XHRcdGNvbmYub3V0ID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdFx0Zk91dENhbGxiYWNrKGV2ZW50LCB1aSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCQoZWxlbWVudCkuZHJvcHBhYmxlKGNvbmYpO1xuXG5cdFx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0XHRcdCQoZWxlbWVudCkuZHJvcHBhYmxlKCdkZXN0cm95Jyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm5hbm8gPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRTZXR0aW5ncyA9IHJlcXVpcmUoJ1N0b3JhZ2UvU2V0dGluZ3MnKTtcblxuXHRcdGlmICghR2xvYmFscy5iRGlzYWJsZU5hbm9TY3JvbGwgJiYgIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd1c2VOYXRpdmVTY3JvbGxiYXJzJykpIHtcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0LmFkZENsYXNzKCduYW5vJylcblx0XHRcdFx0Lm5hbm9TY3JvbGxlcih7XG5cdFx0XHRcdFx0aU9TTmF0aXZlU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRwcmV2ZW50UGFnZVNjcm9sbGluZzogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5zYXZlVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0JGVsLmRhdGEoXG5cdFx0XHQnc2F2ZS10cmlnZ2VyLXR5cGUnLFxuXHRcdFx0JGVsLmlzKCdpbnB1dFt0eXBlPXRleHRdLGlucHV0W3R5cGU9ZW1haWxdLGlucHV0W3R5cGU9cGFzc3dvcmRdLHNlbGVjdCx0ZXh0YXJlYScpID8gJ2lucHV0JyA6ICdjdXN0b20nXG5cdFx0KTtcblxuXHRcdGlmICgnY3VzdG9tJyA9PT0gJGVsLmRhdGEoJ3NhdmUtdHJpZ2dlci10eXBlJykpIHtcblx0XHRcdCRlbFxuXHRcdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHRcdCcmbmJzcDsmbmJzcDsnICtcblx0XHRcdFx0XHRcdCc8aSBjbGFzcz1cImljb24tc3Bpbm5lciBhbmltYXRlZFwiPjwvaT4nICtcblx0XHRcdFx0XHRcdCc8aSBjbGFzcz1cImljb24tcmVtb3ZlIGVycm9yXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1vayBzdWNjZXNzXCI+PC9pPidcblx0XHRcdFx0KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXInKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmFkZENsYXNzKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyLWlucHV0Jyk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpLFxuXHRcdFx0JGVsID0gJChlbGVtZW50KTtcblxuXHRcdGlmICgnY3VzdG9tJyA9PT0gJGVsLmRhdGEoJ3NhdmUtdHJpZ2dlci10eXBlJykpIHtcblx0XHRcdHN3aXRjaCAodmFsdWUudG9TdHJpbmcoKSkge1xuXHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLmVycm9yJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3InKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0yJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzd2l0Y2ggKHZhbHVlLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0JGVsLmFkZENsYXNzKCdzdWNjZXNzJykucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdCRlbC5hZGRDbGFzcygnZXJyb3InKS5yZW1vdmVDbGFzcygnc3VjY2VzcycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICctMic6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0JGVsLnJlbW92ZUNsYXNzKCdlcnJvciBzdWNjZXNzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZW1haWxzVGFncyA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0XHRFbWFpbE1vZGVsID0gcmVxdWlyZSgnTW9kZWwvRW1haWwnKS5kZWZhdWx0LFxuXHRcdFx0JGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmQWxsQmluZGluZ3MgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0ZkF1dG9Db21wbGV0ZVNvdXJjZSA9IGZBbGxCaW5kaW5ncy5hdXRvQ29tcGxldGVTb3VyY2UgfHwgbnVsbCxcblx0XHRcdGlucHV0RGVsaW1pdGVycyA9IFsnLCcsICc7JywgJ1xcbiddLFxuXHRcdFx0ZkZvY3VzQ2FsbGJhY2sgPSAodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuZm9jdXNlZCkge1xuXHRcdFx0XHRcdGZWYWx1ZS5mb2N1c2VkKCEhdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0JGVsLmlucHV0b3NhdXJ1cyh7XG5cdFx0XHRwYXJzZU9uQmx1cjogdHJ1ZSxcblx0XHRcdGFsbG93RHJhZ0FuZERyb3A6IHRydWUsXG5cdFx0XHRmb2N1c0NhbGxiYWNrOiBmRm9jdXNDYWxsYmFjayxcblx0XHRcdGlucHV0RGVsaW1pdGVyczogaW5wdXREZWxpbWl0ZXJzLFxuXHRcdFx0YXV0b0NvbXBsZXRlU291cmNlOiBmQXV0b0NvbXBsZXRlU291cmNlLFxuXHRcdFx0c3BsaXRIb29rOiAodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3QgdiA9IFV0aWxzLnRyaW0odmFsdWUpO1xuXHRcdFx0XHRpZiAodiAmJiAtMSA8IGlucHV0RGVsaW1pdGVycy5pbmRleE9mKHYuc3Vic3RyKC0xKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gRW1haWxNb2RlbC5zcGxpdEVtYWlsTGluZSh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9LFxuXHRcdFx0cGFyc2VIb29rOiAoaW5wdXQpID0+XG5cdFx0XHRcdF8ubWFwKFxuXHRcdFx0XHRcdF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdF8ubWFwKGlucHV0LCAoaW5wdXRWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB2YWx1ZXMgPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGlucHV0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHZhbHVlcyA6IGlucHV0VmFsdWU7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0KGl0ZW0pID0+IChfLmlzT2JqZWN0KGl0ZW0pID8gW2l0ZW0udG9MaW5lKGZhbHNlKSwgaXRlbV0gOiBbaXRlbSwgbnVsbF0pXG5cdFx0XHRcdCksXG5cdFx0XHRjaGFuZ2U6IChldmVudCkgPT4ge1xuXHRcdFx0XHQkZWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHRcdFx0ZlZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5mb2N1c2VkICYmIGZWYWx1ZS5mb2N1c2VkLnN1YnNjcmliZSkge1xuXHRcdFx0ZlZhbHVlLmZvY3VzZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHQkZWwuaW5wdXRvc2F1cnVzKHZhbHVlID8gJ2ZvY3VzJyA6ICdibHVyJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJG9FbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0dmFsdWUgPSBrby51bndyYXAoZlZhbHVlKTtcblxuXHRcdGlmICgkb0VsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScpICE9PSB2YWx1ZSkge1xuXHRcdFx0JG9FbC52YWwodmFsdWUpO1xuXHRcdFx0JG9FbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnLCB2YWx1ZSk7XG5cdFx0XHQkb0VsLmlucHV0b3NhdXJ1cygncmVmcmVzaCcpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNvbW1hbmQgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpID0+IHtcblx0XHRjb25zdCBqcUVsZW1lbnQgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29tbWFuZCA9IGZWYWx1ZUFjY2Vzc29yKCk7XG5cblx0XHRpZiAoIWNvbW1hbmQgfHwgIWNvbW1hbmQuaXNDb21tYW5kKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIHNob3VsZCBiZSBhIGNvbW1hbmQnKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbW1hbmQuZW5hYmxlZCkge1xuXHRcdFx0Y29tbWFuZC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbW1hbmQuY2FuRXhlY3V0ZSkge1xuXHRcdFx0Y29uc3QgX19yZWFsQ2FuRXhlY3V0ZSA9IGNvbW1hbmQuX19yZWFsQ2FuRXhlY3V0ZTtcblx0XHRcdGlmIChfLmlzRnVuY3Rpb24oX19yZWFsQ2FuRXhlY3V0ZSkpIHtcblx0XHRcdFx0Y29tbWFuZC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gY29tbWFuZC5lbmFibGVkKCkgJiYgX19yZWFsQ2FuRXhlY3V0ZS5jYWxsKHZpZXdNb2RlbCwgdmlld01vZGVsKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb21tYW5kLmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBjb21tYW5kLmVuYWJsZWQoKSAmJiAhIV9fcmVhbENhbkV4ZWN1dGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGpxRWxlbWVudC5hZGRDbGFzcygnY29tbWFuZCcpO1xuXHRcdGtvLmJpbmRpbmdIYW5kbGVyc1tqcUVsZW1lbnQuaXMoJ2Zvcm0nKSA/ICdzdWJtaXQnIDogJ2NsaWNrJ10uaW5pdChcblx0XHRcdGVsZW1lbnQsXG5cdFx0XHRmVmFsdWVBY2Nlc3Nvcixcblx0XHRcdGZBbGxCaW5kaW5nc0FjY2Vzc29yLFxuXHRcdFx0dmlld01vZGVsLFxuXHRcdFx0YmluZGluZ0NvbnRleHRcblx0XHQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IGpxRWxlbWVudCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb21tYW5kID0gZlZhbHVlQWNjZXNzb3IoKTtcblxuXHRcdGxldCByZXN1bHQgPSBjb21tYW5kLmVuYWJsZWQoKTtcblxuXHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1ub3QtZW5hYmxlZCcsICFyZXN1bHQpO1xuXG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0cmVzdWx0ID0gY29tbWFuZC5jYW5FeGVjdXRlKCk7XG5cdFx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtY2FuLW5vdC1iZS1leGVjdXRlJywgIXJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLWRpc2FibGVkIGRpc2FibGUgZGlzYWJsZWQnLCAhcmVzdWx0KS50b2dnbGVDbGFzcygnbm8tZGlzYWJsZWQnLCAhIXJlc3VsdCk7XG5cblx0XHRpZiAoanFFbGVtZW50LmlzKCdpbnB1dCcpIHx8IGpxRWxlbWVudC5pcygnYnV0dG9uJykpIHtcblx0XHRcdGpxRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsICFyZXN1bHQpO1xuXHRcdH1cblx0fVxufTtcblxuLy8gZXh0ZW5kZXJzXG5cbmtvLmV4dGVuZGVycy50cmltbWVyID0gKHRhcmdldCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0dGFyZ2V0KFV0aWxzLnRyaW0obmV3VmFsdWUudG9TdHJpbmcoKSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMucG9zSW50ZXJlciA9ICh0YXJnZXQsIGRlZmF1bHRWYWwpID0+IHtcblx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRyZXN1bHQgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHR3cml0ZTogKG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRcdGxldCB2YWwgPSBVdGlscy5wSW50KG5ld1ZhbHVlLnRvU3RyaW5nKCksIGRlZmF1bHRWYWwpO1xuXHRcdFx0XHRpZiAoMCA+PSB2YWwpIHtcblx0XHRcdFx0XHR2YWwgPSBkZWZhdWx0VmFsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbCA9PT0gdGFyZ2V0KCkgJiYgJycgKyB2YWwgIT09ICcnICsgbmV3VmFsdWUpIHtcblx0XHRcdFx0XHR0YXJnZXQodmFsICsgMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQodmFsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLmxpbWl0ZWRMaXN0ID0gKHRhcmdldCwgbGltaXRlZExpc3QpID0+IHtcblx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRyZXN1bHQgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKHtcblx0XHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0XHR3cml0ZTogKG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0ga28udW53cmFwKHRhcmdldCksXG5cdFx0XHRcdFx0XHRsaXN0ID0ga28udW53cmFwKGxpbWl0ZWRMaXN0KTtcblxuXHRcdFx0XHRcdGlmIChVdGlscy5pc05vbkVtcHR5QXJyYXkobGlzdCkpIHtcblx0XHRcdFx0XHRcdGlmICgtMSA8IFV0aWxzLmluQXJyYXkobmV3VmFsdWUsIGxpc3QpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChuZXdWYWx1ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC0xIDwgVXRpbHMuaW5BcnJheShjdXJyZW50VmFsdWUsIGxpc3QpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChjdXJyZW50VmFsdWUgKyAnICcpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQoY3VycmVudFZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChsaXN0WzBdICsgJyAnKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGxpc3RbMF0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQoJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cblx0aWYgKCFyZXN1bHQudmFsdWVIYXNNdXRhdGVkKSB7XG5cdFx0cmVzdWx0LnZhbHVlSGFzTXV0YXRlZCA9ICgpID0+IHtcblx0XHRcdHRhcmdldC52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5yZXZlcnNpYmxlID0gKHRhcmdldCkgPT4ge1xuXHRsZXQgdmFsdWUgPSB0YXJnZXQoKTtcblxuXHR0YXJnZXQuY29tbWl0ID0gKCkgPT4ge1xuXHRcdHZhbHVlID0gdGFyZ2V0KCk7XG5cdH07XG5cblx0dGFyZ2V0LnJldmVyc2UgPSAoKSA9PiB7XG5cdFx0dGFyZ2V0KHZhbHVlKTtcblx0fTtcblxuXHR0YXJnZXQuY29tbWl0ZWRWYWx1ZSA9ICgpID0+IHZhbHVlO1xuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLnRvZ2dsZVN1YnNjcmliZSA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0dGFyZ2V0LnN1YnNjcmliZShvcHRpb25zWzFdLCBvcHRpb25zWzBdLCAnYmVmb3JlQ2hhbmdlJyk7XG5cdHRhcmdldC5zdWJzY3JpYmUob3B0aW9uc1syXSwgb3B0aW9uc1swXSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMudG9nZ2xlU3Vic2NyaWJlUHJvcGVydHkgPSAodGFyZ2V0LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3AgPSBvcHRpb25zWzFdO1xuXHRpZiAocHJvcCkge1xuXHRcdHRhcmdldC5zdWJzY3JpYmUoXG5cdFx0XHQocHJldikgPT4ge1xuXHRcdFx0XHRpZiAocHJldiAmJiBwcmV2W3Byb3BdKSB7XG5cdFx0XHRcdFx0cHJldltwcm9wXShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zWzBdLFxuXHRcdFx0J2JlZm9yZUNoYW5nZSdcblx0XHQpO1xuXG5cdFx0dGFyZ2V0LnN1YnNjcmliZSgobmV4dCkgPT4ge1xuXHRcdFx0aWYgKG5leHQgJiYgbmV4dFtwcm9wXSkge1xuXHRcdFx0XHRuZXh0W3Byb3BdKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0sIG9wdGlvbnNbMF0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5mYWxzZVRpbWVvdXQgPSAodGFyZ2V0LCBvcHRpb24pID0+IHtcblx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gMDtcblx0dGFyZ2V0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0KTtcblx0XHRcdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGFyZ2V0KGZhbHNlKTtcblx0XHRcdFx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gMDtcblx0XHRcdH0sIHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLnBJbnQob3B0aW9uKSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLnNwZWNpYWxUaHJvdHRsZSA9ICh0YXJnZXQsIG9wdGlvbikgPT4ge1xuXHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLnBJbnQob3B0aW9uKTtcblx0aWYgKDAgPCB0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSkge1xuXHRcdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dCA9IDA7XG5cdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZCA9IGtvLm9ic2VydmFibGUoISF0YXJnZXQoKSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwIH0pO1xuXG5cdFx0cmV0dXJuIGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldC52YWx1ZUZvclJlYWQsXG5cdFx0XHR3cml0ZTogKGJWYWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAoYlZhbHVlKSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChiVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh0YXJnZXQudmFsdWVGb3JSZWFkKCkpIHtcblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0KTtcblx0XHRcdFx0XHRcdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dCA9IDA7XG5cdFx0XHRcdFx0XHR9LCB0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoYlZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuaWRsZVRyaWdnZXIgPSAodGFyZ2V0KSA9PiB7XG5cdHRhcmdldC50cmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxuLy8gZnVuY3Rpb25zXG5cbmtvLm9ic2VydmFibGUuZm4uaWRsZVRyaWdnZXIgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuZXh0ZW5kKHsgJ2lkbGVUcmlnZ2VyJzogdHJ1ZSB9KTtcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVOb25lID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlRW1haWwgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdHRoaXMuaGFzRXJyb3IoJycgIT09IHZhbHVlICYmICEvXlteQFxcc10rQFteQFxcc10rJC8udGVzdCh2YWx1ZSkpO1xuXHR9KTtcblxuXHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVTaW1wbGVFbWFpbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0dGhpcy5oYXNFcnJvcignJyAhPT0gdmFsdWUgJiYgIS9eLitALiskLy50ZXN0KHZhbHVlKSk7XG5cdH0pO1xuXG5cdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi5kZWxldGVBY2Nlc3NIZWxwZXIgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDMwMDAgfSkuZXh0ZW5kKHsgdG9nZ2xlU3Vic2NyaWJlUHJvcGVydHk6IFt0aGlzLCAnZGVsZXRlQWNjZXNzJ10gfSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZUZ1bmMgPSBmdW5jdGlvbihmRnVuYykge1xuXHR0aGlzLmhhc0Z1bmNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdGlmIChfLmlzRnVuY3Rpb24oZkZ1bmMpKSB7XG5cdFx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLmhhc0Z1bmNFcnJvcighZkZ1bmModmFsdWUpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtvO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgQXV0b2xpbmtlciBmcm9tICdBdXRvbGlua2VyJztcblxuaW1wb3J0IHsgJHdpbiwgJGRpdiwgJGhjb250LCBkcm9wZG93blZpc2liaWxpdHksIGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBDb21wb3NlVHlwZSwgRXZlbnRLZXlDb2RlLCBTYXZlU2V0dGluZ3NTdGVwLCBGb2xkZXJUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IE1pbWUgfSBmcm9tICdDb21tb24vTWltZSc7XG5pbXBvcnQgeyBqYXNzbCB9IGZyb20gJ0NvbW1vbi9KYXNzbCc7XG5cbmNvbnN0IHRyaW0gPSAkLnRyaW07XG5jb25zdCBpbkFycmF5ID0gJC5pbkFycmF5O1xuY29uc3QgaXNBcnJheSA9IF8uaXNBcnJheTtcbmNvbnN0IGlzT2JqZWN0ID0gXy5pc09iamVjdDtcbmNvbnN0IGlzRnVuYyA9IF8uaXNGdW5jdGlvbjtcbmNvbnN0IGlzVW5kID0gXy5pc1VuZGVmaW5lZDtcbmNvbnN0IGlzTnVsbCA9IF8uaXNOdWxsO1xuY29uc3QgaGFzID0gXy5oYXM7XG5jb25zdCBiaW5kID0gXy5iaW5kO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5jb25zdCBub29wVHJ1ZSA9ICgpID0+IHRydWU7XG5jb25zdCBub29wRmFsc2UgPSAoKSA9PiBmYWxzZTtcblxuZXhwb3J0IHsgdHJpbSwgaW5BcnJheSwgaXNBcnJheSwgaXNPYmplY3QsIGlzRnVuYywgaXNVbmQsIGlzTnVsbCwgaGFzLCBiaW5kLCBub29wLCBub29wVHJ1ZSwgbm9vcEZhbHNlLCBqYXNzbCB9O1xuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbGVudFRyeUNhdGNoKGZ1bmMpIHtcblx0dHJ5IHtcblx0XHRmdW5jKCk7XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9ybWFsKHZhbHVlKSB7XG5cdHJldHVybiAhaXNVbmQodmFsdWUpICYmICFpc051bGwodmFsdWUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpfSB2YWx1ZVxuICogQHBhcmFtIHtib29sZWFuPX0gaW5jbHVkZVplcm8gPSB0cnVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9zTnVtZXJpYyh2YWx1ZSwgaW5jbHVkZVplcm8gPSB0cnVlKSB7XG5cdHJldHVybiAhaXNOb3JtYWwodmFsdWUpXG5cdFx0PyBmYWxzZVxuXHRcdDogaW5jbHVkZVplcm9cblx0XHQ/IC9eWzAtOV0qJC8udGVzdCh2YWx1ZS50b1N0cmluZygpKVxuXHRcdDogL15bMS05XStbMC05XSokLy50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gZGVmYXVsdFZhbHVyID0gMFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBJbnQodmFsdWUsIGRlZmF1bHRWYWx1ciA9IDApIHtcblx0Y29uc3QgcmVzdWx0ID0gaXNOb3JtYWwodmFsdWUpICYmICcnICE9PSB2YWx1ZSA/IHdpbmRvdy5wYXJzZUludCh2YWx1ZSwgMTApIDogZGVmYXVsdFZhbHVyO1xuXHRyZXR1cm4gd2luZG93LmlzTmFOKHJlc3VsdCkgPyBkZWZhdWx0VmFsdXIgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBTdHJpbmcodmFsdWUpIHtcblx0cmV0dXJuIGlzTm9ybWFsKHZhbHVlKSA/ICcnICsgdmFsdWUgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBCb29sKHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib29sVG9BamF4KHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA/ICcxJyA6ICcwJztcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkVtcHR5QXJyYXkodmFsdWVzKSB7XG5cdHJldHVybiBpc0FycmF5KHZhbHVlcykgJiYgMCA8IHZhbHVlcy5sZW5ndGg7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpIHtcblx0cmV0dXJuIHdpbmRvdy5lbmNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRyZXR1cm4gd2luZG93LmRlY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVUkkodXJsKSB7XG5cdHJldHVybiB3aW5kb3cuZGVjb2RlVVJJKHVybCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVVSSSh1cmwpIHtcblx0cmV0dXJuIHdpbmRvdy5lbmNvZGVVUkkodXJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlTdHJpbmdcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVRdWVyeVBhcnNlcihxdWVyeVN0cmluZykge1xuXHRsZXQgaW5kZXggPSAwLFxuXHRcdGxlbiA9IDAsXG5cdFx0dGVtcCA9IG51bGw7XG5cblx0Y29uc3QgcXVlcmllcyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcmJyksXG5cdFx0cGFyYW1zID0ge307XG5cblx0Zm9yIChsZW4gPSBxdWVyaWVzLmxlbmd0aDsgaW5kZXggPCBsZW47IGluZGV4KyspIHtcblx0XHR0ZW1wID0gcXVlcmllc1tpbmRleF0uc3BsaXQoJz0nKTtcblx0XHRwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzFdKTtcblx0fVxuXG5cdHJldHVybiBwYXJhbXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXI9fSBsZW4gPSAzMlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VNZDUobGVuID0gMzIpIHtcblx0Y29uc3QgbGluZSA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLFxuXHRcdGxpbmVMZW4gPSBsaW5lLmxlbmd0aDtcblxuXHRsZW4gPSBwSW50KGxlbik7XG5cblx0bGV0IHJlc3VsdCA9ICcnO1xuXHR3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IGxlbikge1xuXHRcdHJlc3VsdCArPSBsaW5lLnN1YnN0cih3aW5kb3cuTWF0aC5yb3VuZCh3aW5kb3cuTWF0aC5yYW5kb20oKSAqIGxpbmVMZW4pLCAxKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVIdG1sKHRleHQpIHtcblx0cmV0dXJuIGlzTm9ybWFsKHRleHQpID8gXy5lc2NhcGUodGV4dC50b1N0cmluZygpKSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge251bWJlcj19IGxlbiA9IDEwMFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGxhaW5UZXh0KHRleHQsIGxlbiA9IDEwMCkge1xuXHRsZXQgcHJlZml4ID0gJycsXG5cdFx0c3ViVGV4dCA9ICcnLFxuXHRcdHJlc3VsdCA9IHRleHQsXG5cdFx0c3BhY2VQb3MgPSAwLFxuXHRcdG5ld0xpbmVQb3MgPSAwO1xuXG5cdHdoaWxlIChyZXN1bHQubGVuZ3RoID4gbGVuKSB7XG5cdFx0c3ViVGV4dCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgbGVuKTtcblx0XHRzcGFjZVBvcyA9IHN1YlRleHQubGFzdEluZGV4T2YoJyAnKTtcblx0XHRuZXdMaW5lUG9zID0gc3ViVGV4dC5sYXN0SW5kZXhPZignXFxuJyk7XG5cblx0XHRpZiAoLTEgIT09IG5ld0xpbmVQb3MpIHtcblx0XHRcdHNwYWNlUG9zID0gbmV3TGluZVBvcztcblx0XHR9XG5cblx0XHRpZiAoLTEgPT09IHNwYWNlUG9zKSB7XG5cdFx0XHRzcGFjZVBvcyA9IGxlbjtcblx0XHR9XG5cblx0XHRwcmVmaXggKz0gc3ViVGV4dC5zdWJzdHJpbmcoMCwgc3BhY2VQb3MpICsgJ1xcbic7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhzcGFjZVBvcyArIDEpO1xuXHR9XG5cblx0cmV0dXJuIHByZWZpeCArIHJlc3VsdDtcbn1cblxuY29uc3QgdGltZU91dEFjdGlvbiA9IChmdW5jdGlvbigpIHtcblx0Y29uc3QgdGltZU91dHMgPSB7fTtcblx0cmV0dXJuIChhY3Rpb24sIGZGdW5jdGlvbiwgdGltZU91dCkgPT4ge1xuXHRcdHRpbWVPdXRzW2FjdGlvbl0gPSBpc1VuZCh0aW1lT3V0c1thY3Rpb25dKSA/IDAgOiB0aW1lT3V0c1thY3Rpb25dO1xuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGltZU91dHNbYWN0aW9uXSk7XG5cdFx0dGltZU91dHNbYWN0aW9uXSA9IHdpbmRvdy5zZXRUaW1lb3V0KGZGdW5jdGlvbiwgdGltZU91dCk7XG5cdH07XG59KSgpO1xuXG5jb25zdCB0aW1lT3V0QWN0aW9uU2Vjb25kID0gKGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aW1lT3V0cyA9IHt9O1xuXHRyZXR1cm4gKGFjdGlvbiwgZkZ1bmN0aW9uLCB0aW1lT3V0KSA9PiB7XG5cdFx0aWYgKCF0aW1lT3V0c1thY3Rpb25dKSB7XG5cdFx0XHR0aW1lT3V0c1thY3Rpb25dID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmRnVuY3Rpb24oKTtcblx0XHRcdFx0dGltZU91dHNbYWN0aW9uXSA9IDA7XG5cdFx0XHR9LCB0aW1lT3V0KTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG5leHBvcnQgeyB0aW1lT3V0QWN0aW9uLCB0aW1lT3V0QWN0aW9uU2Vjb25kIH07XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IG1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZU1vZHVsZShtKSB7XG5cdHJldHVybiAobSAmJiBtLmRlZmF1bHQgPyBtLmRlZmF1bHQgOiBtKSB8fCAnJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluRm9jdXMoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRpZiAoaXNVbmQod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGUpKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlID0gJCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuaXMoXG5cdFx0XHRcdFx0J2lucHV0LHRleHRhcmVhLGlmcmFtZSwuY2tlX2VkaXRhYmxlJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gISF3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZTtcblx0XHR9XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBmb3JjZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbkZvY3VzKGZvcmNlKSB7XG5cdGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cikge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhY3RpdmVFbCA9ICQod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXHRcdFx0aWYgKGFjdGl2ZUVsICYmIGFjdGl2ZUVsLmlzKCdpbnB1dCx0ZXh0YXJlYScpKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcblx0XHRcdH0gZWxzZSBpZiAoZm9yY2UpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0aW9uKCkge1xuXHR0cnkge1xuXHRcdGlmICh3aW5kb3cgJiYgd2luZG93LmdldFNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0aWYgKHNlbCAmJiBzZWwucmVtb3ZlQWxsUmFuZ2VzKSB7XG5cdFx0XHRcdHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHtcblx0XHRcdHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGx5U3ViamVjdEFkZChwcmVmaXgsIHN1YmplY3QpIHtcblx0cHJlZml4ID0gdHJpbShwcmVmaXgudG9VcHBlckNhc2UoKSk7XG5cdHN1YmplY3QgPSB0cmltKHN1YmplY3QucmVwbGFjZSgvW1xcc10rL2csICcgJykpO1xuXG5cdGxldCBkcm9wID0gZmFsc2UsXG5cdFx0cmUgPSAnUkUnID09PSBwcmVmaXgsXG5cdFx0ZndkID0gJ0ZXRCcgPT09IHByZWZpeDtcblxuXHRjb25zdCBwYXJ0cyA9IFtdLFxuXHRcdHByZWZpeElzUmUgPSAhZndkO1xuXG5cdGlmICgnJyAhPT0gc3ViamVjdCkge1xuXHRcdF8uZWFjaChzdWJqZWN0LnNwbGl0KCc6JyksIChwYXJ0KSA9PiB7XG5cdFx0XHRjb25zdCB0cmltbWVkUGFydCA9IHRyaW0ocGFydCk7XG5cdFx0XHRpZiAoIWRyb3AgJiYgKC9eKFJFfEZXRCkkL2kudGVzdCh0cmltbWVkUGFydCkgfHwgL14oUkV8RldEKVtbKF1bXFxkXStbXFxdKV0kL2kudGVzdCh0cmltbWVkUGFydCkpKSB7XG5cdFx0XHRcdGlmICghcmUpIHtcblx0XHRcdFx0XHRyZSA9ICEhL15SRS9pLnRlc3QodHJpbW1lZFBhcnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFmd2QpIHtcblx0XHRcdFx0XHRmd2QgPSAhIS9eRldEL2kudGVzdCh0cmltbWVkUGFydCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcnRzLnB1c2gocGFydCk7XG5cdFx0XHRcdGRyb3AgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHByZWZpeElzUmUpIHtcblx0XHRyZSA9IGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdGZ3ZCA9IGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHRyaW0oKHByZWZpeElzUmUgPyAnUmU6ICcgOiAnRndkOiAnKSArIChyZSA/ICdSZTogJyA6ICcnKSArIChmd2QgPyAnRndkOiAnIDogJycpICsgdHJpbShwYXJ0cy5qb2luKCc6JykpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gKiBAcGFyYW0ge251bWJlcn0gZGVjXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91bmROdW1iZXIobnVtLCBkZWMpIHtcblx0cmV0dXJuIHdpbmRvdy5NYXRoLnJvdW5kKG51bSAqIHdpbmRvdy5NYXRoLnBvdygxMCwgZGVjKSkgLyB3aW5kb3cuTWF0aC5wb3coMTAsIGRlYyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsobnVtYmVyfHN0cmluZyl9IHNpemVJbkJ5dGVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJpZW5kbHlTaXplKHNpemVJbkJ5dGVzKSB7XG5cdHNpemVJbkJ5dGVzID0gcEludChzaXplSW5CeXRlcyk7XG5cblx0c3dpdGNoICh0cnVlKSB7XG5cdFx0Y2FzZSAxMDczNzQxODI0IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTA3Mzc0MTgyNCwgMSkgKyAnR0InO1xuXHRcdGNhc2UgMTA0ODU3NiA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwNDg1NzYsIDEpICsgJ01CJztcblx0XHRjYXNlIDEwMjQgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDI0LCAwKSArICdLQic7XG5cdFx0Ly8gbm8gZGVmYXVsdFxuXHR9XG5cblx0cmV0dXJuIHNpemVJbkJ5dGVzICsgJ0InO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2coZGVzYykge1xuXHRpZiAod2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKSB7XG5cdFx0d2luZG93LmNvbnNvbGUubG9nKGRlc2MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHs/fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gcGFyYW1zXG4gKiBAcGFyYW0ge251bWJlcj19IGRlbGF5ID0gMFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZWdhdGVSdW4ob2JqZWN0LCBtZXRob2ROYW1lLCBwYXJhbXMsIGRlbGF5ID0gMCkge1xuXHRpZiAob2JqZWN0ICYmIG9iamVjdFttZXRob2ROYW1lXSkge1xuXHRcdGRlbGF5ID0gcEludChkZWxheSk7XG5cdFx0cGFyYW1zID0gaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW107XG5cblx0XHRpZiAoMCA+PSBkZWxheSkge1xuXHRcdFx0b2JqZWN0W21ldGhvZE5hbWVdKC4uLnBhcmFtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRvYmplY3RbbWV0aG9kTmFtZV0oLi4ucGFyYW1zKTtcblx0XHRcdH0sIGRlbGF5KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gez99IGV2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBraWxsQ3RybEFDdHJsUyhldmVudCkge1xuXHRldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDtcblx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5hbHRLZXkpIHtcblx0XHRjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuXHRcdGlmIChrZXkgPT09IEV2ZW50S2V5Q29kZS5TKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSBpZiAoa2V5ID09PSBFdmVudEtleUNvZGUuQSkge1xuXHRcdFx0Y29uc3Qgc2VuZGVyID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNlbmRlciAmJlxuXHRcdFx0XHQoJ3RydWUnID09PSAnJyArIHNlbmRlci5jb250ZW50RWRpdGFibGUgfHwgKHNlbmRlci50YWdOYW1lICYmIHNlbmRlci50YWdOYW1lLm1hdGNoKC9JTlBVVHxURVhUQVJFQS9pKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuXHRcdFx0XHR3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24gJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5jbGVhcikge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNsZWFyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsoT2JqZWN0fG51bGx8dW5kZWZpbmVkKX0gY29udGV4dFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkV4ZWN1dGVcbiAqIEBwYXJhbSB7KEZ1bmN0aW9ufGJvb2xlYW58bnVsbCk9fSBmQ2FuRXhlY3V0ZSA9IHRydWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMZWdhY3koY29udGV4dCwgZkV4ZWN1dGUsIGZDYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRsZXQgZlJlc3VsdCA9IG51bGw7XG5cdGNvbnN0IGZOb25FbXB0eSA9ICguLi5hcmdzKSA9PiB7XG5cdFx0aWYgKGZSZXN1bHQgJiYgZlJlc3VsdC5jYW5FeGVjdXRlICYmIGZSZXN1bHQuY2FuRXhlY3V0ZSgpKSB7XG5cdFx0XHRmRXhlY3V0ZS5hcHBseShjb250ZXh0LCBhcmdzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdGZSZXN1bHQgPSBmRXhlY3V0ZSA/IGZOb25FbXB0eSA6IG5vb3A7XG5cdGZSZXN1bHQuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdGZSZXN1bHQuaXNDb21tYW5kID0gdHJ1ZTtcblxuXHRpZiAoaXNGdW5jKGZDYW5FeGVjdXRlKSkge1xuXHRcdGZSZXN1bHQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGZSZXN1bHQgJiYgZlJlc3VsdC5lbmFibGVkKCkgJiYgZkNhbkV4ZWN1dGUuY2FsbChjb250ZXh0KSk7XG5cdH0gZWxzZSB7XG5cdFx0ZlJlc3VsdC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gZlJlc3VsdCAmJiBmUmVzdWx0LmVuYWJsZWQoKSAmJiAhIWZDYW5FeGVjdXRlKTtcblx0fVxuXG5cdHJldHVybiBmUmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRUaGVtZU5hbWUgPSBfLm1lbW9pemUoKHRoZW1lKSA9PiB7XG5cdGlmICgnQGN1c3RvbScgPT09IHRoZW1lLnN1YnN0cigtNykpIHtcblx0XHR0aGVtZSA9IHRyaW0odGhlbWUuc3Vic3RyaW5nKDAsIHRoZW1lLmxlbmd0aCAtIDcpKTtcblx0fVxuXG5cdHJldHVybiB0cmltKFxuXHRcdHRoZW1lXG5cdFx0XHQucmVwbGFjZSgvW15hLXpBLVowLTldKy9nLCAnICcpXG5cdFx0XHQucmVwbGFjZSgvKFtBLVpdKS9nLCAnICQxJylcblx0XHRcdC5yZXBsYWNlKC9bXFxzXSsvZywgJyAnKVxuXHQpO1xufSk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdW90ZU5hbWUobmFtZSkge1xuXHRyZXR1cm4gbmFtZS5yZXBsYWNlKC9bXCJdL2csICdcXFxcXCInKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWljcm90aW1lKCkge1xuXHRyZXR1cm4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG5cdHJldHVybiB3aW5kb3cuTWF0aC5yb3VuZChtaWNyb3RpbWUoKSAvIDEwMDApO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRW5nID0gZmFsc2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIGlzRW5nID0gZmFsc2UpIHtcblx0cmV0dXJuIHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4bihcblx0XHQnTEFOR1NfTkFNRVMnICsgKHRydWUgPT09IGlzRW5nID8gJ19FTicgOiAnJykgKyAnL0xBTkdfJyArIGxhbmd1YWdlLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15hLXpBLVowLTldKy9nLCAnXycpLFxuXHRcdG51bGwsXG5cdFx0bGFuZ3VhZ2Vcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhZ2dhYmxlUGxhY2UoKSB7XG5cdHJldHVybiAkKFxuXHRcdCc8ZGl2IGNsYXNzPVwiZHJhZ2dhYmxlUGxhY2VcIj4nICtcblx0XHRcdCc8c3BhbiBjbGFzcz1cInRleHRcIj48L3NwYW4+Jm5ic3A7JyArXG5cdFx0XHQnPGkgY2xhc3M9XCJpY29uLWNvcHkgaWNvbi13aGl0ZSB2aXNpYmxlLW9uLWN0cmxcIj48L2k+JyArXG5cdFx0XHQnPGkgY2xhc3M9XCJpY29uLW1haWwgaWNvbi13aGl0ZSBoaWRkZW4tb24tY3RybFwiPjwvaT4nICtcblx0XHRcdCc8L2Rpdj4nXG5cdCkuYXBwZW5kVG8oJyNybC1oaWRkZW4nKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZG9tT3B0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gaXRlbVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIoZG9tSXRlbSwgaXRlbSkge1xuXHRpZiAoaXRlbSAmJiAhaXNVbmQoaXRlbS5kaXNhYmxlZCkgJiYgZG9tSXRlbSkge1xuXHRcdCQoZG9tSXRlbSlcblx0XHRcdC50b2dnbGVDbGFzcygnZGlzYWJsZWQnLCBpdGVtLmRpc2FibGVkKVxuXHRcdFx0LnByb3AoJ2Rpc2FibGVkJywgaXRlbS5kaXNhYmxlZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHRtbFxuICogQHBhcmFtIHtib29sZWFufSBwcmludFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJCcVN3aXRjaGVyKGJvZHkpIHtcblx0Ym9keS5maW5kKCdibG9ja3F1b3RlLnJsLWJxLXN3aXRjaGVyJykucmVtb3ZlQ2xhc3MoJ3JsLWJxLXN3aXRjaGVyIGhpZGRlbi1icScpO1xuXHRib2R5XG5cdFx0LmZpbmQoJy5ybEJsb2NrcXVvdGVTd2l0Y2hlcicpXG5cdFx0Lm9mZignLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHQucmVtb3ZlKCk7XG5cdGJvZHkuZmluZCgnW2RhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyXScpLnJlbW92ZUF0dHIoJ2RhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG1lc3NhZ2VEYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHtib29sZWFufSBpc0h0bWxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJpbnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldmlld01lc3NhZ2UoXG5cdHsgdGl0bGUsIHN1YmplY3QsIGRhdGUsIGZyb21DcmVkcywgdG9DcmVkcywgdG9MYWJlbCwgY2NDbGFzcywgY2NDcmVkcywgY2NMYWJlbCB9LFxuXHRib2R5LFxuXHRpc0h0bWwsXG5cdHByaW50XG4pIHtcblx0Y29uc3Qgd2luID0gd2luZG93Lm9wZW4oJycpLFxuXHRcdGRvYyA9IHdpbi5kb2N1bWVudCxcblx0XHRib2R5Q2xvbmUgPSBib2R5LmNsb25lKCksXG5cdFx0Ym9keUNsYXNzID0gaXNIdG1sID8gJ2h0bWwnIDogJ3BsYWluJztcblxuXHRjbGVhckJxU3dpdGNoZXIoYm9keUNsb25lKTtcblxuXHRjb25zdCBodG1sID0gYm9keUNsb25lID8gYm9keUNsb25lLmh0bWwoKSA6ICcnO1xuXG5cdGRvYy53cml0ZShcblx0XHRkZU1vZHVsZShyZXF1aXJlKCdIdG1sL1ByZXZpZXdNZXNzYWdlLmh0bWwnKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RpdGxlfX0nLCBlbmNvZGVIdG1sKHRpdGxlKSlcblx0XHRcdC5yZXBsYWNlKCd7e3N1YmplY3R9fScsIGVuY29kZUh0bWwoc3ViamVjdCkpXG5cdFx0XHQucmVwbGFjZSgne3tkYXRlfX0nLCBlbmNvZGVIdG1sKGRhdGUpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7ZnJvbUNyZWRzfX0nLCBlbmNvZGVIdG1sKGZyb21DcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3t0b0NyZWRzfX0nLCBlbmNvZGVIdG1sKHRvQ3JlZHMpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dG9MYWJlbH19JywgZW5jb2RlSHRtbCh0b0xhYmVsKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjQ2xhc3N9fScsIGVuY29kZUh0bWwoY2NDbGFzcykpXG5cdFx0XHQucmVwbGFjZSgne3tjY0NyZWRzfX0nLCBlbmNvZGVIdG1sKGNjQ3JlZHMpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NMYWJlbH19JywgZW5jb2RlSHRtbChjY0xhYmVsKSlcblx0XHRcdC5yZXBsYWNlKCd7e2JvZHlDbGFzc319JywgYm9keUNsYXNzKVxuXHRcdFx0LnJlcGxhY2UoJ3t7aHRtbH19JywgaHRtbClcblx0KTtcblxuXHRkb2MuY2xvc2UoKTtcblxuXHRpZiAocHJpbnQpIHtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB3aW4ucHJpbnQoKSwgMTAwKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZDYWxsYmFja1xuICogQHBhcmFtIHs/fSBrb1RyaWdnZXJcbiAqIEBwYXJhbSB7P30gY29udGV4dCA9IG51bGxcbiAqIEBwYXJhbSB7bnVtYmVyPX0gdGltZXIgPSAxMDAwXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJGdW5jdGlvbihmQ2FsbGJhY2ssIGtvVHJpZ2dlciwgY29udGV4dCA9IG51bGwsIHRpbWVyID0gMTAwMCkge1xuXHR0aW1lciA9IHBJbnQodGltZXIpO1xuXHRyZXR1cm4gKHR5cGUsIGRhdGEsIGNhY2hlZCwgcmVxdWVzdEFjdGlvbiwgcmVxdWVzdFBhcmFtZXRlcnMpID0+IHtcblx0XHRrb1RyaWdnZXIuY2FsbChjb250ZXh0LCBkYXRhICYmIGRhdGEuUmVzdWx0ID8gU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0IDogU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdCk7XG5cdFx0aWYgKGZDYWxsYmFjaykge1xuXHRcdFx0ZkNhbGxiYWNrLmNhbGwoY29udGV4dCwgdHlwZSwgZGF0YSwgY2FjaGVkLCByZXF1ZXN0QWN0aW9uLCByZXF1ZXN0UGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0a29UcmlnZ2VyLmNhbGwoY29udGV4dCwgU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR9LCB0aW1lcik7XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGtvVHJpZ2dlclxuICogQHBhcmFtIHttaXhlZH0gY29udGV4dFxuICogQHJldHVybnMge21peGVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24oa29UcmlnZ2VyLCBjb250ZXh0KSB7XG5cdHJldHVybiBzZXR0aW5nc1NhdmVIZWxwZXJGdW5jdGlvbihudWxsLCBrb1RyaWdnZXIsIGNvbnRleHQsIDEwMDApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByZW1vdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXR0aW5nTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZUcmlnZ2VyRnVuY3Rpb25cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uKHJlbW90ZSwgc2V0dGluZ05hbWUsIHR5cGUsIGZUcmlnZ2VyRnVuY3Rpb24pIHtcblx0cmV0dXJuICh2YWx1ZSkgPT4ge1xuXHRcdGlmIChyZW1vdGUpIHtcblx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRjYXNlICdib29sJzpcblx0XHRcdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/ICcxJyA6ICcwJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdFx0Y2FzZSAnaW50ZWdlcic6XG5cdFx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdFx0dmFsdWUgPSBwSW50KHZhbHVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndHJpbSc6XG5cdFx0XHRcdFx0dmFsdWUgPSB0cmltKHZhbHVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR2YWx1ZSA9IHBTdHJpbmcodmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkYXRhID0ge307XG5cdFx0XHRkYXRhW3NldHRpbmdOYW1lXSA9IHZhbHVlO1xuXG5cdFx0XHRpZiAocmVtb3RlLnNhdmVBZG1pbkNvbmZpZykge1xuXHRcdFx0XHRyZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGZUcmlnZ2VyRnVuY3Rpb24gfHwgbnVsbCwgZGF0YSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlbW90ZS5zYXZlU2V0dGluZ3MpIHtcblx0XHRcdFx0cmVtb3RlLnNhdmVTZXR0aW5ncyhmVHJpZ2dlckZ1bmN0aW9uIHx8IG51bGwsIGRhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbWFpbEFuZExpbmtzKGh0bWwpIHtcblx0cmV0dXJuIEF1dG9saW5rZXJcblx0XHQ/IEF1dG9saW5rZXIubGluayhodG1sLCB7XG5cdFx0XHRcdG5ld1dpbmRvdzogdHJ1ZSxcblx0XHRcdFx0c3RyaXBQcmVmaXg6IGZhbHNlLFxuXHRcdFx0XHR1cmxzOiB0cnVlLFxuXHRcdFx0XHRlbWFpbDogdHJ1ZSxcblx0XHRcdFx0bWVudGlvbjogZmFsc2UsXG5cdFx0XHRcdHBob25lOiBmYWxzZSxcblx0XHRcdFx0aGFzaHRhZzogZmFsc2UsXG5cdFx0XHRcdHJlcGxhY2VGbjogZnVuY3Rpb24obWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gIShtYXRjaCAmJiAndXJsJyA9PT0gbWF0Y2guZ2V0VHlwZSgpICYmIG1hdGNoLm1hdGNoZWRUZXh0ICYmIDAgIT09IG1hdGNoLm1hdGNoZWRUZXh0LmluZGV4T2YoJ2h0dHAnKSk7XG5cdFx0XHRcdH1cblx0XHQgIH0pXG5cdFx0OiBodG1sO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbFRvUGxhaW4oaHRtbCkge1xuXHRsZXQgcG9zID0gMCxcblx0XHRsaW1pdCA9IDAsXG5cdFx0aVAxID0gMCxcblx0XHRpUDIgPSAwLFxuXHRcdGlQMyA9IDAsXG5cdFx0dGV4dCA9ICcnO1xuXG5cdGNvbnN0IGNvbnZlcnRCbG9ja3F1b3RlID0gKGJsb2NrcXVvdGVUZXh0KSA9PiB7XG5cdFx0YmxvY2txdW90ZVRleHQgPSAnPiAnICsgdHJpbShibG9ja3F1b3RlVGV4dCkucmVwbGFjZSgvXFxuL2dtLCAnXFxuPiAnKTtcblx0XHRyZXR1cm4gYmxvY2txdW90ZVRleHQucmVwbGFjZSgvKF58XFxuKShbPiBdKykvZ20sICguLi5hcmdzKSA9PlxuXHRcdFx0YXJncyAmJiAyIDwgYXJncy5sZW5ndGggPyBhcmdzWzFdICsgdHJpbShhcmdzWzJdLnJlcGxhY2UoL1tcXHNdL2csICcnKSkgKyAnICcgOiAnJ1xuXHRcdCk7XG5cdH07XG5cblx0Y29uc3QgY29udmVydERpdnMgPSAoLi4uYXJncykgPT4ge1xuXHRcdGlmIChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCkge1xuXHRcdFx0bGV0IGRpdlRleHQgPSB0cmltKGFyZ3NbMV0pO1xuXHRcdFx0aWYgKDAgPCBkaXZUZXh0Lmxlbmd0aCkge1xuXHRcdFx0XHRkaXZUZXh0ID0gZGl2VGV4dC5yZXBsYWNlKC88ZGl2W14+XSo+KFtcXHNcXFNcXHJcXG5dKik8XFwvZGl2Pi9naW0sIGNvbnZlcnREaXZzKTtcblx0XHRcdFx0ZGl2VGV4dCA9ICdcXG4nICsgdHJpbShkaXZUZXh0KSArICdcXG4nO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGl2VGV4dDtcblx0XHR9XG5cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cblx0Y29uc3QgY29udmVydFByZSA9ICguLi5hcmdzKSA9PlxuXHRcdFx0YXJncyAmJiAxIDwgYXJncy5sZW5ndGhcblx0XHRcdFx0PyBhcmdzWzFdXG5cdFx0XHRcdFx0XHQudG9TdHJpbmcoKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1tcXG5dL2dtLCAnPGJyIC8+Jylcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bXFxyXS9nbSwgJycpXG5cdFx0XHRcdDogJycsXG5cdFx0Zml4QXR0aWJ1dGVWYWx1ZSA9ICguLi5hcmdzKSA9PiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGggPyAnJyArIGFyZ3NbMV0gKyBfLmVzY2FwZShhcmdzWzJdKSA6ICcnKSxcblx0XHRjb252ZXJ0TGlua3MgPSAoLi4uYXJncykgPT4gKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoID8gdHJpbShhcmdzWzFdKSA6ICcnKTtcblxuXHR0ZXh0ID0gaHRtbFxuXHRcdC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpXG5cdFx0LnJlcGxhY2UoLzxwcmVbXj5dKj4oW1xcc1xcU1xcclxcblxcdF0qKTxcXC9wcmU+L2dpbSwgY29udmVydFByZSlcblx0XHQucmVwbGFjZSgvW1xcc10rL2dtLCAnICcpXG5cdFx0LnJlcGxhY2UoLygoPzpocmVmfGRhdGEpXFxzPz1cXHM/KShcIlteXCJdKz9cInwnW14nXSs/JykvZ2ltLCBmaXhBdHRpYnV0ZVZhbHVlKVxuXHRcdC5yZXBsYWNlKC88YnJbXj5dKj4vZ2ltLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL2hbXFxkXT4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvcD4vZ2ksICdcXG5cXG4nKVxuXHRcdC5yZXBsYWNlKC88dWxbXj5dKj4vZ2ltLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3VsPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxsaVtePl0qPi9naW0sICcgKiAnKVxuXHRcdC5yZXBsYWNlKC88XFwvbGk+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3RkPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC90cj4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88aHJbXj5dKj4vZ2ltLCAnXFxuX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLzxkaXZbXj5dKj4oW1xcc1xcU1xcclxcbl0qKTxcXC9kaXY+L2dpbSwgY29udmVydERpdnMpXG5cdFx0LnJlcGxhY2UoLzxibG9ja3F1b3RlW14+XSo+L2dpbSwgJ1xcbl9fYnFfX3N0YXJ0X19cXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvYmxvY2txdW90ZT4vZ2ltLCAnXFxuX19icV9fZW5kX19cXG4nKVxuXHRcdC5yZXBsYWNlKC88YSBbXj5dKj4oW1xcc1xcU1xcclxcbl0qPyk8XFwvYT4vZ2ltLCBjb252ZXJ0TGlua3MpXG5cdFx0LnJlcGxhY2UoLzxcXC9kaXY+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvJm5ic3A7L2dpLCAnICcpXG5cdFx0LnJlcGxhY2UoLyZxdW90Oy9naSwgJ1wiJylcblx0XHQucmVwbGFjZSgvPFtePl0qPi9nbSwgJycpO1xuXG5cdHRleHQgPSAkZGl2Lmh0bWwodGV4dCkudGV4dCgpO1xuXG5cdHRleHQgPSB0ZXh0XG5cdFx0LnJlcGxhY2UoL1xcblsgXFx0XSsvZ20sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC9bXFxuXXszLH0vZ20sICdcXG5cXG4nKVxuXHRcdC5yZXBsYWNlKC8mZ3Q7L2dpLCAnPicpXG5cdFx0LnJlcGxhY2UoLyZsdDsvZ2ksICc8Jylcblx0XHQucmVwbGFjZSgvJmFtcDsvZ2ksICcmJyk7XG5cblx0dGV4dCA9IHNwbGl0UGxhaW5UZXh0KHRleHQpO1xuXG5cdHBvcyA9IDA7XG5cdGxpbWl0ID0gODAwO1xuXG5cdHdoaWxlICgwIDwgbGltaXQpIHtcblx0XHRsaW1pdCAtPSAxO1xuXHRcdGlQMSA9IHRleHQuaW5kZXhPZignX19icV9fc3RhcnRfXycsIHBvcyk7XG5cdFx0aWYgKC0xIDwgaVAxKSB7XG5cdFx0XHRpUDIgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX3N0YXJ0X18nLCBpUDEgKyA1KTtcblx0XHRcdGlQMyA9IHRleHQuaW5kZXhPZignX19icV9fZW5kX18nLCBpUDEgKyA1KTtcblxuXHRcdFx0aWYgKCgtMSA9PT0gaVAyIHx8IGlQMyA8IGlQMikgJiYgaVAxIDwgaVAzKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpUDEpICsgY29udmVydEJsb2NrcXVvdGUodGV4dC5zdWJzdHJpbmcoaVAxICsgMTMsIGlQMykpICsgdGV4dC5zdWJzdHJpbmcoaVAzICsgMTEpO1xuXG5cdFx0XHRcdHBvcyA9IDA7XG5cdFx0XHR9IGVsc2UgaWYgKC0xIDwgaVAyICYmIGlQMiA8IGlQMykge1xuXHRcdFx0XHRwb3MgPSBpUDIgLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cG9zID0gMDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0dGV4dCA9IHRleHQucmVwbGFjZSgvX19icV9fc3RhcnRfXy9nbSwgJycpLnJlcGxhY2UoL19fYnFfX2VuZF9fL2dtLCAnJyk7XG5cblx0cmV0dXJuIHRleHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsYWluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID0gZmFsc2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbGFpblRvSHRtbChwbGFpbiwgZmluZEVtYWlsQW5kTGlua3NJblRleHQgPSBmYWxzZSkge1xuXHRwbGFpbiA9IHBsYWluLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxyL2csICcnKTtcblx0cGxhaW4gPSBwbGFpbi5yZXBsYWNlKC9ePls+IF0+Ky9nbSwgKFttYXRjaF0pID0+IChtYXRjaCA/IG1hdGNoLnJlcGxhY2UoL1sgXSsvZywgJycpIDogbWF0Y2gpKTtcblxuXHRsZXQgYkluID0gZmFsc2UsXG5cdFx0YkRvID0gdHJ1ZSxcblx0XHRiU3RhcnQgPSB0cnVlLFxuXHRcdGFOZXh0VGV4dCA9IFtdLFxuXHRcdHNMaW5lID0gJycsXG5cdFx0aUluZGV4ID0gMCxcblx0XHRhVGV4dCA9IHBsYWluLnNwbGl0KCdcXG4nKTtcblxuXHRkbyB7XG5cdFx0YkRvID0gZmFsc2U7XG5cdFx0YU5leHRUZXh0ID0gW107XG5cdFx0Zm9yIChpSW5kZXggPSAwOyBpSW5kZXggPCBhVGV4dC5sZW5ndGg7IGlJbmRleCsrKSB7XG5cdFx0XHRzTGluZSA9IGFUZXh0W2lJbmRleF07XG5cdFx0XHRiU3RhcnQgPSAnPicgPT09IHNMaW5lLnN1YnN0cigwLCAxKTtcblx0XHRcdGlmIChiU3RhcnQgJiYgIWJJbikge1xuXHRcdFx0XHRiRG8gPSB0cnVlO1xuXHRcdFx0XHRiSW4gPSB0cnVlO1xuXHRcdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+YmxvY2txdW90ZX5+ficpO1xuXHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZS5zdWJzdHIoMSkpO1xuXHRcdFx0fSBlbHNlIGlmICghYlN0YXJ0ICYmIGJJbikge1xuXHRcdFx0XHRpZiAoJycgIT09IHNMaW5lKSB7XG5cdFx0XHRcdFx0YkluID0gZmFsc2U7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fi9ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiU3RhcnQgJiYgYkluKSB7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lLnN1YnN0cigxKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJJbikge1xuXHRcdFx0YkluID0gZmFsc2U7XG5cdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+L2Jsb2NrcXVvdGV+fn4nKTtcblx0XHR9XG5cblx0XHRhVGV4dCA9IGFOZXh0VGV4dDtcblx0fSB3aGlsZSAoYkRvKTtcblxuXHRwbGFpbiA9IGFUZXh0LmpvaW4oJ1xcbicpO1xuXG5cdHBsYWluID0gcGxhaW5cblx0XHQvLyAucmVwbGFjZSgvfn5+XFwvYmxvY2txdW90ZX5+flxcbn5+fmJsb2NrcXVvdGV+fn4vZywgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLyYvZywgJyZhbXA7Jylcblx0XHQucmVwbGFjZSgvPi9nLCAnJmd0OycpXG5cdFx0LnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuXHRcdC5yZXBsYWNlKC9+fn5ibG9ja3F1b3Rlfn5+W1xcc10qL2csICc8YmxvY2txdW90ZT4nKVxuXHRcdC5yZXBsYWNlKC9bXFxzXSp+fn5cXC9ibG9ja3F1b3Rlfn5+L2csICc8L2Jsb2NrcXVvdGU+Jylcblx0XHQucmVwbGFjZSgvXFxuL2csICc8YnIgLz4nKTtcblxuXHRyZXR1cm4gZmluZEVtYWlsQW5kTGlua3NJblRleHQgPyBmaW5kRW1haWxBbmRMaW5rcyhwbGFpbikgOiBwbGFpbjtcbn1cblxud2luZG93WydyYWlubG9vcF9VdGlsc19odG1sVG9QbGFpbiddID0gaHRtbFRvUGxhaW47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG53aW5kb3dbJ3JhaW5sb29wX1V0aWxzX3BsYWluVG9IdG1sJ10gPSBwbGFpblRvSHRtbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBhU3lzdGVtXG4gKiBAcGFyYW0ge0FycmF5fSBhTGlzdFxuICogQHBhcmFtIHtBcnJheT19IGFEaXNhYmxlZFxuICogQHBhcmFtIHtBcnJheT19IGFIZWFkZXJMaW5lc1xuICogQHBhcmFtIHs/bnVtYmVyPX0gaVVuRGVlcFxuICogQHBhcmFtIHtGdW5jdGlvbj19IGZEaXNhYmxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmVmlzaWJsZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZlJlbmFtZUNhbGxiYWNrXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBiU3lzdGVtXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBiQnVpbGRVbnZpc2libGVcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0YVN5c3RlbSxcblx0YUxpc3QsXG5cdGFEaXNhYmxlZCxcblx0YUhlYWRlckxpbmVzLFxuXHRpVW5EZWVwLFxuXHRmRGlzYWJsZUNhbGxiYWNrLFxuXHRmVmlzaWJsZUNhbGxiYWNrLFxuXHRmUmVuYW1lQ2FsbGJhY2ssXG5cdGJTeXN0ZW0sXG5cdGJCdWlsZFVudmlzaWJsZVxuKSB7XG5cdGxldCAvKipcblx0XHQgKiBAdHlwZSB7P0ZvbGRlck1vZGVsfVxuXHRcdCAqL1xuXHRcdG9JdGVtID0gbnVsbCxcblx0XHRiU2VwID0gZmFsc2UsXG5cdFx0aUluZGV4ID0gMCxcblx0XHRpTGVuID0gMCxcblx0XHRhUmVzdWx0ID0gW107XG5cblx0Y29uc3Qgc0RlZXBQcmVmaXggPSAnXFx1MDBBMFxcdTAwQTBcXHUwMEEwJztcblxuXHRiQnVpbGRVbnZpc2libGUgPSBpc1VuZChiQnVpbGRVbnZpc2libGUpID8gZmFsc2UgOiAhIWJCdWlsZFVudmlzaWJsZTtcblx0YlN5c3RlbSA9ICFpc05vcm1hbChiU3lzdGVtKSA/IDAgPCBhU3lzdGVtLmxlbmd0aCA6IGJTeXN0ZW07XG5cdGlVbkRlZXAgPSAhaXNOb3JtYWwoaVVuRGVlcCkgPyAwIDogaVVuRGVlcDtcblx0ZkRpc2FibGVDYWxsYmFjayA9IGlzTm9ybWFsKGZEaXNhYmxlQ2FsbGJhY2spID8gZkRpc2FibGVDYWxsYmFjayA6IG51bGw7XG5cdGZWaXNpYmxlQ2FsbGJhY2sgPSBpc05vcm1hbChmVmlzaWJsZUNhbGxiYWNrKSA/IGZWaXNpYmxlQ2FsbGJhY2sgOiBudWxsO1xuXHRmUmVuYW1lQ2FsbGJhY2sgPSBpc05vcm1hbChmUmVuYW1lQ2FsbGJhY2spID8gZlJlbmFtZUNhbGxiYWNrIDogbnVsbDtcblxuXHRpZiAoIWlzQXJyYXkoYURpc2FibGVkKSkge1xuXHRcdGFEaXNhYmxlZCA9IFtdO1xuXHR9XG5cblx0aWYgKCFpc0FycmF5KGFIZWFkZXJMaW5lcykpIHtcblx0XHRhSGVhZGVyTGluZXMgPSBbXTtcblx0fVxuXG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFIZWFkZXJMaW5lcy5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdGlkOiBhSGVhZGVyTGluZXNbaUluZGV4XVswXSxcblx0XHRcdG5hbWU6IGFIZWFkZXJMaW5lc1tpSW5kZXhdWzFdLFxuXHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRkaXNhYmxlZDogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdGJTZXAgPSB0cnVlO1xuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhU3lzdGVtLmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRvSXRlbSA9IGFTeXN0ZW1baUluZGV4XTtcblx0XHRpZiAoZlZpc2libGVDYWxsYmFjayA/IGZWaXNpYmxlQ2FsbGJhY2sob0l0ZW0pIDogdHJ1ZSkge1xuXHRcdFx0aWYgKGJTZXAgJiYgMCA8IGFSZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0aWQ6ICctLS0nLFxuXHRcdFx0XHRcdG5hbWU6ICctLS0nLFxuXHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0c2Vwb3JhdG9yOiB0cnVlLFxuXHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRiU2VwID0gZmFsc2U7XG5cdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRpZDogb0l0ZW0uZnVsbE5hbWVSYXcsXG5cdFx0XHRcdG5hbWU6IGZSZW5hbWVDYWxsYmFjayA/IGZSZW5hbWVDYWxsYmFjayhvSXRlbSkgOiBvSXRlbS5uYW1lKCksXG5cdFx0XHRcdHN5c3RlbTogdHJ1ZSxcblx0XHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdFx0ZGlzYWJsZWQ6XG5cdFx0XHRcdFx0IW9JdGVtLnNlbGVjdGFibGUgfHxcblx0XHRcdFx0XHQtMSA8IGluQXJyYXkob0l0ZW0uZnVsbE5hbWVSYXcsIGFEaXNhYmxlZCkgfHxcblx0XHRcdFx0XHQoZkRpc2FibGVDYWxsYmFjayA/IGZEaXNhYmxlQ2FsbGJhY2sob0l0ZW0pIDogZmFsc2UpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRiU2VwID0gdHJ1ZTtcblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYUxpc3QubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdG9JdGVtID0gYUxpc3RbaUluZGV4XTtcblx0XHQvLyBpZiAob0l0ZW0uc3ViU2NyaWJlZCgpIHx8ICFvSXRlbS5leGlzdGVuIHx8IGJCdWlsZFVudmlzaWJsZSlcblx0XHRpZiAoXG5cdFx0XHQob0l0ZW0uc3ViU2NyaWJlZCgpIHx8ICFvSXRlbS5leGlzdGVuIHx8IGJCdWlsZFVudmlzaWJsZSkgJiZcblx0XHRcdChvSXRlbS5zZWxlY3RhYmxlIHx8IG9JdGVtLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCkpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZlZpc2libGVDYWxsYmFjayA/IGZWaXNpYmxlQ2FsbGJhY2sob0l0ZW0pIDogdHJ1ZSkge1xuXHRcdFx0XHRpZiAoRm9sZGVyVHlwZS5Vc2VyID09PSBvSXRlbS50eXBlKCkgfHwgIWJTeXN0ZW0gfHwgb0l0ZW0uaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSkge1xuXHRcdFx0XHRcdGlmIChiU2VwICYmIDAgPCBhUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0aWQ6ICctLS0nLFxuXHRcdFx0XHRcdFx0XHRuYW1lOiAnLS0tJyxcblx0XHRcdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0c2Vwb3JhdG9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YlNlcCA9IGZhbHNlO1xuXHRcdFx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRpZDogb0l0ZW0uZnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0XHRuYW1lOlxuXHRcdFx0XHRcdFx0XHRuZXcgd2luZG93LkFycmF5KG9JdGVtLmRlZXAgKyAxIC0gaVVuRGVlcCkuam9pbihzRGVlcFByZWZpeCkgK1xuXHRcdFx0XHRcdFx0XHQoZlJlbmFtZUNhbGxiYWNrID8gZlJlbmFtZUNhbGxiYWNrKG9JdGVtKSA6IG9JdGVtLm5hbWUoKSksXG5cdFx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOlxuXHRcdFx0XHRcdFx0XHQhb0l0ZW0uc2VsZWN0YWJsZSB8fFxuXHRcdFx0XHRcdFx0XHQtMSA8IGluQXJyYXkob0l0ZW0uZnVsbE5hbWVSYXcsIGFEaXNhYmxlZCkgfHxcblx0XHRcdFx0XHRcdFx0KGZEaXNhYmxlQ2FsbGJhY2sgPyBmRGlzYWJsZUNhbGxiYWNrKG9JdGVtKSA6IGZhbHNlKVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG9JdGVtLnN1YlNjcmliZWQoKSAmJiAwIDwgb0l0ZW0uc3ViRm9sZGVycygpLmxlbmd0aCkge1xuXHRcdFx0YVJlc3VsdCA9IGFSZXN1bHQuY29uY2F0KFxuXHRcdFx0XHRmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIoXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0b0l0ZW0uc3ViRm9sZGVycygpLFxuXHRcdFx0XHRcdGFEaXNhYmxlZCxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRpVW5EZWVwLFxuXHRcdFx0XHRcdGZEaXNhYmxlQ2FsbGJhY2ssXG5cdFx0XHRcdFx0ZlZpc2libGVDYWxsYmFjayxcblx0XHRcdFx0XHRmUmVuYW1lQ2FsbGJhY2ssXG5cdFx0XHRcdFx0YlN5c3RlbSxcblx0XHRcdFx0XHRiQnVpbGRVbnZpc2libGVcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYVJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RFbGVtZW50KGVsZW1lbnQpIHtcblx0bGV0IHNlbCA9IG51bGwsXG5cdFx0cmFuZ2UgPSBudWxsO1xuXG5cdGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0c2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRyYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcblx0XHRzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuXHR9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24pIHtcblx0XHRyYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuXHRcdHJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KGVsZW1lbnQpO1xuXHRcdHJhbmdlLnNlbGVjdCgpO1xuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBkZXRlY3REcm9wZG93blZpc2liaWxpdHkgPSBfLmRlYm91bmNlKCgpID0+IHtcblx0ZHJvcGRvd25WaXNpYmlsaXR5KCEhXy5maW5kKEdsb2JhbHNEYXRhLmFCb290c3RyYXBEcm9wZG93bnMsIChpdGVtKSA9PiBpdGVtLmhhc0NsYXNzKCdvcGVuJykpKTtcbn0sIDUwKTtcblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBkZWxheSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UoZGVsYXkgPSBmYWxzZSkge1xuXHRjb25zdCBmRnVuYyA9ICgpID0+IHtcblx0XHQkKCcuY2hlY2tBdXRvY29tcGxldGUnKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0fTtcblxuXHRpZiAoZGVsYXkpIHtcblx0XHRfLmRlbGF5KGZGdW5jLCAxMDApO1xuXHR9IGVsc2Uge1xuXHRcdGZGdW5jKCk7XG5cdH1cbn1cblxuY29uc3QgY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlID0ge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWd1cmF0aW9uRnJvbVNjcmlwdFRhZyhjb25maWd1cmF0aW9uKSB7XG5cdGlmICghY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dKSB7XG5cdFx0Y29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dID0gJChcblx0XHRcdCdzY3JpcHRbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl1bZGF0YS1jb25maWd1cmF0aW9uPVwiJyArIGNvbmZpZ3VyYXRpb24gKyAnXCJdJ1xuXHRcdCk7XG5cdH1cblxuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXS50ZXh0KCkpO1xuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0cmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bWl4ZWR9IG1Qcm9wT3JWYWx1ZVxuICogQHBhcmFtIHttaXhlZH0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VPbmUocHJvcE9yVmFsdWUsIHZhbHVlKSB7XG5cdGNvbnN0IGRpc3Bvc2FibGUgPSB2YWx1ZSB8fCBwcm9wT3JWYWx1ZTtcblx0aWYgKGRpc3Bvc2FibGUgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGRpc3Bvc2FibGUuZGlzcG9zZSkge1xuXHRcdGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZU9iamVjdChvYmplY3QpIHtcblx0aWYgKG9iamVjdCkge1xuXHRcdGlmIChpc0FycmF5KG9iamVjdC5kaXNwb3NhYmxlcykpIHtcblx0XHRcdF8uZWFjaChvYmplY3QuZGlzcG9zYWJsZXMsIGRpc3Bvc2VPbmUpO1xuXHRcdH1cblxuXHRcdGtvLnV0aWxzLm9iamVjdEZvckVhY2gob2JqZWN0LCBkaXNwb3NlT25lKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmplY3RPck9iamVjdHNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZWdhdGVSdW5PbkRlc3Ryb3kob2JqZWN0T3JPYmplY3RzKSB7XG5cdGlmIChvYmplY3RPck9iamVjdHMpIHtcblx0XHRpZiAoaXNBcnJheShvYmplY3RPck9iamVjdHMpKSB7XG5cdFx0XHRfLmVhY2gob2JqZWN0T3JPYmplY3RzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShpdGVtKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAob2JqZWN0T3JPYmplY3RzICYmIG9iamVjdE9yT2JqZWN0cy5vbkRlc3Ryb3kpIHtcblx0XHRcdG9iamVjdE9yT2JqZWN0cy5vbkRlc3Ryb3koKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gJHN0eWxlVGFnXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFN0eWxlcygkc3R5bGVUYWcsIGNzcykge1xuXHRpZiAoJHN0eWxlVGFnICYmICRzdHlsZVRhZ1swXSkge1xuXHRcdGlmICgkc3R5bGVUYWdbMF0uc3R5bGVTaGVldCAmJiAhaXNVbmQoJHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCkpIHtcblx0XHRcdCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRzdHlsZVRhZy50ZXh0KGNzcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmxldCBfX3RoZW1lVGltZXIgPSAwLFxuXHRfX3RoZW1lQWpheCA9IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9uPX0gdGhlbWVUcmlnZ2VyID0gbm9vcFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VUaGVtZSh2YWx1ZSwgdGhlbWVUcmlnZ2VyID0gbm9vcCkge1xuXHRjb25zdCB0aGVtZUxpbmsgPSAkKCcjYXBwLXRoZW1lLWxpbmsnKSxcblx0XHRjbGVhclRpbWVyID0gKCkgPT4ge1xuXHRcdFx0X190aGVtZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSksIDEwMDApO1xuXHRcdFx0X190aGVtZUFqYXggPSBudWxsO1xuXHRcdH07XG5cblx0bGV0IHRoZW1lU3R5bGUgPSAkKCcjYXBwLXRoZW1lLXN0eWxlJyksXG5cdFx0dXJsID0gdGhlbWVMaW5rLmF0dHIoJ2hyZWYnKTtcblxuXHRpZiAoIXVybCkge1xuXHRcdHVybCA9IHRoZW1lU3R5bGUuYXR0cignZGF0YS1ocmVmJyk7XG5cdH1cblxuXHRpZiAodXJsKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwvLVxcL1teL10rXFwvLVxcLy8sICcvLS8nICsgdmFsdWUgKyAnLy0vJyk7XG5cdFx0dXJsID0gdXJsLnJlcGxhY2UoL1xcL0Nzc1xcL1teL10rXFwvVXNlclxcLy8sICcvQ3NzLzAvVXNlci8nKTtcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvXFwvSGFzaFxcL1teL10rXFwvLywgJy9IYXNoLy0vJyk7XG5cblx0XHRpZiAoJ0pzb24vJyAhPT0gdXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoIC0gNSwgdXJsLmxlbmd0aCkpIHtcblx0XHRcdHVybCArPSAnSnNvbi8nO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoX190aGVtZVRpbWVyKTtcblxuXHRcdHRoZW1lVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXG5cdFx0aWYgKF9fdGhlbWVBamF4ICYmIF9fdGhlbWVBamF4LmFib3J0KSB7XG5cdFx0XHRfX3RoZW1lQWpheC5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdF9fdGhlbWVBamF4ID0gJC5hamF4KHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0ZGF0YVR5cGU6ICdqc29uJ1xuXHRcdH0pXG5cdFx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRpZiAoZGF0YSAmJiBpc0FycmF5KGRhdGEpICYmIDIgPT09IGRhdGEubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYgKHRoZW1lTGluayAmJiB0aGVtZUxpbmtbMF0gJiYgKCF0aGVtZVN0eWxlIHx8ICF0aGVtZVN0eWxlWzBdKSkge1xuXHRcdFx0XHRcdFx0dGhlbWVTdHlsZSA9ICQoJzxzdHlsZSBpZD1cImFwcC10aGVtZS1zdHlsZVwiPjwvc3R5bGU+Jyk7XG5cdFx0XHRcdFx0XHR0aGVtZUxpbmsuYWZ0ZXIodGhlbWVTdHlsZSk7XG5cdFx0XHRcdFx0XHR0aGVtZUxpbmsucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHRoZW1lU3R5bGUgJiYgdGhlbWVTdHlsZVswXSkge1xuXHRcdFx0XHRcdFx0aWYgKGFwcGVuZFN0eWxlcyh0aGVtZVN0eWxlLCBkYXRhWzFdKSkge1xuXHRcdFx0XHRcdFx0XHR0aGVtZVN0eWxlLmF0dHIoJ2RhdGEtaHJlZicsIHVybCkuYXR0cignZGF0YS10aGVtZScsIGRhdGFbMF0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoZW1lVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oY2xlYXJUaW1lciwgY2xlYXJUaW1lcik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZFBhZ2VuYXRvckhlbHBlcihrb0N1cnJlbnRQYWdlLCBrb1BhZ2VDb3VudCkge1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0ga29DdXJyZW50UGFnZSgpLFxuXHRcdFx0cGFnZUNvdW50ID0ga29QYWdlQ291bnQoKSxcblx0XHRcdHJlc3VsdCA9IFtdLFxuXHRcdFx0ZkFkZCA9IChpbmRleCwgcHVzaCA9IHRydWUsIGN1c3RvbU5hbWUgPSAnJykgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0XHRcdGN1cnJlbnQ6IGluZGV4ID09PSBjdXJyZW50UGFnZSxcblx0XHRcdFx0XHRuYW1lOiAnJyA9PT0gY3VzdG9tTmFtZSA/IGluZGV4LnRvU3RyaW5nKCkgOiBjdXN0b21OYW1lLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0Y3VzdG9tOiAnJyAhPT0gY3VzdG9tTmFtZSxcblx0XHRcdFx0XHR0aXRsZTogJycgPT09IGN1c3RvbU5hbWUgPyAnJyA6IGluZGV4LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0dmFsdWU6IGluZGV4LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAocHVzaCkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGRhdGEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdC51bnNoaWZ0KGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0bGV0IHByZXYgPSAwLFxuXHRcdFx0bmV4dCA9IDAsXG5cdFx0XHRsaW1pdCA9IDI7XG5cblx0XHRpZiAoMSA8IHBhZ2VDb3VudCB8fCAoMCA8IHBhZ2VDb3VudCAmJiBwYWdlQ291bnQgPCBjdXJyZW50UGFnZSkpIHtcblx0XHRcdGlmIChwYWdlQ291bnQgPCBjdXJyZW50UGFnZSkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCk7XG5cdFx0XHRcdHByZXYgPSBwYWdlQ291bnQ7XG5cdFx0XHRcdG5leHQgPSBwYWdlQ291bnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoMyA+PSBjdXJyZW50UGFnZSB8fCBwYWdlQ291bnQgLSAyIDw9IGN1cnJlbnRQYWdlKSB7XG5cdFx0XHRcdFx0bGltaXQgKz0gMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZBZGQoY3VycmVudFBhZ2UpO1xuXHRcdFx0XHRwcmV2ID0gY3VycmVudFBhZ2U7XG5cdFx0XHRcdG5leHQgPSBjdXJyZW50UGFnZTtcblx0XHRcdH1cblxuXHRcdFx0d2hpbGUgKDAgPCBsaW1pdCkge1xuXHRcdFx0XHRwcmV2IC09IDE7XG5cdFx0XHRcdG5leHQgKz0gMTtcblxuXHRcdFx0XHRpZiAoMCA8IHByZXYpIHtcblx0XHRcdFx0XHRmQWRkKHByZXYsIGZhbHNlKTtcblx0XHRcdFx0XHRsaW1pdCAtPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhZ2VDb3VudCA+PSBuZXh0KSB7XG5cdFx0XHRcdFx0ZkFkZChuZXh0LCB0cnVlKTtcblx0XHRcdFx0XHRsaW1pdCAtPSAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKDAgPj0gcHJldikge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICgzID09PSBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoMiwgZmFsc2UpO1xuXHRcdFx0fSBlbHNlIGlmICgzIDwgcHJldikge1xuXHRcdFx0XHRmQWRkKE1hdGgucm91bmQoKHByZXYgLSAxKSAvIDIpLCBmYWxzZSwgJy4uLicpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFnZUNvdW50IC0gMiA9PT0gbmV4dCkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCAtIDEsIHRydWUpO1xuXHRcdFx0fSBlbHNlIGlmIChwYWdlQ291bnQgLSAyID4gbmV4dCkge1xuXHRcdFx0XHRmQWRkKE1hdGgucm91bmQoKHBhZ2VDb3VudCArIG5leHQpIC8gMiksIHRydWUsICcuLi4nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZmlyc3QgYW5kIGxhc3Rcblx0XHRcdGlmICgxIDwgcHJldikge1xuXHRcdFx0XHRmQWRkKDEsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhZ2VDb3VudCA+IG5leHQpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSkge1xuXHRmaWxlTmFtZSA9IHRyaW0oZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cblx0Y29uc3QgcmVzdWx0ID0gZmlsZU5hbWUuc3BsaXQoJy4nKS5wb3AoKTtcblx0cmV0dXJuIHJlc3VsdCA9PT0gZmlsZU5hbWUgPyAnJyA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW1lQ29udGVudFR5cGUoZmlsZU5hbWUpIHtcblx0bGV0IGV4dCA9ICcnLFxuXHRcdHJlc3VsdCA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5cdGZpbGVOYW1lID0gdHJpbShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuXHRpZiAoJ3dpbm1haWwuZGF0JyA9PT0gZmlsZU5hbWUpIHtcblx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL21zLXRuZWYnO1xuXHR9XG5cblx0ZXh0ID0gZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSk7XG5cdGlmIChleHQgJiYgMCA8IGV4dC5sZW5ndGggJiYgIWlzVW5kKE1pbWVbZXh0XSkpIHtcblx0XHRyZXN1bHQgPSBNaW1lW2V4dF07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYW5zcGFyZW50KGNvbG9yKSB7XG5cdHJldHVybiAncmdiYSgwLCAwLCAwLCAwKScgPT09IGNvbG9yIHx8ICd0cmFuc3BhcmVudCcgPT09IGNvbG9yO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSAkZWxcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWFsSGVpZ2h0KCRlbCkge1xuXHQkZWxcblx0XHQuY2xvbmUoKVxuXHRcdC5zaG93KClcblx0XHQuYXBwZW5kVG8oJGhjb250KTtcblx0Y29uc3QgcmVzdWx0ID0gJGhjb250LmhlaWdodCgpO1xuXHQkaGNvbnQuZW1wdHkoKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZDYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplQW5kQ3JvcCh1cmwsIHZhbHVlLCBmQ2FsbGJhY2spIHtcblx0Y29uc3QgaW1nID0gbmV3IHdpbmRvdy5JbWFnZSgpO1xuXHRpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0bGV0IGRpZmYgPSBbMCwgMF07XG5cblx0XHRjb25zdCBjYW52YXMgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG5cdFx0XHRjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuXHRcdGNhbnZhcy53aWR0aCA9IHZhbHVlO1xuXHRcdGNhbnZhcy5oZWlnaHQgPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLndpZHRoID4gdGhpcy5oZWlnaHQpIHtcblx0XHRcdGRpZmYgPSBbdGhpcy53aWR0aCAtIHRoaXMuaGVpZ2h0LCAwXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlmZiA9IFswLCB0aGlzLmhlaWdodCAtIHRoaXMud2lkdGhdO1xuXHRcdH1cblxuXHRcdGN0eC5maWxsU3R5bGUgPSAnI2ZmZic7XG5cdFx0Y3R4LmZpbGxSZWN0KDAsIDAsIHZhbHVlLCB2YWx1ZSk7XG5cdFx0Y3R4LmRyYXdJbWFnZSh0aGlzLCBkaWZmWzBdIC8gMiwgZGlmZlsxXSAvIDIsIHRoaXMud2lkdGggLSBkaWZmWzBdLCB0aGlzLmhlaWdodCAtIGRpZmZbMV0sIDAsIDAsIHZhbHVlLCB2YWx1ZSk7XG5cblx0XHRmQ2FsbGJhY2soY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpKTtcblx0fTtcblxuXHRpbWcuc3JjID0gdXJsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYWlsVG9VcmxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFBvcHVwQ29tcG9zZVZpZXdNb2RlbFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsVG9IZWxwZXIobWFpbFRvVXJsLCBQb3B1cENvbXBvc2VWaWV3TW9kZWwpIHtcblx0aWYgKFxuXHRcdG1haWxUb1VybCAmJlxuXHRcdCdtYWlsdG86JyA9PT1cblx0XHRcdG1haWxUb1VybFxuXHRcdFx0XHQudG9TdHJpbmcoKVxuXHRcdFx0XHQuc3Vic3RyKDAsIDcpXG5cdFx0XHRcdC50b0xvd2VyQ2FzZSgpXG5cdCkge1xuXHRcdGlmICghUG9wdXBDb21wb3NlVmlld01vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRtYWlsVG9VcmwgPSBtYWlsVG9VcmwudG9TdHJpbmcoKS5zdWJzdHIoNyk7XG5cblx0XHRsZXQgdG8gPSBbXSxcblx0XHRcdGNjID0gbnVsbCxcblx0XHRcdGJjYyA9IG51bGwsXG5cdFx0XHRwYXJhbXMgPSB7fTtcblxuXHRcdGNvbnN0IGVtYWlsID0gbWFpbFRvVXJsLnJlcGxhY2UoL1xcPy4rJC8sICcnKSxcblx0XHRcdHF1ZXJ5ID0gbWFpbFRvVXJsLnJlcGxhY2UoL15bXj9dKlxcPy8sICcnKSxcblx0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQ7XG5cblx0XHRwYXJhbXMgPSBzaW1wbGVRdWVyeVBhcnNlcihxdWVyeSk7XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy50bykpIHtcblx0XHRcdHRvID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQoZW1haWwgKyAnLCcgKyBwYXJhbXMudG8pKTtcblx0XHRcdHRvID0gXy52YWx1ZXMoXG5cdFx0XHRcdHRvLnJlZHVjZSgocmVzdWx0LCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZS5lbWFpbF0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFyZXN1bHRbdmFsdWUuZW1haWxdLm5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRbdmFsdWUuZW1haWxdID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdFt2YWx1ZS5lbWFpbF0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSwge30pXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0byA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZW1haWwpO1xuXHRcdH1cblxuXHRcdGlmICghaXNVbmQocGFyYW1zLmNjKSkge1xuXHRcdFx0Y2MgPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuY2MpKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy5iY2MpKSB7XG5cdFx0XHRiY2MgPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuYmNjKSk7XG5cdFx0fVxuXG5cdFx0cmVxdWlyZSgnS25vaW4vS25vaW4nKS5zaG93U2NyZWVuUG9wdXAoUG9wdXBDb21wb3NlVmlld01vZGVsLCBbXG5cdFx0XHRDb21wb3NlVHlwZS5FbXB0eSxcblx0XHRcdG51bGwsXG5cdFx0XHR0byxcblx0XHRcdGNjLFxuXHRcdFx0YmNjLFxuXHRcdFx0aXNVbmQocGFyYW1zLnN1YmplY3QpID8gbnVsbCA6IHBTdHJpbmcoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5zdWJqZWN0KSksXG5cdFx0XHRpc1VuZChwYXJhbXMuYm9keSkgPyBudWxsIDogcGxhaW5Ub0h0bWwocFN0cmluZyhkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmJvZHkpKSlcblx0XHRdKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbVJlYWR5KGZuKSB7XG5cdCQoKCkgPT4gZm4oKSk7XG5cdC8vXG5cdC8vXHRpZiAoJ2xvYWRpbmcnICE9PSB3aW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSlcblx0Ly9cdHtcblx0Ly9cdFx0Zm4oKTtcblx0Ly9cdH1cblx0Ly9cdGVsc2Vcblx0Ly9cdHtcblx0Ly9cdFx0d2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmbik7XG5cdC8vXHR9XG59XG5cbmV4cG9ydCBjb25zdCB3aW5kb3dSZXNpemUgPSBfLmRlYm91bmNlKCh0aW1lb3V0KSA9PiB7XG5cdGlmIChpc1VuZCh0aW1lb3V0KSB8fCBpc051bGwodGltZW91dCkpIHtcblx0XHQkd2luLnJlc2l6ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdCR3aW4ucmVzaXplKCk7XG5cdFx0fSwgdGltZW91dCk7XG5cdH1cbn0sIDUwKTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKCkge1xuXHR3aW5kb3dSZXNpemUoKTtcbn1cblxubGV0IHN1YnN0ciA9IHdpbmRvdy5TdHJpbmcuc3Vic3RyO1xuaWYgKCdiJyAhPT0gJ2FiJy5zdWJzdHIoLTEpKSB7XG5cdHN1YnN0ciA9IChzdHIsIHN0YXJ0LCBsZW5ndGgpID0+IHtcblx0XHRzdGFydCA9IDAgPiBzdGFydCA/IHN0ci5sZW5ndGggKyBzdGFydCA6IHN0YXJ0O1xuXHRcdHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW5ndGgpO1xuXHR9O1xuXG5cdHdpbmRvdy5TdHJpbmcuc3Vic3RyID0gc3Vic3RyO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuXzsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdzsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBpc1VuZCwgaXNOb3JtYWwsIGlzQXJyYXksIGluQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5sZXQgU0VUVElOR1MgPSB3aW5kb3cuX19ybGFoX2RhdGEoKSB8fCBudWxsO1xuU0VUVElOR1MgPSBpc05vcm1hbChTRVRUSU5HUykgPyBTRVRUSU5HUyA6IHt9O1xuXG5sZXQgQVBQX1NFVFRJTkdTID0gU0VUVElOR1MuU3lzdGVtIHx8IG51bGw7XG5BUFBfU0VUVElOR1MgPSBpc05vcm1hbChBUFBfU0VUVElOR1MpID8gQVBQX1NFVFRJTkdTIDoge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gaXNVbmQoU0VUVElOR1NbbmFtZV0pID8gbnVsbCA6IFNFVFRJTkdTW25hbWVdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NldChuYW1lLCB2YWx1ZSkge1xuXHRTRVRUSU5HU1tuYW1lXSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFNldHRpbmdzR2V0KG5hbWUpIHtcblx0cmV0dXJuIGlzVW5kKEFQUF9TRVRUSU5HU1tuYW1lXSkgPyBudWxsIDogQVBQX1NFVFRJTkdTW25hbWVdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcGEobmFtZSkge1xuXHRjb25zdCB2YWx1ZXMgPSBzZXR0aW5nc0dldCgnQ2FwYScpO1xuXHRyZXR1cm4gaXNBcnJheSh2YWx1ZXMpICYmIGlzTm9ybWFsKG5hbWUpICYmIC0xIDwgaW5BcnJheShuYW1lLCB2YWx1ZXMpO1xufVxuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmNvbnN0ICR3aW4gPSAkKHdpbmRvdyk7XG4kd2luLl9fc2l6ZXMgPSBbMCwgMF07XG5cbmV4cG9ydCB7ICR3aW4gfTtcblxuZXhwb3J0IGNvbnN0ICRkb2MgPSAkKHdpbmRvdy5kb2N1bWVudCk7XG5cbmV4cG9ydCBjb25zdCAkaHRtbCA9ICQoJ2h0bWwnKTtcblxuZXhwb3J0IGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXG5leHBvcnQgY29uc3QgJGRpdiA9ICQoJzxkaXY+PC9kaXY+Jyk7XG5cbmV4cG9ydCBjb25zdCAkaGNvbnQgPSAkKCc8ZGl2PjwvZGl2PicpO1xuJGhjb250XG5cdC5hdHRyKCdhcmVhJywgJ2hpZGRlbicpXG5cdC5jc3MoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogLTUwMDAgfSlcblx0LmFwcGVuZFRvKCRib2R5KTtcblxuZXhwb3J0IGNvbnN0IHN0YXJ0TWljcm90aW1lID0gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZO1xuXG4vKipcbiAqIEB0eXBlIHs/fVxuICovXG5leHBvcnQgY29uc3QgZHJvcGRvd25WaXNpYmlsaXR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgdXNlS2V5Ym9hcmRTaG9ydGN1dHMgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBzVXNlckFnZW50ID1cblx0KCduYXZpZ2F0b3InIGluIHdpbmRvdyAmJiAndXNlckFnZW50JyBpbiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpIHx8ICcnO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklFID0gLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ21zaWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJDaHJvbWUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignY2hyb21lJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiU2FmYXJpID0gIWJDaHJvbWUgJiYgLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ3NhZmFyaScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYk1vYmlsZURldmljZSA9XG5cdCgvYW5kcm9pZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBob25lL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcG9kL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGFkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9ibGFja2JlcnJ5L2kpLnRlc3Qoc1VzZXJBZ2VudCk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiRGlzYWJsZU5hbm9TY3JvbGwgPSBiTW9iaWxlRGV2aWNlO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkFuaW1hdGlvblN1cHBvcnRlZCA9XG5cdCFiTW9iaWxlRGV2aWNlICYmICRodG1sLmhhc0NsYXNzKCdjc3N0cmFuc2l0aW9ucycpICYmICRodG1sLmhhc0NsYXNzKCdjc3NhbmltYXRpb25zJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiWE1MSHR0cFJlcXVlc3RTdXBwb3J0ZWQgPSAhIXdpbmRvdy5YTUxIdHRwUmVxdWVzdDtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJJc0h0dHBzID1cblx0d2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbiA/ICdodHRwczonID09PSB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wgOiBmYWxzZTtcblxuLyoqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgaHRtbEVkaXRvckRlZmF1bHRDb25maWcgPSB7XG5cdCd0aXRsZSc6IGZhbHNlLFxuXHQnc3R5bGVzU2V0JzogZmFsc2UsXG5cdCdjdXN0b21Db25maWcnOiAnJyxcblx0J2NvbnRlbnRzQ3NzJzogJycsXG5cdCd0b29sYmFyR3JvdXBzJzogW1xuXHRcdHsgbmFtZTogJ3NwZWMnIH0sXG5cdFx0eyBuYW1lOiAnc3R5bGVzJyB9LFxuXHRcdHsgbmFtZTogJ2Jhc2ljc3R5bGVzJywgZ3JvdXBzOiBbJ2Jhc2ljc3R5bGVzJywgJ2NsZWFudXAnLCAnYmlkaSddIH0sXG5cdFx0eyBuYW1lOiAnY29sb3JzJyB9LFxuXHRcdGJNb2JpbGVEZXZpY2UgPyB7fSA6IHsgbmFtZTogJ3BhcmFncmFwaCcsIGdyb3VwczogWydsaXN0JywgJ2luZGVudCcsICdibG9ja3MnLCAnYWxpZ24nXSB9LFxuXHRcdHsgbmFtZTogJ2xpbmtzJyB9LFxuXHRcdHsgbmFtZTogJ2luc2VydCcgfSxcblx0XHR7IG5hbWU6ICdkb2N1bWVudCcsIGdyb3VwczogWydtb2RlJywgJ2RvY3VtZW50JywgJ2RvY3Rvb2xzJ10gfSxcblx0XHR7IG5hbWU6ICdvdGhlcnMnIH1cblx0XSxcblxuXHQncmVtb3ZlUGx1Z2lucyc6ICdsaXN0c3R5bGUnLFxuXHQncmVtb3ZlQnV0dG9ucyc6ICdGb3JtYXQsVW5kbyxSZWRvLEN1dCxDb3B5LFBhc3RlLEFuY2hvcixTdHJpa2UsU3Vic2NyaXB0LFN1cGVyc2NyaXB0LEltYWdlLFNlbGVjdEFsbCxTb3VyY2UnLFxuXHQncmVtb3ZlRGlhbG9nVGFicyc6ICdsaW5rOmFkdmFuY2VkO2xpbms6dGFyZ2V0O2ltYWdlOmFkdmFuY2VkO2ltYWdlczphZHZhbmNlZCcsXG5cblx0J2V4dHJhUGx1Z2lucyc6ICdwbGFpbixzaWduYXR1cmUnLFxuXG5cdCdhbGxvd2VkQ29udGVudCc6IHRydWUsXG5cdCdleHRyYUFsbG93ZWRDb250ZW50JzogdHJ1ZSxcblxuXHQnZmlsbEVtcHR5QmxvY2tzJzogZmFsc2UsXG5cdCdpZ25vcmVFbXB0eVBhcmFncmFwaCc6IHRydWUsXG5cdCdkaXNhYmxlTmF0aXZlU3BlbGxDaGVja2VyJzogZmFsc2UsXG5cblx0J2NvbG9yQnV0dG9uX2VuYWJsZUF1dG9tYXRpYyc6IGZhbHNlLFxuXHQnY29sb3JCdXR0b25fZW5hYmxlTW9yZSc6IHRydWUsXG5cblx0J2ZvbnRfZGVmYXVsdExhYmVsJzogJ0FyaWFsJyxcblx0J2ZvbnRTaXplX2RlZmF1bHRMYWJlbCc6ICcxMycsXG5cdCdmb250U2l6ZV9zaXplcyc6ICcxMC8xMHB4OzEyLzEycHg7MTMvMTNweDsxNC8xNHB4OzE2LzE2cHg7MTgvMThweDsyMC8yMHB4OzI0LzI0cHg7MjgvMjhweDszNi8zNnB4OzQ4LzQ4cHgnXG59O1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yTGFuZ3NNYXAgPSB7XG5cdCdhcl9zYSc6ICdhci1zYScsXG5cdCdiZ19iZyc6ICdiZycsXG5cdCdjc19DWic6ICdjcycsXG5cdCdkZV9kZSc6ICdkZScsXG5cdCdlbF9ncic6ICdlbCcsXG5cdCdlc19lcyc6ICdlcycsXG5cdCdldF9lZSc6ICdldCcsXG5cdCdmcl9mcic6ICdmcicsXG5cdCdodV9odSc6ICdodScsXG5cdCdpc19pcyc6ICdpcycsXG5cdCdpdF9pdCc6ICdpdCcsXG5cdCdqYV9qcCc6ICdqYScsXG5cdCdrb19rcic6ICdrbycsXG5cdCdsdF9sdCc6ICdsdCcsXG5cdCdsdl9sdic6ICdsdicsXG5cdCdmYV9pcic6ICdmYScsXG5cdCduYl9ubyc6ICduYicsXG5cdCdubF9ubCc6ICdubCcsXG5cdCdwbF9wbCc6ICdwbCcsXG5cdCdwdF9icic6ICdwdC1icicsXG5cdCdwdF9wdCc6ICdwdCcsXG5cdCdyb19ybyc6ICdybycsXG5cdCdydV9ydSc6ICdydScsXG5cdCdza19zayc6ICdzaycsXG5cdCdzbF9zaSc6ICdzbCcsXG5cdCdzdl9zZSc6ICdzdicsXG5cdCd0cl90cic6ICd0cicsXG5cdCd1a191YSc6ICd1aycsXG5cdCd6aF9jbic6ICd6aC1jbicsXG5cdCd6aF90dyc6ICd6aCdcbn07XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmxldCBiQWxsb3dQZGZQcmV2aWV3ID0gIWJNb2JpbGVEZXZpY2U7XG5cbmlmIChiQWxsb3dQZGZQcmV2aWV3ICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMpIHtcblx0YkFsbG93UGRmUHJldmlldyA9ICEhXy5maW5kKHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzLCAodHlwZSkgPT4gdHlwZSAmJiAnYXBwbGljYXRpb24vcGRmJyA9PT0gdHlwZS50eXBlKTtcblxuXHRpZiAoIWJBbGxvd1BkZlByZXZpZXcpIHtcblx0XHRiQWxsb3dQZGZQcmV2aWV3ID0gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlc1snYXBwbGljYXRpb24vcGRmJ107XG5cdH1cbn1cblxuZXhwb3J0IHsgYkFsbG93UGRmUHJldmlldyB9O1xuXG5leHBvcnQgY29uc3QgVklFV19NT0RFTFMgPSB7XG5cdHNldHRpbmdzOiBbXSxcblx0J3NldHRpbmdzLXJlbW92ZWQnOiBbXSxcblx0J3NldHRpbmdzLWRpc2FibGVkJzogW11cbn07XG5cbmV4cG9ydCBjb25zdCBtb3ZlQWN0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5leHBvcnQgY29uc3QgbGVmdFBhbmVsRGlzYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxUeXBlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5leHBvcnQgY29uc3QgbGVmdFBhbmVsV2lkdGggPSBrby5vYnNlcnZhYmxlKDApO1xuXG5sZWZ0UGFuZWxEaXNhYmxlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBtb3ZlQWN0aW9uKCkpIHtcblx0XHRtb3ZlQWN0aW9uKGZhbHNlKTtcblx0fVxufSk7XG5cbm1vdmVBY3Rpb24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgJiYgbGVmdFBhbmVsRGlzYWJsZWQoKSkge1xuXHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0fVxufSk7XG5cbi8vIHBvcHVwc1xuZXhwb3J0IGNvbnN0IHBvcHVwVmlzaWJpbGl0eU5hbWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuZXhwb3J0IGNvbnN0IHBvcHVwVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IDAgPCBwb3B1cFZpc2liaWxpdHlOYW1lcygpLmxlbmd0aCk7XG5cbnBvcHVwVmlzaWJpbGl0eS5zdWJzY3JpYmUoKGJWYWx1ZSkgPT4ge1xuXHQkaHRtbC50b2dnbGVDbGFzcygncmwtbW9kYWwnLCBiVmFsdWUpO1xufSk7XG5cbi8vIGtleXNcbmV4cG9ydCBjb25zdCBrZXlTY29wZVJlYWwgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5leHBvcnQgY29uc3Qga2V5U2NvcGVGYWtlID0ga28ub2JzZXJ2YWJsZShLZXlTdGF0ZS5BbGwpO1xuXG5leHBvcnQgY29uc3Qga2V5U2NvcGUgPSBrby5jb21wdXRlZCh7XG5cdHJlYWQ6ICgpID0+IGtleVNjb3BlRmFrZSgpLFxuXHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0aWYgKEtleVN0YXRlLk1lbnUgIT09IHZhbHVlKSB7XG5cdFx0XHRpZiAoS2V5U3RhdGUuQ29tcG9zZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKCkgPT4gdXNlS2V5Ym9hcmRTaG9ydGN1dHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlc3RvcmVLZXlGaWx0ZXJcblx0XHRcdFx0a2V5LmZpbHRlciA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmICh1c2VLZXlib2FyZFNob3J0Y3V0cygpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBlbCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50LFxuXHRcdFx0XHRcdFx0XHR0YWdOYW1lID0gZWwgPyBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJztcblxuXHRcdFx0XHRcdFx0cmV0dXJuICEoXG5cdFx0XHRcdFx0XHRcdCdJTlBVVCcgPT09IHRhZ05hbWUgfHxcblx0XHRcdFx0XHRcdFx0J1NFTEVDVCcgPT09IHRhZ05hbWUgfHxcblx0XHRcdFx0XHRcdFx0J1RFWFRBUkVBJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQoZWwgJiYgJ0RJVicgPT09IHRhZ05hbWUgJiYgKCdlZGl0b3JIdG1sQXJlYScgPT09IGVsLmNsYXNzTmFtZSB8fCAndHJ1ZScgPT09ICcnICsgZWwuY29udGVudEVkaXRhYmxlKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRrZXlTY29wZUZha2UodmFsdWUpO1xuXHRcdFx0aWYgKGRyb3Bkb3duVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHZhbHVlID0gS2V5U3RhdGUuTWVudTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRrZXlTY29wZVJlYWwodmFsdWUpO1xuXHR9XG59KTtcblxua2V5U2NvcGVSZWFsLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0Ly9cdHdpbmRvdy5jb25zb2xlLmxvZygna2V5U2NvcGU9JyArIHNWYWx1ZSk7IC8vIERFQlVHXG5cdGtleS5zZXRTY29wZSh2YWx1ZSk7XG59KTtcblxuZHJvcGRvd25WaXNpYmlsaXR5LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlKSB7XG5cdFx0a2V5U2NvcGUoS2V5U3RhdGUuTWVudSk7XG5cdH0gZWxzZSBpZiAoS2V5U3RhdGUuTWVudSA9PT0ga2V5LmdldFNjb3BlKCkpIHtcblx0XHRrZXlTY29wZShrZXlTY29wZUZha2UoKSk7XG5cdH1cbn0pO1xuXG4vKipcbiAqIEB0eXBlIHsqfVxuICovXG5leHBvcnQgY29uc3QgZGF0YSA9IHtcblx0X19BUFBfXzogbnVsbCxcblx0aUFqYXhFcnJvckNvdW50OiAwLFxuXHRpVG9rZW5FcnJvckNvdW50OiAwLFxuXHRhQm9vdHN0cmFwRHJvcGRvd25zOiBbXSxcblx0aU1lc3NhZ2VCb2R5Q2FjaGVDb3VudDogMCxcblx0YlVubG9hZDogZmFsc2Vcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBoYXNoZXIgZnJvbSAnaGFzaGVyJztcbmltcG9ydCBjcm9zc3JvYWRzIGZyb20gJ2Nyb3Nzcm9hZHMnO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcnVuSG9vayB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7ICRodG1sLCBWSUVXX01PREVMUywgcG9wdXBWaXNpYmlsaXR5TmFtZXMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IGlzQXJyYXksIGlzVW5kLCBwU3RyaW5nLCBsb2csIGlzRnVuYywgY3JlYXRlQ29tbWFuZExlZ2FjeSwgZGVsZWdhdGVSdW4sIGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBjdXJyZW50U2NyZWVuID0gbnVsbCxcblx0ZGVmYXVsdFNjcmVlbk5hbWUgPSAnJztcblxuY29uc3QgU0NSRUVOUyA9IHt9O1xuXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG5cdFBvcHVwOiAnUG9wdXBzJyxcblx0TGVmdDogJ0xlZnQnLFxuXHRSaWdodDogJ1JpZ2h0Jyxcblx0Q2VudGVyOiAnQ2VudGVyJ1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGVMb2FkaW5nKCkge1xuXHQkKCcjcmwtY29udGVudCcpLmFkZENsYXNzKCdybC1jb250ZW50LXNob3cnKTtcblx0JCgnI3JsLWxvYWRpbmcnKVxuXHRcdC5oaWRlKClcblx0XHQucmVtb3ZlKCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkV4ZWN1dGVcbiAqIEBwYXJhbSB7KEZ1bmN0aW9ufGJvb2xlYW58bnVsbCk9fSBmQ2FuRXhlY3V0ZSA9IHRydWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmQoZkV4ZWN1dGUsIGZDYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gY3JlYXRlQ29tbWFuZExlZ2FjeShudWxsLCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0RlZmF1bHQgPSBmYWxzZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZSwgaXNEZWZhdWx0ID0gZmFsc2UpIHtcblx0U2V0dGluZ3NWaWV3TW9kZWxDbGFzcy5fX3JsU2V0dGluZ3NEYXRhID0ge1xuXHRcdExhYmVsOiBsYWJlbE5hbWUsXG5cdFx0VGVtcGxhdGU6IHRlbXBsYXRlLFxuXHRcdFJvdXRlOiByb3V0ZSxcblx0XHRJc0RlZmF1bHQ6ICEhaXNEZWZhdWx0XG5cdH07XG5cblx0VklFV19NT0RFTFMuc2V0dGluZ3MucHVzaChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpIHtcblx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpIHtcblx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10ucHVzaChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlT2ZmKCkge1xuXHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlT24oKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IHRydWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEByZXR1cm5zIHs/T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NyZWVuKHNjcmVlbk5hbWUpIHtcblx0cmV0dXJuICcnICE9PSBzY3JlZW5OYW1lICYmICFpc1VuZChTQ1JFRU5TW3NjcmVlbk5hbWVdKSA/IFNDUkVFTlNbc2NyZWVuTmFtZV0gOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7RnVuY3Rpb258bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcmVlblBvcHVwKFBvcHVWaWV3TW9kZWxDbGFzcykge1xuXHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0aWYgKFBvcHVWaWV3TW9kZWxDbGFzcykge1xuXHRcdHJlc3VsdCA9IFBvcHVWaWV3TW9kZWxDbGFzcztcblx0XHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQpIHtcblx0XHRcdHJlc3VsdCA9IFBvcHVWaWV3TW9kZWxDbGFzcy5kZWZhdWx0O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb0hpZGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZVNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9IaWRlKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9IaWRlKTtcblx0aWYgKE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSAmJiBNb2RhbFZpZXcuX19kb20pIHtcblx0XHRNb2RhbFZpZXcuX192bS5tb2RhbFZpc2liaWxpdHkoZmFsc2UpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHttaXhlZD19IHBhcmFtcyA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZtUnVuSG9vayhob29rTmFtZSwgVmlld01vZGVsQ2xhc3MsIHBhcmFtcyA9IG51bGwpIHtcblx0Xy5lYWNoKFZpZXdNb2RlbENsYXNzLl9fbmFtZXMsIChuYW1lKSA9PiB7XG5cdFx0cnVuSG9vayhob29rTmFtZSwgW25hbWUsIFZpZXdNb2RlbENsYXNzLl9fdm0sIHBhcmFtc10pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3Q9fSB2bVNjcmVlblxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZpZXdNb2RlbChWaWV3TW9kZWxDbGFzcywgdm1TY3JlZW4pIHtcblx0aWYgKFZpZXdNb2RlbENsYXNzICYmICFWaWV3TW9kZWxDbGFzcy5fX2J1aWxkZWQpIHtcblx0XHRsZXQgdm1Eb20gPSBudWxsO1xuXHRcdGNvbnN0IHZtID0gbmV3IFZpZXdNb2RlbENsYXNzKHZtU2NyZWVuKSxcblx0XHRcdHBvc2l0aW9uID0gVmlld01vZGVsQ2xhc3MuX190eXBlIHx8ICcnLFxuXHRcdFx0dm1QbGFjZSA9IHBvc2l0aW9uID8gJCgnI3JsLWNvbnRlbnQgI3JsLScgKyBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpKSA6IG51bGw7XG5cblx0XHRWaWV3TW9kZWxDbGFzcy5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gPSB2bTtcblxuXHRcdHZtLm9uU2hvd1RyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR2bS5vbkhpZGVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR2bS52aWV3TW9kZWxOYW1lID0gVmlld01vZGVsQ2xhc3MuX19uYW1lO1xuXHRcdHZtLnZpZXdNb2RlbE5hbWVzID0gVmlld01vZGVsQ2xhc3MuX19uYW1lcztcblx0XHR2bS52aWV3TW9kZWxUZW1wbGF0ZUlEID0gVmlld01vZGVsQ2xhc3MuX190ZW1wbGF0ZUlEO1xuXHRcdHZtLnZpZXdNb2RlbFBvc2l0aW9uID0gVmlld01vZGVsQ2xhc3MuX190eXBlO1xuXG5cdFx0aWYgKHZtUGxhY2UgJiYgMSA9PT0gdm1QbGFjZS5sZW5ndGgpIHtcblx0XHRcdHZtRG9tID0gJCgnPGRpdj48L2Rpdj4nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXZpZXctbW9kZWwnKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ1JMLScgKyB2bS52aWV3TW9kZWxUZW1wbGF0ZUlEKVxuXHRcdFx0XHQuaGlkZSgpO1xuXHRcdFx0dm1Eb20uYXBwZW5kVG8odm1QbGFjZSk7XG5cblx0XHRcdHZtLnZpZXdNb2RlbERvbSA9IHZtRG9tO1xuXHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gPSB2bURvbTtcblxuXHRcdFx0aWYgKFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5jYW5jZWxDb21tYW5kID0gdm0uY2xvc2VDb21tYW5kID0gY3JlYXRlQ29tbWFuZCgoKSA9PiB7XG5cdFx0XHRcdFx0aGlkZVNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dm0ubW9kYWxWaXNpYmlsaXR5LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5zaG93KCk7XG5cdFx0XHRcdFx0XHR2bS5zdG9yZUFuZFNldEtleVNjb3BlKCk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnB1c2godm0udmlld01vZGVsTmFtZSk7XG5cdFx0XHRcdFx0XHR2bS52aWV3TW9kZWxEb20uY3NzKCd6LWluZGV4JywgMzAwMCArIHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoICsgMTApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vblNob3dUcmlnZ2VyKCF2bS5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCA1MDApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvbkhpZGVXaXRoRGVsYXknLCBbXSwgNTAwKTtcblxuXHRcdFx0XHRcdFx0aWYgKHZtLm9uSGlkZVRyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0dm0ub25IaWRlVHJpZ2dlcighdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dm0ucmVzdG9yZUtleVNjb3BlKCk7XG5cblx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1oaWRlJywgVmlld01vZGVsQ2xhc3MpO1xuXG5cdFx0XHRcdFx0XHRwb3B1cFZpc2liaWxpdHlOYW1lcy5yZW1vdmUodm0udmlld01vZGVsTmFtZSk7XG5cdFx0XHRcdFx0XHR2bS52aWV3TW9kZWxEb20uY3NzKCd6LWluZGV4JywgMjAwMCk7XG5cblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdm0udmlld01vZGVsRG9tLmhpZGUoKSwgMzAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcHJlLWJ1aWxkJywgVmlld01vZGVsQ2xhc3MsIHZtRG9tKTtcblxuXHRcdFx0a28uYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlKFxuXHRcdFx0XHR2bURvbVswXSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiAoKSA9PiAoeyBuYW1lOiB2bS52aWV3TW9kZWxUZW1wbGF0ZUlEIH0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHZtXG5cdFx0XHQpO1xuXG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uQnVpbGQnLCBbdm1Eb21dKTtcblx0XHRcdGlmICh2bSAmJiBWaWV3VHlwZS5Qb3B1cCA9PT0gcG9zaXRpb24pIHtcblx0XHRcdFx0dm0ucmVnaXN0ZXJQb3B1cEtleURvd24oKTtcblx0XHRcdH1cblxuXHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLXBvc3QtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHZpZXcgbW9kZWwgcG9zaXRpb246ICcgKyBwb3NpdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFZpZXdNb2RlbENsYXNzID8gVmlld01vZGVsQ2xhc3MuX192bSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvd1NjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93LCBwYXJhbXMgPSBbXSkge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbkJlZm9yZVNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHRNb2RhbFZpZXcuX192bS5tb2RhbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKE1vZGFsVmlldy5fX3ZtLCAnb25TaG93JywgcGFyYW1zIHx8IFtdKTtcblxuXHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLXNob3cnLCBNb2RhbFZpZXcsIHBhcmFtcyB8fCBbXSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FybVVwU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpO1xuXHRpZiAoTW9kYWxWaWV3KSB7XG5cdFx0YnVpbGRWaWV3TW9kZWwoTW9kYWxWaWV3KTtcblxuXHRcdGlmIChNb2RhbFZpZXcuX192bSAmJiBNb2RhbFZpZXcuX19kb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKE1vZGFsVmlldy5fX3ZtLCAnb25XYXJtVXAnKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvcHVwVmlzaWJsZShWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdHJldHVybiBNb2RhbFZpZXcgJiYgTW9kYWxWaWV3Ll9fdm0gPyBNb2RhbFZpZXcuX192bS5tb2RhbFZpc2liaWxpdHkoKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW5OYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViUGFydFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW5PblJvdXRlKHNjcmVlbk5hbWUsIHN1YlBhcnQpIHtcblx0bGV0IHZtU2NyZWVuID0gbnVsbCxcblx0XHRpc1NhbWVTY3JlZW4gPSBmYWxzZSxcblx0XHRjcm9zcyA9IG51bGw7XG5cblx0aWYgKCcnID09PSBwU3RyaW5nKHNjcmVlbk5hbWUpKSB7XG5cdFx0c2NyZWVuTmFtZSA9IGRlZmF1bHRTY3JlZW5OYW1lO1xuXHR9XG5cblx0aWYgKCcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0dm1TY3JlZW4gPSBzY3JlZW4oc2NyZWVuTmFtZSk7XG5cdFx0aWYgKCF2bVNjcmVlbikge1xuXHRcdFx0dm1TY3JlZW4gPSBzY3JlZW4oZGVmYXVsdFNjcmVlbk5hbWUpO1xuXHRcdFx0aWYgKHZtU2NyZWVuKSB7XG5cdFx0XHRcdHN1YlBhcnQgPSBzY3JlZW5OYW1lICsgJy8nICsgc3ViUGFydDtcblx0XHRcdFx0c2NyZWVuTmFtZSA9IGRlZmF1bHRTY3JlZW5OYW1lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh2bVNjcmVlbiAmJiB2bVNjcmVlbi5fX3N0YXJ0ZWQpIHtcblx0XHRcdGlzU2FtZVNjcmVlbiA9IGN1cnJlbnRTY3JlZW4gJiYgdm1TY3JlZW4gPT09IGN1cnJlbnRTY3JlZW47XG5cblx0XHRcdGlmICghdm1TY3JlZW4uX19idWlsZGVkKSB7XG5cdFx0XHRcdHZtU2NyZWVuLl9fYnVpbGRlZCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheSh2bVNjcmVlbi52aWV3TW9kZWxzKCkpKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKHZtU2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRidWlsZFZpZXdNb2RlbChWaWV3TW9kZWxDbGFzcywgdm1TY3JlZW4pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZWdhdGVSdW4odm1TY3JlZW4sICdvbkJ1aWxkJyk7XG5cdFx0XHR9XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHQvLyBoaWRlIHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKGN1cnJlbnRTY3JlZW4sICdvbkhpZGVXaXRoRGVsYXknLCBbXSwgNTAwKTtcblxuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcighY3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCkpKSB7XG5cdFx0XHRcdFx0XHRfLmVhY2goY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCksIChWaWV3TW9kZWxDbGFzcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld1R5cGUuUG9wdXAgIT09IFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsUG9zaXRpb25cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20uaGlkZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsVmlzaWJpbGl0eShmYWxzZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjdXJyZW50U2NyZWVuID0gdm1TY3JlZW47XG5cblx0XHRcdFx0Ly8gc2hvdyBzY3JlZW5cblx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4gJiYgIWlzU2FtZVNjcmVlbikge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKGN1cnJlbnRTY3JlZW4sICdvblNob3cnKTtcblx0XHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIoIWN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcigpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRydW5Ib29rKCdzY3JlZW4tb24tc2hvdycsIFtjdXJyZW50U2NyZWVuLnNjcmVlbk5hbWUoKSwgY3VycmVudFNjcmVlbl0pO1xuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25CZWZvcmVTaG93Jyk7XG5cblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5zaG93KCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KHRydWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcighVmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvblNob3dXaXRoRGVsYXknLCBbXSwgMjAwKTtcblx0XHRcdFx0XHRcdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIFZpZXdNb2RlbENsYXNzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0Y3Jvc3MgPSB2bVNjcmVlbiAmJiB2bVNjcmVlbi5fX2Nyb3NzID8gdm1TY3JlZW4uX19jcm9zcygpIDogbnVsbDtcblx0XHRcdFx0aWYgKGNyb3NzKSB7XG5cdFx0XHRcdFx0Y3Jvc3MucGFyc2Uoc3ViUGFydCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IHNjcmVlbnNDbGFzc2VzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U2NyZWVucyhzY3JlZW5zQ2xhc3Nlcykge1xuXHRfLmVhY2goc2NyZWVuc0NsYXNzZXMsIChDU2NyZWVuKSA9PiB7XG5cdFx0aWYgKENTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHZtU2NyZWVuID0gbmV3IENTY3JlZW4oKSxcblx0XHRcdFx0c2NyZWVuTmFtZSA9IHZtU2NyZWVuID8gdm1TY3JlZW4uc2NyZWVuTmFtZSgpIDogJyc7XG5cblx0XHRcdGlmICh2bVNjcmVlbiAmJiAnJyAhPT0gc2NyZWVuTmFtZSkge1xuXHRcdFx0XHRpZiAoJycgPT09IGRlZmF1bHRTY3JlZW5OYW1lKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFNjcmVlbk5hbWUgPSBzY3JlZW5OYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0U0NSRUVOU1tzY3JlZW5OYW1lXSA9IHZtU2NyZWVuO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Xy5lYWNoKFNDUkVFTlMsICh2bVNjcmVlbikgPT4ge1xuXHRcdGlmICh2bVNjcmVlbiAmJiAhdm1TY3JlZW4uX19zdGFydGVkICYmIHZtU2NyZWVuLl9fc3RhcnQpIHtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnRlZCA9IHRydWU7XG5cdFx0XHR2bVNjcmVlbi5fX3N0YXJ0KCk7XG5cblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wcmUtc3RhcnQnLCBbdm1TY3JlZW4uc2NyZWVuTmFtZSgpLCB2bVNjcmVlbl0pO1xuXHRcdFx0ZGVsZWdhdGVSdW4odm1TY3JlZW4sICdvblN0YXJ0Jyk7XG5cdFx0XHRydW5Ib29rKCdzY3JlZW4tcG9zdC1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBjcm9zcyA9IGNyb3Nzcm9hZHMuY3JlYXRlKCk7XG5cdGNyb3NzLmFkZFJvdXRlKC9eKFthLXpBLVowLTktXSopXFwvPyguKikkLywgc2NyZWVuT25Sb3V0ZSk7XG5cblx0aGFzaGVyLmluaXRpYWxpemVkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuY2hhbmdlZC5hZGQoY3Jvc3MucGFyc2UsIGNyb3NzKTtcblx0aGFzaGVyLmluaXQoKTtcblxuXHRfLmRlbGF5KCgpID0+ICRodG1sLnJlbW92ZUNsYXNzKCdybC1zdGFydGVkLXRyaWdnZXInKS5hZGRDbGFzcygncmwtc3RhcnRlZCcpLCAxMDApO1xuXHRfLmRlbGF5KCgpID0+ICRodG1sLmFkZENsYXNzKCdybC1zdGFydGVkLWRlbGF5JyksIDIwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNIYXNoXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBzaWxlbmNlID0gZmFsc2VcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlcGxhY2UgPSBmYWxzZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRIYXNoKGhhc2gsIHNpbGVuY2UgPSBmYWxzZSwgcmVwbGFjZSA9IGZhbHNlKSB7XG5cdGhhc2ggPSAnIycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXHRoYXNoID0gJy8nID09PSBoYXNoLnN1YnN0cigwLCAxKSA/IGhhc2guc3Vic3RyKDEpIDogaGFzaDtcblxuXHRjb25zdCBjbWQgPSByZXBsYWNlID8gJ3JlcGxhY2VIYXNoJyA6ICdzZXRIYXNoJztcblxuXHRpZiAoc2lsZW5jZSkge1xuXHRcdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0XHRoYXNoZXJbY21kXShoYXNoKTtcblx0XHRoYXNoZXIuc2V0SGFzaChoYXNoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gKHRhcmdldCkgPT4ge1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdGlmIChpc0FycmF5KG5hbWUpKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBuYW1lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhcmdldC5fX25hbWVzID0gW25hbWVdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0Ll9fbmFtZSA9IHRhcmdldC5fX25hbWVzWzBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZSkge1xuXHRcdFx0XHR0YXJnZXQuX190eXBlID0gdHlwZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRlbXBsYXRlSUQpIHtcblx0XHRcdFx0dGFyZ2V0Ll9fdGVtcGxhdGVJRCA9IHRlbXBsYXRlSUQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcG9wdXBEZWNvcmF0b3IoeyBuYW1lLCB0ZW1wbGF0ZUlEIH0pIHtcblx0cmV0dXJuIHZpZXdEZWNvcmF0b3IoeyBuYW1lLCB0eXBlOiBWaWV3VHlwZS5Qb3B1cCwgdGVtcGxhdGVJRCB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYW5FeGVjdXRlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmREZWNvcmF0b3IoY2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0cmV0dXJuICh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikgPT4ge1xuXHRcdGlmICgha2V5IHx8ICFrZXkubWF0Y2goL0NvbW1hbmQkLykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgbmFtZSBcIiR7a2V5fVwiIHNob3VsZCBlbmQgd2l0aCBDb21tYW5kIHN1ZmZpeGApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZSB8fCBkZXNjcmlwdG9yLmluaXRpYWxpemVyKCksXG5cdFx0XHRub3JtQ2FuRXhlY3V0ZSA9IGlzRnVuYyhjYW5FeGVjdXRlKSA/IGNhbkV4ZWN1dGUgOiAoKSA9PiAhIWNhbkV4ZWN1dGU7XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24oLi4uYXJncykge1xuXHRcdFx0aWYgKG5vcm1DYW5FeGVjdXRlLmNhbGwodGhpcywgdGhpcykpIHtcblx0XHRcdFx0dmFsdWUuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0ZGVzY3JpcHRvci52YWx1ZS5fX3JlYWxDYW5FeGVjdXRlID0gbm9ybUNhbkV4ZWN1dGU7XG5cdFx0ZGVzY3JpcHRvci52YWx1ZS5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIGRlc2NyaXB0b3I7XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHttaWNlZH0gJGl0ZW1zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNldHRpbmdzTWVudUtleXNIYW5kbGVyKCRpdGVtcykge1xuXHRyZXR1cm4gXy50aHJvdHRsZSgoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRjb25zdCB1cCA9IGhhbmRsZXIgJiYgJ3VwJyA9PT0gaGFuZGxlci5zaG9ydGN1dDtcblxuXHRcdGlmIChldmVudCAmJiAkaXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRsZXQgaW5kZXggPSAkaXRlbXMuaW5kZXgoJGl0ZW1zLmZpbHRlcignLnNlbGVjdGVkJykpO1xuXHRcdFx0aWYgKHVwICYmIDAgPCBpbmRleCkge1xuXHRcdFx0XHRpbmRleCAtPSAxO1xuXHRcdFx0fSBlbHNlIGlmICghdXAgJiYgaW5kZXggPCAkaXRlbXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRpbmRleCArPSAxO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCByZXN1bHRIYXNoID0gJGl0ZW1zLmVxKGluZGV4KS5hdHRyKCdocmVmJyk7XG5cdFx0XHRpZiAocmVzdWx0SGFzaCkge1xuXHRcdFx0XHRzZXRIYXNoKHJlc3VsdEhhc2gsIGZhbHNlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIE1hZ2ljcy5UaW1lMjAwbXMpO1xufVxuXG5leHBvcnQge1xuXHRjb21tYW5kRGVjb3JhdG9yLFxuXHRjb21tYW5kRGVjb3JhdG9yIGFzIGNvbW1hbmQsXG5cdHZpZXdEZWNvcmF0b3IsXG5cdHZpZXdEZWNvcmF0b3IgYXMgdmlldyxcblx0dmlld0RlY29yYXRvciBhcyB2aWV3TW9kZWwsXG5cdHBvcHVwRGVjb3JhdG9yLFxuXHRwb3B1cERlY29yYXRvciBhcyBwb3B1cCxcblx0c2V0dGluZ3NNZW51S2V5c0hhbmRsZXJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5qUXVlcnk7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb24sIFVwbG9hZEVycm9yQ29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwSW50LCBpc1VuZCwgaXNOdWxsLCBoYXMsIG1pY3JvdGltZSwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyAkaHRtbCwgYkFuaW1hdGlvblN1cHBvcnRlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHJlbG9hZCBhcyBtb21lbnRvclJlbG9hZCB9IGZyb20gJ0NvbW1vbi9Nb21lbnRvcic7XG5pbXBvcnQgeyBsYW5nTGluayB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmxldCBJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5jb25zdCBJMThOX05PVElGSUNBVElPTl9EQVRBID0ge307XG5jb25zdCBJMThOX05PVElGSUNBVElPTl9NQVAgPSBbXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZFRva2VuLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1RPS0VOJ10sXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZFRva2VuLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1RPS0VOJ10sXG5cdFtOb3RpZmljYXRpb24uQXV0aEVycm9yLCAnTk9USUZJQ0FUSU9OUy9BVVRIX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjZXNzRXJyb3IsICdOT1RJRklDQVRJT05TL0FDQ0VTU19FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkNvbm5lY3Rpb25FcnJvciwgJ05PVElGSUNBVElPTlMvQ09OTkVDVElPTl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkNhcHRjaGFFcnJvciwgJ05PVElGSUNBVElPTlMvQ0FQVENIQV9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfRkFDRUJPT0tfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfVFdJVFRFUl9MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX0dPT0dMRV9MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLkRvbWFpbk5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0RPTUFJTl9OT1RfQUxMT1dFRCddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX05PVF9BTExPV0VEJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50VHdvRmFjdG9yQXV0aFJlcXVpcmVkLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX1RXT19GQUNUT1JfQVVUSF9SRVFVSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Db3VsZE5vdFNhdmVOZXdQYXNzd29yZCwgJ05PVElGSUNBVElPTlMvQ09VTERfTk9UX1NBVkVfTkVXX1BBU1NXT1JEJ10sXG5cdFtOb3RpZmljYXRpb24uQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9DVVJSRU5UX1BBU1NXT1JEX0lOQ09SUkVDVCddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkU2hvcnQsICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9TSE9SVCddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkV2VhaywgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1dFQUsnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZEZvcmJpZGRlbiwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX0ZPUkJJRERFTlQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvbnRhY3RzU3luY0Vycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05UQUNUU19TWU5DX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50R2V0TWVzc2FnZUxpc3QsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0VfTElTVCddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50TW92ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudENvcHlNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX01PVkVfTUVTU0FHRSddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRTZW5kTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9TRU5EX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUmVjaXBpZW50cywgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9SRUNJUElFTlRTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZUZpbHRlcnMsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9GSUxURVJTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldEZpbHRlcnMsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5GaWx0ZXJzQXJlTm90Q29ycmVjdCwgJ05PVElGSUNBVElPTlMvRklMVEVSU19BUkVfTk9UX0NPUlJFQ1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRDcmVhdGVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfQ1JFQVRFX0ZPTERFUiddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRSZW5hbWVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfUkVOQU1FX0ZPTERFUiddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnREZWxldGVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX0ZPTERFUiddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnREZWxldGVOb25FbXB0eUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTk9OX0VNUFRZX0ZPTERFUiddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRTdWJzY3JpYmVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfU1VCU0NSSUJFX0ZPTERFUiddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRVbnN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9VTlNVQlNDUklCRV9GT0xERVInXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlU2V0dGluZ3MsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9TRVRUSU5HUyddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlUGx1Z2luU2V0dGluZ3MsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9QTFVHSU5fU0VUVElOR1MnXSxcblxuXHRbTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMsICdOT1RJRklDQVRJT05TL0RPTUFJTl9BTFJFQURZX0VYSVNUUyddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudEluc3RhbGxQYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0lOU1RBTExfUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnREZWxldGVQYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZFBsdWdpblBhY2thZ2UsICdOT1RJRklDQVRJT05TL0lOVkFMSURfUExVR0lOX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5VbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UsICdOT1RJRklDQVRJT05TL1VOU1VQUE9SVEVEX1BMVUdJTl9QQUNLQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfU0VSVkVSX0lTX1VOQVZBSUxBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nRXhwaXJlZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0VYUElSRUQnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdCYW5uZWQsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19CQU5ORUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkRlbW9TZW5kTWVzc2FnZUVycm9yLCAnTk9USUZJQ0FUSU9OUy9ERU1PX1NFTkRfTUVTU0FHRV9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkRlbW9BY2NvdW50RXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fQUNDT1VOVF9FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudEFscmVhZHlFeGlzdHMsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfQUxSRUFEWV9FWElTVFMnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50RG9lc05vdEV4aXN0LCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX0RPRVNfTk9UX0VYSVNUJ10sXG5cblx0W05vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IsICdOT1RJRklDQVRJT05TL01BSUxfU0VSVkVSX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZElucHV0QXJndW1lbnQsICdOT1RJRklDQVRJT05TL0lOVkFMSURfSU5QVVRfQVJHVU1FTlQnXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uLCAnTk9USUZJQ0FUSU9OUy9VTktOT1dOX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uVW5rbm93bkVycm9yLCAnTk9USUZJQ0FUSU9OUy9VTktOT1dOX0VSUk9SJ11cbl07XG5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtPYmplY3Q9fSB2YWx1ZUxpc3RcbiAqIEBwYXJhbSB7c3RyaW5nPX0gZGVmYXVsVmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuKGtleSwgdmFsdWVMaXN0LCBkZWZhdWxWYWx1ZSkge1xuXHRsZXQgdmFsdWVOYW1lID0gJycsXG5cdFx0cmVzdWx0ID0gSTE4Tl9EQVRBW2tleV07XG5cblx0aWYgKGlzVW5kKHJlc3VsdCkpIHtcblx0XHRyZXN1bHQgPSBpc1VuZChkZWZhdWxWYWx1ZSkgPyBrZXkgOiBkZWZhdWxWYWx1ZTtcblx0fVxuXG5cdGlmICghaXNVbmQodmFsdWVMaXN0KSAmJiAhaXNOdWxsKHZhbHVlTGlzdCkpIHtcblx0XHRmb3IgKHZhbHVlTmFtZSBpbiB2YWx1ZUxpc3QpIHtcblx0XHRcdGlmIChoYXModmFsdWVMaXN0LCB2YWx1ZU5hbWUpKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKCclJyArIHZhbHVlTmFtZSArICclJywgdmFsdWVMaXN0W3ZhbHVlTmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IGkxOG5Ub05vZGUgPSAoZWxlbWVudCkgPT4ge1xuXHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdGtleSA9ICRlbC5kYXRhKCdpMThuJyk7XG5cblx0aWYgKGtleSkge1xuXHRcdGlmICgnWycgPT09IGtleS5zdWJzdHIoMCwgMSkpIHtcblx0XHRcdHN3aXRjaCAoa2V5LnN1YnN0cigwLCA2KSkge1xuXHRcdFx0XHRjYXNlICdbaHRtbF0nOlxuXHRcdFx0XHRcdCRlbC5odG1sKGkxOG4oa2V5LnN1YnN0cig2KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbcGxhY2UnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCdwbGFjZWhvbGRlcicsIGkxOG4oa2V5LnN1YnN0cigxMykpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnW3RpdGxlJzpcblx0XHRcdFx0XHQkZWwuYXR0cigndGl0bGUnLCBpMThuKGtleS5zdWJzdHIoNykpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwudGV4dChpMThuKGtleSkpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGFuaW1hdGUgPSBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaTE4blRvTm9kZXMoZWxlbWVudHMsIGFuaW1hdGUgPSBmYWxzZSkge1xuXHRfLmRlZmVyKCgpID0+IHtcblx0XHQkKCdbZGF0YS1pMThuXScsIGVsZW1lbnRzKS5lYWNoKChpbmRleCwgaXRlbSkgPT4ge1xuXHRcdFx0aTE4blRvTm9kZShpdGVtKTtcblx0XHR9KTtcblxuXHRcdGlmIChhbmltYXRlICYmIGJBbmltYXRpb25TdXBwb3J0ZWQpIHtcblx0XHRcdCQoJy5pMThuLWFuaW1hdGlvbltkYXRhLWkxOG5dJywgZWxlbWVudHMpLmxldHRlcmZ4KHtcblx0XHRcdFx0J2Z4JzogJ2ZhbGwgZmFkZScsXG5cdFx0XHRcdCdiYWNrd2FyZHMnOiBmYWxzZSxcblx0XHRcdFx0J3RpbWluZyc6IDUwLFxuXHRcdFx0XHQnZnhfZHVyYXRpb24nOiAnNTBtcycsXG5cdFx0XHRcdCdsZXR0ZXJfZW5kJzogJ3Jlc3RvcmUnLFxuXHRcdFx0XHQnZWxlbWVudF9lbmQnOiAncmVzdG9yZSdcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IHJlbG9hZERhdGEgPSAoKSA9PiB7XG5cdGlmICh3aW5kb3cucmFpbmxvb3BJMThOKSB7XG5cdFx0STE4Tl9EQVRBID0gd2luZG93LnJhaW5sb29wSTE4TiB8fCB7fTtcblxuXHRcdGkxOG5Ub05vZGVzKHdpbmRvdy5kb2N1bWVudCwgdHJ1ZSk7XG5cblx0XHRtb21lbnRvclJlbG9hZCgpO1xuXHRcdHRyaWdnZXIoIXRyaWdnZXIoKSk7XG5cdH1cblxuXHR3aW5kb3cucmFpbmxvb3BJMThOID0gbnVsbDtcbn07XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UoKSB7XG5cdEkxOE5fTk9USUZJQ0FUSU9OX01BUC5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0STE4Tl9OT1RJRklDQVRJT05fREFUQVtpdGVtWzBdXSA9IGkxOG4oaXRlbVsxXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0YXJ0Q2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBsYW5nQ2FsbGJhY2sgPSBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0T25TdGFydE9yTGFuZ0NoYW5nZShzdGFydENhbGxiYWNrLCBsYW5nQ2FsbGJhY2sgPSBudWxsKSB7XG5cdGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0c3RhcnRDYWxsYmFjaygpO1xuXHR9XG5cblx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdHRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0XHRcdHN0YXJ0Q2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHRcdGlmIChsYW5nQ2FsbGJhY2spIHtcblx0XHRcdFx0bGFuZ0NhbGxiYWNrKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdHRyaWdnZXIuc3Vic2NyaWJlKHN0YXJ0Q2FsbGJhY2spO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7Kj19IG1lc3NhZ2UgPSAnJ1xuICogQHBhcmFtIHsqPX0gZGVmQ29kZSA9IG51bGxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RpZmljYXRpb24oY29kZSwgbWVzc2FnZSA9ICcnLCBkZWZDb2RlID0gbnVsbCkge1xuXHRjb2RlID0gd2luZG93LnBhcnNlSW50KGNvZGUsIDEwKSB8fCAwO1xuXHRpZiAoTm90aWZpY2F0aW9uLkNsaWVudFZpZXdFcnJvciA9PT0gY29kZSAmJiBtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH1cblxuXHRkZWZDb2RlID0gZGVmQ29kZSA/IHdpbmRvdy5wYXJzZUludChkZWZDb2RlLCAxMCkgfHwgMCA6IDA7XG5cdHJldHVybiBpc1VuZChJMThOX05PVElGSUNBVElPTl9EQVRBW2NvZGVdKVxuXHRcdD8gZGVmQ29kZSAmJiBpc1VuZChJMThOX05PVElGSUNBVElPTl9EQVRBW2RlZkNvZGVdKVxuXHRcdFx0PyBJMThOX05PVElGSUNBVElPTl9EQVRBW2RlZkNvZGVdXG5cdFx0XHQ6ICcnXG5cdFx0OiBJMThOX05PVElGSUNBVElPTl9EQVRBW2NvZGVdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZVxuICogQHBhcmFtIHtudW1iZXJ9IGRlZkNvZGUgPSBOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvblxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uKSB7XG5cdHJldHVybiByZXNwb25zZSAmJiByZXNwb25zZS5FcnJvckNvZGVcblx0XHQ/IGdldE5vdGlmaWNhdGlvbihwSW50KHJlc3BvbnNlLkVycm9yQ29kZSksIHJlc3BvbnNlLkVycm9yTWVzc2FnZSB8fCAnJylcblx0XHQ6IGdldE5vdGlmaWNhdGlvbihkZWZDb2RlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IGNvZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUoY29kZSkge1xuXHRsZXQgcmVzdWx0ID0gJyc7XG5cdHN3aXRjaCAod2luZG93LnBhcnNlSW50KGNvZGUsIDEwKSB8fCAwKSB7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZUlzVG9vQmlnOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVBhcnRpYWxseVVwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfUEFSVElBTExZX1VQTE9BREVEJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlTm9VcGxvYWRlZDpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9OT19GSUxFX1VQTE9BREVEJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5NaXNzaW5nVGVtcEZvbGRlcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9NSVNTSU5HX1RFTVBfRk9MREVSJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlT25TYXZlaW5nRXJyb3I6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfT05fU0FWSU5HX0ZJTEUnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVUeXBlOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfVFlQRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9VTktOT1dOJyk7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWQoYWRtaW4sIGxhbmd1YWdlKSB7XG5cdGNvbnN0IHN0YXJ0ID0gbWljcm90aW1lKCk7XG5cblx0JGh0bWwuYWRkQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJyk7XG5cblx0cmV0dXJuIG5ldyB3aW5kb3cuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0JC5hamF4KHtcblx0XHRcdHVybDogbGFuZ0xpbmsobGFuZ3VhZ2UsIGFkbWluKSxcblx0XHRcdGRhdGFUeXBlOiAnc2NyaXB0Jyxcblx0XHRcdGNhY2hlOiB0cnVlXG5cdFx0fSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Xy5kZWxheShcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZWxvYWREYXRhKCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGlzUnRsID0gLTEgPCBpbkFycmF5KChsYW5ndWFnZSB8fCAnJykudG9Mb3dlckNhc2UoKSwgWydhcicsICdhcl9zYScsICdoZScsICdoZV9oZScsICd1cicsICd1cl9pciddKTtcblxuXHRcdFx0XHRcdFx0JGh0bWxcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpXG5cdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygncmwtcnRsIHJsLWx0cicpXG5cdFx0XHRcdFx0XHRcdC8vIC5hdHRyKCdkaXInLCBpc1J0bCA/ICdydGwnIDogJ2x0cicpXG5cdFx0XHRcdFx0XHRcdC5hZGRDbGFzcyhpc1J0bCA/ICdybC1ydGwnIDogJ3JsLWx0cicpO1xuXG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQ1MDAgPCBtaWNyb3RpbWUoKSAtIHN0YXJ0ID8gMSA6IDUwMFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJyk7XG5cdFx0XHRcdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xuXHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9KTtcbn1cblxuLy8gaW5pdCBzZWN0aW9uXG4kaHRtbC5hZGRDbGFzcygncmwtJyArICgkaHRtbC5hdHRyKCdkaXInKSB8fCAnbHRyJykpO1xuIiwiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9jcmVhdGVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBGb2xkZXJUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGlzQXJyYXksIGZvbGRlckxpc3RPcHRpb25zQnVpbGRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBnZXRGb2xkZXJJbmJveE5hbWUsIGdldEZvbGRlckZyb21DYWNoZUxpc3QgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgeyBtb21lbnROb3dVbml4IH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcblxuY2xhc3MgRm9sZGVyVXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kaXNwbGF5U3BlY1NldHRpbmcgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXG5cdFx0dGhpcy5zZW50Rm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5kcmFmdEZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3BhbUZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHJhc2hGb2xkZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFyY2hpdmVGb2xkZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubmFtZXNwYWNlID0gJyc7XG5cblx0XHR0aGlzLmZvbGRlckxpc3QgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuZm9sZGVyTGlzdC5vcHRpbWl6ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZvbGRlckxpc3QuZXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZm9sZGVyc0xvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZvbGRlcnNDcmVhdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZm9sZGVyc0RlbGV0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mb2xkZXJzUmVuYW1pbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZm9sZGVyc0luYm94VW5yZWFkQ291bnQgPSBrby5vYnNlcnZhYmxlKDApO1xuXG5cdFx0dGhpcy5jdXJyZW50Rm9sZGVyID0ga28ub2JzZXJ2YWJsZShudWxsKS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdzZWxlY3RlZCddIH0pO1xuXG5cdFx0dGhpcy5zaWV2ZUFsbG93RmlsZWludG9JbmJveCA9ICEhc2V0dGluZ3NHZXQoJ1NpZXZlQWxsb3dGaWxlaW50b0luYm94Jyk7XG5cblx0XHR0aGlzLmNvbXB1dGVycygpO1xuXHRcdHRoaXMuc3Vic2NyaWJlcnMoKTtcblx0fVxuXG5cdGNvbXB1dGVycygpIHtcblx0XHR0aGlzLmRyYWZ0Rm9sZGVyTm90RW5hYmxlZCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gJycgPT09IHRoaXMuZHJhZnRGb2xkZXIoKSB8fCBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSB0aGlzLmRyYWZ0Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5mb2xkZXJzTGlzdFdpdGhTaW5nbGVJbmJveFJvb3RGb2xkZXIgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICFfLmZpbmQodGhpcy5mb2xkZXJMaXN0KCksIChmb2xkZXIpID0+IGZvbGRlciAmJiAhZm9sZGVyLmlzU3lzdGVtRm9sZGVyKCkgJiYgZm9sZGVyLnZpc2libGUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5jdXJyZW50Rm9sZGVyKCkgPyB0aGlzLmN1cnJlbnRGb2xkZXIoKS5mdWxsTmFtZVJhdyA6ICcnKSk7XG5cblx0XHR0aGlzLmN1cnJlbnRGb2xkZXJGdWxsTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+ICh0aGlzLmN1cnJlbnRGb2xkZXIoKSA/IHRoaXMuY3VycmVudEZvbGRlcigpLmZ1bGxOYW1lIDogJycpKTtcblx0XHR0aGlzLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2ggPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5jdXJyZW50Rm9sZGVyKCkgPyB0aGlzLmN1cnJlbnRGb2xkZXIoKS5mdWxsTmFtZUhhc2ggOiAnJykpO1xuXG5cdFx0dGhpcy5mb2xkZXJzQ2hhbmdpbmcgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBsb2FkaW5nID0gdGhpcy5mb2xkZXJzTG9hZGluZygpLFxuXHRcdFx0XHRjcmVhdGluZyA9IHRoaXMuZm9sZGVyc0NyZWF0aW5nKCksXG5cdFx0XHRcdGRlbGV0aW5nID0gdGhpcy5mb2xkZXJzRGVsZXRpbmcoKSxcblx0XHRcdFx0cmVuYW1pbmcgPSB0aGlzLmZvbGRlcnNSZW5hbWluZygpO1xuXG5cdFx0XHRyZXR1cm4gbG9hZGluZyB8fCBjcmVhdGluZyB8fCBkZWxldGluZyB8fCByZW5hbWluZztcblx0XHR9KTtcblxuXHRcdHRoaXMuZm9sZGVyTGlzdFN5c3RlbU5hbWVzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbGlzdCA9IFtnZXRGb2xkZXJJbmJveE5hbWUoKV0sXG5cdFx0XHRcdGZvbGRlcnMgPSB0aGlzLmZvbGRlckxpc3QoKSxcblx0XHRcdFx0c2VudEZvbGRlciA9IHRoaXMuc2VudEZvbGRlcigpLFxuXHRcdFx0XHRkcmFmdEZvbGRlciA9IHRoaXMuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0c3BhbUZvbGRlciA9IHRoaXMuc3BhbUZvbGRlcigpLFxuXHRcdFx0XHR0cmFzaEZvbGRlciA9IHRoaXMudHJhc2hGb2xkZXIoKSxcblx0XHRcdFx0YXJjaGl2ZUZvbGRlciA9IHRoaXMuYXJjaGl2ZUZvbGRlcigpO1xuXG5cdFx0XHRpZiAoaXNBcnJheShmb2xkZXJzKSAmJiAwIDwgZm9sZGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKCcnICE9PSBzZW50Rm9sZGVyICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgIT09IHNlbnRGb2xkZXIpIHtcblx0XHRcdFx0XHRsaXN0LnB1c2goc2VudEZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCcnICE9PSBkcmFmdEZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSBkcmFmdEZvbGRlcikge1xuXHRcdFx0XHRcdGxpc3QucHVzaChkcmFmdEZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCcnICE9PSBzcGFtRm9sZGVyICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgIT09IHNwYW1Gb2xkZXIpIHtcblx0XHRcdFx0XHRsaXN0LnB1c2goc3BhbUZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCcnICE9PSB0cmFzaEZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSB0cmFzaEZvbGRlcikge1xuXHRcdFx0XHRcdGxpc3QucHVzaCh0cmFzaEZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCcnICE9PSBhcmNoaXZlRm9sZGVyICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgIT09IGFyY2hpdmVGb2xkZXIpIHtcblx0XHRcdFx0XHRsaXN0LnB1c2goYXJjaGl2ZUZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZvbGRlckxpc3RTeXN0ZW0gPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5jb21wYWN0KF8ubWFwKHRoaXMuZm9sZGVyTGlzdFN5c3RlbU5hbWVzKCksIChuYW1lKSA9PiBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KG5hbWUpKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5mb2xkZXJNZW51Rm9yTW92ZSA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIoXG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdFN5c3RlbSgpLFxuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3QoKSxcblx0XHRcdFx0W3RoaXMuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCldLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLmxvY2FsTmFtZSgpIDogJycpXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHRoaXMuZm9sZGVyTWVudUZvckZpbHRlcnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3RTeXN0ZW0oKSxcblx0XHRcdFx0dGhpcy5mb2xkZXJMaXN0KCksXG5cdFx0XHRcdFt0aGlzLnNpZXZlQWxsb3dGaWxlaW50b0luYm94ID8gJycgOiAnSU5CT1gnXSxcblx0XHRcdFx0W1snJywgJyddXSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0KGl0ZW0pID0+IChpdGVtID8gaXRlbS5sb2NhbE5hbWUoKSA6ICcnKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHRzdWJzY3JpYmVycygpIHtcblx0XHRjb25zdCBmUmVtb3ZlU3lzdGVtRm9sZGVyVHlwZSA9IChvYnNlcnZhYmxlKSA9PiAoKSA9PiB7XG5cdFx0XHRjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KG9ic2VydmFibGUoKSk7XG5cdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdGZvbGRlci50eXBlKEZvbGRlclR5cGUuVXNlcik7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBmU2V0U3lzdGVtRm9sZGVyVHlwZSA9ICh0eXBlKSA9PiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QodmFsdWUpO1xuXHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRmb2xkZXIudHlwZSh0eXBlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5zZW50Rm9sZGVyLnN1YnNjcmliZShmUmVtb3ZlU3lzdGVtRm9sZGVyVHlwZSh0aGlzLnNlbnRGb2xkZXIpLCB0aGlzLCAnYmVmb3JlQ2hhbmdlJyk7XG5cdFx0dGhpcy5kcmFmdEZvbGRlci5zdWJzY3JpYmUoZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUodGhpcy5kcmFmdEZvbGRlciksIHRoaXMsICdiZWZvcmVDaGFuZ2UnKTtcblx0XHR0aGlzLnNwYW1Gb2xkZXIuc3Vic2NyaWJlKGZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlKHRoaXMuc3BhbUZvbGRlciksIHRoaXMsICdiZWZvcmVDaGFuZ2UnKTtcblx0XHR0aGlzLnRyYXNoRm9sZGVyLnN1YnNjcmliZShmUmVtb3ZlU3lzdGVtRm9sZGVyVHlwZSh0aGlzLnRyYXNoRm9sZGVyKSwgdGhpcywgJ2JlZm9yZUNoYW5nZScpO1xuXHRcdHRoaXMuYXJjaGl2ZUZvbGRlci5zdWJzY3JpYmUoZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUodGhpcy5hcmNoaXZlRm9sZGVyKSwgdGhpcywgJ2JlZm9yZUNoYW5nZScpO1xuXG5cdFx0dGhpcy5zZW50Rm9sZGVyLnN1YnNjcmliZShmU2V0U3lzdGVtRm9sZGVyVHlwZShGb2xkZXJUeXBlLlNlbnRJdGVtcyksIHRoaXMpO1xuXHRcdHRoaXMuZHJhZnRGb2xkZXIuc3Vic2NyaWJlKGZTZXRTeXN0ZW1Gb2xkZXJUeXBlKEZvbGRlclR5cGUuRHJhZnQpLCB0aGlzKTtcblx0XHR0aGlzLnNwYW1Gb2xkZXIuc3Vic2NyaWJlKGZTZXRTeXN0ZW1Gb2xkZXJUeXBlKEZvbGRlclR5cGUuU3BhbSksIHRoaXMpO1xuXHRcdHRoaXMudHJhc2hGb2xkZXIuc3Vic2NyaWJlKGZTZXRTeXN0ZW1Gb2xkZXJUeXBlKEZvbGRlclR5cGUuVHJhc2gpLCB0aGlzKTtcblx0XHR0aGlzLmFyY2hpdmVGb2xkZXIuc3Vic2NyaWJlKGZTZXRTeXN0ZW1Gb2xkZXJUeXBlKEZvbGRlclR5cGUuQXJjaGl2ZSksIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdGdldE5leHRGb2xkZXJOYW1lcygpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXSxcblx0XHRcdGxpbWl0ID0gNSxcblx0XHRcdHV0YyA9IG1vbWVudE5vd1VuaXgoKSxcblx0XHRcdHRpbWVvdXQgPSB1dGMgLSA2MCAqIDUsXG5cdFx0XHR0aW1lb3V0cyA9IFtdLFxuXHRcdFx0aW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCksXG5cdFx0XHRmU2VhcmNoRnVuY3Rpb24gPSAobGlzdCkgPT4ge1xuXHRcdFx0XHRfLmVhY2gobGlzdCwgKGZvbGRlcikgPT4ge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGZvbGRlciAmJlxuXHRcdFx0XHRcdFx0aW5ib3hGb2xkZXJOYW1lICE9PSBmb2xkZXIuZnVsbE5hbWVSYXcgJiZcblx0XHRcdFx0XHRcdGZvbGRlci5zZWxlY3RhYmxlICYmXG5cdFx0XHRcdFx0XHRmb2xkZXIuZXhpc3RlbiAmJlxuXHRcdFx0XHRcdFx0dGltZW91dCA+IGZvbGRlci5pbnRlcnZhbCAmJlxuXHRcdFx0XHRcdFx0KGZvbGRlci5pc1N5c3RlbUZvbGRlcigpIHx8IChmb2xkZXIuc3ViU2NyaWJlZCgpICYmIGZvbGRlci5jaGVja2FibGUoKSkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0aW1lb3V0cy5wdXNoKFtmb2xkZXIuaW50ZXJ2YWwsIGZvbGRlci5mdWxsTmFtZVJhd10pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChmb2xkZXIgJiYgMCA8IGZvbGRlci5zdWJGb2xkZXJzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRmU2VhcmNoRnVuY3Rpb24oZm9sZGVyLnN1YkZvbGRlcnMoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRmU2VhcmNoRnVuY3Rpb24odGhpcy5mb2xkZXJMaXN0KCkpO1xuXG5cdFx0dGltZW91dHMuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0aWYgKGFbMF0gPCBiWzBdKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH0gZWxzZSBpZiAoYVswXSA+IGJbMF0pIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAwO1xuXHRcdH0pO1xuXG5cdFx0Xy5maW5kKHRpbWVvdXRzLCAoYUl0ZW0pID0+IHtcblx0XHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoYUl0ZW1bMV0pO1xuXHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRmb2xkZXIuaW50ZXJ2YWwgPSB1dGM7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGFJdGVtWzFdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxpbWl0IDw9IHJlc3VsdC5sZW5ndGg7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gXy51bmlxKHJlc3VsdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEZvbGRlclVzZXJTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBNYWdpY3MsIExheW91dCwgRm9jdXNlZCwgTWVzc2FnZVNldEFjdGlvbiwgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7XG5cdHRyaW0sXG5cdGlzTm9ybWFsLFxuXHRpc0FycmF5LFxuXHRpbkFycmF5LFxuXHRwSW50LFxuXHRwU3RyaW5nLFxuXHRwbGFpblRvSHRtbCxcblx0d2luZG93UmVzaXplLFxuXHRmaW5kRW1haWxBbmRMaW5rcyxcblx0Z2V0UmVhbEhlaWdodFxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQge1xuXHRnZXRGb2xkZXJJbmJveE5hbWUsXG5cdGFkZE5ld01lc3NhZ2VDYWNoZSxcblx0c2V0Rm9sZGVyVWlkTmV4dCxcblx0Z2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCxcblx0c2V0Rm9sZGVySGFzaCxcblx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSxcblx0YWRkUmVxdWVzdGVkTWVzc2FnZSxcblx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcixcblx0aGFzTmV3TWVzc2FnZUFuZFJlbW92ZUZyb21DYWNoZSxcblx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlLFxuXHRjbGVhck5ld01lc3NhZ2VDYWNoZVxufSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgeyBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEsICRkaXYgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBtYWlsQm94LCBub3RpZmljYXRpb25NYWlsSWNvbiB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBpMThuLCBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBtb21lbnROb3dVbml4IH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcblxuaW1wb3J0ICogYXMgTWVzc2FnZUhlbHBlciBmcm9tICdIZWxwZXIvTWVzc2FnZSc7XG5pbXBvcnQgeyBNZXNzYWdlTW9kZWwgfSBmcm9tICdNb2RlbC9NZXNzYWdlJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBOb3RpZmljYXRpb25TdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Ob3RpZmljYXRpb24nO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuY2xhc3MgTWVzc2FnZVVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc3RhdGljTWVzc2FnZSA9IG5ldyBNZXNzYWdlTW9kZWwoKTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3QgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RDb3VudCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZSA9IGtvLm9ic2VydmFibGUoMSk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2VCZWZvcmVUaHJlYWQgPSBrby5vYnNlcnZhYmxlKDEpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRTZWFyY2ggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFBhZ2UgPSBrby5vYnNlcnZhYmxlKDEpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdExvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0SXNOb3RDb21wbGV0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMjAwIH0pO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZUZvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHNwZWNpYWxUaHJvdHRsZTogNzAwIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdERpc2FibGVBdXRvU2VsZWN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiA1MDAgfSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0Ly8gbWVzc2FnZSB2aWV3ZXJcblx0XHR0aGlzLm1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5tZXNzYWdlLnZpZXdUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5tZXNzYWdlQ3VycmVudExvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubWVzc2FnZUxvYWRpbmdUaHJvdHRsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTUwbXMgfSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VGdWxsU2NyZWVuTW9kZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5tZXNzYWdlc0JvZGllc0RvbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5tZXNzYWdlQWN0aXZlRG9tID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuY29tcHV0ZXJzKCk7XG5cdFx0dGhpcy5zdWJzY3JpYmVycygpO1xuXG5cdFx0dGhpcy5vbk1lc3NhZ2VSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uTWVzc2FnZVJlc3BvbnNlLCB0aGlzKTtcblxuXHRcdHRoaXMucHVyZ2VNZXNzYWdlQm9keUNhY2hlVGhyb3R0bGUgPSBfLnRocm90dGxlKHRoaXMucHVyZ2VNZXNzYWdlQm9keUNhY2hlLCBNYWdpY3MuVGltZTMwcyk7XG5cdH1cblxuXHRjb21wdXRlcnMoKSB7XG5cdFx0dGhpcy5tZXNzYWdlTG9hZGluZyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMubWVzc2FnZUN1cnJlbnRMb2FkaW5nKCkpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEhhc2ggPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIoKSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRTZWFyY2goKSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQoKSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRQYWdlKClcblx0XHQpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2VDb3VudCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHBhZ2UgPSB3aW5kb3cuTWF0aC5jZWlsKHRoaXMubWVzc2FnZUxpc3RDb3VudCgpIC8gU2V0dGluZ3NTdG9yZS5tZXNzYWdlc1BlclBhZ2UoKSk7XG5cdFx0XHRyZXR1cm4gMCA+PSBwYWdlID8gMSA6IHBhZ2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRoaXMubWVzc2FnZUxpc3RTZWFyY2gsXG5cdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHNldEhhc2goXG5cdFx0XHRcdFx0bWFpbEJveChGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoKCksIDEsIHRyaW0odmFsdWUudG9TdHJpbmcoKSksIHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmcgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBvbmUgPSB0aGlzLm1lc3NhZ2VMaXN0TG9hZGluZygpLFxuXHRcdFx0XHR0d28gPSB0aGlzLm1lc3NhZ2VMaXN0SXNOb3RDb21wbGV0ZWQoKTtcblx0XHRcdHJldHVybiBvbmUgfHwgdHdvO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc01lc3NhZ2VTZWxlY3RlZCA9IGtvLmNvbXB1dGVkKCgpID0+IG51bGwgIT09IHRoaXMubWVzc2FnZSgpKTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkID0ga29cblx0XHRcdC5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLm1lc3NhZ2VMaXN0KCksIChpdGVtKSA9PiBpdGVtLmNoZWNrZWQoKSkpXG5cdFx0XHQuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG5cdFx0dGhpcy5oYXNDaGVja2VkTWVzc2FnZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlTGlzdENoZWNrZWQoKS5sZW5ndGgpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLFxuXHRcdFx0XHRzZWxlY3RlZE1lc3NhZ2UgPSB0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkKCksXG5cdFx0XHRcdGZvY3VzZWRNZXNzYWdlID0gdGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkKCk7XG5cblx0XHRcdGlmIChjaGVja2VkLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gXy51bmlvbihjaGVja2VkLCBzZWxlY3RlZE1lc3NhZ2UgPyBbc2VsZWN0ZWRNZXNzYWdlXSA6IFtdKTtcblx0XHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWRNZXNzYWdlKSB7XG5cdFx0XHRcdHJldHVybiBbc2VsZWN0ZWRNZXNzYWdlXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZvY3VzZWRNZXNzYWdlID8gW2ZvY3VzZWRNZXNzYWdlXSA6IFtdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCByZXN1bHQgPSBbXTtcblx0XHRcdF8uZWFjaCh0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKSwgKG1lc3NhZ2UpID0+IHtcblx0XHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChtZXNzYWdlLnVpZCk7XG5cdFx0XHRcdFx0aWYgKDEgPCBtZXNzYWdlLnRocmVhZHNMZW4oKSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gXy51bmlvbihyZXN1bHQsIG1lc3NhZ2UudGhyZWFkcygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblx0fVxuXG5cdHN1YnNjcmliZXJzKCkge1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmcuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dmFsdWUgPSAhIXZhbHVlO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlKHZhbHVlKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZUZvckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0LnN1YnNjcmliZShcblx0XHRcdF8uZGVib3VuY2UoKGxpc3QpID0+IHtcblx0XHRcdFx0Xy5lYWNoKGxpc3QsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5uZXdGb3JBbmltYXRpb24oKSkge1xuXHRcdFx0XHRcdFx0aXRlbS5uZXdGb3JBbmltYXRpb24oZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwMG1zKVxuXHRcdCk7XG5cblx0XHR0aGlzLm1lc3NhZ2Uuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRpZiAoTGF5b3V0Lk5vUHJldmlldyA9PT0gU2V0dGluZ3NTdG9yZS5sYXlvdXQoKSkge1xuXHRcdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VWaWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXG5cdFx0XHRcdHRoaXMubWVzc2FnZUZ1bGxTY3JlZW5Nb2RlKGZhbHNlKTtcblx0XHRcdFx0dGhpcy5oaWRlTWVzc2FnZUJvZGllcygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTG9hZGluZy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUodmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlc0JvZGllc0RvbS5zdWJzY3JpYmUoKGRvbSkgPT4ge1xuXHRcdFx0aWYgKGRvbSAmJiAhKGRvbSBpbnN0YW5jZW9mICQpKSB7XG5cdFx0XHRcdHRoaXMubWVzc2FnZXNCb2RpZXNEb20oJChkb20pKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoKTtcblx0XHRcdGlmIChtZXNzYWdlICYmIGZvbGRlciAmJiBmb2xkZXIgIT09IG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHVyZ2VNZXNzYWdlQm9keUNhY2hlKCkge1xuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0Y29uc3QgZW5kID0gR2xvYmFsc0RhdGEuaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCAtIE1FU1NBR0VfQk9EWV9DQUNIRV9MSU1JVDtcblxuXHRcdGlmICgwIDwgZW5kKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlc0RvbSA9IHRoaXMubWVzc2FnZXNCb2RpZXNEb20oKTtcblx0XHRcdGlmIChtZXNzYWdlc0RvbSkge1xuXHRcdFx0XHRtZXNzYWdlc0RvbS5maW5kKCcucmwtY2FjaGUtY2xhc3MnKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW0gPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRcdGlmIChlbmQgPiBpdGVtLmRhdGEoJ3JsLWNhY2hlLWNvdW50JykpIHtcblx0XHRcdFx0XHRcdGl0ZW0uYWRkQ2xhc3MoJ3JsLWNhY2hlLXB1cmdlJyk7XG5cdFx0XHRcdFx0XHRjb3VudCArPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKDAgPCBjb3VudCkge1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gbWVzc2FnZXNEb20uZmluZCgnLnJsLWNhY2hlLXB1cmdlJykucmVtb3ZlKCksIE1hZ2ljcy5UaW1lMzUwbXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aW5pdFVpZE5leHRBbmROZXdNZXNzYWdlcyhmb2xkZXIsIHVpZE5leHQsIG5ld01lc3NhZ2VzKSB7XG5cdFx0aWYgKGdldEZvbGRlckluYm94TmFtZSgpID09PSBmb2xkZXIgJiYgaXNOb3JtYWwodWlkTmV4dCkgJiYgJycgIT09IHVpZE5leHQpIHtcblx0XHRcdGlmIChpc0FycmF5KG5ld01lc3NhZ2VzKSAmJiAwIDwgbmV3TWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdF8uZWFjaChuZXdNZXNzYWdlcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRhZGROZXdNZXNzYWdlQ2FjaGUoZm9sZGVyLCBpdGVtLlVpZCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdE5vdGlmaWNhdGlvblN0b3JlLnBsYXlTb3VuZE5vdGlmaWNhdGlvbigpO1xuXG5cdFx0XHRcdGNvbnN0IGxlbiA9IG5ld01lc3NhZ2VzLmxlbmd0aDtcblx0XHRcdFx0aWYgKDMgPCBsZW4pIHtcblx0XHRcdFx0XHROb3RpZmljYXRpb25TdG9yZS5kaXNwbGF5RGVza3RvcE5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRcdG5vdGlmaWNhdGlvbk1haWxJY29uKCksXG5cdFx0XHRcdFx0XHRBY2NvdW50U3RvcmUuZW1haWwoKSxcblx0XHRcdFx0XHRcdGkxOG4oJ01FU1NBR0VfTElTVC9ORVdfTUVTU0FHRV9OT1RJRklDQVRJT04nLCB7XG5cdFx0XHRcdFx0XHRcdCdDT1VOVCc6IGxlblxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR7ICdGb2xkZXInOiAnJywgJ1VpZCc6ICcnIH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdF8uZWFjaChuZXdNZXNzYWdlcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvblN0b3JlLmRpc3BsYXlEZXNrdG9wTm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRub3RpZmljYXRpb25NYWlsSWNvbigpLFxuXHRcdFx0XHRcdFx0XHRNZXNzYWdlSGVscGVyLmVtYWlsQXJyYXlUb1N0cmluZyhNZXNzYWdlSGVscGVyLmVtYWlsQXJyYXlGcm9tSnNvbihpdGVtLkZyb20pLCBmYWxzZSksXG5cdFx0XHRcdFx0XHRcdGl0ZW0uU3ViamVjdCxcblx0XHRcdFx0XHRcdFx0eyAnRm9sZGVyJzogaXRlbS5Gb2xkZXIsICdVaWQnOiBpdGVtLlVpZCB9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHNldEZvbGRlclVpZE5leHQoZm9sZGVyLCB1aWROZXh0KTtcblx0XHR9XG5cdH1cblxuXHRoaWRlTWVzc2FnZUJvZGllcygpIHtcblx0XHRjb25zdCBtZXNzYWdlc0RvbSA9IHRoaXMubWVzc2FnZXNCb2RpZXNEb20oKTtcblx0XHRpZiAobWVzc2FnZXNEb20pIHtcblx0XHRcdG1lc3NhZ2VzRG9tLmZpbmQoJy5iLXRleHQtcGFydCcpLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZyb21Gb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge0FycmF5fSB1aWRGb3JSZW1vdmVcblx0ICogQHBhcmFtIHtzdHJpbmc9fSB0b0ZvbGRlckZ1bGxOYW1lUmF3ID0gJydcblx0ICogQHBhcmFtIHtib29sZWFuPX0gY29weSA9IGZhbHNlXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlc0Zyb21MaXN0KGZyb21Gb2xkZXJGdWxsTmFtZVJhdywgdWlkRm9yUmVtb3ZlLCB0b0ZvbGRlckZ1bGxOYW1lUmF3ID0gJycsIGNvcHkgPSBmYWxzZSkge1xuXHRcdHVpZEZvclJlbW92ZSA9IF8ubWFwKHVpZEZvclJlbW92ZSwgKG1WYWx1ZSkgPT4gcEludChtVmFsdWUpKTtcblxuXHRcdGxldCB1bnNlZW5Db3VudCA9IDAsXG5cdFx0XHRtZXNzYWdlTGlzdCA9IHRoaXMubWVzc2FnZUxpc3QoKSxcblx0XHRcdGN1cnJlbnRNZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cblx0XHRjb25zdCB0cmFzaEZvbGRlciA9IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCksXG5cdFx0XHRzcGFtRm9sZGVyID0gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpLFxuXHRcdFx0ZnJvbUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoZnJvbUZvbGRlckZ1bGxOYW1lUmF3KSxcblx0XHRcdHRvRm9sZGVyID0gJycgPT09IHRvRm9sZGVyRnVsbE5hbWVSYXcgPyBudWxsIDogZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCh0b0ZvbGRlckZ1bGxOYW1lUmF3IHx8ICcnKSxcblx0XHRcdGN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdyA9IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0bWVzc2FnZXMgPVxuXHRcdFx0XHRjdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcgPT09IGZyb21Gb2xkZXJGdWxsTmFtZVJhd1xuXHRcdFx0XHRcdD8gXy5maWx0ZXIobWVzc2FnZUxpc3QsIChpdGVtKSA9PiBpdGVtICYmIC0xIDwgaW5BcnJheShwSW50KGl0ZW0udWlkKSwgdWlkRm9yUmVtb3ZlKSlcblx0XHRcdFx0XHQ6IFtdO1xuXG5cdFx0Xy5lYWNoKG1lc3NhZ2VzLCAoaXRlbSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS51bnNlZW4oKSkge1xuXHRcdFx0XHR1bnNlZW5Db3VudCArPSAxO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKGZyb21Gb2xkZXIgJiYgIWNvcHkpIHtcblx0XHRcdGZyb21Gb2xkZXIubWVzc2FnZUNvdW50QWxsKFxuXHRcdFx0XHQwIDw9IGZyb21Gb2xkZXIubWVzc2FnZUNvdW50QWxsKCkgLSB1aWRGb3JSZW1vdmUubGVuZ3RoID8gZnJvbUZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSAtIHVpZEZvclJlbW92ZS5sZW5ndGggOiAwXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoMCA8IHVuc2VlbkNvdW50KSB7XG5cdFx0XHRcdGZyb21Gb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKFxuXHRcdFx0XHRcdDAgPD0gZnJvbUZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIHVuc2VlbkNvdW50ID8gZnJvbUZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIHVuc2VlbkNvdW50IDogMFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0b0ZvbGRlcikge1xuXHRcdFx0aWYgKHRyYXNoRm9sZGVyID09PSB0b0ZvbGRlci5mdWxsTmFtZVJhdyB8fCBzcGFtRm9sZGVyID09PSB0b0ZvbGRlci5mdWxsTmFtZVJhdykge1xuXHRcdFx0XHR1bnNlZW5Db3VudCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdHRvRm9sZGVyLm1lc3NhZ2VDb3VudEFsbCh0b0ZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSArIHVpZEZvclJlbW92ZS5sZW5ndGgpO1xuXHRcdFx0aWYgKDAgPCB1bnNlZW5Db3VudCkge1xuXHRcdFx0XHR0b0ZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQodG9Gb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkgKyB1bnNlZW5Db3VudCk7XG5cdFx0XHR9XG5cblx0XHRcdHRvRm9sZGVyLmFjdGlvbkJsaW5rKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICgwIDwgbWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRpZiAoY29weSkge1xuXHRcdFx0XHRfLmVhY2gobWVzc2FnZXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5jaGVja2VkKGZhbHNlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0SXNOb3RDb21wbGV0ZWQodHJ1ZSk7XG5cblx0XHRcdFx0Xy5lYWNoKG1lc3NhZ2VzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50TWVzc2FnZSAmJiBjdXJyZW50TWVzc2FnZS5oYXNoID09PSBpdGVtLmhhc2gpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRNZXNzYWdlID0gbnVsbDtcblx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZShudWxsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpdGVtLmRlbGV0ZWQodHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdF8uZWFjaChtZXNzYWdlcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QucmVtb3ZlKGl0ZW0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9LCBNYWdpY3MuVGltZTM1MG1zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoJycgIT09IGZyb21Gb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdFx0c2V0Rm9sZGVySGFzaChmcm9tRm9sZGVyRnVsbE5hbWVSYXcsICcnKTtcblx0XHR9XG5cblx0XHRpZiAoJycgIT09IHRvRm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHRcdHNldEZvbGRlckhhc2godG9Gb2xkZXJGdWxsTmFtZVJhdywgJycpO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gdGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpKSB7XG5cdFx0XHRtZXNzYWdlTGlzdCA9IHRoaXMubWVzc2FnZUxpc3QoKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZXNzYWdlTGlzdCAmJlxuXHRcdFx0XHQwIDwgbWVzc2FnZUxpc3QubGVuZ3RoICYmXG5cdFx0XHRcdCEhXy5maW5kKG1lc3NhZ2VMaXN0LCAoaXRlbSkgPT4gISEoaXRlbSAmJiBpdGVtLmRlbGV0ZWQoKSAmJiBpdGVtLnVpZCA9PT0gdGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gXy5maW5kKG1lc3NhZ2VMaXN0LCAoaXRlbSkgPT4gaXRlbSAmJiAhaXRlbS5kZWxldGVkKCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKCkgIT09IHBTdHJpbmcobWVzc2FnZS51aWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZChwU3RyaW5nKG1lc3NhZ2UudWlkKSk7XG5cblx0XHRcdFx0XHRzZXRIYXNoKFxuXHRcdFx0XHRcdFx0bWFpbEJveChcblx0XHRcdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZSgpLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICghbWVzc2FnZSkge1xuXHRcdFx0XHRcdGlmICgxIDwgdGhpcy5tZXNzYWdlTGlzdFBhZ2UoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2UodGhpcy5tZXNzYWdlTGlzdFBhZ2UoKSAtIDEpO1xuXG5cdFx0XHRcdFx0XHRzZXRIYXNoKFxuXHRcdFx0XHRcdFx0XHRtYWlsQm94KFxuXHRcdFx0XHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZSgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2goKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKClcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgnJyk7XG5cblx0XHRcdFx0XHRcdHNldEhhc2goXG5cdFx0XHRcdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlQmVmb3JlVGhyZWFkKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaCgpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXNzYWdlVGV4dEJvZHlcblx0ICovXG5cdGluaXRCbG9ja3F1b3RlU3dpdGNoZXIobWVzc2FnZVRleHRCb2R5KSB7XG5cdFx0aWYgKG1lc3NhZ2VUZXh0Qm9keSkge1xuXHRcdFx0Y29uc3QgJG9MaXN0ID0gJCgnYmxvY2txdW90ZTpub3QoLnJsLWJxLXN3aXRjaGVyKScsIG1lc3NhZ2VUZXh0Qm9keSkuZmlsdGVyKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDAgPT09XG5cdFx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdFx0LnBhcmVudCgpXG5cdFx0XHRcdFx0XHQuY2xvc2VzdCgnYmxvY2txdW90ZScsIG1lc3NhZ2VUZXh0Qm9keSkubGVuZ3RoXG5cdFx0XHRcdCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCRvTGlzdCAmJiAwIDwgJG9MaXN0Lmxlbmd0aCkge1xuXHRcdFx0XHQkb0xpc3QuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cblx0XHRcdFx0XHRsZXQgaCA9ICR0aGlzLmhlaWdodCgpO1xuXHRcdFx0XHRcdGlmICgwID09PSBoKSB7XG5cdFx0XHRcdFx0XHRoID0gZ2V0UmVhbEhlaWdodCgkdGhpcyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCcnICE9PSB0cmltKCR0aGlzLnRleHQoKSkgJiYgKDAgPT09IGggfHwgMTAwIDwgaCkpIHtcblx0XHRcdFx0XHRcdCR0aGlzLmFkZENsYXNzKCdybC1icS1zd2l0Y2hlciBoaWRkZW4tYnEnKTtcblx0XHRcdFx0XHRcdCQoJzxzcGFuIGNsYXNzPVwicmxCbG9ja3F1b3RlU3dpdGNoZXJcIj48aSBjbGFzcz1cImljb24tZWxsaXBzaXNcIiAvPjwvc3Bhbj4nKVxuXHRcdFx0XHRcdFx0XHQuaW5zZXJ0QmVmb3JlKCR0aGlzKVxuXHRcdFx0XHRcdFx0XHQub24oJ2NsaWNrLnJsQmxvY2txdW90ZVN3aXRjaGVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnRvZ2dsZUNsYXNzKCdoaWRkZW4tYnEnKTtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmFmdGVyKCc8YnIgLz4nKVxuXHRcdFx0XHRcdFx0XHQuYmVmb3JlKCc8YnIgLz4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWVzc2FnZVRleHRCb2R5XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXNzYWdlXG5cdCAqL1xuXHRpbml0T3BlblBncENvbnRyb2xzKG1lc3NhZ2VUZXh0Qm9keSwgbWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlVGV4dEJvZHkgJiYgbWVzc2FnZVRleHRCb2R5LmZpbmQpIHtcblx0XHRcdG1lc3NhZ2VUZXh0Qm9keS5maW5kKCcuYi1wbGFpbi1vcGVucGdwOm5vdCguaW5pdGVkKScpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFBncFN0b3JlLmluaXRNZXNzYWdlQm9keUNvbnRyb2xzKCQodGhpcyksIG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0TWVzc2FnZShkYXRhLCBjYWNoZWQpIHtcblx0XHRsZXQgaXNOZXcgPSBmYWxzZSxcblx0XHRcdGJvZHkgPSBudWxsLFxuXHRcdFx0aWQgPSAnJyxcblx0XHRcdHBsYWluID0gJycsXG5cdFx0XHRyZXN1bHRIdG1sID0gJycsXG5cdFx0XHRwZ3BTaWduZWQgPSBmYWxzZSxcblx0XHRcdG1lc3NhZ2VzRG9tID0gdGhpcy5tZXNzYWdlc0JvZGllc0RvbSgpLFxuXHRcdFx0c2VsZWN0ZWRNZXNzYWdlID0gdGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCgpLFxuXHRcdFx0bWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXG5cdFx0aWYgKFxuXHRcdFx0ZGF0YSAmJlxuXHRcdFx0bWVzc2FnZSAmJlxuXHRcdFx0ZGF0YS5SZXN1bHQgJiZcblx0XHRcdCdPYmplY3QvTWVzc2FnZScgPT09IGRhdGEuUmVzdWx0WydAT2JqZWN0J10gJiZcblx0XHRcdG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgPT09IGRhdGEuUmVzdWx0LkZvbGRlclxuXHRcdCkge1xuXHRcdFx0Y29uc3QgdGhyZWFkcyA9IG1lc3NhZ2UudGhyZWFkcygpO1xuXHRcdFx0aWYgKG1lc3NhZ2UudWlkICE9PSBkYXRhLlJlc3VsdC5VaWQgJiYgMSA8IHRocmVhZHMubGVuZ3RoICYmIC0xIDwgaW5BcnJheShkYXRhLlJlc3VsdC5VaWQsIHRocmVhZHMpKSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBNZXNzYWdlTW9kZWwubmV3SW5zdGFuY2VGcm9tSnNvbihkYXRhLlJlc3VsdCk7XG5cdFx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS50aHJlYWRzKHRocmVhZHMpO1xuXHRcdFx0XHRcdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZSk7XG5cblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2UodGhpcy5zdGF0aWNNZXNzYWdlLnBvcHVsYXRlQnlNZXNzYWdlTGlzdEl0ZW0obWVzc2FnZSkpO1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoKTtcblxuXHRcdFx0XHRcdGlzTmV3ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLnVpZCA9PT0gZGF0YS5SZXN1bHQuVWlkKSB7XG5cdFx0XHRcdHRoaXMubWVzc2FnZUVycm9yKCcnKTtcblxuXHRcdFx0XHRtZXNzYWdlLmluaXRVcGRhdGVCeU1lc3NhZ2VKc29uKGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0YWRkUmVxdWVzdGVkTWVzc2FnZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBtZXNzYWdlLnVpZCk7XG5cblx0XHRcdFx0aWYgKCFjYWNoZWQpIHtcblx0XHRcdFx0XHRtZXNzYWdlLmluaXRGbGFnc0J5SnNvbihkYXRhLlJlc3VsdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtZXNzYWdlc0RvbSA9IG1lc3NhZ2VzRG9tICYmIG1lc3NhZ2VzRG9tWzBdID8gbWVzc2FnZXNEb20gOiBudWxsO1xuXHRcdFx0XHRpZiAobWVzc2FnZXNEb20pIHtcblx0XHRcdFx0XHRpZCA9ICdybC1tZ3MtJyArIG1lc3NhZ2UuaGFzaC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJycpO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dEJvZHkgPSBtZXNzYWdlc0RvbS5maW5kKCcjJyArIGlkKTtcblx0XHRcdFx0XHRpZiAoIXRleHRCb2R5IHx8ICF0ZXh0Qm9keVswXSkge1xuXHRcdFx0XHRcdFx0bGV0IGlzSHRtbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0aWYgKGlzTm9ybWFsKGRhdGEuUmVzdWx0Lkh0bWwpICYmICcnICE9PSBkYXRhLlJlc3VsdC5IdG1sKSB7XG5cdFx0XHRcdFx0XHRcdGlzSHRtbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSBkYXRhLlJlc3VsdC5IdG1sLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzTm9ybWFsKGRhdGEuUmVzdWx0LlBsYWluKSAmJiAnJyAhPT0gZGF0YS5SZXN1bHQuUGxhaW4pIHtcblx0XHRcdFx0XHRcdFx0aXNIdG1sID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSBwbGFpblRvSHRtbChkYXRhLlJlc3VsdC5QbGFpbi50b1N0cmluZygpLCBmYWxzZSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKChtZXNzYWdlLmlzUGdwU2lnbmVkKCkgfHwgbWVzc2FnZS5pc1BncEVuY3J5cHRlZCgpKSAmJiBQZ3BTdG9yZS5jYXBhT3BlblBHUCgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGxhaW4gPSBwU3RyaW5nKGRhdGEuUmVzdWx0LlBsYWluKTtcblxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzUGdwRW5jcnlwdGVkID0gLy0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLy50ZXN0KHBsYWluKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWlzUGdwRW5jcnlwdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwZ3BTaWduZWQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLS8udGVzdChwbGFpbikgJiYgLy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tLy50ZXN0KHBsYWluKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQkZGl2LmVtcHR5KCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHBncFNpZ25lZCAmJiBtZXNzYWdlLmlzUGdwU2lnbmVkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSAkZGl2LmFwcGVuZCgkKCc8cHJlIGNsYXNzPVwiYi1wbGFpbi1vcGVucGdwIHNpZ25lZFwiPjwvcHJlPicpLnRleHQocGxhaW4pKS5odG1sKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc1BncEVuY3J5cHRlZCAmJiBtZXNzYWdlLmlzUGdwRW5jcnlwdGVkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSAkZGl2LmFwcGVuZCgkKCc8cHJlIGNsYXNzPVwiYi1wbGFpbi1vcGVucGdwIGVuY3J5cHRlZFwiPjwvcHJlPicpLnRleHQocGxhaW4pKS5odG1sKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSAnPHByZT4nICsgcmVzdWx0SHRtbCArICc8L3ByZT4nO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdCRkaXYuZW1wdHkoKTtcblxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UuaXNQZ3BTaWduZWQocGdwU2lnbmVkKTtcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLmlzUGdwRW5jcnlwdGVkKGlzUGdwRW5jcnlwdGVkKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gJzxwcmU+JyArIHJlc3VsdEh0bWwgKyAnPC9wcmU+Jztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aXNIdG1sID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdEh0bWwgPSAnPHByZT4nICsgcmVzdWx0SHRtbCArICc8L3ByZT4nO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pTWVzc2FnZUJvZHlDYWNoZUNvdW50ICs9IDE7XG5cblx0XHRcdFx0XHRcdGJvZHkgPSAkKCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiID48L2Rpdj4nKVxuXHRcdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygncmwtY2FjaGUtY2xhc3MnKTtcblx0XHRcdFx0XHRcdGJvZHkuZGF0YSgncmwtY2FjaGUtY291bnQnLCBHbG9iYWxzRGF0YS5pTWVzc2FnZUJvZHlDYWNoZUNvdW50KTtcblxuXHRcdFx0XHRcdFx0Ym9keS5odG1sKGZpbmRFbWFpbEFuZExpbmtzKHJlc3VsdEh0bWwpKS5hZGRDbGFzcygnYi10ZXh0LXBhcnQgJyArIChpc0h0bWwgPyAnaHRtbCcgOiAncGxhaW4nKSk7XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2UuaXNIdG1sKCEhaXNIdG1sKTtcblx0XHRcdFx0XHRcdG1lc3NhZ2UuaGFzSW1hZ2VzKCEhZGF0YS5SZXN1bHQuSGFzRXh0ZXJuYWxzKTtcblxuXHRcdFx0XHRcdFx0bWVzc2FnZS5ib2R5ID0gYm9keTtcblx0XHRcdFx0XHRcdGlmIChtZXNzYWdlLmJvZHkpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZXNEb20uYXBwZW5kKG1lc3NhZ2UuYm9keSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc3RvcmVEYXRhSW5Eb20oKTtcblxuXHRcdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0Lkhhc0ludGVybmFscykge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLnNob3dJbnRlcm5hbEltYWdlcyh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG1lc3NhZ2UuaGFzSW1hZ2VzKCkgJiYgU2V0dGluZ3NTdG9yZS5zaG93SW1hZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5zaG93RXh0ZXJuYWxJbWFnZXModHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMucHVyZ2VNZXNzYWdlQm9keUNhY2hlVGhyb3R0bGUoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWVzc2FnZS5ib2R5ID0gdGV4dEJvZHk7XG5cdFx0XHRcdFx0XHRpZiAobWVzc2FnZS5ib2R5KSB7XG5cdFx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlNZXNzYWdlQm9keUNhY2hlQ291bnQgKz0gMTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5ib2R5LmRhdGEoJ3JsLWNhY2hlLWNvdW50JywgR2xvYmFsc0RhdGEuaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCk7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZmV0Y2hEYXRhRnJvbURvbSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUFjdGl2ZURvbShtZXNzYWdlLmJvZHkpO1xuXG5cdFx0XHRcdFx0dGhpcy5oaWRlTWVzc2FnZUJvZGllcygpO1xuXG5cdFx0XHRcdFx0aWYgKGJvZHkpIHtcblx0XHRcdFx0XHRcdHRoaXMuaW5pdE9wZW5QZ3BDb250cm9scyhib2R5LCBtZXNzYWdlKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pbml0QmxvY2txdW90ZVN3aXRjaGVyKGJvZHkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1lc3NhZ2UuYm9keS5zaG93KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UpO1xuXHRcdFx0XHRpZiAobWVzc2FnZS51bnNlZW4oKSB8fCBtZXNzYWdlLmhhc1Vuc2VlblN1Yk1lc3NhZ2UoKSkge1xuXHRcdFx0XHRcdGdldEFwcCgpLm1lc3NhZ2VMaXN0QWN0aW9uKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2VlbiwgW21lc3NhZ2VdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc05ldykge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoKTtcblxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHNlbGVjdGVkTWVzc2FnZSAmJlxuXHRcdFx0XHRcdFx0bWVzc2FnZSAmJlxuXHRcdFx0XHRcdFx0KG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgIT09IHNlbGVjdGVkTWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyB8fCBtZXNzYWdlLnVpZCAhPT0gc2VsZWN0ZWRNZXNzYWdlLnVpZClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQobnVsbCk7XG5cdFx0XHRcdFx0XHRpZiAoMSA9PT0gdGhpcy5tZXNzYWdlTGlzdCgpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghc2VsZWN0ZWRNZXNzYWdlICYmIG1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkTWVzc2FnZSA9IF8uZmluZChcblx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdCgpLFxuXHRcdFx0XHRcdFx0XHQoc3ViTWVzc2FnZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRzdWJNZXNzYWdlICYmXG5cdFx0XHRcdFx0XHRcdFx0c3ViTWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyA9PT0gbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyAmJlxuXHRcdFx0XHRcdFx0XHRcdHN1Yk1lc3NhZ2UudWlkID09PSBtZXNzYWdlLnVpZFxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGVkTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkKHNlbGVjdGVkTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZChzZWxlY3RlZE1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHNlbGVjdE1lc3NhZ2Uob01lc3NhZ2UpIHtcblx0XHRpZiAob01lc3NhZ2UpIHtcblx0XHRcdHRoaXMubWVzc2FnZSh0aGlzLnN0YXRpY01lc3NhZ2UucG9wdWxhdGVCeU1lc3NhZ2VMaXN0SXRlbShvTWVzc2FnZSkpO1xuXHRcdFx0dGhpcy5wb3B1bGF0ZU1lc3NhZ2VCb2R5KHRoaXMubWVzc2FnZSgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdHNlbGVjdE1lc3NhZ2VCeUZvbGRlckFuZFVpZChzRm9sZGVyLCBzVWlkKSB7XG5cdFx0aWYgKHNGb2xkZXIgJiYgc1VpZCkge1xuXHRcdFx0dGhpcy5tZXNzYWdlKHRoaXMuc3RhdGljTWVzc2FnZS5wb3B1bGF0ZUJ5TWVzc2FnZUxpc3RJdGVtKG51bGwpKTtcblx0XHRcdHRoaXMubWVzc2FnZSgpLmZvbGRlckZ1bGxOYW1lUmF3ID0gc0ZvbGRlcjtcblx0XHRcdHRoaXMubWVzc2FnZSgpLnVpZCA9IHNVaWQ7XG5cblx0XHRcdHRoaXMucG9wdWxhdGVNZXNzYWdlQm9keSh0aGlzLm1lc3NhZ2UoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWVzc2FnZShudWxsKTtcblx0XHR9XG5cdH1cblxuXHRwb3B1bGF0ZU1lc3NhZ2VCb2R5KG9NZXNzYWdlKSB7XG5cdFx0aWYgKG9NZXNzYWdlKSB7XG5cdFx0XHRpZiAoUmVtb3RlLm1lc3NhZ2UodGhpcy5vbk1lc3NhZ2VSZXNwb25zZSwgb01lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIG9NZXNzYWdlLnVpZCkpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlQ3VycmVudExvYWRpbmcodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVzdWx0XG5cdCAqIEBwYXJhbSB7QWpheEpzb25EZWZhdWx0UmVzcG9uc2V9IG9EYXRhXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkNhY2hlZFxuXHQgKi9cblx0b25NZXNzYWdlUmVzcG9uc2Uoc1Jlc3VsdCwgb0RhdGEsIGJDYWNoZWQpIHtcblx0XHR0aGlzLmhpZGVNZXNzYWdlQm9kaWVzKCk7XG5cblx0XHR0aGlzLm1lc3NhZ2VDdXJyZW50TG9hZGluZyhmYWxzZSk7XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuc2V0TWVzc2FnZShvRGF0YSwgYkNhY2hlZCk7XG5cdFx0fSBlbHNlIGlmIChTdG9yYWdlUmVzdWx0VHlwZS5VbmxvYWQgPT09IHNSZXN1bHQpIHtcblx0XHRcdHRoaXMubWVzc2FnZShudWxsKTtcblx0XHRcdHRoaXMubWVzc2FnZUVycm9yKCcnKTtcblx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0ICE9PSBzUmVzdWx0KSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VFcnJvcihcblx0XHRcdFx0b0RhdGEgJiYgb0RhdGEuRXJyb3JDb2RlID8gZ2V0Tm90aWZpY2F0aW9uKG9EYXRhLkVycm9yQ29kZSkgOiBnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcilcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGxpc3Rcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGNhbGN1bGF0ZU1lc3NhZ2VMaXN0SGFzaChsaXN0KSB7XG5cdFx0cmV0dXJuIF8ubWFwKGxpc3QsIChtZXNzYWdlKSA9PiAnJyArIG1lc3NhZ2UuaGFzaCArICdfJyArIG1lc3NhZ2UudGhyZWFkc0xlbigpICsgJ18nICsgbWVzc2FnZS5mbGFnSGFzaCgpKS5qb2luKFxuXHRcdFx0J3wnXG5cdFx0KTtcblx0fVxuXG5cdHNldE1lc3NhZ2VMaXN0KGRhdGEsIGNhY2hlZCkge1xuXHRcdGlmIChcblx0XHRcdGRhdGEgJiZcblx0XHRcdGRhdGEuUmVzdWx0ICYmXG5cdFx0XHQnQ29sbGVjdGlvbi9NZXNzYWdlQ29sbGVjdGlvbicgPT09IGRhdGEuUmVzdWx0WydAT2JqZWN0J10gJiZcblx0XHRcdGRhdGEuUmVzdWx0WydAQ29sbGVjdGlvbiddICYmXG5cdFx0XHRpc0FycmF5KGRhdGEuUmVzdWx0WydAQ29sbGVjdGlvbiddKVxuXHRcdCkge1xuXHRcdFx0bGV0IG5ld0NvdW50ID0gMCxcblx0XHRcdFx0dW5yZWFkQ291bnRDaGFuZ2UgPSBmYWxzZTtcblxuXHRcdFx0Y29uc3QgbGlzdCA9IFtdLFxuXHRcdFx0XHR1dGMgPSBtb21lbnROb3dVbml4KCksXG5cdFx0XHRcdGlDb3VudCA9IHBJbnQoZGF0YS5SZXN1bHQuTWVzc2FnZVJlc3VsdENvdW50KSxcblx0XHRcdFx0aU9mZnNldCA9IHBJbnQoZGF0YS5SZXN1bHQuT2Zmc2V0KTtcblxuXHRcdFx0Y29uc3QgZm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChpc05vcm1hbChkYXRhLlJlc3VsdC5Gb2xkZXIpID8gZGF0YS5SZXN1bHQuRm9sZGVyIDogJycpO1xuXG5cdFx0XHRpZiAoZm9sZGVyICYmICFjYWNoZWQpIHtcblx0XHRcdFx0Zm9sZGVyLmludGVydmFsID0gdXRjO1xuXG5cdFx0XHRcdHNldEZvbGRlckhhc2goZGF0YS5SZXN1bHQuRm9sZGVyLCBkYXRhLlJlc3VsdC5Gb2xkZXJIYXNoKTtcblxuXHRcdFx0XHRpZiAoaXNOb3JtYWwoZGF0YS5SZXN1bHQuTWVzc2FnZUNvdW50KSkge1xuXHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRBbGwoZGF0YS5SZXN1bHQuTWVzc2FnZUNvdW50KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0aWYgKHBJbnQoZm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgpKSAhPT0gcEludChkYXRhLlJlc3VsdC5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0XHR1bnJlYWRDb3VudENoYW5nZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChkYXRhLlJlc3VsdC5NZXNzYWdlVW5zZWVuQ291bnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5pbml0VWlkTmV4dEFuZE5ld01lc3NhZ2VzKGZvbGRlci5mdWxsTmFtZVJhdywgZGF0YS5SZXN1bHQuVWlkTmV4dCwgZGF0YS5SZXN1bHQuTmV3TWVzc2FnZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodW5yZWFkQ291bnRDaGFuZ2UgJiYgZm9sZGVyKSB7XG5cdFx0XHRcdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIoZm9sZGVyLmZ1bGxOYW1lUmF3KTtcblx0XHRcdH1cblxuXHRcdFx0Xy5lYWNoKGRhdGEuUmVzdWx0WydAQ29sbGVjdGlvbiddLCAoanNvbk1lc3NhZ2UpID0+IHtcblx0XHRcdFx0aWYgKGpzb25NZXNzYWdlICYmICdPYmplY3QvTWVzc2FnZScgPT09IGpzb25NZXNzYWdlWydAT2JqZWN0J10pIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gTWVzc2FnZU1vZGVsLm5ld0luc3RhbmNlRnJvbUpzb24oanNvbk1lc3NhZ2UpO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRpZiAoaGFzTmV3TWVzc2FnZUFuZFJlbW92ZUZyb21DYWNoZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBtZXNzYWdlLnVpZCkgJiYgNSA+PSBuZXdDb3VudCkge1xuXHRcdFx0XHRcdFx0XHRuZXdDb3VudCArPSAxO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLm5ld0ZvckFuaW1hdGlvbih0cnVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bWVzc2FnZS5kZWxldGVkKGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGNhY2hlZCkge1xuXHRcdFx0XHRcdFx0XHRpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRsaXN0LnB1c2gobWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdENvdW50KGlDb3VudCk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoKGlzTm9ybWFsKGRhdGEuUmVzdWx0LlNlYXJjaCkgPyBkYXRhLlJlc3VsdC5TZWFyY2ggOiAnJyk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZSh3aW5kb3cuTWF0aC5jZWlsKGlPZmZzZXQgLyBTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpICsgMSkpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZChpc05vcm1hbChkYXRhLlJlc3VsdC5UaHJlYWRVaWQpID8gcFN0cmluZyhkYXRhLlJlc3VsdC5UaHJlYWRVaWQpIDogJycpO1xuXG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKGlzTm9ybWFsKGRhdGEuUmVzdWx0LkZvbGRlcikgPyBkYXRhLlJlc3VsdC5Gb2xkZXIgOiAnJyk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kU2VhcmNoKHRoaXMubWVzc2FnZUxpc3RTZWFyY2goKSk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkKHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKSk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kUGFnZSh0aGlzLm1lc3NhZ2VMaXN0UGFnZSgpKTtcblxuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdERpc2FibGVBdXRvU2VsZWN0KHRydWUpO1xuXG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0KGxpc3QpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdElzTm90Q29tcGxldGVkKGZhbHNlKTtcblxuXHRcdFx0Y2xlYXJOZXdNZXNzYWdlQ2FjaGUoKTtcblxuXHRcdFx0aWYgKGZvbGRlciAmJiAoY2FjaGVkIHx8IHVucmVhZENvdW50Q2hhbmdlIHx8IFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcygpKSkge1xuXHRcdFx0XHRnZXRBcHAoKS5mb2xkZXJJbmZvcm1hdGlvbihmb2xkZXIuZnVsbE5hbWVSYXcsIGxpc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0Q291bnQoMCk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0KFtdKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YSAmJiBkYXRhLkVycm9yQ29kZSA/IGRhdGEuRXJyb3JDb2RlIDogTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTWVzc2FnZVVzZXJTdG9yZSgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBDYXBhLCBNZXNzYWdlU2V0QWN0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0sIHBJbnQsIGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgTGlua3MgZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5sZXQgRk9MREVSU19DQUNIRSA9IHt9LFxuXHRGT0xERVJTX05BTUVfQ0FDSEUgPSB7fSxcblx0Rk9MREVSU19IQVNIX0NBQ0hFID0ge30sXG5cdEZPTERFUlNfVUlEX05FWFRfQ0FDSEUgPSB7fSxcblx0TUVTU0FHRV9GTEFHU19DQUNIRSA9IHt9LFxuXHRORVdfTUVTU0FHRV9DQUNIRSA9IHt9LFxuXHRpbmJveEZvbGRlck5hbWUgPSAnJztcblxuY29uc3QgUkVRVUVTVEVEX01FU1NBR0VfQ0FDSEUgPSB7fSxcblx0Y2FwYUdyYXZhdGFyID0gU2V0dGluZ3MuY2FwYShDYXBhLkdyYXZhdGFyKTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKCkge1xuXHRGT0xERVJTX0NBQ0hFID0ge307XG5cdEZPTERFUlNfTkFNRV9DQUNIRSA9IHt9O1xuXHRGT0xERVJTX0hBU0hfQ0FDSEUgPSB7fTtcblx0Rk9MREVSU19VSURfTkVYVF9DQUNIRSA9IHt9O1xuXHRNRVNTQUdFX0ZMQUdTX0NBQ0hFID0ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJQaWMoZW1haWwsIGNhbGxiYWNrKSB7XG5cdGVtYWlsID0gdHJpbShlbWFpbCk7XG5cdGNhbGxiYWNrKGNhcGFHcmF2YXRhciAmJiAnJyAhPT0gZW1haWwgPyBMaW5rcy5hdmF0YXJMaW5rKGVtYWlsKSA6ICcnLCBlbWFpbCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZUtleShmb2xkZXJGdWxsTmFtZVJhdywgdWlkKSB7XG5cdHJldHVybiBgJHtmb2xkZXJGdWxsTmFtZVJhd30jJHt1aWR9YDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRSZXF1ZXN0ZWRNZXNzYWdlKGZvbGRlciwgdWlkKSB7XG5cdFJFUVVFU1RFRF9NRVNTQUdFX0NBQ0hFW2dldE1lc3NhZ2VLZXkoZm9sZGVyLCB1aWQpXSA9IHRydWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXF1ZXN0ZWRNZXNzYWdlKGZvbGRlciwgdWlkKSB7XG5cdHJldHVybiB0cnVlID09PSBSRVFVRVNURURfTUVTU0FHRV9DQUNIRVtnZXRNZXNzYWdlS2V5KGZvbGRlciwgdWlkKV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGROZXdNZXNzYWdlQ2FjaGUoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCkge1xuXHRORVdfTUVTU0FHRV9DQUNIRVtnZXRNZXNzYWdlS2V5KGZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpXSA9IHRydWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXdNZXNzYWdlQW5kUmVtb3ZlRnJvbUNhY2hlKGZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpIHtcblx0aWYgKE5FV19NRVNTQUdFX0NBQ0hFW2dldE1lc3NhZ2VLZXkoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCldKSB7XG5cdFx0TkVXX01FU1NBR0VfQ0FDSEVbZ2V0TWVzc2FnZUtleShmb2xkZXJGdWxsTmFtZVJhdywgdWlkKV0gPSBudWxsO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTmV3TWVzc2FnZUNhY2hlKCkge1xuXHRORVdfTUVTU0FHRV9DQUNIRSA9IHt9O1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJJbmJveE5hbWUoKSB7XG5cdHJldHVybiAnJyA9PT0gaW5ib3hGb2xkZXJOYW1lID8gJ0lOQk9YJyA6IGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVySGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlckZ1bGxOYW1lUmF3KGZvbGRlckhhc2gpIHtcblx0cmV0dXJuICcnICE9PSBmb2xkZXJIYXNoICYmIEZPTERFUlNfTkFNRV9DQUNIRVtmb2xkZXJIYXNoXSA/IEZPTERFUlNfTkFNRV9DQUNIRVtmb2xkZXJIYXNoXSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZvbGRlckZ1bGxOYW1lUmF3KGZvbGRlckhhc2gsIGZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdEZPTERFUlNfTkFNRV9DQUNIRVtmb2xkZXJIYXNoXSA9IGZvbGRlckZ1bGxOYW1lUmF3O1xuXHRpZiAoJ0lOQk9YJyA9PT0gZm9sZGVyRnVsbE5hbWVSYXcgfHwgJycgPT09IGluYm94Rm9sZGVyTmFtZSkge1xuXHRcdGluYm94Rm9sZGVyTmFtZSA9IGZvbGRlckZ1bGxOYW1lUmF3O1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVySGFzaChmb2xkZXJGdWxsTmFtZVJhdykge1xuXHRyZXR1cm4gJycgIT09IGZvbGRlckZ1bGxOYW1lUmF3ICYmIEZPTERFUlNfSEFTSF9DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gPyBGT0xERVJTX0hBU0hfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVySGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9sZGVySGFzaChmb2xkZXJGdWxsTmFtZVJhdywgZm9sZGVySGFzaCkge1xuXHRpZiAoJycgIT09IGZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdFx0Rk9MREVSU19IQVNIX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA9IGZvbGRlckhhc2g7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJVaWROZXh0KGZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdHJldHVybiAnJyAhPT0gZm9sZGVyRnVsbE5hbWVSYXcgJiYgRk9MREVSU19VSURfTkVYVF9DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd11cblx0XHQ/IEZPTERFUlNfVUlEX05FWFRfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddXG5cdFx0OiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWROZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb2xkZXJVaWROZXh0KGZvbGRlckZ1bGxOYW1lUmF3LCB1aWROZXh0KSB7XG5cdEZPTERFUlNfVUlEX05FWFRfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddID0gdWlkTmV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqIEByZXR1cm5zIHs/Rm9sZGVyTW9kZWx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdHJldHVybiAnJyAhPT0gZm9sZGVyRnVsbE5hbWVSYXcgJiYgRk9MREVSU19DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gPyBGT0xERVJTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcGFyYW0gez9Gb2xkZXJNb2RlbH0gZm9sZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb2xkZXJUb0NhY2hlTGlzdChmb2xkZXJGdWxsTmFtZVJhdywgZm9sZGVyKSB7XG5cdEZPTERFUlNfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddID0gZm9sZGVyO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRm9sZGVyRnJvbUNhY2hlTGlzdChmb2xkZXJGdWxsTmFtZVJhdykge1xuXHRzZXRGb2xkZXJUb0NhY2hlTGlzdChmb2xkZXJGdWxsTmFtZVJhdywgbnVsbCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKGZvbGRlckZ1bGxOYW1lLCB1aWQpIHtcblx0cmV0dXJuIE1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdICYmIE1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdW3VpZF1cblx0XHQ/IE1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdW3VpZF1cblx0XHQ6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKiBAcGFyYW0ge0FycmF5fSBmbGFnc0NhY2hlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRNZXNzYWdlRmxhZ3NUb0NhY2hlKGZvbGRlckZ1bGxOYW1lLCB1aWQsIGZsYWdzQ2FjaGUpIHtcblx0aWYgKCFNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXSkge1xuXHRcdE1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdID0ge307XG5cdH1cblxuXHRNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXVt1aWRdID0gZmxhZ3NDYWNoZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIoZm9sZGVyRnVsbE5hbWUpIHtcblx0TUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV0gPSB7fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhNZXNzYWdlTW9kZWx8bnVsbCl9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZSkge1xuXHRpZiAobWVzc2FnZSkge1xuXHRcdGNvbnN0IHVpZCA9IG1lc3NhZ2UudWlkLFxuXHRcdFx0ZmxhZ3MgPSBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgdWlkKTtcblxuXHRcdGlmIChmbGFncyAmJiAwIDwgZmxhZ3MubGVuZ3RoKSB7XG5cdFx0XHRtZXNzYWdlLmZsYWdnZWQoISFmbGFnc1sxXSk7XG5cblx0XHRcdGlmICghbWVzc2FnZS5pc1NpbXBsZU1lc3NhZ2UpIHtcblx0XHRcdFx0bWVzc2FnZS51bnNlZW4oISFmbGFnc1swXSk7XG5cdFx0XHRcdG1lc3NhZ2UuYW5zd2VyZWQoISFmbGFnc1syXSk7XG5cdFx0XHRcdG1lc3NhZ2UuZm9yd2FyZGVkKCEhZmxhZ3NbM10pO1xuXHRcdFx0XHRtZXNzYWdlLmlzUmVhZFJlY2VpcHQoISFmbGFnc1s0XSk7XG5cdFx0XHRcdG1lc3NhZ2UuZGVsZXRlZE1hcmsoISFmbGFnc1s1XSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKDAgPCBtZXNzYWdlLnRocmVhZHMoKS5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHVuc2VlblN1YlVpZCA9IF8uZmluZChtZXNzYWdlLnRocmVhZHMoKSwgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0aWYgKHVpZCAhPT0gc1N1YlVpZCkge1xuXHRcdFx0XHRcdGNvbnN0IHN1YkZsYWdzID0gZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIHNTdWJVaWQpO1xuXHRcdFx0XHRcdHJldHVybiBzdWJGbGFncyAmJiAwIDwgc3ViRmxhZ3MubGVuZ3RoICYmICEhc3ViRmxhZ3NbMF07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IGZsYWdnZWRTdWJVaWQgPSBfLmZpbmQobWVzc2FnZS50aHJlYWRzKCksIChzU3ViVWlkKSA9PiB7XG5cdFx0XHRcdGlmICh1aWQgIT09IHNTdWJVaWQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJGbGFncyA9IGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkKTtcblx0XHRcdFx0XHRyZXR1cm4gc3ViRmxhZ3MgJiYgMCA8IHN1YkZsYWdzLmxlbmd0aCAmJiAhIXN1YkZsYWdzWzFdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRtZXNzYWdlLmhhc1Vuc2VlblN1Yk1lc3NhZ2UodW5zZWVuU3ViVWlkICYmIDAgPCBwSW50KHVuc2VlblN1YlVpZCkpO1xuXHRcdFx0bWVzc2FnZS5oYXNGbGFnZ2VkU3ViTWVzc2FnZShmbGFnZ2VkU3ViVWlkICYmIDAgPCBwSW50KGZsYWdnZWRTdWJVaWQpKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhNZXNzYWdlTW9kZWx8bnVsbCl9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZShtZXNzYWdlKSB7XG5cdGlmIChtZXNzYWdlKSB7XG5cdFx0c2V0TWVzc2FnZUZsYWdzVG9DYWNoZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBtZXNzYWdlLnVpZCwgW1xuXHRcdFx0bWVzc2FnZS51bnNlZW4oKSxcblx0XHRcdG1lc3NhZ2UuZmxhZ2dlZCgpLFxuXHRcdFx0bWVzc2FnZS5hbnN3ZXJlZCgpLFxuXHRcdFx0bWVzc2FnZS5mb3J3YXJkZWQoKSxcblx0XHRcdG1lc3NhZ2UuaXNSZWFkUmVjZWlwdCgpLFxuXHRcdFx0bWVzc2FnZS5kZWxldGVkTWFyaygpXG5cdFx0XSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkXG4gKiBAcGFyYW0ge0FycmF5fSBmbGFnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlGb2xkZXJBbmRVaWQoZm9sZGVyLCB1aWQsIGZsYWdzKSB7XG5cdGlmIChpc0FycmF5KGZsYWdzKSAmJiAwIDwgZmxhZ3MubGVuZ3RoKSB7XG5cdFx0c2V0TWVzc2FnZUZsYWdzVG9DYWNoZShmb2xkZXIsIHVpZCwgZmxhZ3MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICogQHBhcmFtIHtudW1iZXJ9IHNldEFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oZm9sZGVyLCB1aWQsIHNldEFjdGlvbikge1xuXHRsZXQgdW5yZWFkID0gMDtcblx0Y29uc3QgZmxhZ3MgPSBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUoZm9sZGVyLCB1aWQpO1xuXG5cdGlmIChpc0FycmF5KGZsYWdzKSAmJiAwIDwgZmxhZ3MubGVuZ3RoKSB7XG5cdFx0aWYgKGZsYWdzWzBdKSB7XG5cdFx0XHR1bnJlYWQgPSAxO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAoc2V0QWN0aW9uKSB7XG5cdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2Vlbjpcblx0XHRcdFx0ZmxhZ3NbMF0gPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuOlxuXHRcdFx0XHRmbGFnc1swXSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWc6XG5cdFx0XHRcdGZsYWdzWzFdID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnOlxuXHRcdFx0XHRmbGFnc1sxXSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cblx0XHRzZXRNZXNzYWdlRmxhZ3NUb0NhY2hlKGZvbGRlciwgdWlkLCBmbGFncyk7XG5cdH1cblxuXHRyZXR1cm4gdW5yZWFkO1xufVxuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNVbmQsIGlzTm9ybWFsLCB0cmltLCBlbmNvZGVVUklDb21wb25lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFJPT1QgPSAnLi8nLFxuXHRIQVNIX1BSRUZJWCA9ICcjLycsXG5cdFNFUlZFUl9QUkVGSVggPSAnLi8/Jyxcblx0U1VCX1FVRVJZX1BSRUZJWCA9ICcmcVtdPScsXG5cdFZFUlNJT04gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpLFxuXHRXRUJfUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlBhdGgnKSB8fCAnJyxcblx0VkVSU0lPTl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViVmVyc2lvblBhdGgnKSB8fCAncmFpbmxvb3Avdi8nICsgVkVSU0lPTiArICcvJyxcblx0U1RBVElDX1BSRUZJWCA9IFZFUlNJT05fUFJFRklYICsgJ3N0YXRpYy8nLFxuXHRBRE1JTl9IT1NUX1VTRSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluSG9zdFVzZScpLFxuXHRBRE1JTl9QQVRIID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluUGF0aCcpIHx8ICdhZG1pbic7XG5cbmxldCBBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUF1dGhTdWZmaXgoKSB7XG5cdEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViUXVlcnlQcmVmaXgoKSB7XG5cdHJldHVybiBTVUJfUVVFUllfUFJFRklYO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3RhcnR1cFVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3Qoc3RhcnR1cFVybCA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArIHBTdHJpbmcoc3RhcnR1cFVybCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RBZG1pbigpIHtcblx0cmV0dXJuIEFETUlOX0hPU1RfVVNFID8gUk9PVCA6IFNFUlZFUl9QUkVGSVggKyBBRE1JTl9QQVRIO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VXNlcigpIHtcblx0cmV0dXJuIFJPT1Q7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFJhdyh0eXBlLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRjdXN0b21TcGVjU3VmZml4ID0gaXNVbmQoY3VzdG9tU3BlY1N1ZmZpeCkgPyBBVVRIX1BSRUZJWCA6IGN1c3RvbVNwZWNTdWZmaXg7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRjdXN0b21TcGVjU3VmZml4ICtcblx0XHQnLycgK1xuXHRcdHR5cGUgK1xuXHRcdCcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRkb3dubG9hZFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudERvd25sb2FkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdEb3dubG9hZCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdUaHVtYm5haWwnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4oZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdBc1BsYWluJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudEZyYW1lZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRnJhbWVkVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlcXVlc3QodHlwZSkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvJyArIHR5cGUgKyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRDb250YWN0cygpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZENvbnRhY3RzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEJhY2tncm91bmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRCYWNrZ3JvdW5kJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FwcGVuZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZShlbWFpbCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQ2hhbmdlJykgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhamF4KGFkZCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQWpheCcpICsgYWRkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VWaWV3TGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0QVVUSF9QUkVGSVggK1xuXHRcdCcvVmlld0FzUGxhaW4vJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRyZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VEb3dubG9hZExpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvRG93bmxvYWQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyByZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckxpbmsoZW1haWwpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL0F2YXRhci8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0xpbmsoaGFzaCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvUHVibGljLycgKyBoYXNoICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlckJhY2tncm91bmQoaGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Vc2VyQmFja2dyb3VuZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIGhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhwSW5mbygpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0luZm8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWRtaW5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW5nTGluayhsYW5nLCBpc0FkbWluKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9MYW5nLzAvJyArIChpc0FkbWluID8gJ0FkbWluJyA6ICdBcHAnKSArICcvJyArIHdpbmRvdy5lbmNvZGVVUkkobGFuZykgKyAnLycgKyBWRVJTSU9OICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c1ZjZigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c1ZjZi8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c0NzdigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c0Nzdi8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0geGF1dGggPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEdvb2dsZSh4YXV0aCA9IGZhbHNlKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0J1NvY2lhbEdvb2dsZScgK1xuXHRcdCgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJykgK1xuXHRcdCh4YXV0aCA/ICcmeGF1dGg9MScgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsVHdpdHRlcigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnU29jaWFsVHdpdHRlcicgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxGYWNlYm9vaygpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJ1NvY2lhbEZhY2Vib29rJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY1ByZWZpeChwYXRoKSB7XG5cdHJldHVybiBTVEFUSUNfUFJFRklYICsgcGF0aDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlDb250YWN0UGljKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2VtcHR5LWNvbnRhY3QucG5nJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc291bmQoZmlsZU5hbWUpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnc291bmRzLycgKyBmaWxlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbk1haWxJY29uKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2ljb20tbWVzc2FnZS1ub3RpZmljYXRpb24ucG5nJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3AubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3Aud29ya2VyLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VyUGF0aCgpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lUHJldmlld0xpbmsodGhlbWUpIHtcblx0bGV0IHByZWZpeCA9IFZFUlNJT05fUFJFRklYO1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdFx0cHJlZml4ID0gV0VCX1BSRUZJWDtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAndGhlbWVzLycgKyB3aW5kb3cuZW5jb2RlVVJJKHRoZW1lKSArICcvaW1hZ2VzL3ByZXZpZXcucG5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluYm94KGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCcpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ21haWxib3gvJyArIGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHNjcmVlbk5hbWUgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzKHNjcmVlbk5hbWUgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnc2V0dGluZ3MnICsgKHNjcmVlbk5hbWUgPyAnLycgKyBzY3JlZW5OYW1lIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhYm91dCgpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ2Fib3V0Jztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWluKHNjcmVlbk5hbWUpIHtcblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYO1xuXHRzd2l0Y2ggKHNjcmVlbk5hbWUpIHtcblx0XHRjYXNlICdBZG1pbkRvbWFpbnMnOlxuXHRcdFx0cmVzdWx0ICs9ICdkb21haW5zJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluU2VjdXJpdHknOlxuXHRcdFx0cmVzdWx0ICs9ICdzZWN1cml0eSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pbkxpY2Vuc2luZyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2xpY2Vuc2luZyc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcGFnZSA9IDFcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2VhcmNoID0gJydcbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGhyZWFkVWlkID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsQm94KGZvbGRlciwgcGFnZSA9IDEsIHNlYXJjaCA9ICcnLCB0aHJlYWRVaWQgPSAnJykge1xuXHRwYWdlID0gaXNOb3JtYWwocGFnZSkgPyBwSW50KHBhZ2UpIDogMTtcblx0c2VhcmNoID0gcFN0cmluZyhzZWFyY2gpO1xuXG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWCArICdtYWlsYm94Lyc7XG5cblx0aWYgKCcnICE9PSBmb2xkZXIpIHtcblx0XHRjb25zdCByZXN1bHRUaHJlYWRVaWQgPSBwSW50KHRocmVhZFVpZCk7XG5cdFx0cmVzdWx0ICs9IHdpbmRvdy5lbmNvZGVVUkkoZm9sZGVyKSArICgwIDwgcmVzdWx0VGhyZWFkVWlkID8gJ34nICsgcmVzdWx0VGhyZWFkVWlkIDogJycpO1xuXHR9XG5cblx0aWYgKDEgPCBwYWdlKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnL3AnICsgcGFnZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2VhcmNoKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKHNlYXJjaCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5cbmltcG9ydCB7IHBTdHJpbmcsIHBJbnQsIGlzQXJyYXksIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQge1xuXHRDT05UQUNUU19TWU5DX0FKQVhfVElNRU9VVCxcblx0REVGQVVMVF9BSkFYX1RJTUVPVVQsXG5cdFNFQVJDSF9BSkFYX1RJTUVPVVQsXG5cdFNBVkVfTUVTU0FHRV9BSkFYX1RJTUVPVVQsXG5cdFNFTkRfTUVTU0FHRV9BSkFYX1RJTUVPVVRcbn0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5cbmltcG9ydCB7XG5cdGdldEZvbGRlckhhc2gsXG5cdGdldEZvbGRlckluYm94TmFtZSxcblx0Z2V0Rm9sZGVyVWlkTmV4dCxcblx0Z2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCxcblx0Z2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlXG59IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IHN1YlF1ZXJ5UHJlZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCAqIGFzIEJhc2U2NCBmcm9tICdDb21tb24vQmFzZTY0JztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IEFic3RyYWN0QWpheFJlbW90ZSB9IGZyb20gJ1JlbW90ZS9BYnN0cmFjdEFqYXgnO1xuXG5jbGFzcyBSZW1vdGVVc2VyQWpheCBleHRlbmRzIEFic3RyYWN0QWpheFJlbW90ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vUmVxdWVzdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRmb2xkZXJzKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnRm9sZGVycycsXG5cdFx0XHR7XG5cdFx0XHRcdCdTZW50Rm9sZGVyJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NlbnRGb2xkZXInKSxcblx0XHRcdFx0J0RyYWZ0Rm9sZGVyJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0RyYWZ0Rm9sZGVyJyksXG5cdFx0XHRcdCdTcGFtRm9sZGVyJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NwYW1Gb2xkZXInKSxcblx0XHRcdFx0J1RyYXNoRm9sZGVyJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RyYXNoRm9sZGVyJyksXG5cdFx0XHRcdCdBcmNoaXZlRm9sZGVyJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FyY2hpdmVGb2xkZXInKVxuXHRcdFx0fSxcblx0XHRcdG51bGwsXG5cdFx0XHQnJyxcblx0XHRcdFsnRm9sZGVycyddXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRW1haWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNMb2dpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Bhc3N3b3JkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlNpZ25NZVxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNMYW5ndWFnZVxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNBZGRpdGlvbmFsQ29kZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiQWRkaXRpb25hbENvZGVTaWduTWVcblx0ICovXG5cdGxvZ2luKGZDYWxsYmFjaywgc0VtYWlsLCBzTG9naW4sIHNQYXNzd29yZCwgYlNpZ25NZSwgc0xhbmd1YWdlLCBzQWRkaXRpb25hbENvZGUsIGJBZGRpdGlvbmFsQ29kZVNpZ25NZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTG9naW4nLCB7XG5cdFx0XHQnRW1haWwnOiBzRW1haWwsXG5cdFx0XHQnTG9naW4nOiBzTG9naW4sXG5cdFx0XHQnUGFzc3dvcmQnOiBzUGFzc3dvcmQsXG5cdFx0XHQnTGFuZ3VhZ2UnOiBzTGFuZ3VhZ2UgfHwgJycsXG5cdFx0XHQnQWRkaXRpb25hbENvZGUnOiBzQWRkaXRpb25hbENvZGUgfHwgJycsXG5cdFx0XHQnQWRkaXRpb25hbENvZGVTaWduTWUnOiBiQWRkaXRpb25hbENvZGVTaWduTWUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lnbk1lJzogYlNpZ25NZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFR3b0ZhY3RvcihmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFR3b0ZhY3RvckluZm8nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjcmVhdGVUd29GYWN0b3IoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDcmVhdGVUd29GYWN0b3JTZWNyZXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjbGVhclR3b0ZhY3RvcihmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NsZWFyVHdvRmFjdG9ySW5mbycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHNob3dUd29GYWN0b3JTZWNyZXQoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTaG93VHdvRmFjdG9yU2VjcmV0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0NvZGVcblx0ICovXG5cdHRlc3RUd29GYWN0b3IoZkNhbGxiYWNrLCBzQ29kZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVGVzdFR3b0ZhY3RvckluZm8nLCB7XG5cdFx0XHQnQ29kZSc6IHNDb2RlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJFbmFibGVcblx0ICovXG5cdGVuYWJsZVR3b0ZhY3RvcihmQ2FsbGJhY2ssIGJFbmFibGUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0VuYWJsZVR3b0ZhY3RvcicsIHtcblx0XHRcdCdFbmFibGUnOiBiRW5hYmxlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y2xlYXJUd29GYWN0b3JJbmZvKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ2xlYXJUd29GYWN0b3JJbmZvJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y29udGFjdHNTeW5jKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ29udGFjdHNTeW5jJywgbnVsbCwgQ09OVEFDVFNfU1lOQ19BSkFYX1RJTUVPVVQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtib29sZWFufSBiRW5hYmxlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVXJsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVXNlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Bhc3N3b3JkXG5cdCAqL1xuXHRzYXZlQ29udGFjdHNTeW5jRGF0YShmQ2FsbGJhY2ssIGJFbmFibGUsIHNVcmwsIHNVc2VyLCBzUGFzc3dvcmQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NhdmVDb250YWN0c1N5bmNEYXRhJywge1xuXHRcdFx0J0VuYWJsZSc6IGJFbmFibGUgPyAnMScgOiAnMCcsXG5cdFx0XHQnVXJsJzogc1VybCxcblx0XHRcdCdVc2VyJzogc1VzZXIsXG5cdFx0XHQnUGFzc3dvcmQnOiBzUGFzc3dvcmRcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRW1haWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNQYXNzd29yZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiTmV3XG5cdCAqL1xuXHRhY2NvdW50U2V0dXAoZkNhbGxiYWNrLCBzRW1haWwsIHNQYXNzd29yZCwgYk5ldyA9IHRydWUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FjY291bnRTZXR1cCcsIHtcblx0XHRcdCdFbWFpbCc6IHNFbWFpbCxcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZCxcblx0XHRcdCdOZXcnOiBiTmV3ID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0VtYWlsVG9EZWxldGVcblx0ICovXG5cdGFjY291bnREZWxldGUoZkNhbGxiYWNrLCBzRW1haWxUb0RlbGV0ZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWNjb3VudERlbGV0ZScsIHtcblx0XHRcdCdFbWFpbFRvRGVsZXRlJzogc0VtYWlsVG9EZWxldGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFBY2NvdW50c1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhSWRlbnRpdGllc1xuXHQgKi9cblx0YWNjb3VudHNBbmRJZGVudGl0aWVzU29ydE9yZGVyKGZDYWxsYmFjaywgYUFjY291bnRzLCBhSWRlbnRpdGllcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWNjb3VudHNBbmRJZGVudGl0aWVzU29ydE9yZGVyJywge1xuXHRcdFx0J0FjY291bnRzJzogYUFjY291bnRzLFxuXHRcdFx0J0lkZW50aXRpZXMnOiBhSWRlbnRpdGllc1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0VtYWlsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcGx5VG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNCY2Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTaWduYXR1cmVcblx0ICogQHBhcmFtIHtib29sZWFufSBiU2lnbmF0dXJlSW5zZXJ0QmVmb3JlXG5cdCAqL1xuXHRpZGVudGl0eVVwZGF0ZShmQ2FsbGJhY2ssIHNJZCwgc0VtYWlsLCBzTmFtZSwgc1JlcGx5VG8sIHNCY2MsIHNTaWduYXR1cmUsIGJTaWduYXR1cmVJbnNlcnRCZWZvcmUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0lkZW50aXR5VXBkYXRlJywge1xuXHRcdFx0J0lkJzogc0lkLFxuXHRcdFx0J0VtYWlsJzogc0VtYWlsLFxuXHRcdFx0J05hbWUnOiBzTmFtZSxcblx0XHRcdCdSZXBseVRvJzogc1JlcGx5VG8sXG5cdFx0XHQnQmNjJzogc0JjYyxcblx0XHRcdCdTaWduYXR1cmUnOiBzU2lnbmF0dXJlLFxuXHRcdFx0J1NpZ25hdHVyZUluc2VydEJlZm9yZSc6IGJTaWduYXR1cmVJbnNlcnRCZWZvcmUgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSWRUb0RlbGV0ZVxuXHQgKi9cblx0aWRlbnRpdHlEZWxldGUoZkNhbGxiYWNrLCBzSWRUb0RlbGV0ZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnSWRlbnRpdHlEZWxldGUnLCB7XG5cdFx0XHQnSWRUb0RlbGV0ZSc6IHNJZFRvRGVsZXRlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWNjb3VudHNBbmRJZGVudGl0aWVzKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWNjb3VudHNBbmRJZGVudGl0aWVzJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWNjb3VudHNDb3VudHMoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBY2NvdW50c0NvdW50cycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtBcnJheX0gZmlsdGVyc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSYXdJc0FjdGl2ZVxuXHQgKi9cblx0ZmlsdGVyc1NhdmUoZkNhbGxiYWNrLCBmaWx0ZXJzLCByYXcsIGlzUmF3SXNBY3RpdmUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZpbHRlcnNTYXZlJywge1xuXHRcdFx0J1Jhdyc6IHJhdyxcblx0XHRcdCdSYXdJc0FjdGl2ZSc6IGJvb2xUb0FqYXgoaXNSYXdJc0FjdGl2ZSksXG5cdFx0XHQnRmlsdGVycyc6IF8ubWFwKGZpbHRlcnMsIChpdGVtKSA9PiBpdGVtLnRvSnNvbigpKVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGZpbHRlcnNHZXQoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGaWx0ZXJzJywge30pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHRlbXBsYXRlcyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1RlbXBsYXRlcycsIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJRFxuXHQgKi9cblx0dGVtcGxhdGVHZXRCeUlkKGZDYWxsYmFjaywgc0lEKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdUZW1wbGF0ZUdldEJ5SUQnLCB7XG5cdFx0XHQnSUQnOiBzSURcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJRFxuXHQgKi9cblx0dGVtcGxhdGVEZWxldGUoZkNhbGxiYWNrLCBzSUQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1RlbXBsYXRlRGVsZXRlJywge1xuXHRcdFx0J0lkVG9EZWxldGUnOiBzSURcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJRFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNCb2R5XG5cdCAqL1xuXHR0ZW1wbGF0ZVNldHVwKGZDYWxsYmFjaywgc0lELCBzTmFtZSwgc0JvZHkpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1RlbXBsYXRlU2V0dXAnLCB7XG5cdFx0XHQnSUQnOiBzSUQsXG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J0JvZHknOiBzQm9keVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7bnVtYmVyPX0gaU9mZnNldCA9IDBcblx0ICogQHBhcmFtIHtudW1iZXI9fSBpTGltaXQgPSAyMFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNTZWFyY2ggPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNUaHJlYWRVaWQgPSAnJ1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiU2lsZW50ID0gZmFsc2Vcblx0ICovXG5cdG1lc3NhZ2VMaXN0KGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBpT2Zmc2V0ID0gMCwgaUxpbWl0ID0gMjAsIHNTZWFyY2ggPSAnJywgc1RocmVhZFVpZCA9ICcnLCBiU2lsZW50ID0gZmFsc2UpIHtcblx0XHRzRm9sZGVyRnVsbE5hbWVSYXcgPSBwU3RyaW5nKHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cblx0XHRjb25zdCBmb2xkZXJIYXNoID0gZ2V0Rm9sZGVySGFzaChzRm9sZGVyRnVsbE5hbWVSYXcpLFxuXHRcdFx0dXNlVGhyZWFkcyA9IEFwcFN0b3JlLnRocmVhZHNBbGxvd2VkKCkgJiYgU2V0dGluZ3NTdG9yZS51c2VUaHJlYWRzKCksXG5cdFx0XHRpbmJveFVpZE5leHQgPSBnZXRGb2xkZXJJbmJveE5hbWUoKSA9PT0gc0ZvbGRlckZ1bGxOYW1lUmF3ID8gZ2V0Rm9sZGVyVWlkTmV4dChzRm9sZGVyRnVsbE5hbWVSYXcpIDogJyc7XG5cblx0XHRpZiAoJycgIT09IGZvbGRlckhhc2ggJiYgKCcnID09PSBzU2VhcmNoIHx8IC0xID09PSBzU2VhcmNoLmluZGV4T2YoJ2lzOicpKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRcdGZDYWxsYmFjayxcblx0XHRcdFx0J01lc3NhZ2VMaXN0Jyxcblx0XHRcdFx0e30sXG5cdFx0XHRcdCcnID09PSBzU2VhcmNoID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBTRUFSQ0hfQUpBWF9USU1FT1VULFxuXHRcdFx0XHQnTWVzc2FnZUxpc3QvJyArXG5cdFx0XHRcdFx0c3ViUXVlcnlQcmVmaXgoKSArXG5cdFx0XHRcdFx0Jy8nICtcblx0XHRcdFx0XHRCYXNlNjQudXJsc2FmZV9lbmNvZGUoXG5cdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdFx0aU9mZnNldCxcblx0XHRcdFx0XHRcdFx0aUxpbWl0LFxuXHRcdFx0XHRcdFx0XHRzU2VhcmNoLFxuXHRcdFx0XHRcdFx0XHRBcHBTdG9yZS5wcm9qZWN0SGFzaCgpLFxuXHRcdFx0XHRcdFx0XHRmb2xkZXJIYXNoLFxuXHRcdFx0XHRcdFx0XHRpbmJveFVpZE5leHQsXG5cdFx0XHRcdFx0XHRcdHVzZVRocmVhZHMgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0XHRcdHVzZVRocmVhZHMgPyBzVGhyZWFkVWlkIDogJydcblx0XHRcdFx0XHRcdF0uam9pbihTdHJpbmcuZnJvbUNoYXJDb2RlKDApKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdGJTaWxlbnQgPyBbXSA6IFsnTWVzc2FnZUxpc3QnXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdNZXNzYWdlTGlzdCcsXG5cdFx0XHR7XG5cdFx0XHRcdEZvbGRlcjogc0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRPZmZzZXQ6IGlPZmZzZXQsXG5cdFx0XHRcdExpbWl0OiBpTGltaXQsXG5cdFx0XHRcdFNlYXJjaDogc1NlYXJjaCxcblx0XHRcdFx0VWlkTmV4dDogaW5ib3hVaWROZXh0LFxuXHRcdFx0XHRVc2VUaHJlYWRzOiB1c2VUaHJlYWRzID8gJzEnIDogJzAnLFxuXHRcdFx0XHRUaHJlYWRVaWQ6IHVzZVRocmVhZHMgPyBzVGhyZWFkVWlkIDogJydcblx0XHRcdH0sXG5cdFx0XHQnJyA9PT0gc1NlYXJjaCA/IERFRkFVTFRfQUpBWF9USU1FT1VUIDogU0VBUkNIX0FKQVhfVElNRU9VVCxcblx0XHRcdCcnLFxuXHRcdFx0YlNpbGVudCA/IFtdIDogWydNZXNzYWdlTGlzdCddXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFEb3dubG9hZHNcblx0ICovXG5cdG1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cyhmQ2FsbGJhY2ssIGFEb3dubG9hZHMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J01lc3NhZ2VVcGxvYWRBdHRhY2htZW50cycsXG5cdFx0XHR7XG5cdFx0XHRcdCdBdHRhY2htZW50cyc6IGFEb3dubG9hZHNcblx0XHRcdH0sXG5cdFx0XHQ5OTkwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge251bWJlcn0gaVVpZFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdG1lc3NhZ2UoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGlVaWQpIHtcblx0XHRzRm9sZGVyRnVsbE5hbWVSYXcgPSBwU3RyaW5nKHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0aVVpZCA9IHBJbnQoaVVpZCk7XG5cblx0XHRpZiAoZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChzRm9sZGVyRnVsbE5hbWVSYXcpICYmIDAgPCBpVWlkKSB7XG5cdFx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHRcdCdNZXNzYWdlJyxcblx0XHRcdFx0e30sXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCdNZXNzYWdlLycgK1xuXHRcdFx0XHRcdHN1YlF1ZXJ5UHJlZml4KCkgK1xuXHRcdFx0XHRcdCcvJyArXG5cdFx0XHRcdFx0QmFzZTY0LnVybHNhZmVfZW5jb2RlKFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0XHRcdGlVaWQsXG5cdFx0XHRcdFx0XHRcdEFwcFN0b3JlLnByb2plY3RIYXNoKCksXG5cdFx0XHRcdFx0XHRcdEFwcFN0b3JlLnRocmVhZHNBbGxvd2VkKCkgJiYgU2V0dGluZ3NTdG9yZS51c2VUaHJlYWRzKCkgPyAnMScgOiAnMCdcblx0XHRcdFx0XHRcdF0uam9pbihTdHJpbmcuZnJvbUNoYXJDb2RlKDApKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFsnTWVzc2FnZSddXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhRXh0ZXJuYWxzXG5cdCAqL1xuXHRjb21wb3NlVXBsb2FkRXh0ZXJuYWxzKGZDYWxsYmFjaywgYUV4dGVybmFscykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnQ29tcG9zZVVwbG9hZEV4dGVybmFscycsXG5cdFx0XHR7XG5cdFx0XHRcdCdFeHRlcm5hbHMnOiBhRXh0ZXJuYWxzXG5cdFx0XHR9LFxuXHRcdFx0OTk5MDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVXJsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWNjZXNzVG9rZW5cblx0ICovXG5cdGNvbXBvc2VVcGxvYWREcml2ZShmQ2FsbGJhY2ssIHNVcmwsIHNBY2Nlc3NUb2tlbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnQ29tcG9zZVVwbG9hZERyaXZlJyxcblx0XHRcdHtcblx0XHRcdFx0J0FjY2Vzc1Rva2VuJzogc0FjY2Vzc1Rva2VuLFxuXHRcdFx0XHQnVXJsJzogc1VybFxuXHRcdFx0fSxcblx0XHRcdDk5OTAwMFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBsaXN0ID0gW11cblx0ICovXG5cdGZvbGRlckluZm9ybWF0aW9uKGZDYWxsYmFjaywgZm9sZGVyLCBsaXN0ID0gW10pIHtcblx0XHRsZXQgcmVxdWVzdCA9IHRydWU7XG5cdFx0Y29uc3QgdWlkcyA9IFtdO1xuXG5cdFx0aWYgKGlzQXJyYXkobGlzdCkgJiYgMCA8IGxpc3QubGVuZ3RoKSB7XG5cdFx0XHRyZXF1ZXN0ID0gZmFsc2U7XG5cdFx0XHRfLmVhY2gobGlzdCwgKG1lc3NhZ2VMaXN0SXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoIWdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlTGlzdEl0ZW0uZm9sZGVyRnVsbE5hbWVSYXcsIG1lc3NhZ2VMaXN0SXRlbS51aWQpKSB7XG5cdFx0XHRcdFx0dWlkcy5wdXNoKG1lc3NhZ2VMaXN0SXRlbS51aWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKDAgPCBtZXNzYWdlTGlzdEl0ZW0udGhyZWFkcygpLmxlbmd0aCkge1xuXHRcdFx0XHRcdF8uZWFjaChtZXNzYWdlTGlzdEl0ZW0udGhyZWFkcygpLCAodWlkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlTGlzdEl0ZW0uZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCkpIHtcblx0XHRcdFx0XHRcdFx0dWlkcy5wdXNoKHVpZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoMCA8IHVpZHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJlcXVlc3QgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0KSB7XG5cdFx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZvbGRlckluZm9ybWF0aW9uJywge1xuXHRcdFx0XHQnRm9sZGVyJzogZm9sZGVyLFxuXHRcdFx0XHQnRmxhZ3NVaWRzJzogaXNBcnJheSh1aWRzKSA/IHVpZHMuam9pbignLCcpIDogJycsXG5cdFx0XHRcdCdVaWROZXh0JzogZ2V0Rm9sZGVySW5ib3hOYW1lKCkgPT09IGZvbGRlciA/IGdldEZvbGRlclVpZE5leHQoZm9sZGVyKSA6ICcnXG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcygpKSB7XG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhRm9sZGVyc1xuXHQgKi9cblx0Zm9sZGVySW5mb3JtYXRpb25NdWx0aXBseShmQ2FsbGJhY2ssIGFGb2xkZXJzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5Jywge1xuXHRcdFx0J0ZvbGRlcnMnOiBhRm9sZGVyc1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGxvZ291dChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0xvZ291dCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTZXRGbGFnZ2VkXG5cdCAqL1xuXHRtZXNzYWdlU2V0RmxhZ2dlZChmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgYVVpZHMsIGJTZXRGbGFnZ2VkKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdNZXNzYWdlU2V0RmxhZ2dlZCcsIHtcblx0XHRcdCdGb2xkZXInOiBzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnVWlkcyc6IGFVaWRzLmpvaW4oJywnKSxcblx0XHRcdCdTZXRBY3Rpb24nOiBiU2V0RmxhZ2dlZCA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTZXRTZWVuXG5cdCAqL1xuXHRtZXNzYWdlU2V0U2VlbihmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgYVVpZHMsIGJTZXRTZWVuKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdNZXNzYWdlU2V0U2VlbicsIHtcblx0XHRcdCdGb2xkZXInOiBzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnVWlkcyc6IGFVaWRzLmpvaW4oJywnKSxcblx0XHRcdCdTZXRBY3Rpb24nOiBiU2V0U2VlbiA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTZXRTZWVuXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFUaHJlYWRVaWRzID0gbnVsbFxuXHQgKi9cblx0bWVzc2FnZVNldFNlZW5Ub0FsbChmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgYlNldFNlZW4sIGFUaHJlYWRVaWRzID0gbnVsbCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTWVzc2FnZVNldFNlZW5Ub0FsbCcsIHtcblx0XHRcdCdGb2xkZXInOiBzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnU2V0QWN0aW9uJzogYlNldFNlZW4gPyAnMScgOiAnMCcsXG5cdFx0XHQnVGhyZWFkVWlkcyc6IGFUaHJlYWRVaWRzID8gYVRocmVhZFVpZHMuam9pbignLCcpIDogJydcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSWRlbnRpdHlJRFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lc3NhZ2VGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNNZXNzYWdlVWlkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRHJhZnRGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0NjXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQmNjXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVwbHlUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1N1YmplY3Rcblx0ICogQHBhcmFtIHtib29sZWFufSBiVGV4dElzSHRtbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RleHRcblx0ICogQHBhcmFtIHtBcnJheX0gYUF0dGFjaG1lbnRzXG5cdCAqIEBwYXJhbSB7KEFycmF5fG51bGwpfSBhRHJhZnRJbmZvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSW5SZXBseVRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVmZXJlbmNlc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJNYXJrQXNJbXBvcnRhbnRcblx0ICovXG5cdHNhdmVNZXNzYWdlKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzSWRlbnRpdHlJRCxcblx0XHRzTWVzc2FnZUZvbGRlcixcblx0XHRzTWVzc2FnZVVpZCxcblx0XHRzRHJhZnRGb2xkZXIsXG5cdFx0c1RvLFxuXHRcdHNDYyxcblx0XHRzQmNjLFxuXHRcdHNSZXBseVRvLFxuXHRcdHNTdWJqZWN0LFxuXHRcdGJUZXh0SXNIdG1sLFxuXHRcdHNUZXh0LFxuXHRcdGFBdHRhY2htZW50cyxcblx0XHRhRHJhZnRJbmZvLFxuXHRcdHNJblJlcGx5VG8sXG5cdFx0c1JlZmVyZW5jZXMsXG5cdFx0Yk1hcmtBc0ltcG9ydGFudFxuXHQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J1NhdmVNZXNzYWdlJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkZW50aXR5SUQnOiBzSWRlbnRpdHlJRCxcblx0XHRcdFx0J01lc3NhZ2VGb2xkZXInOiBzTWVzc2FnZUZvbGRlcixcblx0XHRcdFx0J01lc3NhZ2VVaWQnOiBzTWVzc2FnZVVpZCxcblx0XHRcdFx0J0RyYWZ0Rm9sZGVyJzogc0RyYWZ0Rm9sZGVyLFxuXHRcdFx0XHQnVG8nOiBzVG8sXG5cdFx0XHRcdCdDYyc6IHNDYyxcblx0XHRcdFx0J0JjYyc6IHNCY2MsXG5cdFx0XHRcdCdSZXBseVRvJzogc1JlcGx5VG8sXG5cdFx0XHRcdCdTdWJqZWN0Jzogc1N1YmplY3QsXG5cdFx0XHRcdCdUZXh0SXNIdG1sJzogYlRleHRJc0h0bWwgPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdUZXh0Jzogc1RleHQsXG5cdFx0XHRcdCdEcmFmdEluZm8nOiBhRHJhZnRJbmZvLFxuXHRcdFx0XHQnSW5SZXBseVRvJzogc0luUmVwbHlUbyxcblx0XHRcdFx0J1JlZmVyZW5jZXMnOiBzUmVmZXJlbmNlcyxcblx0XHRcdFx0J01hcmtBc0ltcG9ydGFudCc6IGJNYXJrQXNJbXBvcnRhbnQgPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdBdHRhY2htZW50cyc6IGFBdHRhY2htZW50c1xuXHRcdFx0fSxcblx0XHRcdFNBVkVfTUVTU0FHRV9BSkFYX1RJTUVPVVRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNNZXNzYWdlRm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZVVpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlYWRSZWNlaXB0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU3ViamVjdFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RleHRcblx0ICovXG5cdHNlbmRSZWFkUmVjZWlwdE1lc3NhZ2UoZkNhbGxiYWNrLCBzTWVzc2FnZUZvbGRlciwgc01lc3NhZ2VVaWQsIHNSZWFkUmVjZWlwdCwgc1N1YmplY3QsIHNUZXh0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTZW5kUmVhZFJlY2VpcHRNZXNzYWdlJywge1xuXHRcdFx0J01lc3NhZ2VGb2xkZXInOiBzTWVzc2FnZUZvbGRlcixcblx0XHRcdCdNZXNzYWdlVWlkJzogc01lc3NhZ2VVaWQsXG5cdFx0XHQnUmVhZFJlY2VpcHQnOiBzUmVhZFJlY2VpcHQsXG5cdFx0XHQnU3ViamVjdCc6IHNTdWJqZWN0LFxuXHRcdFx0J1RleHQnOiBzVGV4dFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJZGVudGl0eUlEXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZUZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lc3NhZ2VVaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTZW50Rm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0JjY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcGx5VG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTdWJqZWN0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlRleHRJc0h0bWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUZXh0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFBdHRhY2htZW50c1xuXHQgKiBAcGFyYW0geyhBcnJheXxudWxsKX0gYURyYWZ0SW5mb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0luUmVwbHlUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlZmVyZW5jZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBiUmVxdWVzdERzblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJSZXF1ZXN0UmVhZFJlY2VpcHRcblx0ICogQHBhcmFtIHtib29sZWFufSBiTWFya0FzSW1wb3J0YW50XG5cdCAqL1xuXHRzZW5kTWVzc2FnZShcblx0XHRmQ2FsbGJhY2ssXG5cdFx0c0lkZW50aXR5SUQsXG5cdFx0c01lc3NhZ2VGb2xkZXIsXG5cdFx0c01lc3NhZ2VVaWQsXG5cdFx0c1NlbnRGb2xkZXIsXG5cdFx0c1RvLFxuXHRcdHNDYyxcblx0XHRzQmNjLFxuXHRcdHNSZXBseVRvLFxuXHRcdHNTdWJqZWN0LFxuXHRcdGJUZXh0SXNIdG1sLFxuXHRcdHNUZXh0LFxuXHRcdGFBdHRhY2htZW50cyxcblx0XHRhRHJhZnRJbmZvLFxuXHRcdHNJblJlcGx5VG8sXG5cdFx0c1JlZmVyZW5jZXMsXG5cdFx0YlJlcXVlc3REc24sXG5cdFx0YlJlcXVlc3RSZWFkUmVjZWlwdCxcblx0XHRiTWFya0FzSW1wb3J0YW50XG5cdCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnU2VuZE1lc3NhZ2UnLFxuXHRcdFx0e1xuXHRcdFx0XHQnSWRlbnRpdHlJRCc6IHNJZGVudGl0eUlELFxuXHRcdFx0XHQnTWVzc2FnZUZvbGRlcic6IHNNZXNzYWdlRm9sZGVyLFxuXHRcdFx0XHQnTWVzc2FnZVVpZCc6IHNNZXNzYWdlVWlkLFxuXHRcdFx0XHQnU2VudEZvbGRlcic6IHNTZW50Rm9sZGVyLFxuXHRcdFx0XHQnVG8nOiBzVG8sXG5cdFx0XHRcdCdDYyc6IHNDYyxcblx0XHRcdFx0J0JjYyc6IHNCY2MsXG5cdFx0XHRcdCdSZXBseVRvJzogc1JlcGx5VG8sXG5cdFx0XHRcdCdTdWJqZWN0Jzogc1N1YmplY3QsXG5cdFx0XHRcdCdUZXh0SXNIdG1sJzogYlRleHRJc0h0bWwgPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdUZXh0Jzogc1RleHQsXG5cdFx0XHRcdCdEcmFmdEluZm8nOiBhRHJhZnRJbmZvLFxuXHRcdFx0XHQnSW5SZXBseVRvJzogc0luUmVwbHlUbyxcblx0XHRcdFx0J1JlZmVyZW5jZXMnOiBzUmVmZXJlbmNlcyxcblx0XHRcdFx0J0Rzbic6IGJSZXF1ZXN0RHNuID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnUmVhZFJlY2VpcHRSZXF1ZXN0JzogYlJlcXVlc3RSZWFkUmVjZWlwdCA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J01hcmtBc0ltcG9ydGFudCc6IGJNYXJrQXNJbXBvcnRhbnQgPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdBdHRhY2htZW50cyc6IGFBdHRhY2htZW50c1xuXHRcdFx0fSxcblx0XHRcdFNFTkRfTUVTU0FHRV9BSkFYX1RJTUVPVVRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9EYXRhXG5cdCAqL1xuXHRzYXZlU3lzdGVtRm9sZGVycyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTeXN0ZW1Gb2xkZXJzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9EYXRhXG5cdCAqL1xuXHRzYXZlU2V0dGluZ3MoZkNhbGxiYWNrLCBvRGF0YSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU2V0dGluZ3NVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gdmFsdWVGblxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZm5cblx0ICovXG5cdHNhdmVTZXR0aW5nc0hlbHBlcihrZXksIHZhbHVlRm4sIGZuKSB7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoZm4gfHwgbnVsbCwge1xuXHRcdFx0XHRba2V5XTogdmFsdWVGbiA/IHZhbHVlRm4odmFsdWUpIDogdmFsdWVcblx0XHRcdH0pO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJldlBhc3N3b3JkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdQYXNzd29yZFxuXHQgKi9cblx0Y2hhbmdlUGFzc3dvcmQoZkNhbGxiYWNrLCBwcmV2UGFzc3dvcmQsIG5ld1Bhc3N3b3JkKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDaGFuZ2VQYXNzd29yZCcsIHtcblx0XHRcdCdQcmV2UGFzc3dvcmQnOiBwcmV2UGFzc3dvcmQsXG5cdFx0XHQnTmV3UGFzc3dvcmQnOiBuZXdQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKi9cblx0Zm9sZGVyQ2xlYXIoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZvbGRlckNsZWFyJywge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTdWJzY3JpYmVcblx0ICovXG5cdGZvbGRlclNldFN1YnNjcmliZShmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgYlN1YnNjcmliZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRm9sZGVyU3Vic2NyaWJlJywge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdCdTdWJzY3JpYmUnOiBiU3Vic2NyaWJlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkNoZWNrYWJsZVxuXHQgKi9cblx0Zm9sZGVyU2V0Q2hlY2thYmxlKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBiQ2hlY2thYmxlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGb2xkZXJDaGVja2FibGUnLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0J0NoZWNrYWJsZSc6IGJDaGVja2FibGUgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVG9Gb2xkZXJcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZHNcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTGVhcm5pbmdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYk1hcmtBc1JlYWRcblx0ICovXG5cdG1lc3NhZ2VzTW92ZShmQ2FsbGJhY2ssIHNGb2xkZXIsIHNUb0ZvbGRlciwgYVVpZHMsIHNMZWFybmluZywgYk1hcmtBc1JlYWQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J01lc3NhZ2VNb3ZlJyxcblx0XHRcdHtcblx0XHRcdFx0J0Zyb21Gb2xkZXInOiBzRm9sZGVyLFxuXHRcdFx0XHQnVG9Gb2xkZXInOiBzVG9Gb2xkZXIsXG5cdFx0XHRcdCdVaWRzJzogYVVpZHMuam9pbignLCcpLFxuXHRcdFx0XHQnTWFya0FzUmVhZCc6IGJNYXJrQXNSZWFkID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnTGVhcm5pbmcnOiBzTGVhcm5pbmcgfHwgJydcblx0XHRcdH0sXG5cdFx0XHRudWxsLFxuXHRcdFx0JycsXG5cdFx0XHRbJ01lc3NhZ2VMaXN0J11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb0ZvbGRlclxuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkc1xuXHQgKi9cblx0bWVzc2FnZXNDb3B5KGZDYWxsYmFjaywgc0ZvbGRlciwgc1RvRm9sZGVyLCBhVWlkcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTWVzc2FnZUNvcHknLCB7XG5cdFx0XHQnRnJvbUZvbGRlcic6IHNGb2xkZXIsXG5cdFx0XHQnVG9Gb2xkZXInOiBzVG9Gb2xkZXIsXG5cdFx0XHQnVWlkcyc6IGFVaWRzLmpvaW4oJywnKVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZHNcblx0ICovXG5cdG1lc3NhZ2VzRGVsZXRlKGZDYWxsYmFjaywgc0ZvbGRlciwgYVVpZHMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J01lc3NhZ2VEZWxldGUnLFxuXHRcdFx0e1xuXHRcdFx0XHQnRm9sZGVyJzogc0ZvbGRlcixcblx0XHRcdFx0J1VpZHMnOiBhVWlkcy5qb2luKCcsJylcblx0XHRcdH0sXG5cdFx0XHRudWxsLFxuXHRcdFx0JycsXG5cdFx0XHRbJ01lc3NhZ2VMaXN0J11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFwcERlbGF5U3RhcnQoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBcHBEZWxheVN0YXJ0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cXVvdGEoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdRdW90YScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlPZmZzZXRcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlMaW1pdFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1NlYXJjaFxuXHQgKi9cblx0Y29udGFjdHMoZkNhbGxiYWNrLCBpT2Zmc2V0LCBpTGltaXQsIHNTZWFyY2gpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J0NvbnRhY3RzJyxcblx0XHRcdHtcblx0XHRcdFx0J09mZnNldCc6IGlPZmZzZXQsXG5cdFx0XHRcdCdMaW1pdCc6IGlMaW1pdCxcblx0XHRcdFx0J1NlYXJjaCc6IHNTZWFyY2hcblx0XHRcdH0sXG5cdFx0XHRudWxsLFxuXHRcdFx0JycsXG5cdFx0XHRbJ0NvbnRhY3RzJ11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0VWlkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVWlkXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFQcm9wZXJ0aWVzXG5cdCAqL1xuXHRjb250YWN0U2F2ZShmQ2FsbGJhY2ssIHNSZXF1ZXN0VWlkLCBzVWlkLCBhUHJvcGVydGllcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ29udGFjdFNhdmUnLCB7XG5cdFx0XHQnUmVxdWVzdFVpZCc6IHNSZXF1ZXN0VWlkLFxuXHRcdFx0J1VpZCc6IHRyaW0oc1VpZCksXG5cdFx0XHQnUHJvcGVydGllcyc6IGFQcm9wZXJ0aWVzXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkc1xuXHQgKi9cblx0Y29udGFjdHNEZWxldGUoZkNhbGxiYWNrLCBhVWlkcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ29udGFjdHNEZWxldGUnLCB7XG5cdFx0XHQnVWlkcyc6IGFVaWRzLmpvaW4oJywnKVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNRdWVyeVxuXHQgKiBAcGFyYW0ge251bWJlcn0gaVBhZ2Vcblx0ICovXG5cdHN1Z2dlc3Rpb25zKGZDYWxsYmFjaywgc1F1ZXJ5LCBpUGFnZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnU3VnZ2VzdGlvbnMnLFxuXHRcdFx0e1xuXHRcdFx0XHQnUXVlcnknOiBzUXVlcnksXG5cdFx0XHRcdCdQYWdlJzogaVBhZ2Vcblx0XHRcdH0sXG5cdFx0XHRudWxsLFxuXHRcdFx0JycsXG5cdFx0XHRbJ1N1Z2dlc3Rpb25zJ11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGNsZWFyVXNlckJhY2tncm91bmQoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDbGVhclVzZXJCYWNrZ3JvdW5kJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0ZmFjZWJvb2tVc2VyKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsRmFjZWJvb2tVc2VySW5mb3JtYXRpb24nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRmYWNlYm9va0Rpc2Nvbm5lY3QoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxGYWNlYm9va0Rpc2Nvbm5lY3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR0d2l0dGVyVXNlcihmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbFR3aXR0ZXJVc2VySW5mb3JtYXRpb24nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR0d2l0dGVyRGlzY29ubmVjdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbFR3aXR0ZXJEaXNjb25uZWN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Z29vZ2xlVXNlcihmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbEdvb2dsZVVzZXJJbmZvcm1hdGlvbicpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdvb2dsZURpc2Nvbm5lY3QoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxHb29nbGVEaXNjb25uZWN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0c29jaWFsVXNlcnMoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxVc2VycycpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBSZW1vdGVVc2VyQWpheCgpO1xuIiwiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9zbGljZVwiO1xuaW1wb3J0IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCI7XG5pbXBvcnQgX09iamVjdCRrZXlzIGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHksIGRlY29yYXRvcnMsIGRlc2NyaXB0b3IsIGNvbnRleHQpIHtcbiAgdmFyIF9jb250ZXh0LCBfY29udGV4dDIsIF9jb250ZXh0MztcblxuICB2YXIgZGVzYyA9IHt9O1xuXG4gIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qka2V5cyhkZXNjcmlwdG9yKSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG5cbiAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7XG4gIGRlc2MuY29uZmlndXJhYmxlID0gISFkZXNjLmNvbmZpZ3VyYWJsZTtcblxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHtcbiAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlc2MgPSBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShkZWNvcmF0b3JzKS5jYWxsKGRlY29yYXRvcnMpKS5jYWxsKF9jb250ZXh0MykpLmNhbGwoX2NvbnRleHQyLCBmdW5jdGlvbiAoZGVzYywgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjO1xuICB9LCBkZXNjKTtcblxuICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDApIHtcbiAgICBkZXNjLnZhbHVlID0gZGVzYy5pbml0aWFsaXplciA/IGRlc2MuaW5pdGlhbGl6ZXIuY2FsbChjb250ZXh0KSA6IHZvaWQgMDtcbiAgICBkZXNjLmluaXRpYWxpemVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG5cbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkZXNjO1xufSIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCIvKipcbiAqIEByZXR1cm5zIHtBcHBVc2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwKCkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQXBwL1VzZXInKS5kZWZhdWx0O1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIGluRm9jdXMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkd2luLCBrZXlTY29wZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0Vmlld05leHQge1xuXHRiRGlzYWJlQ2xvc2VPbkVzYyA9IGZhbHNlO1xuXHRzRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblx0c0N1cnJlbnRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cblx0dmlld01vZGVsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRtb2RhbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0dmlld01vZGVsTmFtZSA9ICcnO1xuXHR2aWV3TW9kZWxOYW1lcyA9IFtdO1xuXHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHN0b3JlQW5kU2V0S2V5U2NvcGUoKSB7XG5cdFx0dGhpcy5zQ3VycmVudEtleVNjb3BlID0ga2V5U2NvcGUoKTtcblx0XHRrZXlTY29wZSh0aGlzLnNEZWZhdWx0S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVzdG9yZUtleVNjb3BlKCkge1xuXHRcdGtleVNjb3BlKHRoaXMuc0N1cnJlbnRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZWdpc3RlclBvcHVwS2V5RG93bigpIHtcblx0XHQkd2luLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgJiYgRXZlbnRLZXlDb2RlLkVzYyA9PT0gZXZlbnQua2V5Q29kZSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5CYWNrc3BhY2UgPT09IGV2ZW50LmtleUNvZGUgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdGNhbmNlbENvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cdGNsb3NlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlID0ge307XG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5nb29nbGUuZW5hYmxlZCgpICYmICh0aGlzLmdvb2dsZS5jYXBhLmF1dGgoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aEdtYWlsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxEcml2ZScpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3JykpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBJRCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBTZWNyZXQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3VwcG9ydGVkRmFjZWJvb2tTb2NpYWwnKSk7XG5cblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lcktleScpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnKSk7XG5cblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0Ryb3Bib3hTb2NpYWwnKSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJvcGJveEFwaUtleScpKTtcblx0fVxuXG5cdGFwcGVuZERyb3Bib3goKSB7XG5cdFx0aWYgKCF3aW5kb3cuRHJvcGJveCAmJiB0aGlzLmRyb3Bib3guZW5hYmxlZCgpICYmIHRoaXMuZHJvcGJveC5hcGlLZXkoKSkge1xuXHRcdFx0aWYgKCF3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bib3hqcycpKSB7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3d3dy5kcm9wYm94LmNvbS9zdGF0aWMvYXBpLzIvZHJvcGlucy5qcyc7XG5cdFx0XHRcdCQoc2NyaXB0KVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsICdkcm9wYm94anMnKVxuXHRcdFx0XHRcdC5hdHRyKCdkYXRhLWFwcC1rZXknLCB0aGlzLmRyb3Bib3guYXBpS2V5KCkpO1xuXG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTb2NpYWxTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZlwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgRm9jdXNlZCwgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBrZXlTY29wZSwgbGVmdFBhbmVsRGlzYWJsZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RBcHBTdG9yZSB9IGZyb20gJ1N0b3Jlcy9BYnN0cmFjdEFwcCc7XG5cbmNsYXNzIEFwcFVzZXJTdG9yZSBleHRlbmRzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5jdXJyZW50QXVkaW8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZm9jdXNlZFN0YXRlID0ga28ub2JzZXJ2YWJsZShGb2N1c2VkLk5vbmUpO1xuXG5cdFx0Y29uc3QgaXNNb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLmZvY3VzZWRTdGF0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHZhbHVlKSB7XG5cdFx0XHRcdGNhc2UgRm9jdXNlZC5NZXNzYWdlTGlzdDpcblx0XHRcdFx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZXNzYWdlTGlzdCk7XG5cdFx0XHRcdFx0aWYgKGlzTW9iaWxlKSB7XG5cdFx0XHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRm9jdXNlZC5NZXNzYWdlVmlldzpcblx0XHRcdFx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZXNzYWdlVmlldyk7XG5cdFx0XHRcdFx0aWYgKGlzTW9iaWxlKSB7XG5cdFx0XHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRm9jdXNlZC5Gb2xkZXJMaXN0OlxuXHRcdFx0XHRcdGtleVNjb3BlKEtleVN0YXRlLkZvbGRlckxpc3QpO1xuXHRcdFx0XHRcdGlmIChpc01vYmlsZSkge1xuXHRcdFx0XHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMucHJvamVjdEhhc2ggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRocmVhZHNBbGxvd2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNvbXBvc2VJbkVkaXQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29udGFjdHNBdXRvc2F2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzSXNBbGxvd2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzQWN0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmRldkVtYWlsID0gJyc7XG5cdFx0dGhpcy5kZXZQYXNzd29yZCA9ICcnO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0c3VwZXIucG9wdWxhdGUoKTtcblxuXHRcdHRoaXMucHJvamVjdEhhc2goU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1Byb2plY3RIYXNoJykpO1xuXG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzQXV0b3NhdmUnKSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJykpO1xuXG5cdFx0dGhpcy5jb250YWN0c0lzQWxsb3dlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdDb250YWN0c0lzQWxsb3dlZCcpKTtcblxuXHRcdGNvbnN0IGF0dGFjaG1lbnRzQWN0aW9ucyA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhdHRhY2htZW50c0FjdGlvbnMnKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzQWN0aW9ucyhpc05vbkVtcHR5QXJyYXkoYXR0YWNobWVudHNBY3Rpb25zKSA/IGF0dGFjaG1lbnRzQWN0aW9ucyA6IFtdKTtcblxuXHRcdHRoaXMuZGV2RW1haWwgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnRGV2RW1haWwnKTtcblx0XHR0aGlzLmRldlBhc3N3b3JkID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0RldlBhc3N3b3JkJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEFwcFVzZXJTdG9yZSgpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhcyhXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgaWYgKE5BVElWRV9TWU1CT0wgJiYgaGFzKFN5bWJvbCwgbmFtZSkpIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IFN5bWJvbFtuYW1lXTtcbiAgICBlbHNlIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuVG9Ob2RlcyB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuY2xhc3MgQWJzdHJhY3RDb21wb25lbnQge1xuXHRkaXNwb3NhYmxlID0gW107XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3Bvc2FibGUuZm9yRWFjaCgoZnVuY1RvRGlzcG9zZSkgPT4ge1xuXHRcdFx0aWYgKGZ1bmNUb0Rpc3Bvc2UgJiYgZnVuY1RvRGlzcG9zZS5kaXNwb3NlKSB7XG5cdFx0XHRcdGZ1bmNUb0Rpc3Bvc2UuZGlzcG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBDbGFzc09iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlSUQgPSAnJ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgY29tcG9uZW50RXhwb3J0SGVscGVyID0gKENsYXNzT2JqZWN0LCB0ZW1wbGF0ZUlEID0gJycpID0+ICh7XG5cdHRlbXBsYXRlOiB0ZW1wbGF0ZUlEID8geyBlbGVtZW50OiB0ZW1wbGF0ZUlEIH0gOiAnPGI+PC9iPicsXG5cdHZpZXdNb2RlbDoge1xuXHRcdGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuXHRcdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQgPSBudWxsO1xuXG5cdFx0XHRpZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmVsZW1lbnQpIHtcblx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudCA9IGNvbXBvbmVudEluZm87XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50ID0gJChjb21wb25lbnRJbmZvLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGkxOG5Ub05vZGVzKHBhcmFtcy5lbGVtZW50KTtcblxuXHRcdFx0XHRpZiAoIWlzVW5kKHBhcmFtcy5pbmxpbmUpICYmIGtvLnVud3JhcChwYXJhbXMuaW5saW5lKSkge1xuXHRcdFx0XHRcdHBhcmFtcy5lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IENsYXNzT2JqZWN0KHBhcmFtcyk7XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBNRVNTQUdFU19QRVJfUEFHRSwgTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBMYXlvdXQsIEVkaXRvckRlZmF1bHRUeXBlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgJGh0bWwgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFNldHRpbmdzVXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5pQXV0b0xvZ291dFRpbWVyID0gMDtcblxuXHRcdHRoaXMubGF5b3V0ID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKExheW91dC5TaWRlUHJldmlldylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogW0xheW91dC5TaWRlUHJldmlldywgTGF5b3V0LkJvdHRvbVByZXZpZXcsIExheW91dC5Ob1ByZXZpZXddIH0pO1xuXG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZSA9IGtvLm9ic2VydmFibGUoRWRpdG9yRGVmYXVsdFR5cGUuSHRtbCkuZXh0ZW5kKHtcblx0XHRcdGxpbWl0ZWRMaXN0OiBbXG5cdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWwsXG5cdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLlBsYWluLFxuXHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5IdG1sRm9yY2VkLFxuXHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbkZvcmNlZFxuXHRcdFx0XVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlc1BlclBhZ2UgPSBrby5vYnNlcnZhYmxlKE1FU1NBR0VTX1BFUl9QQUdFKS5leHRlbmQoeyBsaW1pdGVkTGlzdDogTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIH0pO1xuXG5cdFx0dGhpcy5zaG93SW1hZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51c2VDaGVja2JveGVzSW5MaXN0ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmFsbG93RHJhZnRBdXRvc2F2ZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy51c2VUaHJlYWRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5yZXBseVNhbWVGb2xkZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYXV0b0xvZ291dCA9IGtvLm9ic2VydmFibGUoTWFnaWNzLlRpbWUzMG1Jbk1pbik7XG5cblx0XHR0aGlzLmNvbXB1dGVycygpO1xuXHRcdHRoaXMuc3Vic2NyaWJlcnMoKTtcblx0fVxuXG5cdGNvbXB1dGVycygpIHtcblx0XHR0aGlzLnVzZVByZXZpZXdQYW5lID0ga28uY29tcHV0ZWQoKCkgPT4gTGF5b3V0Lk5vUHJldmlldyAhPT0gdGhpcy5sYXlvdXQoKSk7XG5cdH1cblxuXHRzdWJzY3JpYmVycygpIHtcblx0XHR0aGlzLmxheW91dC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbm8tcHJldmlldy1wYW5lJywgTGF5b3V0Lk5vUHJldmlldyA9PT0gdmFsdWUpO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLXNpZGUtcHJldmlldy1wYW5lJywgTGF5b3V0LlNpZGVQcmV2aWV3ID09PSB2YWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtYm90dG9tLXByZXZpZXctcGFuZScsIExheW91dC5Cb3R0b21QcmV2aWV3ID09PSB2YWx1ZSk7XG5cdFx0XHRFdmVudHMucHViKCdsYXlvdXQnLCBbdmFsdWVdKTtcblx0XHR9KTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMubGF5b3V0KHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xheW91dCcpKSk7XG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRWRpdG9yRGVmYXVsdFR5cGUnKSk7XG5cblx0XHR0aGlzLmF1dG9Mb2dvdXQocEludChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXV0b0xvZ291dCcpKSk7XG5cdFx0dGhpcy5tZXNzYWdlc1BlclBhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ01QUCcpKTtcblxuXHRcdHRoaXMuc2hvd0ltYWdlcyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdTaG93SW1hZ2VzJykpO1xuXHRcdHRoaXMudXNlQ2hlY2tib3hlc0luTGlzdCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VDaGVja2JveGVzSW5MaXN0JykpO1xuXHRcdHRoaXMuYWxsb3dEcmFmdEF1dG9zYXZlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RHJhZnRBdXRvc2F2ZScpKTtcblx0XHR0aGlzLnVzZVRocmVhZHMoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlVGhyZWFkcycpKTtcblx0XHR0aGlzLnJlcGx5U2FtZUZvbGRlcighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdSZXBseVNhbWVGb2xkZXInKSk7XG5cblx0XHRFdmVudHMuc3ViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJywgKCkgPT4ge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlBdXRvTG9nb3V0VGltZXIpO1xuXHRcdFx0aWYgKDAgPCB0aGlzLmF1dG9Mb2dvdXQoKSAmJiAhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FjY291bnRTaWduTWUnKSkge1xuXHRcdFx0XHR0aGlzLmlBdXRvTG9nb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0RXZlbnRzLnB1YigncmwuYXV0by1sb2dvdXQnKTtcblx0XHRcdFx0fSwgdGhpcy5hdXRvTG9nb3V0KCkgKiBNYWdpY3MuVGltZTFtKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdEV2ZW50cy5wdWIoJ3JsLmF1dG8tbG9nb3V0LXJlZnJlc2gnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgU2V0dGluZ3NVc2VyU3RvcmUoKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5cbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBsb2csIGlzQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgcFN0cmluZywgaXNVbmQsIHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIFBncFVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2FwYU9wZW5QR1AgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMub3BlbnBncCA9IG51bGw7XG5cblx0XHR0aGlzLm9wZW5wZ3BrZXlzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLm9wZW5wZ3BLZXlyaW5nID0gbnVsbDtcblxuXHRcdHRoaXMub3BlbnBncGtleXNQdWJsaWMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLm9wZW5wZ3BrZXlzKCksIChpdGVtKSA9PiAhIShpdGVtICYmICFpdGVtLmlzUHJpdmF0ZSkpKTtcblx0XHR0aGlzLm9wZW5wZ3BrZXlzUHJpdmF0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMub3BlbnBncGtleXMoKSwgKGl0ZW0pID0+ICEhKGl0ZW0gJiYgaXRlbS5pc1ByaXZhdGUpKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1N1cHBvcnRlZCgpIHtcblx0XHRyZXR1cm4gISF0aGlzLm9wZW5wZ3A7XG5cdH1cblxuXHRmaW5kS2V5QnlIZXgoa2V5cywgaGFzaCkge1xuXHRcdHJldHVybiBfLmZpbmQoa2V5cywgKGl0ZW0pID0+IGhhc2ggJiYgaXRlbSAmJiAoaGFzaCA9PT0gaXRlbS5pZCB8fCAtMSA8IGl0ZW0uaWRzLmluZGV4T2YoaGFzaCkpKTtcblx0fVxuXG5cdGZpbmRQdWJsaWNLZXlCeUhleChoYXNoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZmluZEtleUJ5SGV4KHRoaXMub3BlbnBncGtleXNQdWJsaWMoKSwgaGFzaCk7XG5cdH1cblxuXHRmaW5kUHJpdmF0ZUtleUJ5SGV4KGhhc2gpIHtcblx0XHRyZXR1cm4gdGhpcy5maW5kS2V5QnlIZXgodGhpcy5vcGVucGdwa2V5c1ByaXZhdGUoKSwgaGFzaCk7XG5cdH1cblxuXHRmaW5kUHVibGljS2V5c0J5RW1haWwoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5jb21wYWN0KFxuXHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRfLm1hcCh0aGlzLm9wZW5wZ3BrZXlzUHVibGljKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gaXRlbSAmJiAtMSA8IGl0ZW0uZW1haWxzLmluZGV4T2YoZW1haWwpID8gaXRlbSA6IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuIGtleSA/IGtleS5nZXROYXRpdmVLZXlzKCkgOiBbbnVsbF07XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdGZpbmRQdWJsaWNLZXlzQnlTaWduaW5nS2V5SWRzKHNpZ25pbmdLZXlJZHMpIHtcblx0XHRyZXR1cm4gXy5jb21wYWN0KFxuXHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRfLm1hcChzaWduaW5nS2V5SWRzLCAoaWQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBpZCAmJiBpZC50b0hleCA/IHRoaXMuZmluZFB1YmxpY0tleUJ5SGV4KGlkLnRvSGV4KCkpIDogbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4ga2V5ID8ga2V5LmdldE5hdGl2ZUtleXMoKSA6IFtudWxsXTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0ZmluZFByaXZhdGVLZXlzQnlFbmNyeXB0aW9uS2V5SWRzKGVuY3J5cHRpb25LZXlJZHMsIHJlY2lwaWVudHMsIHJldHVybldyYXBLZXlzKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGlzQXJyYXkoZW5jcnlwdGlvbktleUlkcylcblx0XHRcdD8gXy5jb21wYWN0KFxuXHRcdFx0XHRcdF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdF8ubWFwKGVuY3J5cHRpb25LZXlJZHMsIChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBpZCAmJiBpZC50b0hleCA/IHRoaXMuZmluZFByaXZhdGVLZXlCeUhleChpZC50b0hleCgpKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXkgPyAocmV0dXJuV3JhcEtleXMgPyBba2V5XSA6IGtleS5nZXROYXRpdmVLZXlzKCkpIDogW251bGxdO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0ICApXG5cdFx0XHQ6IFtdO1xuXG5cdFx0aWYgKDAgPT09IHJlc3VsdC5sZW5ndGggJiYgaXNOb25FbXB0eUFycmF5KHJlY2lwaWVudHMpKSB7XG5cdFx0XHRyZXN1bHQgPSBfLnVuaXEoXG5cdFx0XHRcdF8uY29tcGFjdChcblx0XHRcdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdFx0XHRfLm1hcChyZWNpcGllbnRzLCAoc0VtYWlsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGtleXMgPSBzRW1haWwgPyB0aGlzLmZpbmRBbGxQcml2YXRlS2V5c0J5RW1haWxOb3ROYXRpdmUoc0VtYWlsKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzXG5cdFx0XHRcdFx0XHRcdFx0PyByZXR1cm5XcmFwS2V5c1xuXHRcdFx0XHRcdFx0XHRcdFx0PyBrZXlzXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRfLm1hcChrZXlzLCAoa2V5KSA9PiBrZXkuZ2V0TmF0aXZlS2V5cygpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0XHQ6IFtudWxsXTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdFx0KGtleSkgPT4ga2V5LmlkXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG5cdCAqIEByZXR1cm5zIHs/fVxuXHQgKi9cblx0ZmluZFB1YmxpY0tleUJ5RW1haWxOb3ROYXRpdmUoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5maW5kKHRoaXMub3BlbnBncGtleXNQdWJsaWMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpdGVtLmVtYWlscy5pbmRleE9mKGVtYWlsKSkgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kUHJpdmF0ZUtleUJ5RW1haWxOb3ROYXRpdmUoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5maW5kKHRoaXMub3BlbnBncGtleXNQcml2YXRlKCksIChpdGVtKSA9PiBpdGVtICYmIC0xIDwgaXRlbS5lbWFpbHMuaW5kZXhPZihlbWFpbCkpIHx8IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG5cdCAqIEByZXR1cm5zIHs/fVxuXHQgKi9cblx0ZmluZEFsbFB1YmxpY0tleXNCeUVtYWlsTm90TmF0aXZlKGVtYWlsKSB7XG5cdFx0cmV0dXJuIF8uZmlsdGVyKHRoaXMub3BlbnBncGtleXNQdWJsaWMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpdGVtLmVtYWlscy5pbmRleE9mKGVtYWlsKSkgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kQWxsUHJpdmF0ZUtleXNCeUVtYWlsTm90TmF0aXZlKGVtYWlsKSB7XG5cdFx0cmV0dXJuIF8uZmlsdGVyKHRoaXMub3BlbnBncGtleXNQcml2YXRlKCksIChpdGVtKSA9PiBpdGVtICYmIC0xIDwgaXRlbS5lbWFpbHMuaW5kZXhPZihlbWFpbCkpIHx8IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gcGFzc3dvcmRcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kUHJpdmF0ZUtleUJ5RW1haWwoZW1haWwsIHBhc3N3b3JkKSB7XG5cdFx0bGV0IHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdGNvbnN0IGtleSA9IF8uZmluZCh0aGlzLm9wZW5wZ3BrZXlzUHJpdmF0ZSgpLCAoaXRlbSkgPT4gaXRlbSAmJiAtMSA8IGl0ZW0uZW1haWxzLmluZGV4T2YoZW1haWwpKTtcblxuXHRcdGlmIChrZXkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHByaXZhdGVLZXkgPSBrZXkuZ2V0TmF0aXZlS2V5cygpWzBdIHx8IG51bGw7XG5cdFx0XHRcdGlmIChwcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0cHJpdmF0ZUtleS5kZWNyeXB0KHBTdHJpbmcocGFzc3dvcmQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRwcml2YXRlS2V5ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpdmF0ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHBhc3N3b3JkXG5cdCAqIEByZXR1cm5zIHs/fVxuXHQgKi9cblx0ZmluZFNlbGZQcml2YXRlS2V5KHBhc3N3b3JkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZmluZFByaXZhdGVLZXlCeUVtYWlsKEFjY291bnRTdG9yZS5lbWFpbCgpLCBwYXNzd29yZCk7XG5cdH1cblxuXHRkZWNyeXB0TWVzc2FnZShtZXNzYWdlLCByZWNpcGllbnRzLCBmQ2FsbGJhY2spIHtcblx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmdldEVuY3J5cHRpb25LZXlJZHMpIHtcblx0XHRcdGNvbnN0IHByaXZhdGVLZXlzID0gdGhpcy5maW5kUHJpdmF0ZUtleXNCeUVuY3J5cHRpb25LZXlJZHMobWVzc2FnZS5nZXRFbmNyeXB0aW9uS2V5SWRzKCksIHJlY2lwaWVudHMsIHRydWUpO1xuXHRcdFx0aWYgKHByaXZhdGVLZXlzICYmIDAgPCBwcml2YXRlS2V5cy5sZW5ndGgpIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTWVzc2FnZU9wZW5QZ3AnKSwgW1xuXHRcdFx0XHRcdChkZWNyeXB0ZWRLZXkpID0+IHtcblx0XHRcdFx0XHRcdGlmIChkZWNyeXB0ZWRLZXkpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5kZWNyeXB0KGRlY3J5cHRlZEtleSkudGhlbihcblx0XHRcdFx0XHRcdFx0XHQoZGVjcnlwdGVkTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGRlY3J5cHRlZE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpdmF0ZUtleSA9IHRoaXMuZmluZFByaXZhdGVLZXlCeUhleChkZWNyeXB0ZWRLZXkucHJpbWFyeUtleS5rZXlpZC50b0hleCgpKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnZlcmlmeU1lc3NhZ2UoZGVjcnlwdGVkTWVzc2FnZSwgKG9WYWxpZEtleSwgYVNpZ25pbmdLZXlJZHMpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZDYWxsYmFjayhwcml2YXRlS2V5LCBkZWNyeXB0ZWRNZXNzYWdlLCBvVmFsaWRLZXkgfHwgbnVsbCwgYVNpZ25pbmdLZXlJZHMgfHwgbnVsbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZkNhbGxiYWNrKHByaXZhdGVLZXksIGRlY3J5cHRlZE1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmQ2FsbGJhY2socHJpdmF0ZUtleSwgZGVjcnlwdGVkTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmQ2FsbGJhY2sobnVsbCwgbnVsbCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZkNhbGxiYWNrKG51bGwsIG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cHJpdmF0ZUtleXNcblx0XHRcdFx0XSk7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZDYWxsYmFjayhudWxsLCBudWxsKTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZlcmlmeU1lc3NhZ2UobWVzc2FnZSwgZkNhbGxiYWNrKSB7XG5cdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5nZXRTaWduaW5nS2V5SWRzKSB7XG5cdFx0XHRjb25zdCBzaWduaW5nS2V5SWRzID0gbWVzc2FnZS5nZXRTaWduaW5nS2V5SWRzKCk7XG5cdFx0XHRpZiAoc2lnbmluZ0tleUlkcyAmJiAwIDwgc2lnbmluZ0tleUlkcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcHVibGljS2V5cyA9IHRoaXMuZmluZFB1YmxpY0tleXNCeVNpZ25pbmdLZXlJZHMoc2lnbmluZ0tleUlkcyk7XG5cdFx0XHRcdGlmIChwdWJsaWNLZXlzICYmIDAgPCBwdWJsaWNLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBtZXNzYWdlLnZlcmlmeShwdWJsaWNLZXlzKSxcblx0XHRcdFx0XHRcdFx0dmFsaWQgPSBfLmZpbmQoXy5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiBbXSwgKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbS52YWxpZCAmJiBpdGVtLmtleWlkKTtcblxuXHRcdFx0XHRcdFx0aWYgKHZhbGlkICYmIHZhbGlkLmtleWlkICYmIHZhbGlkLmtleWlkICYmIHZhbGlkLmtleWlkLnRvSGV4KSB7XG5cdFx0XHRcdFx0XHRcdGZDYWxsYmFjayh0aGlzLmZpbmRQdWJsaWNLZXlCeUhleCh2YWxpZC5rZXlpZC50b0hleCgpKSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdGxvZyhlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmQ2FsbGJhY2sobnVsbCwgc2lnbmluZ0tleUlkcyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmQ2FsbGJhY2sobnVsbCk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29udHJvbHNIZWxwZXIoZG9tLCB2ZXJDb250cm9sLCBzdWNjZXNzLCB0aXRsZSwgdGV4dCkge1xuXHRcdGlmIChzdWNjZXNzKSB7XG5cdFx0XHRkb21cblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdlcnJvcicpXG5cdFx0XHRcdC5hZGRDbGFzcygnc3VjY2VzcycpXG5cdFx0XHRcdC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcblx0XHRcdHZlckNvbnRyb2xcblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdlcnJvcicpXG5cdFx0XHRcdC5hZGRDbGFzcygnc3VjY2VzcycpXG5cdFx0XHRcdC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9tXG5cdFx0XHRcdC5yZW1vdmVDbGFzcygnc3VjY2VzcycpXG5cdFx0XHRcdC5hZGRDbGFzcygnZXJyb3InKVxuXHRcdFx0XHQuYXR0cigndGl0bGUnLCB0aXRsZSk7XG5cdFx0XHR2ZXJDb250cm9sXG5cdFx0XHRcdC5yZW1vdmVDbGFzcygnc3VjY2VzcycpXG5cdFx0XHRcdC5hZGRDbGFzcygnZXJyb3InKVxuXHRcdFx0XHQuYXR0cigndGl0bGUnLCB0aXRsZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZCh0ZXh0KSkge1xuXHRcdFx0ZG9tLnRleHQodHJpbSh0ZXh0KSk7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIGRvbUNvbnRyb2xFbmNyeXB0ZWRDbGlja0hlbHBlcihzdG9yZSwgZG9tLCBhcm1vcmVkTWVzc2FnZSwgcmVjaXBpZW50cykge1xuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdGxldCBtZXNzYWdlID0gbnVsbDtcblx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblxuXHRcdFx0aWYgKCR0aGlzLmhhc0NsYXNzKCdzdWNjZXNzJykpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRtZXNzYWdlID0gc3RvcmUub3BlbnBncC5tZXNzYWdlLnJlYWRBcm1vcmVkKGFybW9yZWRNZXNzYWdlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0bG9nKGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmdldFRleHQgJiYgbWVzc2FnZS52ZXJpZnkgJiYgbWVzc2FnZS5kZWNyeXB0KSB7XG5cdFx0XHRcdHN0b3JlLmRlY3J5cHRNZXNzYWdlKFxuXHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0cmVjaXBpZW50cyxcblx0XHRcdFx0XHQodmFsaWRQcml2YXRlS2V5LCBkZWNyeXB0ZWRNZXNzYWdlLCB2YWxpZFB1YmxpY0tleSwgc2lnbmluZ0tleUlkcykgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRlY3J5cHRlZE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHZhbGlkUHVibGljS2V5KSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRkb20sXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9HT09EX1NJR05BVFVSRScsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0J1VTRVInOiB2YWxpZFB1YmxpY0tleS51c2VyICsgJyAoJyArIHZhbGlkUHVibGljS2V5LmlkICsgJyknXG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlY3J5cHRlZE1lc3NhZ2UuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWxpZFByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBrZXlJZHMgPSBpc05vbkVtcHR5QXJyYXkoc2lnbmluZ0tleUlkcykgPyBzaWduaW5nS2V5SWRzIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWwgPSBrZXlJZHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBfLmNvbXBhY3QoXy5tYXAoa2V5SWRzLCAoaXRlbSkgPT4gKGl0ZW0gJiYgaXRlbS50b0hleCA/IGl0ZW0udG9IZXgoKSA6IG51bGwpKSkuam9pbignLCAnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICcnO1xuXG5cdFx0XHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRkb20sXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvVU5WRVJJRklSRURfU0lHTkFUVVJFJykgKyAoYWRkaXRpb25hbCA/ICcgKCcgKyBhZGRpdGlvbmFsICsgJyknIDogJycpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjcnlwdGVkTWVzc2FnZS5nZXRUZXh0KClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihkb20sICR0aGlzLCBmYWxzZSwgaTE4bignUEdQX05PVElGSUNBVElPTlMvREVDUllQVElPTl9FUlJPUicpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihkb20sICR0aGlzLCBmYWxzZSwgaTE4bignUEdQX05PVElGSUNBVElPTlMvREVDUllQVElPTl9FUlJPUicpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIGRvbUNvbnRyb2xTaWduZWRDbGlja0hlbHBlcihzdG9yZSwgZG9tLCBhcm1vcmVkTWVzc2FnZSkge1xuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdGxldCBtZXNzYWdlID0gbnVsbDtcblx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblxuXHRcdFx0aWYgKCR0aGlzLmhhc0NsYXNzKCdzdWNjZXNzJykgfHwgJHRoaXMuaGFzQ2xhc3MoJ2Vycm9yJykpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRtZXNzYWdlID0gc3RvcmUub3BlbnBncC5jbGVhcnRleHQucmVhZEFybW9yZWQoYXJtb3JlZE1lc3NhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRsb2coZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZ2V0VGV4dCAmJiBtZXNzYWdlLnZlcmlmeSkge1xuXHRcdFx0XHRzdG9yZS52ZXJpZnlNZXNzYWdlKG1lc3NhZ2UsICh2YWxpZEtleSwgc2lnbmluZ0tleUlkcykgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWxpZEtleSkge1xuXHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoXG5cdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0JHRoaXMsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL0dPT0RfU0lHTkFUVVJFJywge1xuXHRcdFx0XHRcdFx0XHRcdCdVU0VSJzogdmFsaWRLZXkudXNlciArICcgKCcgKyB2YWxpZEtleS5pZCArICcpJ1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5nZXRUZXh0KClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IGtleUlkcyA9IGlzTm9uRW1wdHlBcnJheShzaWduaW5nS2V5SWRzKSA/IHNpZ25pbmdLZXlJZHMgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRhZGRpdGlvbmFsID0ga2V5SWRzXG5cdFx0XHRcdFx0XHRcdFx0PyBfLmNvbXBhY3QoXy5tYXAoa2V5SWRzLCAoaXRlbSkgPT4gKGl0ZW0gJiYgaXRlbS50b0hleCA/IGl0ZW0udG9IZXgoKSA6IG51bGwpKSkuam9pbignLCAnKVxuXHRcdFx0XHRcdFx0XHRcdDogJyc7XG5cblx0XHRcdFx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKFxuXHRcdFx0XHRcdFx0XHRkb20sXG5cdFx0XHRcdFx0XHRcdCR0aGlzLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvVU5WRVJJRklSRURfU0lHTkFUVVJFJykgKyAoYWRkaXRpb25hbCA/ICcgKCcgKyBhZGRpdGlvbmFsICsgJyknIDogJycpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihkb20sICR0aGlzLCBmYWxzZSwgaTE4bignUEdQX05PVElGSUNBVElPTlMvREVDUllQVElPTl9FUlJPUicpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gZG9tXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSByYWluTG9vcE1lc3NhZ2Vcblx0ICovXG5cdGluaXRNZXNzYWdlQm9keUNvbnRyb2xzKGRvbSwgcmFpbkxvb3BNZXNzYWdlKSB7XG5cdFx0aWYgKGRvbSAmJiAhZG9tLmhhc0NsYXNzKCdpbml0ZWQnKSkge1xuXHRcdFx0ZG9tLmFkZENsYXNzKCdpbml0ZWQnKTtcblxuXHRcdFx0Y29uc3QgZW5jcnlwdGVkID0gZG9tLmhhc0NsYXNzKCdlbmNyeXB0ZWQnKSxcblx0XHRcdFx0c2lnbmVkID0gZG9tLmhhc0NsYXNzKCdzaWduZWQnKSxcblx0XHRcdFx0cmVjaXBpZW50cyA9IHJhaW5Mb29wTWVzc2FnZSA/IHJhaW5Mb29wTWVzc2FnZS5nZXRFbWFpbHMoWydmcm9tJywgJ3RvJywgJ2NjJ10pIDogW107XG5cblx0XHRcdGxldCB2ZXJDb250cm9sID0gbnVsbDtcblxuXHRcdFx0aWYgKGVuY3J5cHRlZCB8fCBzaWduZWQpIHtcblx0XHRcdFx0Y29uc3QgZG9tVGV4dCA9IGRvbS50ZXh0KCk7XG5cdFx0XHRcdGRvbS5kYXRhKCdvcGVucGdwLW9yaWdpbmFsJywgZG9tVGV4dCk7XG5cblx0XHRcdFx0aWYgKGVuY3J5cHRlZCkge1xuXHRcdFx0XHRcdHZlckNvbnRyb2wgPSAkKCc8ZGl2IGNsYXNzPVwiYi1vcGVucGdwLWNvbnRyb2xcIj48aSBjbGFzcz1cImljb24tbG9ja1wiPjwvaT48L2Rpdj4nKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgaTE4bignTUVTU0FHRS9QR1BfRU5DUllQVEVEX01FU1NBR0VfREVTQycpKVxuXHRcdFx0XHRcdFx0Lm9uKCdjbGljaycsIFBncFVzZXJTdG9yZS5kb21Db250cm9sRW5jcnlwdGVkQ2xpY2tIZWxwZXIodGhpcywgZG9tLCBkb21UZXh0LCByZWNpcGllbnRzKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc2lnbmVkKSB7XG5cdFx0XHRcdFx0dmVyQ29udHJvbCA9ICQoJzxkaXYgY2xhc3M9XCJiLW9wZW5wZ3AtY29udHJvbFwiPjxpIGNsYXNzPVwiaWNvbi1sb2NrXCI+PC9pPjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYXR0cigndGl0bGUnLCBpMThuKCdNRVNTQUdFL1BHUF9TSUdORURfTUVTU0FHRV9ERVNDJykpXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgUGdwVXNlclN0b3JlLmRvbUNvbnRyb2xTaWduZWRDbGlja0hlbHBlcih0aGlzLCBkb20sIGRvbVRleHQpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2ZXJDb250cm9sKSB7XG5cdFx0XHRcdFx0ZG9tLmJlZm9yZSh2ZXJDb250cm9sKS5iZWZvcmUoJzxkaXY+PC9kaXY+Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBncFVzZXJTdG9yZSgpO1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIE5hdGl2ZUNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IChwYXRoW1RBUkdFVF0gPSB7fSk7XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXMobmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ3MgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiB0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gJ2Z1bmN0aW9uJykgcmVzdWx0UHJvcGVydHkgPSBiaW5kKEZ1bmN0aW9uLmNhbGwsIHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXVtrZXldID0gc291cmNlUHJvcGVydHk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgIXRhcmdldFByb3RvdHlwZVtrZXldKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQWNjb3VudFVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhcmVudEVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNpZ25hdHVyZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5hY2NvdW50cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5hY2NvdW50cy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMTAwbXMgfSk7XG5cblx0XHR0aGlzLmNvbXB1dGVycygpO1xuXHR9XG5cblx0Y29tcHV0ZXJzKCkge1xuXHRcdHRoaXMuYWNjb3VudHNFbWFpbHMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmNvbXBhY3QoXy5tYXAodGhpcy5hY2NvdW50cygpLCAoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLmVtYWlsIDogbnVsbCkpKSk7XG5cblx0XHR0aGlzLmFjY291bnRzVW5yZWFkQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiAwKTtcblx0XHQvLyB0aGlzLmFjY291bnRzVW5yZWFkQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0Ly8gXHRsZXQgcmVzdWx0ID0gMDtcblx0XHQvLyBcdF8uZWFjaCh0aGlzLmFjY291bnRzKCksIChpdGVtKSA9PiB7XG5cdFx0Ly8gXHRcdGlmIChpdGVtKVxuXHRcdC8vIFx0XHR7XG5cdFx0Ly8gXHRcdFx0cmVzdWx0ICs9IGl0ZW0uY291bnQoKTtcblx0XHQvLyBcdFx0fVxuXHRcdC8vIFx0fSk7XG5cdFx0Ly8gXHRyZXR1cm4gcmVzdWx0O1xuXHRcdC8vIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5lbWFpbChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRW1haWwnKSk7XG5cdFx0dGhpcy5wYXJlbnRFbWFpbChTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGFyZW50RW1haWwnKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1Jvb3RBY2NvdW50KCkge1xuXHRcdHJldHVybiAnJyA9PT0gdGhpcy5wYXJlbnRFbWFpbCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBY2NvdW50VXNlclN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLm5vVGFyZ2V0R2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBzZXRHbG9iYWwoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLWluc3RhbmNlcy1uYW1lXG5pZiAoREVTQ1JJUFRPUlMgJiYgIShOQU1FIGluIEZ1bmN0aW9uUHJvdG90eXBlKSkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTkFNRSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nLmNhbGwodGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJyAmJiAhaGFzKHZhbHVlLCAnbmFtZScpKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywga2V5KTtcbiAgICBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSkuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sIGtleSwgdmFsdWUpO1xuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSk7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChSRVBMQUNFLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUsIHJlYXNvbikge1xuICB2YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSByZWFzb24uUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkU7XG4gIHZhciBSRVBMQUNFX0tFRVBTXyQwID0gcmVhc29uLlJFUExBQ0VfS0VFUFNfJDA7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHJlcGxhY2VyID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gcmVwbGFjZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHJlcGxhY2VyLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBuYXRpdmVSZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICghUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgJiYgUkVQTEFDRV9LRUVQU18kMCkgfHxcbiAgICAgICAgKHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdzdHJpbmcnICYmIHJlcGxhY2VWYWx1ZS5pbmRleE9mKFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEpXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG5cbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiBuYXRpdmVSZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgQ29va2llRHJpdmVyIH0gZnJvbSAnQ29tbW9uL0NsaWVudFN0b3JhZ2VEcml2ZXIvQ29va2llJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZURyaXZlciB9IGZyb20gJ0NvbW1vbi9DbGllbnRTdG9yYWdlRHJpdmVyL0xvY2FsU3RvcmFnZSc7XG5cbmNvbnN0IFN1cHBvcnRlZFN0b3JhZ2VEcml2ZXIgPSBfLmZpbmQoXG5cdFtMb2NhbFN0b3JhZ2VEcml2ZXIsIENvb2tpZURyaXZlcl0sXG5cdChTdG9yYWdlRHJpdmVyKSA9PiBTdG9yYWdlRHJpdmVyICYmIFN0b3JhZ2VEcml2ZXIuc3VwcG9ydGVkKClcbik7XG5cbmNvbnN0IGRyaXZlciA9IFN1cHBvcnRlZFN0b3JhZ2VEcml2ZXIgPyBuZXcgU3VwcG9ydGVkU3RvcmFnZURyaXZlcigpIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0ga2V5XG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0KGtleSwgZGF0YSkge1xuXHRyZXR1cm4gZHJpdmVyID8gZHJpdmVyLnNldCgncCcgKyBrZXksIGRhdGEpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGtleVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQoa2V5KSB7XG5cdHJldHVybiBkcml2ZXIgPyBkcml2ZXIuZ2V0KCdwJyArIGtleSkgOiBudWxsO1xufVxuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5sZXQgX21vbWVudCA9IG51bGw7XG5sZXQgX21vbWVudE5vdyA9IDA7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vdyA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50ID0gbW9tZW50KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93VW5peCA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50Tm93ID0gbW9tZW50KCkudW5peCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbi8qKlxuICogQHJldHVybnMge21vbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vdygpIHtcblx0dXBkYXRlTW9tZW50Tm93KCk7XG5cdHJldHVybiBfbW9tZW50IHx8IG1vbWVudCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3dVbml4KCkge1xuXHR1cGRhdGVNb21lbnROb3dVbml4KCk7XG5cdHJldHVybiBfbW9tZW50Tm93IHx8IDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIoZGF0ZSkge1xuXHRyZXR1cm4gbW9tZW50Tm93KClcblx0XHQuY2xvbmUoKVxuXHRcdC5zdWJ0cmFjdChkYXRlLCAnZGF5cycpXG5cdFx0LmZvcm1hdCgnWVlZWS5NTS5ERCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBtXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21TaG9ydERhdGUobSkge1xuXHRjb25zdCBub3cgPSBtb21lbnROb3coKTtcblx0aWYgKG0gJiYgbm93KSB7XG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIDQgPj0gbm93LmRpZmYobSwgJ2hvdXJzJyk6XG5cdFx0XHRcdHJldHVybiBtLmZyb21Ob3coKTtcblx0XHRcdGNhc2Ugbm93LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1RPREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3dcblx0XHRcdFx0LmNsb25lKClcblx0XHRcdFx0LnN1YnRyYWN0KDEsICdkYXlzJylcblx0XHRcdFx0LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1lFU1RFUkRBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93LnllYXIoKSA9PT0gbS55ZWFyKCk6XG5cdFx0XHRcdHJldHVybiBtLmZvcm1hdCgnRCBNTU0uJyk7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG0gPyBtLmZvcm1hdCgnTEwnKSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU3RhbXBJblVUQ1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdCh0aW1lU3RhbXBJblVUQywgZm9ybWF0U3RyKSB7XG5cdGxldCBtID0gbnVsbCxcblx0XHRyZXN1bHQgPSAnJztcblxuXHRjb25zdCBub3cgPSBtb21lbnROb3dVbml4KCk7XG5cblx0dGltZVN0YW1wSW5VVEMgPSAwIDwgdGltZVN0YW1wSW5VVEMgPyB0aW1lU3RhbXBJblVUQyA6IDAgPT09IHRpbWVTdGFtcEluVVRDID8gbm93IDogMDtcblx0dGltZVN0YW1wSW5VVEMgPSBub3cgPCB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IHRpbWVTdGFtcEluVVRDO1xuXG5cdG0gPSAwIDwgdGltZVN0YW1wSW5VVEMgPyBtb21lbnQudW5peCh0aW1lU3RhbXBJblVUQykgOiBudWxsO1xuXG5cdGlmIChtICYmIDE5NzAgPT09IG0ueWVhcigpKSB7XG5cdFx0bSA9IG51bGw7XG5cdH1cblxuXHRpZiAobSkge1xuXHRcdHN3aXRjaCAoZm9ybWF0U3RyKSB7XG5cdFx0XHRjYXNlICdGUk9NTk9XJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mcm9tTm93KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnU0hPUlQnOlxuXHRcdFx0XHRyZXN1bHQgPSBmb3JtYXRDdXN0b21TaG9ydERhdGUobSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnRlVMTCc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KCdMTEwnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdChmb3JtYXRTdHIpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudFRvTm9kZShlbGVtZW50KSB7XG5cdGxldCBrZXkgPSAnJyxcblx0XHR0aW1lID0gMDtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHR0aW1lID0gJGVsLmRhdGEoJ21vbWVudC10aW1lJyk7XG5cdGlmICh0aW1lKSB7XG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwudGV4dChmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQtdGl0bGUnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwuYXR0cigndGl0bGUnLCBmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWQoKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJy5tb21lbnQnLCB3aW5kb3cuZG9jdW1lbnQpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRtb21lbnRUb05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuaGFzaGVyOyIsImltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgRW1haWxNb2RlbCB9IGZyb20gJ01vZGVsL0VtYWlsJztcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbWFpbE1vZGVsPn0gZW1haWxzXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBmcmllbmRseVZpZXcgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbEFycmF5VG9TdHJpbmcoZW1haWxzLCBmcmllbmRseVZpZXcgPSBmYWxzZSwgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0bGV0IGluZGV4ID0gMCxcblx0XHRsZW4gPSAwO1xuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRpZiAoaXNOb25FbXB0eUFycmF5KGVtYWlscykpIHtcblx0XHRmb3IgKGxlbiA9IGVtYWlscy5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0XHRyZXN1bHQucHVzaChlbWFpbHNbaW5kZXhdLnRvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluaykpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbWFpbE1vZGVsPn0gZW1haWxzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIoZW1haWxzKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMDtcblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblx0aWYgKGlzTm9uRW1wdHlBcnJheShlbWFpbHMpKSB7XG5cdFx0Zm9yIChsZW4gPSBlbWFpbHMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0aWYgKGVtYWlsc1tpbmRleF0gJiYgZW1haWxzW2luZGV4XS5lbWFpbCAmJiAnJyAhPT0gZW1haWxzW2luZGV4XS5uYW1lKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVtYWlsc1tpbmRleF0uZW1haWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez9BcnJheX0ganNvblxuICogQHJldHVybnMge0FycmF5LjxFbWFpbE1vZGVsPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsQXJyYXlGcm9tSnNvbihqc29uKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHRlbWFpbCA9IG51bGw7XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cdGlmIChpc05vbkVtcHR5QXJyYXkoanNvbikpIHtcblx0XHRmb3IgKGluZGV4ID0gMCwgbGVuID0ganNvbi5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0XHRlbWFpbCA9IEVtYWlsTW9kZWwubmV3SW5zdGFuY2VGcm9tSnNvbihqc29uW2luZGV4XSk7XG5cdFx0XHRpZiAoZW1haWwpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goZW1haWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheS48RW1haWxNb2RlbD59IGlucHV0RW1haWxzXG4gKiBAcGFyYW0ge09iamVjdH0gdW5pY1xuICogQHBhcmFtIHtBcnJheX0gbG9jYWxFbWFpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGx5SGVscGVyKGlucHV0RW1haWxzLCB1bmljLCBsb2NhbEVtYWlscykge1xuXHRpZiAoaW5wdXRFbWFpbHMgJiYgMCA8IGlucHV0RW1haWxzLmxlbmd0aCkge1xuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgbGVuID0gaW5wdXRFbWFpbHMubGVuZ3RoO1xuXG5cdFx0Zm9yICg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAoaXNVbmQodW5pY1tpbnB1dEVtYWlsc1tpbmRleF0uZW1haWxdKSkge1xuXHRcdFx0XHR1bmljW2lucHV0RW1haWxzW2luZGV4XS5lbWFpbF0gPSB0cnVlO1xuXHRcdFx0XHRsb2NhbEVtYWlscy5wdXNoKGlucHV0RW1haWxzW2luZGV4XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBkaXNwb3NlT2JqZWN0IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0TW9kZWwge1xuXHRzTW9kZWxOYW1lID0gJyc7XG5cdGRpc3Bvc2FibGVzID0gW107XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobW9kZWxOYW1lID0gJycpIHtcblx0XHR0aGlzLnNNb2RlbE5hbWUgPSBtb2RlbE5hbWUgfHwgJyc7XG5cdH1cblxuXHRyZWdEaXNwb3NhYmxlcyh2YWx1ZSkge1xuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHR0aGlzLmRpc3Bvc2FibGVzLnB1c2goaXRlbSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLmRpc3Bvc2FibGVzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uRGVzdHJveSgpIHtcblx0XHRkaXNwb3NlT2JqZWN0KHRoaXMpO1xuXHR9XG59XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzY2hlZHVsZXIoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGhhbmRsZXIgPT0gJ2Z1bmN0aW9uJyA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9O1xufTtcblxuLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogTVNJRSB9LCB7XG4gIC8vIGBzZXRUaW1lb3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgLy8gYHNldEludGVydmFsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgTGFuZ3VhZ2VTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbiA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXNBZG1pbiB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdGNvbnN0IGFMYW5ndWFnZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzJyksXG5cdFx0XHRhTGFuZ3VhZ2VzQWRtaW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzQWRtaW4nKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VzKGlzQXJyYXkoYUxhbmd1YWdlcykgPyBhTGFuZ3VhZ2VzIDogW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4oaXNBcnJheShhTGFuZ3VhZ2VzQWRtaW4pID8gYUxhbmd1YWdlc0FkbWluIDogW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZUFkbWluJykpO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZScpKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2VBZG1pbicpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTGFuZ3VhZ2VTdG9yZSgpO1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IFtdLmpvaW47XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT0gNztcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgYWRkcmVzc3BhcnNlciBmcm9tICdlbWFpbGpzLWFkZHJlc3NwYXJzZXInO1xuaW1wb3J0IHsgdHJpbSwgZW5jb2RlSHRtbCwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgRW1haWxNb2RlbCB7XG5cdGVtYWlsID0gJyc7XG5cdG5hbWUgPSAnJztcblx0ZGtpbVN0YXR1cyA9ICcnO1xuXHRka2ltVmFsdWUgPSAnJztcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBlbWFpbCA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVN0YXR1cyA9ICdub25lJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGRraW1WYWx1ZSA9ICcnXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbWFpbCA9ICcnLCBuYW1lID0gJycsIGRraW1TdGF0dXMgPSAnbm9uZScsIGRraW1WYWx1ZSA9ICcnKSB7XG5cdFx0dGhpcy5lbWFpbCA9IGVtYWlsO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gZGtpbVN0YXR1cztcblx0XHR0aGlzLmRraW1WYWx1ZSA9IGRraW1WYWx1ZTtcblxuXHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uRW1haWx9IGpzb25cblx0ICogQHJldHVybnMgez9FbWFpbE1vZGVsfVxuXHQgKi9cblx0c3RhdGljIG5ld0luc3RhbmNlRnJvbUpzb24oanNvbikge1xuXHRcdGNvbnN0IGVtYWlsID0gbmV3IEVtYWlsTW9kZWwoKTtcblx0XHRyZXR1cm4gZW1haWwuaW5pdEJ5SnNvbihqc29uKSA/IGVtYWlsIDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZW1haWwgPSAnJztcblx0XHR0aGlzLm5hbWUgPSAnJztcblxuXHRcdHRoaXMuZGtpbVN0YXR1cyA9ICdub25lJztcblx0XHR0aGlzLmRraW1WYWx1ZSA9ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0dmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuICcnICE9PSB0aGlzLm5hbWUgfHwgJycgIT09IHRoaXMuZW1haWw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSB3aXRob3V0TmFtZSA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRoYXNoKHdpdGhvdXROYW1lID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gJyMnICsgKHdpdGhvdXROYW1lID8gJycgOiB0aGlzLm5hbWUpICsgJyMnICsgdGhpcy5lbWFpbCArICcjJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGNsZWFyRHVwbGljYXRlTmFtZSgpIHtcblx0XHRpZiAodGhpcy5uYW1lID09PSB0aGlzLmVtYWlsKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2VhcmNoKHF1ZXJ5KSB7XG5cdFx0cmV0dXJuIC0xIDwgKHRoaXMubmFtZSArICcgJyArIHRoaXMuZW1haWwpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uRW1haWx9IG9Kc29uRW1haWxcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpbml0QnlKc29uKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9FbWFpbCcgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gdHJpbShqc29uLk5hbWUpO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHRyaW0oanNvbi5FbWFpbCk7XG5cdFx0XHR0aGlzLmRraW1TdGF0dXMgPSB0cmltKGpzb24uRGtpbVN0YXR1cyB8fCAnJyk7XG5cdFx0XHR0aGlzLmRraW1WYWx1ZSA9IHRyaW0oanNvbi5Ea2ltVmFsdWUgfHwgJycpO1xuXG5cdFx0XHRyZXN1bHQgPSAnJyAhPT0gdGhpcy5lbWFpbDtcblx0XHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZyaWVuZGx5Vmlld1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwV2l0aExpbmsgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB1c2VFbmNvZGVIdG1sID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHRvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlLCB1c2VFbmNvZGVIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKCcnICE9PSB0aGlzLmVtYWlsKSB7XG5cdFx0XHRpZiAoZnJpZW5kbHlWaWV3ICYmICcnICE9PSB0aGlzLm5hbWUpIHtcblx0XHRcdFx0cmVzdWx0ID0gd3JhcFdpdGhMaW5rXG5cdFx0XHRcdFx0PyAnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdCAgJz90bz0nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHQgICdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKHRoaXMubmFtZSkgK1xuXHRcdFx0XHRcdCAgJzwvYT4nXG5cdFx0XHRcdFx0OiB1c2VFbmNvZGVIdG1sXG5cdFx0XHRcdFx0PyBlbmNvZGVIdG1sKHRoaXMubmFtZSlcblx0XHRcdFx0XHQ6IHRoaXMubmFtZTtcblx0XHRcdFx0Ly8gcmVzdWx0ID0gd3JhcFdpdGhMaW5rID8gJzxhIGhyZWY9XCJtYWlsdG86JyArIGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0Ly8gXHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgKyBlbmNvZGVIdG1sKHRoaXMubmFtZSkgKyAnPC9hPicgOiAodXNlRW5jb2RlSHRtbCA/IGVuY29kZUh0bWwodGhpcy5uYW1lKSA6IHRoaXMubmFtZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVtYWlsO1xuXHRcdFx0XHRpZiAoJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRcdGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JykgK1xuXHRcdFx0XHRcdFx0XHQnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHRcdCc/dG89JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdFx0Ly8gcmVzdWx0ID0gZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwocmVzdWx0KSArXG5cdFx0XHRcdFx0XHQvLyBcdCc8L2E+JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJz4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHJlc3VsdCArICc+Jztcblx0XHRcdFx0XHRcdGlmICh1c2VFbmNvZGVIdG1sKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGVuY29kZUh0bWwocmVzdWx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAod3JhcFdpdGhMaW5rKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHQnPC9hPic7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNwbGl0RW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0XHRsZXQgZXhpc3RzID0gZmFsc2U7XG5cdFx0XHRwYXJzZWRSZXN1bHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzID0gaXRlbS5hZGRyZXNzXG5cdFx0XHRcdFx0PyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJylcblx0XHRcdFx0XHQ6IG51bGw7XG5cblx0XHRcdFx0aWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5lbWFpbCkge1xuXHRcdFx0XHRcdGV4aXN0cyA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQucHVzaChhZGRyZXNzID8gYWRkcmVzcy50b0xpbmUoZmFsc2UpIDogaXRlbS5uYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gZXhpc3RzID8gcmVzdWx0IDogbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHN0YXRpYyBwYXJzZUVtYWlsTGluZShsaW5lKSB7XG5cdFx0Y29uc3QgcGFyc2VkUmVzdWx0ID0gYWRkcmVzc3BhcnNlcihsaW5lKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHBhcnNlZFJlc3VsdCkpIHtcblx0XHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRcdF8ubWFwKHBhcnNlZFJlc3VsdCwgKGl0ZW0pID0+XG5cdFx0XHRcdFx0aXRlbS5hZGRyZXNzID8gbmV3IEVtYWlsTW9kZWwoaXRlbS5hZGRyZXNzLnJlcGxhY2UoL15bPF0rKC4qKVs+XSskL2csICckMScpLCBpdGVtLm5hbWUgfHwgJycpIDogbnVsbFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxBZGRyZXNzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0cGFyc2UoZW1haWxBZGRyZXNzKSB7XG5cdFx0ZW1haWxBZGRyZXNzID0gdHJpbShlbWFpbEFkZHJlc3MpO1xuXHRcdGlmICgnJyA9PT0gZW1haWxBZGRyZXNzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gYWRkcmVzc3BhcnNlcihlbWFpbEFkZHJlc3MpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocmVzdWx0KSAmJiByZXN1bHRbMF0pIHtcblx0XHRcdHRoaXMubmFtZSA9IHJlc3VsdFswXS5uYW1lIHx8ICcnO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHJlc3VsdFswXS5hZGRyZXNzIHx8ICcnO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmV4cG9ydCB7IEVtYWlsTW9kZWwsIEVtYWlsTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSwgYlNhZmFyaSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIExpbmtzIGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgeyB0cmltIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgQXVkaW8ge1xuXHRub3RpZmljYXRvciA9IG51bGw7XG5cdHBsYXllciA9IG51bGw7XG5cblx0c3VwcG9ydGVkID0gZmFsc2U7XG5cdHN1cHBvcnRlZE1wMyA9IGZhbHNlO1xuXHRzdXBwb3J0ZWRPZ2cgPSBmYWxzZTtcblx0c3VwcG9ydGVkV2F2ID0gZmFsc2U7XG5cdHN1cHBvcnRlZE5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMucGxheWVyID0gdGhpcy5jcmVhdGVOZXdPYmplY3QoKTtcblxuXHRcdHRoaXMuc3VwcG9ydGVkID0gIWJNb2JpbGVEZXZpY2UgJiYgIWJTYWZhcmkgJiYgISF0aGlzLnBsYXllciAmJiAhIXRoaXMucGxheWVyLnBsYXk7XG5cdFx0aWYgKHRoaXMuc3VwcG9ydGVkICYmIHRoaXMucGxheWVyICYmIHRoaXMucGxheWVyLmNhblBsYXlUeXBlKSB7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZE1wMyA9ICcnICE9PSB0aGlzLnBsYXllci5jYW5QbGF5VHlwZSgnYXVkaW8vbXBlZzsnKS5yZXBsYWNlKC9uby8sICcnKTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkV2F2ID0gJycgIT09IHRoaXMucGxheWVyLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz1cIjFcIicpLnJlcGxhY2UoL25vLywgJycpO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWRPZ2cgPSAnJyAhPT0gdGhpcy5wbGF5ZXIuY2FuUGxheVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPVwidm9yYmlzXCInKS5yZXBsYWNlKC9uby8sICcnKTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkTm90aWZpY2F0aW9uID0gdGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRNcDM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLnBsYXllciB8fCAoIXRoaXMuc3VwcG9ydGVkTXAzICYmICF0aGlzLnN1cHBvcnRlZE9nZyAmJiAhdGhpcy5zdXBwb3J0ZWRXYXYpKSB7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWRNcDMgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkT2dnID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZFdhdiA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWROb3RpZmljYXRpb24gPSBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5wbGF5ZXIpIHtcblx0XHRcdGNvbnN0IHN0b3BGbiA9ICgpID0+IHRoaXMuc3RvcCgpO1xuXG5cdFx0XHR0aGlzLnBsYXllci5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIHN0b3BGbik7XG5cdFx0XHR0aGlzLnBsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHN0b3BGbik7XG5cblx0XHRcdEV2ZW50cy5zdWIoJ2F1ZGlvLmFwaS5zdG9wJywgc3RvcEZuKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVOZXdPYmplY3QoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBsYXllciA9IHdpbmRvdy5BdWRpbyA/IG5ldyB3aW5kb3cuQXVkaW8oKSA6IG51bGw7XG5cdFx0XHRpZiAocGxheWVyICYmIHBsYXllci5jYW5QbGF5VHlwZSAmJiBwbGF5ZXIucGF1c2UgJiYgcGxheWVyLnBsYXkpIHtcblx0XHRcdFx0cGxheWVyLnByZWxvYWQgPSAnbm9uZSc7XG5cdFx0XHRcdHBsYXllci5sb29wID0gZmFsc2U7XG5cdFx0XHRcdHBsYXllci5hdXRvcGxheSA9IGZhbHNlO1xuXHRcdFx0XHRwbGF5ZXIubXV0ZWQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBsYXllcjtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHBhdXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdXBwb3J0ZWQgPyAhIXRoaXMucGxheWVyLnBhdXNlZCA6IHRydWU7XG5cdH1cblxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnBsYXllci5wYXVzZSkge1xuXHRcdFx0dGhpcy5wbGF5ZXIucGF1c2UoKTtcblx0XHR9XG5cblx0XHRFdmVudHMucHViKCdhdWRpby5zdG9wJyk7XG5cdH1cblxuXHRwYXVzZSgpIHtcblx0XHR0aGlzLnN0b3AoKTtcblx0fVxuXG5cdGNsZWFyTmFtZShuYW1lID0gJycsIGV4dCA9ICcnKSB7XG5cdFx0bmFtZSA9IHRyaW0obmFtZSk7XG5cdFx0aWYgKGV4dCAmJiAnLicgKyBleHQgPT09IG5hbWUudG9Mb3dlckNhc2UoKS5zdWJzdHIoKGV4dC5sZW5ndGggKyAxKSAqIC0xKSkge1xuXHRcdFx0bmFtZSA9IHRyaW0obmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGggLSA0KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnID09PSBuYW1lID8gJ2F1ZGlvJyA6IG5hbWU7XG5cdH1cblxuXHRwbGF5TXAzKHVybCwgbmFtZSkge1xuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnN1cHBvcnRlZE1wMykge1xuXHRcdFx0dGhpcy5wbGF5ZXIuc3JjID0gdXJsO1xuXHRcdFx0dGhpcy5wbGF5ZXIucGxheSgpO1xuXG5cdFx0XHRFdmVudHMucHViKCdhdWRpby5zdGFydCcsIFt0aGlzLmNsZWFyTmFtZShuYW1lLCAnbXAzJyksICdtcDMnXSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheU9nZyh1cmwsIG5hbWUpIHtcblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRPZ2cpIHtcblx0XHRcdHRoaXMucGxheWVyLnNyYyA9IHVybDtcblx0XHRcdHRoaXMucGxheWVyLnBsYXkoKTtcblxuXHRcdFx0bmFtZSA9IHRoaXMuY2xlYXJOYW1lKG5hbWUsICdvZ2EnKTtcblx0XHRcdG5hbWUgPSB0aGlzLmNsZWFyTmFtZShuYW1lLCAnb2dnJyk7XG5cblx0XHRcdEV2ZW50cy5wdWIoJ2F1ZGlvLnN0YXJ0JywgW25hbWUsICdvZ2cnXSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheVdhdih1cmwsIG5hbWUpIHtcblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRXYXYpIHtcblx0XHRcdHRoaXMucGxheWVyLnNyYyA9IHVybDtcblx0XHRcdHRoaXMucGxheWVyLnBsYXkoKTtcblxuXHRcdFx0RXZlbnRzLnB1YignYXVkaW8uc3RhcnQnLCBbdGhpcy5jbGVhck5hbWUobmFtZSwgJ3dhdicpLCAnd2F2J10pO1xuXHRcdH1cblx0fVxuXG5cdHBsYXlOb3RpZmljYXRpb24oKSB7XG5cdFx0aWYgKHRoaXMuc3VwcG9ydGVkICYmIHRoaXMuc3VwcG9ydGVkTXAzKSB7XG5cdFx0XHRpZiAoIXRoaXMubm90aWZpY2F0b3IpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRvciA9IHRoaXMuY3JlYXRlTmV3T2JqZWN0KCk7XG5cdFx0XHRcdHRoaXMubm90aWZpY2F0b3Iuc3JjID0gTGlua3Muc291bmQoJ25ldy1tYWlsLm1wMycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5ub3RpZmljYXRvciAmJiB0aGlzLm5vdGlmaWNhdG9yLnBsYXkpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRvci5wbGF5KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBdWRpbygpO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY2FjaGUgPSB7fTtcblxudmFyIHRocm93ZXIgPSBmdW5jdGlvbiAoaXQpIHsgdGhyb3cgaXQ7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBvcHRpb25zKSB7XG4gIGlmIChoYXMoY2FjaGUsIE1FVEhPRF9OQU1FKSkgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXTtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHZhciBBQ0NFU1NPUlMgPSBoYXMob3B0aW9ucywgJ0FDQ0VTU09SUycpID8gb3B0aW9ucy5BQ0NFU1NPUlMgOiBmYWxzZTtcbiAgdmFyIGFyZ3VtZW50MCA9IGhhcyhvcHRpb25zLCAwKSA/IG9wdGlvbnNbMF0gOiB0aHJvd2VyO1xuICB2YXIgYXJndW1lbnQxID0gaGFzKG9wdGlvbnMsIDEpID8gb3B0aW9uc1sxXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdID0gISFtZXRob2QgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoQUNDRVNTT1JTICYmICFERVNDUklQVE9SUykgcmV0dXJuIHRydWU7XG4gICAgdmFyIE8gPSB7IGxlbmd0aDogLTEgfTtcblxuICAgIGlmIChBQ0NFU1NPUlMpIGRlZmluZVByb3BlcnR5KE8sIDEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiB0aHJvd2VyIH0pO1xuICAgIGVsc2UgT1sxXSA9IDE7XG5cbiAgICBtZXRob2QuY2FsbChPLCBhcmd1bWVudDAsIGFyZ3VtZW50MSk7XG4gIH0pO1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCwgdHJpbSwgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RJbnB1dCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlIHx8ICcnO1xuXHRcdHRoaXMuc2l6ZSA9IHBhcmFtcy5zaXplIHx8IDA7XG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLnByZUxhYmVsID0gcGFyYW1zLnByZUxhYmVsIHx8ICcnO1xuXHRcdHRoaXMuZW5hYmxlID0gaXNVbmQocGFyYW1zLmVuYWJsZSkgPyB0cnVlIDogcGFyYW1zLmVuYWJsZTtcblx0XHR0aGlzLnRyaWdnZXIgPSBwYXJhbXMudHJpZ2dlciAmJiBwYXJhbXMudHJpZ2dlci5zdWJzY3JpYmUgPyBwYXJhbXMudHJpZ2dlciA6IG51bGw7XG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IHBhcmFtcy5wbGFjZWhvbGRlciB8fCAnJztcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMucHJlTGFiZWxlZCA9ICFpc1VuZChwYXJhbXMucHJlTGFiZWwpO1xuXHRcdHRoaXMudHJpZ2dlcmVkID0gIWlzVW5kKHBhcmFtcy50cmlnZ2VyKSAmJiAhIXRoaXMudHJpZ2dlcjtcblxuXHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNsYXNzTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpemUgPSBrby51bndyYXAodGhpcy5zaXplKSxcblx0XHRcdFx0c3VmZml4VmFsdWUgPSB0aGlzLnRyaWdnZXIgPyAnICcgKyB0cmltKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyLWlucHV0ICcgKyB0aGlzLmNsYXNzRm9yVHJpZ2dlcigpKSA6ICcnO1xuXHRcdFx0cmV0dXJuICgwIDwgc2l6ZSA/ICdzcGFuJyArIHNpemUgOiAnJykgKyBzdWZmaXhWYWx1ZTtcblx0XHR9KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLndpZHRoKSAmJiBwYXJhbXMuZWxlbWVudCkge1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQuZmluZCgnaW5wdXQsc2VsZWN0LHRleHRhcmVhJykuY3NzKCd3aWR0aCcsIHBhcmFtcy53aWR0aCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy5jbGFzc05hbWUpO1xuXG5cdFx0aWYgKHRoaXMudHJpZ2dlcikge1xuXHRcdFx0dGhpcy5zZXRUcmlnZ2VyU3RhdGUodGhpcy50cmlnZ2VyKCkpO1xuXG5cdFx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLnRyaWdnZXIuc3Vic2NyaWJlKHRoaXMuc2V0VHJpZ2dlclN0YXRlLCB0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0VHJpZ2dlclN0YXRlKHZhbHVlKSB7XG5cdFx0c3dpdGNoIChwSW50KHZhbHVlKSkge1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCdzdWNjZXNzJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignZXJyb3InKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdElucHV0LCBBYnN0cmFjdElucHV0IGFzIGRlZmF1bHQgfTtcbiIsInZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBvYmplY3RIYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuXG5pbXBvcnQgUHJvbWlzZXNQb3B1bGF0b3IgZnJvbSAnUHJvbWlzZXMvVXNlci9Qb3B1bGF0b3InO1xuaW1wb3J0IHsgQWJzdHJhY3RBamF4UHJvbWlzZXMgfSBmcm9tICdQcm9taXNlcy9BYnN0cmFjdEFqYXgnO1xuXG5jbGFzcyBVc2VyQWpheFVzZXJQcm9taXNlcyBleHRlbmRzIEFic3RyYWN0QWpheFByb21pc2VzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZm9sZGVyc1RpbWVvdXQgPSAwO1xuXHR9XG5cblx0Zm9sZGVyc1JlbG9hZChmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLmFib3J0KCdGb2xkZXJzJylcblx0XHRcdC5wb3N0UmVxdWVzdCgnRm9sZGVycycsIGZUcmlnZ2VyKVxuXHRcdFx0LnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdFx0UHJvbWlzZXNQb3B1bGF0b3IuZm9sZGVyc0xpc3QoZGF0YS5SZXN1bHQpO1xuXHRcdFx0XHRQcm9taXNlc1BvcHVsYXRvci5mb2xkZXJzQWRkaXRpb25hbFBhcmFtZXRlcnMoZGF0YS5SZXN1bHQpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9sZGVyc1JlbG9hZFdpdGhUaW1lb3V0KGZUcmlnZ2VyKSB7XG5cdFx0dGhpcy5zZXRUcmlnZ2VyKGZUcmlnZ2VyLCB0cnVlKTtcblxuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5mb2xkZXJzVGltZW91dCk7XG5cdFx0dGhpcy5mb2xkZXJzVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuZm9sZGVyc1JlbG9hZChmVHJpZ2dlcik7XG5cdFx0fSwgNTAwKTtcblx0fVxuXG5cdGZvbGRlckRlbGV0ZShzRm9sZGVyRnVsbE5hbWVSYXcsIGZUcmlnZ2VyKSB7XG5cdFx0cmV0dXJuIHRoaXMucG9zdFJlcXVlc3QoJ0ZvbGRlckRlbGV0ZScsIGZUcmlnZ2VyLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdFx0fSk7XG5cdH1cblxuXHRmb2xkZXJDcmVhdGUoc05ld0ZvbGRlck5hbWUsIHNQYXJlbnROYW1lLCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdGb2xkZXJDcmVhdGUnLCBmVHJpZ2dlciwge1xuXHRcdFx0J0ZvbGRlcic6IHNOZXdGb2xkZXJOYW1lLFxuXHRcdFx0J1BhcmVudCc6IHNQYXJlbnROYW1lXG5cdFx0fSk7XG5cdH1cblxuXHRmb2xkZXJSZW5hbWUoc1ByZXZGb2xkZXJGdWxsTmFtZVJhdywgc05ld0ZvbGRlck5hbWUsIGZUcmlnZ2VyKSB7XG5cdFx0cmV0dXJuIHRoaXMucG9zdFJlcXVlc3QoJ0ZvbGRlclJlbmFtZScsIGZUcmlnZ2VyLCB7XG5cdFx0XHQnRm9sZGVyJzogc1ByZXZGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdCdOZXdGb2xkZXJOYW1lJzogc05ld0ZvbGRlck5hbWVcblx0XHR9KTtcblx0fVxuXG5cdGF0dGFjaG1lbnRzQWN0aW9ucyhzQWN0aW9uLCBhSGFzaGVzLCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdBdHRhY2htZW50c0FjdGlvbnMnLCBmVHJpZ2dlciwge1xuXHRcdFx0J0RvJzogc0FjdGlvbixcblx0XHRcdCdIYXNoZXMnOiBhSGFzaGVzXG5cdFx0fSk7XG5cdH1cblxuXHR3ZWxjb21lQ2xvc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMucG9zdFJlcXVlc3QoJ1dlbGNvbWVDbG9zZScpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBVc2VyQWpheFVzZXJQcm9taXNlcygpO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lm1vbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5wcm9ncmVzc0pzOyIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgSWRlbnRpdHlVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmlkZW50aXRpZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuaWRlbnRpdGllcy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblxuXHRcdHRoaXMuaWRlbnRpdGllc0lEUyA9IGtvLmNvbXB1dGVkKCgpID0+IF8uY29tcGFjdChfLm1hcCh0aGlzLmlkZW50aXRpZXMoKSwgKGl0ZW0pID0+IChpdGVtID8gaXRlbS5pZCA6IG51bGwpKSkpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBJZGVudGl0eVVzZXJTdG9yZSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQ29udGFjdFVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY29udGFjdHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuY29udGFjdHMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXHRcdHRoaXMuY29udGFjdHMuaW1wb3J0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMjAwbXMgfSk7XG5cdFx0dGhpcy5jb250YWN0cy5zeW5jaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMjAwbXMgfSk7XG5cdFx0dGhpcy5jb250YWN0cy5leHBvcnRpbmdWY2YgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblx0XHR0aGlzLmNvbnRhY3RzLmV4cG9ydGluZ0NzdiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXG5cdFx0dGhpcy5hbGxvd0NvbnRhY3RzU3luYyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZW5hYmxlQ29udGFjdHNTeW5jID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNVcmwgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1VzZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1Bhc3MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dDb250YWN0c1N5bmMoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jSXNBbGxvd2VkJykpO1xuXHRcdHRoaXMuZW5hYmxlQ29udGFjdHNTeW5jKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0VuYWJsZUNvbnRhY3RzU3luYycpKTtcblxuXHRcdHRoaXMuY29udGFjdHNTeW5jVXJsKFNldHRpbmdzLnNldHRpbmdzR2V0KCdDb250YWN0c1N5bmNVcmwnKSk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyKFNldHRpbmdzLnNldHRpbmdzR2V0KCdDb250YWN0c1N5bmNVc2VyJykpO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jUGFzcyhTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jUGFzc3dvcmQnKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvbnRhY3RVc2VyU3RvcmUoKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWSB8fCBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWTtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IHJlZ2V4cEZsYWdzLmNhbGwocmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCd5JywgJycpO1xuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gU3RyaW5nKHN0cikuc2xpY2UocmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIHN0cltyZS5sYXN0SW5kZXggLSAxXSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuLy8gbGV0IHJhaW5sb29wQ2FjaGVzID0gd2luZG93LmNhY2hlcyAmJiB3aW5kb3cuY2FjaGVzLm9wZW4gPyB3aW5kb3cuY2FjaGVzIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3NyY30gc3JjXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFzeW5jID0gZmFsc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gamFzc2woc3JjLCBhc3luYyA9IGZhbHNlKSB7XG5cdGlmICghd2luZG93LlByb21pc2UgfHwgIXdpbmRvdy5Qcm9taXNlLmFsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgYXJlIG5vdCBhdmFpbGFibGUgeW91ciBlbnZpcm9ubWVudC4nKTtcblx0fVxuXG5cdGlmICghc3JjKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdzcmMgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0fVxuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cblx0XHRlbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHJlc29sdmUoc3JjKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihzcmMpKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5hc3luYyA9IHRydWUgPT09IGFzeW5jO1xuXHRcdGVsZW1lbnQuc3JjID0gc3JjO1xuXG5cdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH0pIC8qIC50aGVuKChzKSA9PiB7XG5cblx0XHRjb25zdCBmb3VuZCA9IHMgJiYgcmFpbmxvb3BDYWNoZXMgPyBzLm1hdGNoKC9yYWlubG9vcFxcL3ZcXC8oW15cXC9dKylcXC9zdGF0aWNcXC8vKSA6IG51bGw7XG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kWzFdKVxuXHRcdHtcblx0XHRcdHJhaW5sb29wQ2FjaGVzLm9wZW4oJ3JhaW5sb29wLW9mZmxpbmUtJyArIGZvdW5kWzFdKS50aGVuKFxuXHRcdFx0XHQoY2FjaGUpID0+IGNhY2hlLmFkZChzKVxuXHRcdFx0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJhaW5sb29wQ2FjaGVzID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzO1xuXHR9KSovO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFRoZW1lU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRoZW1lID0ga28ub2JzZXJ2YWJsZSgnJykuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMudGhlbWVzIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgdGhlbWVzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3RoZW1lcycpO1xuXG5cdFx0dGhpcy50aGVtZXMoaXNBcnJheSh0aGVtZXMpID8gdGhlbWVzIDogW10pO1xuXHRcdHRoaXMudGhlbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RoZW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmROYW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZVN0b3JlKCk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBEZXNrdG9wTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuaW1wb3J0IEF1ZGlvIGZyb20gJ0NvbW1vbi9BdWRpbyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBOb3RpZmljYXRpb25Vc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zb3VuZE5vdGlmaWNhdGlvbklzU3VwcG9ydGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbnMgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24oKTtcblxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RTdXBwb3J0ZWQ7XG5cblx0XHRcdFx0Y29uc3QgTm90aWZpY2F0aW9uQ2xhc3MgPSB0aGlzLm5vdGlmaWNhdGlvbkNsYXNzKCk7XG5cdFx0XHRcdGlmIChOb3RpZmljYXRpb25DbGFzcyAmJiBOb3RpZmljYXRpb25DbGFzcy5wZXJtaXNzaW9uKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChOb3RpZmljYXRpb25DbGFzcy5wZXJtaXNzaW9uLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2dyYW50ZWQnOlxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBEZXNrdG9wTm90aWZpY2F0aW9uLkFsbG93ZWQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZGVuaWVkJzpcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gRGVza3RvcE5vdGlmaWNhdGlvbi5EZW5pZWQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZGVmYXVsdCc6XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IERlc2t0b3BOb3RpZmljYXRpb24uTm90QWxsb3dlZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXROb3RpZmljYXRpb25zICYmIHdpbmRvdy53ZWJraXROb3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbikge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHdpbmRvdy53ZWJraXROb3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbiA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiAoKSA9PlxuXHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uKCkgJiYgRGVza3RvcE5vdGlmaWNhdGlvbi5BbGxvd2VkID09PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBOb3RpZmljYXRpb25DbGFzcyA9IHRoaXMubm90aWZpY2F0aW9uQ2xhc3MoKSxcblx0XHRcdFx0XHRcdFx0cGVybWlzc2lvbiA9IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCk7XG5cblx0XHRcdFx0XHRcdGlmIChOb3RpZmljYXRpb25DbGFzcyAmJiBEZXNrdG9wTm90aWZpY2F0aW9uLkFsbG93ZWQgPT09IHBlcm1pc3Npb24pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24odHJ1ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbkNsYXNzICYmIERlc2t0b3BOb3RpZmljYXRpb24uTm90QWxsb3dlZCA9PT0gcGVybWlzc2lvbikge1xuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb25DbGFzcy5yZXF1ZXN0UGVybWlzc2lvbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24udmFsdWVIYXNNdXRhdGVkKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoRGVza3RvcE5vdGlmaWNhdGlvbi5BbGxvd2VkID09PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24oKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24oKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24oZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHRpZiAoIXRoaXMuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRcdHRoaXMuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbXB1dGVycygpO1xuXG5cdFx0dGhpcy5pbml0Tm90aWZpY2F0aW9uUGxheWVyKCk7XG5cdH1cblxuXHRjb21wdXRlcnMoKSB7XG5cdFx0dGhpcy5pc0Rlc2t0b3BOb3RpZmljYXRpb25TdXBwb3J0ZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IERlc2t0b3BOb3RpZmljYXRpb24uTm90U3VwcG9ydGVkICE9PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNEZXNrdG9wTm90aWZpY2F0aW9uRGVuaWVkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHREZXNrdG9wTm90aWZpY2F0aW9uLk5vdFN1cHBvcnRlZCA9PT0gdGhpcy5kZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKSB8fFxuXHRcdFx0XHREZXNrdG9wTm90aWZpY2F0aW9uLkRlbmllZCA9PT0gdGhpcy5kZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKVxuXHRcdCk7XG5cdH1cblxuXHRpbml0Tm90aWZpY2F0aW9uUGxheWVyKCkge1xuXHRcdGlmIChBdWRpbyAmJiBBdWRpby5zdXBwb3J0ZWROb3RpZmljYXRpb24pIHtcblx0XHRcdHRoaXMuc291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZCh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lbmFibGVTb3VuZE5vdGlmaWNhdGlvbihmYWxzZSk7XG5cdFx0XHR0aGlzLnNvdW5kTm90aWZpY2F0aW9uSXNTdXBwb3J0ZWQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdHBsYXlTb3VuZE5vdGlmaWNhdGlvbihza2lwU2V0dGluZykge1xuXHRcdGlmIChBdWRpbyAmJiBBdWRpby5zdXBwb3J0ZWROb3RpZmljYXRpb24gJiYgKHNraXBTZXR0aW5nID8gdHJ1ZSA6IHRoaXMuZW5hYmxlU291bmROb3RpZmljYXRpb24oKSkpIHtcblx0XHRcdEF1ZGlvLnBsYXlOb3RpZmljYXRpb24oKTtcblx0XHR9XG5cdH1cblxuXHRkaXNwbGF5RGVza3RvcE5vdGlmaWNhdGlvbihpbWFnZVNyYywgdGl0bGUsIHRleHQsIG5lc3NhZ2VEYXRhKSB7XG5cdFx0aWYgKHRoaXMuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbigpKSB7XG5cdFx0XHRjb25zdCBOb3RpZmljYXRpb25DbGFzcyA9IHRoaXMubm90aWZpY2F0aW9uQ2xhc3MoKSxcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uQ2xhc3Ncblx0XHRcdFx0XHQ/IG5ldyBOb3RpZmljYXRpb25DbGFzcyh0aXRsZSwge1xuXHRcdFx0XHRcdFx0XHRib2R5OiB0ZXh0LFxuXHRcdFx0XHRcdFx0XHRpY29uOiBpbWFnZVNyY1xuXHRcdFx0XHRcdCAgfSlcblx0XHRcdFx0XHQ6IG51bGw7XG5cblx0XHRcdGlmIChub3RpZmljYXRpb24pIHtcblx0XHRcdFx0aWYgKG5vdGlmaWNhdGlvbi5zaG93KSB7XG5cdFx0XHRcdFx0bm90aWZpY2F0aW9uLnNob3coKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChuZXNzYWdlRGF0YSkge1xuXHRcdFx0XHRcdG5vdGlmaWNhdGlvbi5vbmNsaWNrID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0d2luZG93LmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdGlmIChuZXNzYWdlRGF0YS5Gb2xkZXIgJiYgbmVzc2FnZURhdGEuVWlkKSB7XG5cdFx0XHRcdFx0XHRcdEV2ZW50cy5wdWIoJ21haWxib3gubWVzc2FnZS5zaG93JywgW25lc3NhZ2VEYXRhLkZvbGRlciwgbmVzc2FnZURhdGEuVWlkXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KFxuXHRcdFx0XHRcdChmdW5jdGlvbihsb2NhbE5vdGlmaWNhdGlvbnMpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChsb2NhbE5vdGlmaWNhdGlvbnMuY2FuY2VsKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxOb3RpZmljYXRpb25zLmNhbmNlbCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGxvY2FsTm90aWZpY2F0aW9ucy5jbG9zZSkge1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsTm90aWZpY2F0aW9ucy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pKG5vdGlmaWNhdGlvbiksXG5cdFx0XHRcdFx0TWFnaWNzLlRpbWU3c1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuZW5hYmxlU291bmROb3RpZmljYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU291bmROb3RpZmljYXRpb24nKSk7XG5cdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0Rlc2t0b3BOb3RpZmljYXRpb25zJykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHsqfG51bGx9XG5cdCAqL1xuXHRub3RpZmljYXRpb25DbGFzcygpIHtcblx0XHRyZXR1cm4gd2luZG93Lk5vdGlmaWNhdGlvbiAmJiB3aW5kb3cuTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uID8gd2luZG93Lk5vdGlmaWNhdGlvbiA6IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE5vdGlmaWNhdGlvblVzZXJTdG9yZSgpO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgc3BsaXQgPSAnJy5zcGxpdDtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0LmNhbGwoaXQsICcnKSA6IE9iamVjdChpdCk7XG59IDogT2JqZWN0O1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkZmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKFBST01JU0UsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBpbnNwZWN0U291cmNlKFByb21pc2VDb25zdHJ1Y3RvcikgIT09IFN0cmluZyhQcm9taXNlQ29uc3RydWN0b3IpO1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UpIHtcbiAgICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICBpZiAoVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAgIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICBpZiAoIUlTX05PREUgJiYgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCAhPSAnZnVuY3Rpb24nKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBXZSBuZWVkIFByb21pc2UjZmluYWxseSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGVbJ2ZpbmFsbHknXSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmIChWOF9WRVJTSU9OID49IDUxICYmIC9uYXRpdmUgY29kZS8udGVzdChQcm9taXNlQ29uc3RydWN0b3IpKSByZXR1cm4gZmFsc2U7XG4gIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoMSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgcmV0dXJuICEocHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSk7XG59KTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSBGT1JDRUQgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSlbJ2NhdGNoJ10oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHByb21pc2UsIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHByb21pc2UsIHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkocHJvbWlzZSwgc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgdGhpcywgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCB0aGlzLCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdCh0aGlzLCBzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeSh0aGlzLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgcHJvbWlzZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgcHJvbWlzZSwgc3RhdGUpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgdHlwZW9mIE5hdGl2ZVByb21pc2UgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlLnByb3RvdHlwZS50aGVuO1xuXG4gICAgLy8gd3JhcCBuYXRpdmUgUHJvbWlzZSN0aGVuIGZvciBuYXRpdmUgYXN5bmMgZnVuY3Rpb25zXG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBuYXRpdmVUaGVuLmNhbGwodGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgIC8vIHdyYXAgZmV0Y2ggcmVzdWx0XG4gICAgaWYgKHR5cGVvZiAkZmV0Y2ggPT0gJ2Z1bmN0aW9uJykgJCh7IGdsb2JhbDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoUHJvbWlzZUNvbnN0cnVjdG9yLCAkZmV0Y2guYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcblxuUHJvbWlzZVdyYXBwZXIgPSBnZXRCdWlsdEluKFBST01JU0UpO1xuXG4vLyBzdGF0aWNzXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIGNhcGFiaWxpdHkucmVqZWN0LmNhbGwodW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyBgUHJvbWlzZS5yYWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgSnVhIGZyb20gJ0p1YSc7XG5cbmltcG9ydCB7XG5cdENhcGEsXG5cdE1hZ2ljcyxcblx0S2V5U3RhdGUsXG5cdENvbXBvc2VUeXBlLFxuXHRTdG9yYWdlUmVzdWx0VHlwZSxcblx0RWRpdG9yRGVmYXVsdFR5cGUsXG5cdE5vdGlmaWNhdGlvbixcblx0U2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbixcblx0VXBsb2FkRXJyb3JDb2RlXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7XG5cdHRyaW0sXG5cdGlzQXJyYXksXG5cdGlzTm9ybWFsLFxuXHRkZWxlZ2F0ZVJ1bixcblx0aXNOb25FbXB0eUFycmF5LFxuXHRjbGVhckJxU3dpdGNoZXIsXG5cdHJlcGx5U3ViamVjdEFkZCxcblx0ZW5jb2RlSHRtbCxcblx0bm9vcEZhbHNlLFxuXHRpbkZvY3VzLFxuXHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSxcblx0cEludCxcblx0aXNVbmRcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgVU5VU0VEX09QVElPTl9WQUxVRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdXBsb2FkIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGkxOG4sIGdldE5vdGlmaWNhdGlvbiwgZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZm9ybWF0IGFzIG1vbWVudG9yRm9ybWF0IH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSwgc2V0TWVzc2FnZUZsYWdzVG9DYWNoZSwgc2V0Rm9sZGVySGFzaCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IEh0bWxFZGl0b3IgfSBmcm9tICdDb21tb24vSHRtbEVkaXRvcic7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IElkZW50aXR5U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvSWRlbnRpdHknO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuaW1wb3J0IFNvY2lhbFN0b3JlIGZyb20gJ1N0b3Jlcy9Tb2NpYWwnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCB9IGZyb20gJ01vZGVsL0NvbXBvc2VBdHRhY2htZW50JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kLCBpc1BvcHVwVmlzaWJsZSwgc2hvd1NjcmVlblBvcHVwLCBoaWRlU2NyZWVuUG9wdXAsIHJvdXRlT24sIHJvdXRlT2ZmIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Db21wb3NlJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0NvbXBvc2UnXG59KVxuY2xhc3MgQ29tcG9zZVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Y29uc3QgZkVtYWlsT3V0SW5IZWxwZXIgPSAoY29udGV4dCwgaWRlbnRpdHksIG5hbWUsIGlzSW4pID0+IHtcblx0XHRcdGlmIChpZGVudGl0eSAmJiBjb250ZXh0ICYmIGlkZW50aXR5W25hbWVdKCkgJiYgKGlzSW4gPyB0cnVlIDogY29udGV4dFtuYW1lXSgpKSkge1xuXHRcdFx0XHRjb25zdCBpZGVudGl0eUVtYWlsID0gaWRlbnRpdHlbbmFtZV0oKTtcblx0XHRcdFx0bGV0IGxpc3QgPSB0cmltKGNvbnRleHRbbmFtZV0oKSkuc3BsaXQoL1ssXS8pO1xuXG5cdFx0XHRcdGxpc3QgPSBfLmZpbHRlcihsaXN0LCAoZW1haWwpID0+IHtcblx0XHRcdFx0XHRlbWFpbCA9IHRyaW0oZW1haWwpO1xuXHRcdFx0XHRcdHJldHVybiBlbWFpbCAmJiB0cmltKGlkZW50aXR5RW1haWwpICE9PSBlbWFpbDtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGlzSW4pIHtcblx0XHRcdFx0XHRsaXN0LnB1c2goaWRlbnRpdHlFbWFpbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb250ZXh0W25hbWVdKGxpc3Quam9pbignLCcpKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5vTGFzdE1lc3NhZ2UgPSBudWxsO1xuXHRcdHRoaXMub0VkaXRvciA9IG51bGw7XG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gbnVsbDtcblx0XHR0aGlzLnNJblJlcGx5VG8gPSAnJztcblx0XHR0aGlzLmJGcm9tRHJhZnQgPSBmYWxzZTtcblx0XHR0aGlzLnNSZWZlcmVuY2VzID0gJyc7XG5cblx0XHR0aGlzLnNMYXN0Rm9jdXNlZEZpZWxkID0gJ3RvJztcblxuXHRcdHRoaXMucmVzaXplclRyaWdnZXIgPSBfLmJpbmQodGhpcy5yZXNpemVyVHJpZ2dlciwgdGhpcyk7XG5cblx0XHR0aGlzLmFsbG93Q29udGFjdHMgPSAhIUFwcFN0b3JlLmNvbnRhY3RzSXNBbGxvd2VkKCk7XG5cdFx0dGhpcy5hbGxvd0ZvbGRlcnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKTtcblxuXHRcdHRoaXMuYlNraXBOZXh0SGlkZSA9IGZhbHNlO1xuXHRcdHRoaXMuY29tcG9zZUluRWRpdCA9IEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQ7XG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZSA9IFNldHRpbmdzU3RvcmUuZWRpdG9yRGVmYXVsdFR5cGU7XG5cblx0XHR0aGlzLmNhcGFPcGVuUEdQID0gUGdwU3RvcmUuY2FwYU9wZW5QR1A7XG5cblx0XHR0aGlzLmlkZW50aXRpZXNEcm9wZG93blRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudG8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jYy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5iY2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmJjYy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5yZXBseVRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZXBseVRvLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdC8vIHRoaXMudG8uc3Vic2NyaWJlKCh2KSA9PiBjb25zb2xlLmxvZyh2KSk7XG5cblx0XHRrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLnRvLmZvY3VzZWQoKTpcblx0XHRcdFx0XHR0aGlzLnNMYXN0Rm9jdXNlZEZpZWxkID0gJ3RvJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmNjLmZvY3VzZWQoKTpcblx0XHRcdFx0XHR0aGlzLnNMYXN0Rm9jdXNlZEZpZWxkID0gJ2NjJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmJjYy5mb2N1c2VkKCk6XG5cdFx0XHRcdFx0dGhpcy5zTGFzdEZvY3VzZWRGaWVsZCA9ICdiY2MnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSkuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMuc3ViamVjdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3ViamVjdC5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmlzSHRtbCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0RHNuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5yZXF1ZXN0UmVhZFJlY2VpcHQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm1hcmtBc0ltcG9ydGFudCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zZW5kRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlbmRTdWNjZXNzQnV0U2F2ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZlZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNlbmRCdXR0b25TdWNjZXNzID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2VuZEVycm9yKCkgJiYgIXRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3IoKSk7XG5cblx0XHR0aGlzLnNlbmRFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNhdmVkRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNlbmRFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VuZEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVkRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNhdmVkRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNhdmVkRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZWRUaW1lID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLnNhdmVkVGltZVRleHQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0MCA8IHRoaXMuc2F2ZWRUaW1lKCkgPyBpMThuKCdDT01QT1NFL1NBVkVEX1RJTUUnLCB7ICdUSU1FJzogbW9tZW50b3JGb3JtYXQodGhpcy5zYXZlZFRpbWUoKSAtIDEsICdMVCcpIH0pIDogJydcblx0XHQpO1xuXG5cdFx0dGhpcy5lbXB0eVRvRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVtcHR5VG9FcnJvclRvb2x0aXAgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5lbXB0eVRvRXJyb3IoKSA/IGkxOG4oJ0NPTVBPU0UvRU1QVFlfVE9fRVJST1JfREVTQycpIDogJycpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNFcnJvclRvb2x0aXAgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoKTpcblx0XHRcdFx0XHRyZXN1bHQgPSBpMThuKCdDT01QT1NFL0FUVEFDSE1FTlRTX1VQTE9BRF9FUlJPUl9ERVNDJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcigpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ0NPTVBPU0UvQVRUQUNITUVOVFNfRVJST1JfREVTQycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaG93Q2MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNob3dCY2MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNjLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChmYWxzZSA9PT0gdGhpcy5zaG93Q2MoKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0NjKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5iY2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKGZhbHNlID09PSB0aGlzLnNob3dCY2MoKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0JjYyh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMucmVwbHlUby5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHRoaXMuc2hvd1JlcGx5VG8oKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd1JlcGx5VG8odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRyYWZ0Rm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5kcmFmdFVpZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2VuZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbSAmJiAhaXRlbS5jb21wbGV0ZSgpKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50c0luUmVhZHkgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmIGl0ZW0uY29tcGxldGUoKSkpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbSAmJiAnJyAhPT0gaXRlbS5lcnJvcigpKSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvckNvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50c0luRXJyb3IoKS5sZW5ndGgpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NDb3VudCA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3MoKS5sZW5ndGgpO1xuXHRcdHRoaXMuaXNEcmFmdEZvbGRlck1lc3NhZ2UgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5kcmFmdEZvbGRlcigpICYmICcnICE9PSB0aGlzLmRyYWZ0VWlkKCkpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzUGxhY2Uuc3Vic2NyaWJlKHRoaXMucmVzaXplclRyaWdnZXIpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0luRXJyb3JDb3VudC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoMCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbXBvc2VVcGxvYWRlckJ1dHRvbiA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5jb21wb3NlVXBsb2FkZXJEcm9wUGxhY2UgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuZHJhZ0FuZERyb3BFbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMSB9KTtcblx0XHR0aGlzLmRyYWdBbmREcm9wVmlzaWJsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxIH0pO1xuXHRcdHRoaXMuYXR0YWNoZU11bHRpcGxlQWxsb3dlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRkQXR0YWNobWVudEVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29tcG9zZUVkaXRvckFyZWEgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5pZGVudGl0aWVzID0gSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzO1xuXHRcdHRoaXMuaWRlbnRpdGllc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAoSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzKCksIChpdGVtKSA9PiAoe1xuXHRcdFx0XHQnaXRlbSc6IGl0ZW0sXG5cdFx0XHRcdCdvcHRWYWx1ZSc6IGl0ZW0uaWQoKSxcblx0XHRcdFx0J29wdFRleHQnOiBpdGVtLmZvcm1hdHRlZE5hbWUoKVxuXHRcdFx0fSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuY3VycmVudElkZW50aXR5ID0ga28ub2JzZXJ2YWJsZSh0aGlzLmlkZW50aXRpZXMoKVswXSA/IHRoaXMuaWRlbnRpdGllcygpWzBdIDogbnVsbCk7XG5cblx0XHR0aGlzLmN1cnJlbnRJZGVudGl0eS5leHRlbmQoe1xuXHRcdFx0dG9nZ2xlU3Vic2NyaWJlOiBbXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdChpZGVudGl0eSkgPT4ge1xuXHRcdFx0XHRcdGZFbWFpbE91dEluSGVscGVyKHRoaXMsIGlkZW50aXR5LCAnYmNjJyk7XG5cdFx0XHRcdFx0ZkVtYWlsT3V0SW5IZWxwZXIodGhpcywgaWRlbnRpdHksICdyZXBseVRvJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdChpZGVudGl0eSkgPT4ge1xuXHRcdFx0XHRcdGZFbWFpbE91dEluSGVscGVyKHRoaXMsIGlkZW50aXR5LCAnYmNjJywgdHJ1ZSk7XG5cdFx0XHRcdFx0ZkVtYWlsT3V0SW5IZWxwZXIodGhpcywgaWRlbnRpdHksICdyZXBseVRvJywgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9KTtcblxuXHRcdHRoaXMuY3VycmVudElkZW50aXR5VmlldyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLmN1cnJlbnRJZGVudGl0eSgpO1xuXHRcdFx0cmV0dXJuIGl0ZW0gPyBpdGVtLmZvcm1hdHRlZE5hbWUoKSA6ICd1bmtub3duJztcblx0XHR9KTtcblxuXHRcdHRoaXMudG8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW1wdHlUb0Vycm9yKCkgJiYgMCA8IHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLmVtcHR5VG9FcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoKSAmJiBpc0FycmF5KHZhbHVlKSAmJiAwID09PSB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMucmVzaXplciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiA1MCB9KTtcblxuXHRcdHRoaXMucmVzaXplci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMub0VkaXRvcikge1xuXHRcdFx0XHR0aGlzLm9FZGl0b3IucmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlU2VudE9yU2F2ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5zZW5kaW5nKCkgJiYgIXRoaXMuc2F2aW5nKCkpO1xuXG5cdFx0dGhpcy5zZW5kTWVzc2FnZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMuc2VuZE1lc3NhZ2VSZXNwb25zZSwgdGhpcyk7XG5cdFx0dGhpcy5zYXZlTWVzc2FnZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMuc2F2ZU1lc3NhZ2VSZXNwb25zZSwgdGhpcyk7XG5cblx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4ybScsICgpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5tb2RhbFZpc2liaWxpdHkoKSAmJlxuXHRcdFx0XHQhRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXJOb3RFbmFibGVkKCkgJiZcblx0XHRcdFx0U2V0dGluZ3NTdG9yZS5hbGxvd0RyYWZ0QXV0b3NhdmUoKSAmJlxuXHRcdFx0XHQhdGhpcy5pc0VtcHR5Rm9ybShmYWxzZSkgJiZcblx0XHRcdFx0IXRoaXMuc2F2aW5nKCkgJiZcblx0XHRcdFx0IXRoaXMuc2VuZGluZygpICYmXG5cdFx0XHRcdCF0aGlzLnNhdmVkRXJyb3IoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2hvd0NjLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHR0aGlzLnNob3dCY2Muc3Vic2NyaWJlKHRoaXMucmVzaXplclRyaWdnZXIpO1xuXHRcdHRoaXMuc2hvd1JlcGx5VG8uc3Vic2NyaWJlKHRoaXMucmVzaXplclRyaWdnZXIpO1xuXG5cdFx0dGhpcy5kcm9wYm94RW5hYmxlZCA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdHRoaXMuZHJpdmVFbmFibGVkID0ga28ub2JzZXJ2YWJsZShcblx0XHRcdGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCAmJlxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmXG5cdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsRHJpdmUnKSAmJlxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpICYmXG5cdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUFwaUtleScpXG5cdFx0KTtcblxuXHRcdHRoaXMuZHJpdmVWaXNpYmxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRyaXZlQ2FsbGJhY2sgPSBfLmJpbmQodGhpcy5kcml2ZUNhbGxiYWNrLCB0aGlzKTtcblxuXHRcdHRoaXMub25NZXNzYWdlVXBsb2FkQXR0YWNobWVudHMgPSBfLmJpbmQodGhpcy5vbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cywgdGhpcyk7XG5cblx0XHR0aGlzLmJEaXNhYmVDbG9zZU9uRXNjID0gdHJ1ZTtcblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Db21wb3NlO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXG5cdFx0dGhpcy5lbWFpbHNTb3VyY2UgPSBfLmJpbmQodGhpcy5lbWFpbHNTb3VyY2UsIHRoaXMpO1xuXHRcdHRoaXMuYXV0b3NhdmVGdW5jdGlvbiA9IF8uYmluZCh0aGlzLmF1dG9zYXZlRnVuY3Rpb24sIHRoaXMpO1xuXG5cdFx0dGhpcy5pVGltZXIgPSAwO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTZW50T3JTYXZlZCgpKVxuXHRzZW5kQ29tbWFuZCgpIHtcblx0XHRjb25zdCBzVG8gPSB0cmltKHRoaXMudG8oKSksXG5cdFx0XHRzQ2MgPSB0cmltKHRoaXMuY2MoKSksXG5cdFx0XHRzQmNjID0gdHJpbSh0aGlzLmJjYygpKTtcblx0XHRsZXQgc1NlbnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuZW1wdHlUb0Vycm9yKGZhbHNlKTtcblxuXHRcdGlmICgwIDwgdGhpcy5hdHRhY2htZW50c0luUHJvY2VzcygpLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoMCA8IHRoaXMuYXR0YWNobWVudHNJbkVycm9yKCkubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvckVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICgnJyA9PT0gc1RvICYmICcnID09PSBzQ2MgJiYgJycgPT09IHNCY2MpIHtcblx0XHRcdHRoaXMuZW1wdHlUb0Vycm9yKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbXB0eVRvRXJyb3IoKSAmJiAhdGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcigpICYmICF0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoKSkge1xuXHRcdFx0aWYgKFNldHRpbmdzU3RvcmUucmVwbHlTYW1lRm9sZGVyKCkpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQXJyYXkodGhpcy5hRHJhZnRJbmZvKSAmJlxuXHRcdFx0XHRcdDMgPT09IHRoaXMuYURyYWZ0SW5mby5sZW5ndGggJiZcblx0XHRcdFx0XHRpc05vcm1hbCh0aGlzLmFEcmFmdEluZm9bMl0pICYmXG5cdFx0XHRcdFx0MCA8IHRoaXMuYURyYWZ0SW5mb1syXS5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c1NlbnRGb2xkZXIgPSB0aGlzLmFEcmFmdEluZm9bMl07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCF0aGlzLmFsbG93Rm9sZGVycykge1xuXHRcdFx0XHRzU2VudEZvbGRlciA9IFVOVVNFRF9PUFRJT05fVkFMVUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgnJyA9PT0gc1NlbnRGb2xkZXIpIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyksIFtTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLlNlbnRdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VuZEVycm9yKGZhbHNlKTtcblx0XHRcdFx0dGhpcy5zZW5kaW5nKHRydWUpO1xuXG5cdFx0XHRcdGlmIChpc0FycmF5KHRoaXMuYURyYWZ0SW5mbykgJiYgMyA9PT0gdGhpcy5hRHJhZnRJbmZvLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGZsYWdzQ2FjaGUgPSBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUodGhpcy5hRHJhZnRJbmZvWzJdLCB0aGlzLmFEcmFmdEluZm9bMV0pO1xuXHRcdFx0XHRcdGlmIChmbGFnc0NhY2hlKSB7XG5cdFx0XHRcdFx0XHRpZiAoJ2ZvcndhcmQnID09PSB0aGlzLmFEcmFmdEluZm9bMF0pIHtcblx0XHRcdFx0XHRcdFx0ZmxhZ3NDYWNoZVszXSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmbGFnc0NhY2hlWzJdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2V0TWVzc2FnZUZsYWdzVG9DYWNoZSh0aGlzLmFEcmFmdEluZm9bMl0sIHRoaXMuYURyYWZ0SW5mb1sxXSwgZmxhZ3NDYWNoZSk7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHRcdFx0XHRcdHNldEZvbGRlckhhc2godGhpcy5hRHJhZnRJbmZvWzJdLCAnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c1NlbnRGb2xkZXIgPSBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBzU2VudEZvbGRlciA/ICcnIDogc1NlbnRGb2xkZXI7XG5cblx0XHRcdFx0c2V0Rm9sZGVySGFzaCh0aGlzLmRyYWZ0Rm9sZGVyKCksICcnKTtcblx0XHRcdFx0c2V0Rm9sZGVySGFzaChzU2VudEZvbGRlciwgJycpO1xuXG5cdFx0XHRcdFJlbW90ZS5zZW5kTWVzc2FnZShcblx0XHRcdFx0XHR0aGlzLnNlbmRNZXNzYWdlUmVzcG9uc2UsXG5cdFx0XHRcdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkoKSA/IHRoaXMuY3VycmVudElkZW50aXR5KCkuaWQoKSA6ICcnLFxuXHRcdFx0XHRcdHRoaXMuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0XHR0aGlzLmRyYWZ0VWlkKCksXG5cdFx0XHRcdFx0c1NlbnRGb2xkZXIsXG5cdFx0XHRcdFx0c1RvLFxuXHRcdFx0XHRcdHRoaXMuY2MoKSxcblx0XHRcdFx0XHR0aGlzLmJjYygpLFxuXHRcdFx0XHRcdHRoaXMucmVwbHlUbygpLFxuXHRcdFx0XHRcdHRoaXMuc3ViamVjdCgpLFxuXHRcdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5pc0h0bWwoKSA6IGZhbHNlLFxuXHRcdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5nZXREYXRhKHRydWUpIDogJycsXG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyQXR0YWNobWVudHNGb3JTZW5kT3JTYXZlKCksXG5cdFx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvLFxuXHRcdFx0XHRcdHRoaXMuc0luUmVwbHlUbyxcblx0XHRcdFx0XHR0aGlzLnNSZWZlcmVuY2VzLFxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdERzbigpLFxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdFJlYWRSZWNlaXB0KCksXG5cdFx0XHRcdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2VudE9yU2F2ZWQoKSlcblx0c2F2ZUNvbW1hbmQoKSB7XG5cdFx0aWYgKCF0aGlzLmFsbG93Rm9sZGVycykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChGb2xkZXJTdG9yZS5kcmFmdEZvbGRlck5vdEVuYWJsZWQoKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyksIFtTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLkRyYWZ0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZWRFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnNhdmluZyh0cnVlKTtcblxuXHRcdFx0dGhpcy5hdXRvc2F2ZVN0YXJ0KCk7XG5cblx0XHRcdHNldEZvbGRlckhhc2goRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSwgJycpO1xuXG5cdFx0XHRSZW1vdGUuc2F2ZU1lc3NhZ2UoXG5cdFx0XHRcdHRoaXMuc2F2ZU1lc3NhZ2VSZXNwb25zZSxcblx0XHRcdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkoKSA/IHRoaXMuY3VycmVudElkZW50aXR5KCkuaWQoKSA6ICcnLFxuXHRcdFx0XHR0aGlzLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdHRoaXMuZHJhZnRVaWQoKSxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0dGhpcy50bygpLFxuXHRcdFx0XHR0aGlzLmNjKCksXG5cdFx0XHRcdHRoaXMuYmNjKCksXG5cdFx0XHRcdHRoaXMucmVwbHlUbygpLFxuXHRcdFx0XHR0aGlzLnN1YmplY3QoKSxcblx0XHRcdFx0dGhpcy5vRWRpdG9yID8gdGhpcy5vRWRpdG9yLmlzSHRtbCgpIDogZmFsc2UsXG5cdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5nZXREYXRhKHRydWUpIDogJycsXG5cdFx0XHRcdHRoaXMucHJlcGVhckF0dGFjaG1lbnRzRm9yU2VuZE9yU2F2ZSgpLFxuXHRcdFx0XHR0aGlzLmFEcmFmdEluZm8sXG5cdFx0XHRcdHRoaXMuc0luUmVwbHlUbyxcblx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyxcblx0XHRcdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQoKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmlzRHJhZnRGb2xkZXJNZXNzYWdlKCkpXG5cdGRlbGV0ZUNvbW1hbmQoKSB7XG5cdFx0Y29uc3QgUG9wdXBzQXNrVmlld01vZGVsID0gcmVxdWlyZSgnVmlldy9Qb3B1cC9Bc2snKTtcblx0XHRpZiAoIWlzUG9wdXBWaXNpYmxlKFBvcHVwc0Fza1ZpZXdNb2RlbCkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKFBvcHVwc0Fza1ZpZXdNb2RlbCwgW1xuXHRcdFx0XHRpMThuKCdQT1BVUFNfQVNLL0RFU0NfV0FOVF9ERUxFVEVfTUVTU0FHRVMnKSxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXJXaXRob3V0Q2hlY2sodGhpcy5kcmFmdEZvbGRlcigpLCBbdGhpcy5kcmFmdFVpZCgpXSk7XG5cdFx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoQ29tcG9zZVBvcHVwVmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVNlbnRPclNhdmVkKCkpXG5cdHNraXBDb21tYW5kKCkge1xuXHRcdHRoaXMuYlNraXBOZXh0SGlkZSA9IHRydWU7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLm1vZGFsVmlzaWJpbGl0eSgpICYmXG5cdFx0XHQhdGhpcy5zYXZpbmcoKSAmJlxuXHRcdFx0IXRoaXMuc2VuZGluZygpICYmXG5cdFx0XHQhRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXJOb3RFbmFibGVkKCkgJiZcblx0XHRcdFNldHRpbmdzU3RvcmUuYWxsb3dEcmFmdEF1dG9zYXZlKClcblx0XHQpIHtcblx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHR9XG5cblx0XHR0aGlzLnRyeVRvQ2xvc2VQb3B1cCgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuYWxsb3dDb250YWN0cylcblx0Y29udGFjdHNDb21tYW5kKCkge1xuXHRcdGlmICh0aGlzLmFsbG93Q29udGFjdHMpIHtcblx0XHRcdHRoaXMuc2tpcENvbW1hbmQoKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db250YWN0cycpLCBbdHJ1ZSwgdGhpcy5zTGFzdEZvY3VzZWRGaWVsZF0pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuZHJvcGJveEVuYWJsZWQoKSlcblx0ZHJvcGJveENvbW1hbmQoKSB7XG5cdFx0aWYgKHdpbmRvdy5Ecm9wYm94KSB7XG5cdFx0XHR3aW5kb3cuRHJvcGJveC5jaG9vc2Uoe1xuXHRcdFx0XHRzdWNjZXNzOiAoZmlsZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoZmlsZXMgJiYgZmlsZXNbMF0gJiYgZmlsZXNbMF0ubGluaykge1xuXHRcdFx0XHRcdFx0dGhpcy5hZGREcm9wYm94QXR0YWNobWVudChmaWxlc1swXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsaW5rVHlwZTogJ2RpcmVjdCcsXG5cdFx0XHRcdG11bHRpc2VsZWN0OiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuZHJpdmVFbmFibGVkKCkpXG5cdGRyaXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLmRyaXZlT3BlblBvcHVwKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRhdXRvc2F2ZUZ1bmN0aW9uKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiZcblx0XHRcdCFGb2xkZXJTdG9yZS5kcmFmdEZvbGRlck5vdEVuYWJsZWQoKSAmJlxuXHRcdFx0U2V0dGluZ3NTdG9yZS5hbGxvd0RyYWZ0QXV0b3NhdmUoKSAmJlxuXHRcdFx0IXRoaXMuaXNFbXB0eUZvcm0oZmFsc2UpICYmXG5cdFx0XHQhdGhpcy5zYXZpbmcoKSAmJlxuXHRcdFx0IXRoaXMuc2VuZGluZygpICYmXG5cdFx0XHQhdGhpcy5zYXZlZEVycm9yKClcblx0XHQpIHtcblx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHR9XG5cblx0XHR0aGlzLmF1dG9zYXZlU3RhcnQoKTtcblx0fVxuXG5cdGF1dG9zYXZlU3RhcnQoKSB7XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlUaW1lcik7XG5cdFx0dGhpcy5pVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmF1dG9zYXZlRnVuY3Rpb24sIE1hZ2ljcy5UaW1lMW0pO1xuXHR9XG5cblx0YXV0b3NhdmVTdG9wKCkge1xuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pVGltZXIpO1xuXHR9XG5cblx0ZW1haWxzU291cmNlKG9EYXRhLCBmUmVzcG9uc2UpIHtcblx0XHRnZXRBcHAoKS5nZXRBdXRvY29tcGxldGUob0RhdGEudGVybSwgKGFEYXRhKSA9PiB7XG5cdFx0XHRmUmVzcG9uc2UoXy5tYXAoYURhdGEsIChvRW1haWxJdGVtKSA9PiBvRW1haWxJdGVtLnRvTGluZShmYWxzZSkpKTtcblx0XHR9KTtcblx0fVxuXG5cdG9wZW5PcGVuUGdwUG9wdXAoKSB7XG5cdFx0aWYgKFBncFN0b3JlLmNhcGFPcGVuUEdQKCkgJiYgdGhpcy5vRWRpdG9yICYmICF0aGlzLm9FZGl0b3IuaXNIdG1sKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2VPcGVuUGdwJyksIFtcblx0XHRcdFx0KHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IHtcblx0XHRcdFx0XHRcdGVkaXRvci5zZXRQbGFpbihyZXN1bHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLm9FZGl0b3IuZ2V0RGF0YShmYWxzZSksXG5cdFx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KCksXG5cdFx0XHRcdHRoaXMudG8oKSxcblx0XHRcdFx0dGhpcy5jYygpLFxuXHRcdFx0XHR0aGlzLmJjYygpXG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHRyZWxvYWREcmFmdEZvbGRlcigpIHtcblx0XHRjb25zdCBkcmFmdEZvbGRlciA9IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCk7XG5cdFx0aWYgKCcnICE9PSBkcmFmdEZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSBkcmFmdEZvbGRlcikge1xuXHRcdFx0c2V0Rm9sZGVySGFzaChkcmFmdEZvbGRlciwgJycpO1xuXHRcdFx0aWYgKEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpID09PSBkcmFmdEZvbGRlcikge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCh0cnVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdldEFwcCgpLmZvbGRlckluZm9ybWF0aW9uKGRyYWZ0Rm9sZGVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmaW5kSWRlbnRpdHlCeU1lc3NhZ2UoY29tcG9zZVR5cGUsIG1lc3NhZ2UpIHtcblx0XHRsZXQgcmVzdWx0SW5kZXggPSAxMDAwLFxuXHRcdFx0cmVzdWx0SWRlbnRpdHkgPSBudWxsO1xuXHRcdGNvbnN0IGlkZW50aXRpZXMgPSBJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMoKSxcblx0XHRcdGlkZW50aXRpZXNDYWNoZSA9IHt9LFxuXHRcdFx0ZkVhY2hIZWxwZXIgPSAoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmVtYWlsICYmIGlkZW50aXRpZXNDYWNoZVtpdGVtLmVtYWlsXSkge1xuXHRcdFx0XHRcdGlmICghcmVzdWx0SWRlbnRpdHkgfHwgcmVzdWx0SW5kZXggPiBpZGVudGl0aWVzQ2FjaGVbaXRlbS5lbWFpbF1bMV0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdElkZW50aXR5ID0gaWRlbnRpdGllc0NhY2hlW2l0ZW0uZW1haWxdWzBdO1xuXHRcdFx0XHRcdFx0cmVzdWx0SW5kZXggPSBpZGVudGl0aWVzQ2FjaGVbaXRlbS5lbWFpbF1bMV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Xy5lYWNoKGlkZW50aXRpZXMsIChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0aWRlbnRpdGllc0NhY2hlW2l0ZW0uZW1haWwoKV0gPSBbaXRlbSwgaW5kZXhdO1xuXHRcdH0pO1xuXG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdHN3aXRjaCAoY29tcG9zZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5FbXB0eTpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseTpcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5Gb3J3YXJkOlxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQ6XG5cdFx0XHRcdFx0Xy5lYWNoKF8udW5pb24obWVzc2FnZS50bywgbWVzc2FnZS5jYywgbWVzc2FnZS5iY2MpLCBmRWFjaEhlbHBlcik7XG5cdFx0XHRcdFx0aWYgKCFyZXN1bHRJZGVudGl0eSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKG1lc3NhZ2UuZGVsaXZlcmVkVG8sIGZFYWNoSGVscGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRHJhZnQ6XG5cdFx0XHRcdFx0Xy5lYWNoKF8udW5pb24obWVzc2FnZS5mcm9tLCBtZXNzYWdlLnJlcGx5VG8pLCBmRWFjaEhlbHBlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0SWRlbnRpdHkgfHwgaWRlbnRpdGllc1swXSB8fCBudWxsO1xuXHR9XG5cblx0c2VsZWN0SWRlbnRpdHkoaWRlbnRpdHkpIHtcblx0XHRpZiAoaWRlbnRpdHkgJiYgaWRlbnRpdHkuaXRlbSkge1xuXHRcdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkoaWRlbnRpdHkuaXRlbSk7XG5cdFx0XHR0aGlzLnNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eS5pdGVtKTtcblx0XHR9XG5cdH1cblxuXHRzZW5kTWVzc2FnZVJlc3BvbnNlKHN0YXR1c1Jlc3VsdCwgZGF0YSkge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdG1lc3NhZ2UgPSAnJztcblxuXHRcdHRoaXMuc2VuZGluZyhmYWxzZSk7XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc3RhdHVzUmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2xvc2VDb21tYW5kJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiYgIXJlc3VsdCkge1xuXHRcdFx0aWYgKGRhdGEgJiYgTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSA9PT0gZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0dGhpcy5zZW5kU3VjY2Vzc0J1dFNhdmVFcnJvcih0cnVlKTtcblx0XHRcdFx0dGhpcy5zYXZlZEVycm9yRGVzYyh0cmltKGkxOG4oJ0NPTVBPU0UvU0FWRURfRVJST1JfT05fU0VORCcpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlID0gZ2V0Tm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdGRhdGEgJiYgZGF0YS5FcnJvckNvZGUgPyBkYXRhLkVycm9yQ29kZSA6IE5vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UsXG5cdFx0XHRcdFx0ZGF0YSAmJiBkYXRhLkVycm9yTWVzc2FnZSA/IGRhdGEuRXJyb3JNZXNzYWdlIDogJydcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLnNlbmRFcnJvcih0cnVlKTtcblx0XHRcdFx0dGhpcy5zZW5kRXJyb3JEZXNjKG1lc3NhZ2UgfHwgZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnJlbG9hZERyYWZ0Rm9sZGVyKCk7XG5cdH1cblxuXHRzYXZlTWVzc2FnZVJlc3BvbnNlKHN0YXR1c1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc3RhdHVzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0aWYgKG9EYXRhLlJlc3VsdC5OZXdGb2xkZXIgJiYgb0RhdGEuUmVzdWx0Lk5ld1VpZCkge1xuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmICh0aGlzLmJGcm9tRHJhZnQpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKTtcblx0XHRcdFx0XHRpZiAobWVzc2FnZSAmJiB0aGlzLmRyYWZ0Rm9sZGVyKCkgPT09IG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgJiYgdGhpcy5kcmFmdFVpZCgpID09PSBtZXNzYWdlLnVpZCkge1xuXHRcdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5kcmFmdEZvbGRlcihvRGF0YS5SZXN1bHQuTmV3Rm9sZGVyKTtcblx0XHRcdFx0dGhpcy5kcmFmdFVpZChvRGF0YS5SZXN1bHQuTmV3VWlkKTtcblxuXHRcdFx0XHR0aGlzLnNhdmVkVGltZSh3aW5kb3cuTWF0aC5yb3VuZChuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSk7XG5cblx0XHRcdFx0aWYgKHRoaXMuYkZyb21EcmFmdCkge1xuXHRcdFx0XHRcdHNldEZvbGRlckhhc2godGhpcy5kcmFmdEZvbGRlcigpLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0dGhpcy5zYXZlZEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5zYXZlZEVycm9yRGVzYyhnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVsb2FkRHJhZnRGb2xkZXIoKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmF1dG9zYXZlU3RvcCgpO1xuXG5cdFx0aWYgKCF0aGlzLmJTa2lwTmV4dEhpZGUpIHtcblx0XHRcdEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQoZmFsc2UpO1xuXHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdH1cblxuXHRcdHRoaXMuYlNraXBOZXh0SGlkZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy50by5mb2N1c2VkKGZhbHNlKTtcblxuXHRcdHJvdXRlT24oKTtcblx0fVxuXG5cdGVkaXRvcihmT25Jbml0KSB7XG5cdFx0aWYgKGZPbkluaXQpIHtcblx0XHRcdGlmICghdGhpcy5vRWRpdG9yICYmIHRoaXMuY29tcG9zZUVkaXRvckFyZWEoKSkge1xuXHRcdFx0XHQvLyBfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5vRWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoXG5cdFx0XHRcdFx0dGhpcy5jb21wb3NlRWRpdG9yQXJlYSgpLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0Zk9uSW5pdCh0aGlzLm9FZGl0b3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNpemVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0KGJIdG1sKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmlzSHRtbCghIWJIdG1sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vIH0sIDEwMDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm9FZGl0b3IpIHtcblx0XHRcdFx0Zk9uSW5pdCh0aGlzLm9FZGl0b3IpO1xuXHRcdFx0XHR0aGlzLnJlc2l6ZXJUcmlnZ2VyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y29udmVyU2lnbmF0dXJlKHNpZ25hdHVyZSkge1xuXHRcdGxldCBsaW1pdCA9IDEwLFxuXHRcdFx0ZnJvbUxpbmUgPSAnJztcblxuXHRcdGNvbnN0IG1vbWVudHMgPSBbXSxcblx0XHRcdG1vbWVudFJlZ3ggPSAve3tNT01FTlQ6KFtefV0rKX19L2c7XG5cblx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgvW1xccl0vZywgJycpO1xuXG5cdFx0ZnJvbUxpbmUgPSB0aGlzLm9MYXN0TWVzc2FnZSA/IHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcih0aGlzLm9MYXN0TWVzc2FnZS5mcm9tLCB0cnVlKSA6ICcnO1xuXHRcdGlmICgnJyAhPT0gZnJvbUxpbmUpIHtcblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST00tRlVMTH19L2csIGZyb21MaW5lKTtcblxuXHRcdFx0aWYgKC0xID09PSBmcm9tTGluZS5pbmRleE9mKCcgJykgJiYgMCA8IGZyb21MaW5lLmluZGV4T2YoJ0AnKSkge1xuXHRcdFx0XHRmcm9tTGluZSA9IGZyb21MaW5lLnJlcGxhY2UoL0BbXFxTXSsvLCAnJyk7XG5cdFx0XHR9XG5cblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST019fS9nLCBmcm9tTGluZSk7XG5cdFx0fVxuXG5cdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL1tcXHNdezEsMn17e0ZST019fS9nLCAne3tGUk9NfX0nKTtcblx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgvW1xcc117MSwyfXt7RlJPTS1GVUxMfX0vZywgJ3t7RlJPTS1GVUxMfX0nKTtcblxuXHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST019fS9nLCAnJyk7XG5cdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL3t7RlJPTS1GVUxMfX0vZywgJycpO1xuXG5cdFx0aWYgKC0xIDwgc2lnbmF0dXJlLmluZGV4T2YoJ3t7REFURX19JykpIHtcblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0RBVEV9fS9nLCBtb21lbnRvckZvcm1hdCgwLCAnbGxsbCcpKTtcblx0XHR9XG5cblx0XHRpZiAoLTEgPCBzaWduYXR1cmUuaW5kZXhPZigne3tUSU1FfX0nKSkge1xuXHRcdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL3t7VElNRX19L2csIG1vbWVudG9yRm9ybWF0KDAsICdMVCcpKTtcblx0XHR9XG5cdFx0aWYgKC0xIDwgc2lnbmF0dXJlLmluZGV4T2YoJ3t7TU9NRU5UOicpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgbWF0Y2ggPSBudWxsO1xuXHRcdFx0XHR3aGlsZSAobnVsbCAhPT0gKG1hdGNoID0gbW9tZW50UmVneC5leGVjKHNpZ25hdHVyZSkpKSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25kLWFzc2lnblxuXHRcdFx0XHRcdGlmIChtYXRjaCAmJiBtYXRjaFswXSAmJiBtYXRjaFsxXSkge1xuXHRcdFx0XHRcdFx0bW9tZW50cy5wdXNoKFttYXRjaFswXSwgbWF0Y2hbMV1dKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRsaW1pdCAtPSAxO1xuXHRcdFx0XHRcdGlmICgwID09PSBsaW1pdCkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG1vbWVudHMgJiYgMCA8IG1vbWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKG1vbWVudHMsIChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZShkYXRhWzBdLCBtb21lbnRvckZvcm1hdCgwLCBkYXRhWzFdKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgve3tNT01FTlQ6W159XSt9fS9nLCAnJyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNpZ25hdHVyZTtcblx0fVxuXG5cdHNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eSkge1xuXHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4ge1xuXHRcdFx0XHRsZXQgaXNIdG1sID0gZmFsc2UsXG5cdFx0XHRcdFx0c2lnbmF0dXJlID0gaWRlbnRpdHkuc2lnbmF0dXJlKCk7XG5cblx0XHRcdFx0aWYgKCcnICE9PSBzaWduYXR1cmUpIHtcblx0XHRcdFx0XHRpZiAoJzpIVE1MOicgPT09IHNpZ25hdHVyZS5zdWJzdHIoMCwgNikpIHtcblx0XHRcdFx0XHRcdGlzSHRtbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUuc3Vic3RyKDYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVkaXRvci5zZXRTaWduYXR1cmUodGhpcy5jb252ZXJTaWduYXR1cmUoc2lnbmF0dXJlKSwgaXNIdG1sLCAhIWlkZW50aXR5LnNpZ25hdHVyZUluc2VydEJlZm9yZSgpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHR5cGUgPSBDb21wb3NlVHlwZS5FbXB0eVxuXHQgKiBAcGFyYW0gez9NZXNzYWdlTW9kZWx8QXJyYXk9fSBvTWVzc2FnZU9yQXJyYXkgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhVG9FbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQ2NFbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQmNjRW1haWxzID0gbnVsbFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNDdXN0b21TdWJqZWN0ID0gbnVsbFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNDdXN0b21QbGFpblRleHQgPSBudWxsXG5cdCAqL1xuXHRvblNob3codHlwZSwgb01lc3NhZ2VPckFycmF5LCBhVG9FbWFpbHMsIGFDY0VtYWlscywgYUJjY0VtYWlscywgc0N1c3RvbVN1YmplY3QsIHNDdXN0b21QbGFpblRleHQpIHtcblx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0dGhpcy5hdXRvc2F2ZVN0YXJ0KCk7XG5cblx0XHRpZiAoQXBwU3RvcmUuY29tcG9zZUluRWRpdCgpKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBDb21wb3NlVHlwZS5FbXB0eTtcblx0XHRcdGlmIChDb21wb3NlVHlwZS5FbXB0eSAhPT0gdHlwZSkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Bc2snKSwgW1xuXHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRElTQ0FSRF9VTlNBVkVEX0RBVEEnKSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmluaXRPblNob3codHlwZSwgb01lc3NhZ2VPckFycmF5LCBhVG9FbWFpbHMsIGFDY0VtYWlscywgYUJjY0VtYWlscywgc0N1c3RvbVN1YmplY3QsIHNDdXN0b21QbGFpblRleHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFkZEVtYWlsc1RvKHRoaXMudG8sIGFUb0VtYWlscyk7XG5cdFx0XHRcdHRoaXMuYWRkRW1haWxzVG8odGhpcy5jYywgYUNjRW1haWxzKTtcblx0XHRcdFx0dGhpcy5hZGRFbWFpbHNUbyh0aGlzLmJjYywgYUJjY0VtYWlscyk7XG5cblx0XHRcdFx0aWYgKGlzTm9ybWFsKHNDdXN0b21TdWJqZWN0KSAmJiAnJyAhPT0gc0N1c3RvbVN1YmplY3QgJiYgJycgPT09IHRoaXMuc3ViamVjdCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHNDdXN0b21TdWJqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmluaXRPblNob3codHlwZSwgb01lc3NhZ2VPckFycmF5LCBhVG9FbWFpbHMsIGFDY0VtYWlscywgYUJjY0VtYWlscywgc0N1c3RvbVN1YmplY3QsIHNDdXN0b21QbGFpblRleHQpO1xuXHRcdH1cblx0fVxuXG5cdG9uV2FybVVwKCkge1xuXHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSAmJiAhdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4gZWRpdG9yLm1vZGVUb2dnbGUoZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZktvVmFsdWVcblx0ICogQHBhcmFtIHtBcnJheX0gZW1haWxzXG5cdCAqL1xuXHRhZGRFbWFpbHNUbyhmS29WYWx1ZSwgZW1haWxzKSB7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShlbWFpbHMpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRyaW0oZktvVmFsdWUoKSksXG5cdFx0XHRcdHZhbHVlcyA9IF8udW5pcShfLmNvbXBhY3QoXy5tYXAoZW1haWxzLCAoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLnRvTGluZShmYWxzZSkgOiBudWxsKSkpKTtcblxuXHRcdFx0ZktvVmFsdWUodmFsdWUgKyAoJycgPT09IHZhbHVlID8gJycgOiAnLCAnKSArIHRyaW0odmFsdWVzLmpvaW4oJywgJykpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtBcnJheX0gYUxpc3Rcblx0ICogQHBhcmFtIHtib29sZWFufSBiRnJpZW5kbHlcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYUxpc3QsIGJGcmllbmRseSkge1xuXHRcdGJGcmllbmRseSA9ICEhYkZyaWVuZGx5O1xuXHRcdHJldHVybiBfLm1hcChhTGlzdCwgKGl0ZW0pID0+IGl0ZW0udG9MaW5lKGJGcmllbmRseSkpLmpvaW4oJywgJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzVHlwZSA9IENvbXBvc2VUeXBlLkVtcHR5XG5cdCAqIEBwYXJhbSB7P01lc3NhZ2VNb2RlbHxBcnJheT19IG9NZXNzYWdlT3JBcnJheSA9IG51bGxcblx0ICogQHBhcmFtIHtBcnJheT19IGFUb0VtYWlscyA9IG51bGxcblx0ICogQHBhcmFtIHtBcnJheT19IGFDY0VtYWlscyA9IG51bGxcblx0ICogQHBhcmFtIHtBcnJheT19IGFCY2NFbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0N1c3RvbVN1YmplY3QgPSBudWxsXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0N1c3RvbVBsYWluVGV4dCA9IG51bGxcblx0ICovXG5cdGluaXRPblNob3coc1R5cGUsIG9NZXNzYWdlT3JBcnJheSwgYVRvRW1haWxzLCBhQ2NFbWFpbHMsIGFCY2NFbWFpbHMsIHNDdXN0b21TdWJqZWN0LCBzQ3VzdG9tUGxhaW5UZXh0KSB7XG5cdFx0QXBwU3RvcmUuY29tcG9zZUluRWRpdCh0cnVlKTtcblxuXHRcdGxldCBzRnJvbSA9ICcnLFxuXHRcdFx0c1RvID0gJycsXG5cdFx0XHRzQ2MgPSAnJyxcblx0XHRcdHNEYXRlID0gJycsXG5cdFx0XHRzU3ViamVjdCA9ICcnLFxuXHRcdFx0c1RleHQgPSAnJyxcblx0XHRcdHNSZXBseVRpdGxlID0gJycsXG5cdFx0XHRpZGVudGl0eSA9IG51bGwsXG5cdFx0XHRhRHJhZnRJbmZvID0gbnVsbCxcblx0XHRcdG1lc3NhZ2UgPSBudWxsO1xuXG5cdFx0Y29uc3QgZXhjbHVkZUVtYWlsID0ge30sXG5cdFx0XHRtRW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWwoKSxcblx0XHRcdGxpbmVDb21wb3NlVHlwZSA9IHNUeXBlIHx8IENvbXBvc2VUeXBlLkVtcHR5O1xuXG5cdFx0b01lc3NhZ2VPckFycmF5ID0gb01lc3NhZ2VPckFycmF5IHx8IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlT3JBcnJheSAmJiBpc05vcm1hbChvTWVzc2FnZU9yQXJyYXkpKSB7XG5cdFx0XHRtZXNzYWdlID1cblx0XHRcdFx0aXNBcnJheShvTWVzc2FnZU9yQXJyYXkpICYmIDEgPT09IG9NZXNzYWdlT3JBcnJheS5sZW5ndGhcblx0XHRcdFx0XHQ/IG9NZXNzYWdlT3JBcnJheVswXVxuXHRcdFx0XHRcdDogIWlzQXJyYXkob01lc3NhZ2VPckFycmF5KVxuXHRcdFx0XHRcdD8gb01lc3NhZ2VPckFycmF5XG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdH1cblxuXHRcdHRoaXMub0xhc3RNZXNzYWdlID0gbWVzc2FnZTtcblxuXHRcdGlmIChudWxsICE9PSBtRW1haWwpIHtcblx0XHRcdGV4Y2x1ZGVFbWFpbFttRW1haWxdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0aGlzLnJlc2V0KCk7XG5cblx0XHRpZGVudGl0eSA9IHRoaXMuZmluZElkZW50aXR5QnlNZXNzYWdlKGxpbmVDb21wb3NlVHlwZSwgbWVzc2FnZSk7XG5cdFx0aWYgKGlkZW50aXR5KSB7XG5cdFx0XHRleGNsdWRlRW1haWxbaWRlbnRpdHkuZW1haWwoKV0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYVRvRW1haWxzKSkge1xuXHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYVRvRW1haWxzKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhQ2NFbWFpbHMpKSB7XG5cdFx0XHR0aGlzLmNjKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihhQ2NFbWFpbHMpKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGFCY2NFbWFpbHMpKSB7XG5cdFx0XHR0aGlzLmJjYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYUJjY0VtYWlscykpO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gbGluZUNvbXBvc2VUeXBlICYmIG1lc3NhZ2UpIHtcblx0XHRcdHNEYXRlID0gbW9tZW50b3JGb3JtYXQobWVzc2FnZS5kYXRlVGltZVN0YW1wSW5VVEMoKSwgJ0ZVTEwnKTtcblx0XHRcdHNTdWJqZWN0ID0gbWVzc2FnZS5zdWJqZWN0KCk7XG5cdFx0XHRhRHJhZnRJbmZvID0gbWVzc2FnZS5hRHJhZnRJbmZvO1xuXG5cdFx0XHRjb25zdCBjbG9uZWRUZXh0ID0gJChtZXNzYWdlLmJvZHkpLmNsb25lKCk7XG5cdFx0XHRpZiAoY2xvbmVkVGV4dCkge1xuXHRcdFx0XHRjbGVhckJxU3dpdGNoZXIoY2xvbmVkVGV4dCk7XG5cblx0XHRcdFx0c1RleHQgPSBjbG9uZWRUZXh0Lmh0bWwoKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3BseUFsbFBhcnRzID0gbnVsbDtcblx0XHRcdHN3aXRjaCAobGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRW1wdHk6XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseTpcblx0XHRcdFx0XHR0aGlzLnRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLnJlcGx5RW1haWxzKGV4Y2x1ZGVFbWFpbCkpKTtcblx0XHRcdFx0XHR0aGlzLnN1YmplY3QocmVwbHlTdWJqZWN0QWRkKCdSZScsIHNTdWJqZWN0KSk7XG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIGxpbmVDb21wb3NlVHlwZSk7XG5cdFx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvID0gWydyZXBseScsIG1lc3NhZ2UudWlkLCBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3XTtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNNZXNzYWdlSWQ7XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IHRyaW0odGhpcy5zSW5SZXBseVRvICsgJyAnICsgbWVzc2FnZS5zUmVmZXJlbmNlcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0XHRyZXNwbHlBbGxQYXJ0cyA9IG1lc3NhZ2UucmVwbHlBbGxFbWFpbHMoZXhjbHVkZUVtYWlsKTtcblx0XHRcdFx0XHR0aGlzLnRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihyZXNwbHlBbGxQYXJ0c1swXSkpO1xuXHRcdFx0XHRcdHRoaXMuY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKHJlc3BseUFsbFBhcnRzWzFdKSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHJlcGx5U3ViamVjdEFkZCgnUmUnLCBzU3ViamVjdCkpO1xuXHRcdFx0XHRcdHRoaXMucHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCBsaW5lQ29tcG9zZVR5cGUpO1xuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IFsncmVwbHknLCBtZXNzYWdlLnVpZCwgbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhd107XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zTWVzc2FnZUlkO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSB0cmltKHRoaXMuc0luUmVwbHlUbyArICcgJyArIG1lc3NhZ2UucmVmZXJlbmNlcygpKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmQ6XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHJlcGx5U3ViamVjdEFkZCgnRndkJywgc1N1YmplY3QpKTtcblx0XHRcdFx0XHR0aGlzLnByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMobWVzc2FnZSwgbGluZUNvbXBvc2VUeXBlKTtcblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBbJ2ZvcndhcmQnLCBtZXNzYWdlLnVpZCwgbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhd107XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zTWVzc2FnZUlkO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSB0cmltKHRoaXMuc0luUmVwbHlUbyArICcgJyArIG1lc3NhZ2Uuc1JlZmVyZW5jZXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudDpcblx0XHRcdFx0XHR0aGlzLnN1YmplY3QocmVwbHlTdWJqZWN0QWRkKCdGd2QnLCBzU3ViamVjdCkpO1xuXHRcdFx0XHRcdHRoaXMucHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCBsaW5lQ29tcG9zZVR5cGUpO1xuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IFsnZm9yd2FyZCcsIG1lc3NhZ2UudWlkLCBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3XTtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNNZXNzYWdlSWQ7XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IHRyaW0odGhpcy5zSW5SZXBseVRvICsgJyAnICsgbWVzc2FnZS5zUmVmZXJlbmNlcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5EcmFmdDpcblx0XHRcdFx0XHR0aGlzLnRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLnRvKSk7XG5cdFx0XHRcdFx0dGhpcy5jYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5jYykpO1xuXHRcdFx0XHRcdHRoaXMuYmNjKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLmJjYykpO1xuXHRcdFx0XHRcdHRoaXMucmVwbHlUbyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5yZXBseVRvKSk7XG5cblx0XHRcdFx0XHR0aGlzLmJGcm9tRHJhZnQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5kcmFmdEZvbGRlcihtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHR0aGlzLmRyYWZ0VWlkKG1lc3NhZ2UudWlkKTtcblxuXHRcdFx0XHRcdHRoaXMuc3ViamVjdChzU3ViamVjdCk7XG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIGxpbmVDb21wb3NlVHlwZSk7XG5cblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBpc05vbkVtcHR5QXJyYXkoYURyYWZ0SW5mbykgJiYgMyA9PT0gYURyYWZ0SW5mby5sZW5ndGggPyBhRHJhZnRJbmZvIDogbnVsbDtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNJblJlcGx5VG87XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IG1lc3NhZ2Uuc1JlZmVyZW5jZXM7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5FZGl0QXNOZXc6XG5cdFx0XHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS50bykpO1xuXHRcdFx0XHRcdHRoaXMuY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UuY2MpKTtcblx0XHRcdFx0XHR0aGlzLmJjYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5iY2MpKTtcblx0XHRcdFx0XHR0aGlzLnJlcGx5VG8odGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UucmVwbHlUbykpO1xuXG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHNTdWJqZWN0KTtcblx0XHRcdFx0XHR0aGlzLnByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMobWVzc2FnZSwgbGluZUNvbXBvc2VUeXBlKTtcblxuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IGlzTm9uRW1wdHlBcnJheShhRHJhZnRJbmZvKSAmJiAzID09PSBhRHJhZnRJbmZvLmxlbmd0aCA/IGFEcmFmdEluZm8gOiBudWxsO1xuXHRcdFx0XHRcdHRoaXMuc0luUmVwbHlUbyA9IG1lc3NhZ2Uuc0luUmVwbHlUbztcblx0XHRcdFx0XHR0aGlzLnNSZWZlcmVuY2VzID0gbWVzc2FnZS5zUmVmZXJlbmNlcztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXG5cdFx0XHRzd2l0Y2ggKGxpbmVDb21wb3NlVHlwZSkge1xuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLlJlcGx5OlxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLlJlcGx5QWxsOlxuXHRcdFx0XHRcdHNGcm9tID0gbWVzc2FnZS5mcm9tVG9MaW5lKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRzUmVwbHlUaXRsZSA9IGkxOG4oJ0NPTVBPU0UvUkVQTFlfTUVTU0FHRV9USVRMRScsIHtcblx0XHRcdFx0XHRcdCdEQVRFVElNRSc6IHNEYXRlLFxuXHRcdFx0XHRcdFx0J0VNQUlMJzogc0Zyb21cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHNUZXh0ID0gJzxiciAvPjxiciAvPicgKyBzUmVwbHlUaXRsZSArICc6JyArICc8YnIgLz48YnIgLz4nICsgJzxibG9ja3F1b3RlPicgKyB0cmltKHNUZXh0KSArICc8L2Jsb2NrcXVvdGU+JztcblxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZDpcblx0XHRcdFx0XHRzRnJvbSA9IG1lc3NhZ2UuZnJvbVRvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c1RvID0gbWVzc2FnZS50b1RvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c0NjID0gbWVzc2FnZS5jY1RvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c1RleHQgPVxuXHRcdFx0XHRcdFx0JzxiciAvPjxiciAvPicgK1xuXHRcdFx0XHRcdFx0aTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX1RJVExFJykgK1xuXHRcdFx0XHRcdFx0JzxiciAvPicgK1xuXHRcdFx0XHRcdFx0aTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX0ZST00nKSArXG5cdFx0XHRcdFx0XHQnOiAnICtcblx0XHRcdFx0XHRcdHNGcm9tICtcblx0XHRcdFx0XHRcdCc8YnIgLz4nICtcblx0XHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9UTycpICtcblx0XHRcdFx0XHRcdCc6ICcgK1xuXHRcdFx0XHRcdFx0c1RvICtcblx0XHRcdFx0XHRcdCgwIDwgc0NjLmxlbmd0aCA/ICc8YnIgLz4nICsgaTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX0NDJykgKyAnOiAnICsgc0NjIDogJycpICtcblx0XHRcdFx0XHRcdCc8YnIgLz4nICtcblx0XHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9TRU5UJykgK1xuXHRcdFx0XHRcdFx0JzogJyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHNEYXRlKSArXG5cdFx0XHRcdFx0XHQnPGJyIC8+JyArXG5cdFx0XHRcdFx0XHRpMThuKCdDT01QT1NFL0ZPUldBUkRfTUVTU0FHRV9UT1BfU1VCSkVDVCcpICtcblx0XHRcdFx0XHRcdCc6ICcgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbChzU3ViamVjdCkgK1xuXHRcdFx0XHRcdFx0JzxiciAvPjxiciAvPicgK1xuXHRcdFx0XHRcdFx0dHJpbShzVGV4dCkgK1xuXHRcdFx0XHRcdFx0JzxiciAvPjxiciAvPic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5Gb3J3YXJkQXNBdHRhY2htZW50OlxuXHRcdFx0XHRcdHNUZXh0ID0gJyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4ge1xuXHRcdFx0XHRlZGl0b3Iuc2V0SHRtbChzVGV4dCwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbkZvcmNlZCA9PT0gdGhpcy5lZGl0b3JEZWZhdWx0VHlwZSgpIHx8XG5cdFx0XHRcdFx0KCFtZXNzYWdlLmlzSHRtbCgpICYmIEVkaXRvckRlZmF1bHRUeXBlLkh0bWxGb3JjZWQgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZWRpdG9yLm1vZGVUb2dnbGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlkZW50aXR5ICYmIENvbXBvc2VUeXBlLkRyYWZ0ICE9PSBsaW5lQ29tcG9zZVR5cGUgJiYgQ29tcG9zZVR5cGUuRWRpdEFzTmV3ICE9PSBsaW5lQ29tcG9zZVR5cGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldEZvY3VzSW5Qb3B1cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChDb21wb3NlVHlwZS5FbXB0eSA9PT0gbGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHR0aGlzLnN1YmplY3QoaXNOb3JtYWwoc0N1c3RvbVN1YmplY3QpID8gJycgKyBzQ3VzdG9tU3ViamVjdCA6ICcnKTtcblxuXHRcdFx0c1RleHQgPSBpc05vcm1hbChzQ3VzdG9tUGxhaW5UZXh0KSA/ICcnICsgc0N1c3RvbVBsYWluVGV4dCA6ICcnO1xuXG5cdFx0XHR0aGlzLmVkaXRvcigoZWRpdG9yKSA9PiB7XG5cdFx0XHRcdGVkaXRvci5zZXRIdG1sKHNUZXh0LCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWwgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKSAmJlxuXHRcdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWxGb3JjZWQgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRlZGl0b3IubW9kZVRvZ2dsZShmYWxzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdFx0XHR0aGlzLnNldFNpZ25hdHVyZUZyb21JZGVudGl0eShpZGVudGl0eSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldEZvY3VzSW5Qb3B1cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc05vbkVtcHR5QXJyYXkob01lc3NhZ2VPckFycmF5KSkge1xuXHRcdFx0Xy5lYWNoKG9NZXNzYWdlT3JBcnJheSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0dGhpcy5hZGRNZXNzYWdlQXNBdHRhY2htZW50KGl0ZW0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IHtcblx0XHRcdFx0ZWRpdG9yLnNldEh0bWwoJycsIGZhbHNlKTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuSHRtbCAhPT0gdGhpcy5lZGl0b3JEZWZhdWx0VHlwZSgpICYmXG5cdFx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuSHRtbEZvcmNlZCAhPT0gdGhpcy5lZGl0b3JEZWZhdWx0VHlwZSgpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGVkaXRvci5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpZGVudGl0eSAmJiBDb21wb3NlVHlwZS5EcmFmdCAhPT0gbGluZUNvbXBvc2VUeXBlICYmIENvbXBvc2VUeXBlLkVkaXRBc05ldyAhPT0gbGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRGb2N1c0luUG9wdXAoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzSW5Qb3B1cCgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRvd25sb2FkcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNEb3dubG9hZHNGb3JVcGxvYWQoKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGRvd25sb2FkcykpIHtcblx0XHRcdFJlbW90ZS5tZXNzYWdlVXBsb2FkQXR0YWNobWVudHModGhpcy5vbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cywgZG93bmxvYWRzKTtcblx0XHR9XG5cblx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KGlkZW50aXR5KTtcblx0XHR9XG5cblx0XHR0aGlzLnJlc2l6ZXJUcmlnZ2VyKCk7XG5cdH1cblxuXHRvbk1lc3NhZ2VVcGxvYWRBdHRhY2htZW50cyhzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0aWYgKCF0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRfLmVhY2gob0RhdGEuUmVzdWx0LCAoaWQsIHRlbXBOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHRoaXMuZ2V0QXR0YWNobWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRcdGlmIChhdHRhY2htZW50KSB7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LnRlbXBOYW1lKHRlbXBOYW1lKTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdC5jb21wbGV0ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2VBdHRhY2htZW50RmFpbGVkRG93bmxvYWRUZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0Rm9jdXNJblBvcHVwKCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGlmICgnJyA9PT0gdGhpcy50bygpKSB7XG5cdFx0XHRcdFx0dGhpcy50by5mb2N1c2VkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMub0VkaXRvcikge1xuXHRcdFx0XHRcdGlmICghdGhpcy50by5mb2N1c2VkKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMub0VkaXRvci5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdHRoaXMucmVzaXplclRyaWdnZXIoKTtcblx0fVxuXG5cdHRyeVRvQ2xvc2VQb3B1cCgpIHtcblx0XHRjb25zdCBQb3B1cHNBc2tWaWV3TW9kZWwgPSByZXF1aXJlKCdWaWV3L1BvcHVwL0FzaycpO1xuXHRcdGlmICghaXNQb3B1cFZpc2libGUoUG9wdXBzQXNrVmlld01vZGVsKSAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRpZiAodGhpcy5iU2tpcE5leHRIaWRlIHx8ICh0aGlzLmlzRW1wdHlGb3JtKCkgJiYgIXRoaXMuZHJhZnRVaWQoKSkpIHtcblx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2Nsb3NlQ29tbWFuZCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKFBvcHVwc0Fza1ZpZXdNb2RlbCwgW1xuXHRcdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2Nsb3NlQ29tbWFuZCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0aGlzLmluaXRVcGxvYWRlcigpO1xuXG5cdFx0a2V5KCdjdHJsK3EsIGNvbW1hbmQrcSwgY3RybCt3LCBjb21tYW5kK3cnLCBLZXlTdGF0ZS5Db21wb3NlLCBub29wRmFsc2UpO1xuXG5cdFx0a2V5KCdgJywgS2V5U3RhdGUuQ29tcG9zZSwgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMub0VkaXRvciAmJiAhdGhpcy5vRWRpdG9yLmhhc0ZvY3VzKCkgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLmlkZW50aXRpZXNEcm9wZG93blRyaWdnZXIodHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2N0cmwrYCcsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdHRoaXMuaWRlbnRpdGllc0Ryb3Bkb3duVHJpZ2dlcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnZXNjLCBjdHJsK2Rvd24sIGNvbW1hbmQrZG93bicsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdHRoaXMuc2tpcENvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLmFsbG93Rm9sZGVycykge1xuXHRcdFx0a2V5KCdjdHJsK3MsIGNvbW1hbmQrcycsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdFx0dGhpcy5zYXZlQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93Q3RybEVudGVyT25Db21wb3NlJykpIHtcblx0XHRcdGtleSgnY3RybCtlbnRlciwgY29tbWFuZCtlbnRlcicsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdFx0dGhpcy5zZW5kQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRrZXkoJ3NoaWZ0K2VzYycsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCd3aW5kb3cucmVzaXplLnJlYWwnLCB0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHRFdmVudHMuc3ViKCd3aW5kb3cucmVzaXplLnJlYWwnLCBfLmRlYm91bmNlKHRoaXMucmVzaXplclRyaWdnZXIsIE1hZ2ljcy5UaW1lNTBtcykpO1xuXG5cdFx0U29jaWFsU3RvcmUuYXBwZW5kRHJvcGJveCgpO1xuXG5cdFx0aWYgKHRoaXMuZHJpdmVFbmFibGVkKCkpIHtcblx0XHRcdCQuZ2V0U2NyaXB0KCdodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9hcGkuanMnLCAoKSA9PiB7XG5cdFx0XHRcdGlmICh3aW5kb3cuZ2FwaSkge1xuXHRcdFx0XHRcdHRoaXMuZHJpdmVWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiYgdGhpcy5vRWRpdG9yKSB7XG5cdFx0XHRcdHRoaXMub0VkaXRvci5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9LCBNYWdpY3MuVGltZTVzKTtcblx0fVxuXG5cdGRyaXZlQ2FsbGJhY2soYWNjZXNzVG9rZW4sIGRhdGEpIHtcblx0XHRpZiAoXG5cdFx0XHRkYXRhICYmXG5cdFx0XHR3aW5kb3cuWE1MSHR0cFJlcXVlc3QgJiZcblx0XHRcdHdpbmRvdy5nb29nbGUgJiZcblx0XHRcdGRhdGFbd2luZG93Lmdvb2dsZS5waWNrZXIuUmVzcG9uc2UuQUNUSU9OXSA9PT0gd2luZG93Lmdvb2dsZS5waWNrZXIuQWN0aW9uLlBJQ0tFRCAmJlxuXHRcdFx0ZGF0YVt3aW5kb3cuZ29vZ2xlLnBpY2tlci5SZXNwb25zZS5ET0NVTUVOVFNdICYmXG5cdFx0XHRkYXRhW3dpbmRvdy5nb29nbGUucGlja2VyLlJlc3BvbnNlLkRPQ1VNRU5UU11bMF0gJiZcblx0XHRcdGRhdGFbd2luZG93Lmdvb2dsZS5waWNrZXIuUmVzcG9uc2UuRE9DVU1FTlRTXVswXS5pZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0XHRcdHJlcXVlc3Qub3Blbihcblx0XHRcdFx0J0dFVCcsXG5cdFx0XHRcdCdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9kcml2ZS92Mi9maWxlcy8nICsgZGF0YVt3aW5kb3cuZ29vZ2xlLnBpY2tlci5SZXNwb25zZS5ET0NVTUVOVFNdWzBdLmlkXG5cdFx0XHQpO1xuXHRcdFx0cmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgYWNjZXNzVG9rZW4pO1xuXHRcdFx0cmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuXHRcdFx0XHRpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gd2luZG93LkpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpLFxuXHRcdFx0XHRcdFx0ZkV4cG9ydCA9IChpdGVtLCBtaW1lVHlwZSwgZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0uZXhwb3J0TGlua3MpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5leHBvcnRMaW5rc1ttaW1lVHlwZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmRvd25sb2FkVXJsID0gaXRlbS5leHBvcnRMaW5rc1ttaW1lVHlwZV07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS50aXRsZSA9IGl0ZW0udGl0bGUgKyAnLicgKyBleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5taW1lVHlwZSA9IG1pbWVUeXBlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5leHBvcnRMaW5rc1snYXBwbGljYXRpb24vcGRmJ10pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmRvd25sb2FkVXJsID0gaXRlbS5leHBvcnRMaW5rc1snYXBwbGljYXRpb24vcGRmJ107XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS50aXRsZSA9IGl0ZW0udGl0bGUgKyAnLnBkZic7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5taW1lVHlwZSA9ICdhcHBsaWNhdGlvbi9wZGYnO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2UuZG93bmxvYWRVcmwgJiYgcmVzcG9uc2UubWltZVR5cGUgJiYgcmVzcG9uc2UuZXhwb3J0TGlua3MpIHtcblx0XHRcdFx0XHRcdHN3aXRjaCAocmVzcG9uc2UubWltZVR5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kb2N1bWVudCc6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JywgJ2RvY3gnKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnNwcmVhZHNoZWV0Jzpcblx0XHRcdFx0XHRcdFx0XHRmRXhwb3J0KHJlc3BvbnNlLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLCAneGxzeCcpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZHJhd2luZyc6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2ltYWdlL3BuZycsICdwbmcnKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnByZXNlbnRhdGlvbic6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLCAncHB0eCcpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdGZFeHBvcnQocmVzcG9uc2UsICdhcHBsaWNhdGlvbi9wZGYnLCAncGRmJyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRvd25sb2FkVXJsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFkZERyaXZlQXR0YWNobWVudChyZXNwb25zZSwgYWNjZXNzVG9rZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJlcXVlc3Quc2VuZCgpO1xuXHRcdH1cblx0fVxuXG5cdGRyaXZlQ3JlYXRlUGlrZXIoYXV0aFRva2VuKSB7XG5cdFx0aWYgKHdpbmRvdy5nYXBpICYmIGF1dGhUb2tlbiAmJiBhdXRoVG9rZW4uYWNjZXNzX3Rva2VuKSB7XG5cdFx0XHR3aW5kb3cuZ2FwaS5sb2FkKCdwaWNrZXInLCB7XG5cdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHdpbmRvdy5nb29nbGUgJiYgd2luZG93Lmdvb2dsZS5waWNrZXIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGRyaXZlUGlja2VyID0gbmV3IHdpbmRvdy5nb29nbGUucGlja2VyLlBpY2tlckJ1aWxkZXIoKVxuXHRcdFx0XHRcdFx0XHQvLyAuYWRkVmlldyh3aW5kb3cuZ29vZ2xlLnBpY2tlci5WaWV3SWQuRk9MREVSUylcblx0XHRcdFx0XHRcdFx0LmFkZFZpZXcod2luZG93Lmdvb2dsZS5waWNrZXIuVmlld0lkLkRPQ1MpXG5cdFx0XHRcdFx0XHRcdC5zZXRBcHBJZChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSlcblx0XHRcdFx0XHRcdFx0LnNldE9BdXRoVG9rZW4oYXV0aFRva2VuLmFjY2Vzc190b2tlbilcblx0XHRcdFx0XHRcdFx0LnNldENhbGxiYWNrKF8uYmluZCh0aGlzLmRyaXZlQ2FsbGJhY2ssIHRoaXMsIGF1dGhUb2tlbi5hY2Nlc3NfdG9rZW4pKVxuXHRcdFx0XHRcdFx0XHQuZW5hYmxlRmVhdHVyZSh3aW5kb3cuZ29vZ2xlLnBpY2tlci5GZWF0dXJlLk5BVl9ISURERU4pXG5cdFx0XHRcdFx0XHRcdC8vIC5zZXRPcmlnaW4od2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0KVxuXHRcdFx0XHRcdFx0XHQuYnVpbGQoKTtcblxuXHRcdFx0XHRcdFx0ZHJpdmVQaWNrZXIuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGRyaXZlT3BlblBvcHVwKCkge1xuXHRcdGlmICh3aW5kb3cuZ2FwaSkge1xuXHRcdFx0d2luZG93LmdhcGkubG9hZCgnYXV0aCcsIHtcblx0XHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhdXRoVG9rZW4gPSB3aW5kb3cuZ2FwaS5hdXRoLmdldFRva2VuKCksXG5cdFx0XHRcdFx0XHRmUmVzdWx0ID0gKGF1dGhSZXN1bHQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGF1dGhSZXN1bHQgJiYgIWF1dGhSZXN1bHQuZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHdpbmRvdy5nYXBpLmF1dGguZ2V0VG9rZW4oKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodG9rZW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZHJpdmVDcmVhdGVQaWtlcih0b2tlbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKCFhdXRoVG9rZW4pIHtcblx0XHRcdFx0XHRcdHdpbmRvdy5nYXBpLmF1dGguYXV0aG9yaXplKFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0J2NsaWVudF9pZCc6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpLFxuXHRcdFx0XHRcdFx0XHRcdCdzY29wZSc6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2RyaXZlLnJlYWRvbmx5Jyxcblx0XHRcdFx0XHRcdFx0XHQnaW1tZWRpYXRlJzogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQoYXV0aFJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghZlJlc3VsdChhdXRoUmVzdWx0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmdhcGkuYXV0aC5hdXRob3JpemUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY2xpZW50X2lkJzogU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUNsaWVudElEJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3Njb3BlJzogJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZHJpdmUucmVhZG9ubHknLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpbW1lZGlhdGUnOiBmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5kcml2ZUNyZWF0ZVBpa2VyKGF1dGhUb2tlbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEByZXR1cm5zIHs/T2JqZWN0fVxuXHQgKi9cblx0Z2V0QXR0YWNobWVudEJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gXy5maW5kKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgaWQgPT09IGl0ZW0uaWQpO1xuXHR9XG5cblx0Y2FuY2VsQXR0YWNobWVudEhlbHBlcihpZCwgb0p1YSkge1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gXy5maW5kKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgaXRlbS5pZCA9PT0gaWQpO1xuXHRcdFx0aWYgKGF0dGFjaG1lbnQpIHtcblx0XHRcdFx0dGhpcy5hdHRhY2htZW50cy5yZW1vdmUoYXR0YWNobWVudCk7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdGlmIChvSnVhKSB7XG5cdFx0XHRcdFx0b0p1YS5jYW5jZWwoaWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGluaXRVcGxvYWRlcigpIHtcblx0XHRpZiAodGhpcy5jb21wb3NlVXBsb2FkZXJCdXR0b24oKSkge1xuXHRcdFx0Y29uc3QgdXBsb2FkQ2FjaGUgPSB7fSxcblx0XHRcdFx0YXR0YWNobWVudFNpemVMaW1pdCA9IHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSxcblx0XHRcdFx0b0p1YSA9IG5ldyBKdWEoe1xuXHRcdFx0XHRcdCdhY3Rpb24nOiB1cGxvYWQoKSxcblx0XHRcdFx0XHQnbmFtZSc6ICd1cGxvYWRlcicsXG5cdFx0XHRcdFx0J3F1ZXVlU2l6ZSc6IDIsXG5cdFx0XHRcdFx0J211bHRpcGxlU2l6ZUxpbWl0JzogNTAsXG5cdFx0XHRcdFx0J2NsaWNrRWxlbWVudCc6IHRoaXMuY29tcG9zZVVwbG9hZGVyQnV0dG9uKCksXG5cdFx0XHRcdFx0J2RyYWdBbmREcm9wRWxlbWVudCc6IHRoaXMuY29tcG9zZVVwbG9hZGVyRHJvcFBsYWNlKClcblx0XHRcdFx0fSk7XG5cblx0XHRcdGlmIChvSnVhKSB7XG5cdFx0XHRcdG9KdWFcblx0XHRcdFx0XHQvLyAub24oJ29uTGltaXRSZWFjaGVkJywgKGxpbWl0KSA9PiB7XG5cdFx0XHRcdFx0Ly8gXHRhbGVydChsaW1pdCk7XG5cdFx0XHRcdFx0Ly8gfSlcblx0XHRcdFx0XHQub24oJ29uRHJhZ0VudGVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIodHJ1ZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uRHJhZ0xlYXZlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvbkJvZHlEcmFnRW50ZXInLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmF0dGFjaG1lbnRzUGxhY2UodHJ1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmRyYWdBbmREcm9wVmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25Cb2R5RHJhZ0xlYXZlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcFZpc2libGUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvblByb2dyZXNzJywgKGlkLCBsb2FkZWQsIHRvdGFsKSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQgaXRlbSA9IHVwbG9hZENhY2hlW2lkXTtcblx0XHRcdFx0XHRcdGlmICghaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtID0gdGhpcy5nZXRBdHRhY2htZW50QnlJZChpZCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdFx0dXBsb2FkQ2FjaGVbaWRdID0gaXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtLnByb2dyZXNzKHdpbmRvdy5NYXRoLmZsb29yKChsb2FkZWQgLyB0b3RhbCkgKiAxMDApKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25TZWxlY3QnLCAoc0lkLCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBmaWxlTmFtZSA9IGlzVW5kKG9EYXRhLkZpbGVOYW1lKSA/ICcnIDogb0RhdGEuRmlsZU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdFx0c2l6ZSA9IGlzTm9ybWFsKG9EYXRhLlNpemUpID8gcEludChvRGF0YS5TaXplKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBuZXcgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbChzSWQsIGZpbGVOYW1lLCBzaXplKTtcblxuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jYW5jZWwgPSB0aGlzLmNhbmNlbEF0dGFjaG1lbnRIZWxwZXIoc0lkLCBvSnVhKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmF0dGFjaG1lbnRzUGxhY2UodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdGlmICgwIDwgc2l6ZSAmJiAwIDwgYXR0YWNobWVudFNpemVMaW1pdCAmJiBhdHRhY2htZW50U2l6ZUxpbWl0IDwgc2l6ZSkge1xuXHRcdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0LnVwbG9hZGluZyh0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdC5jb21wbGV0ZSh0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdC5lcnJvcihpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJykpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uU3RhcnQnLCAoaWQpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID0gdXBsb2FkQ2FjaGVbaWRdO1xuXHRcdFx0XHRcdFx0aWYgKCFpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0gPSB0aGlzLmdldEF0dGFjaG1lbnRCeUlkKGlkKTtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHR1cGxvYWRDYWNoZVtpZF0gPSBpdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW1cblx0XHRcdFx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHQudXBsb2FkaW5nKHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0LmNvbXBsZXRlKGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25Db21wbGV0ZScsIChpZCwgcmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gdGhpcy5nZXRBdHRhY2htZW50QnlJZChpZCksXG5cdFx0XHRcdFx0XHRcdGVycm9yQ29kZSA9IGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgZGF0YS5SZXN1bHQuRXJyb3JDb2RlID8gZGF0YS5SZXN1bHQuRXJyb3JDb2RlIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0YXR0YWNobWVudEpzb24gPSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5BdHRhY2htZW50ID8gZGF0YS5SZXN1bHQuQXR0YWNobWVudCA6IG51bGw7XG5cblx0XHRcdFx0XHRcdGxldCBlcnJvciA9ICcnO1xuXHRcdFx0XHRcdFx0aWYgKG51bGwgIT09IGVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRlcnJvciA9IGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShlcnJvckNvZGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICghYXR0YWNobWVudEpzb24pIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPSBpMThuKCdVUExPQUQvRVJST1JfVU5LTk9XTicpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoJycgIT09IGVycm9yICYmIDAgPCBlcnJvci5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdC5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudEpzb24pIHtcblx0XHRcdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRhdHRhY2htZW50LmluaXRCeVVwbG9hZEpzb24oYXR0YWNobWVudEpzb24pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGlzVW5kKHVwbG9hZENhY2hlW2lkXSkpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgdXBsb2FkQ2FjaGVbaWRdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hZGRBdHRhY2htZW50RW5hYmxlZCh0cnVlKS5kcmFnQW5kRHJvcEVuYWJsZWQob0p1YS5pc0RyYWdBbmREcm9wU3VwcG9ydGVkKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5hZGRBdHRhY2htZW50RW5hYmxlZChmYWxzZSkuZHJhZ0FuZERyb3BFbmFibGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHByZXBlYXJBdHRhY2htZW50c0ZvclNlbmRPclNhdmUoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Xy5lYWNoKHRoaXMuYXR0YWNobWVudHNJblJlYWR5KCksIChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSAmJiAnJyAhPT0gaXRlbS50ZW1wTmFtZSgpICYmIGl0ZW0uZW5hYmxlZCgpKSB7XG5cdFx0XHRcdHJlc3VsdFtpdGVtLnRlbXBOYW1lKCldID0gW2l0ZW0uZmlsZU5hbWUoKSwgaXRlbS5pc0lubGluZSA/ICcxJyA6ICcwJywgaXRlbS5DSUQsIGl0ZW0uY29udGVudExvY2F0aW9uXTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IG1lc3NhZ2Vcblx0ICovXG5cdGFkZE1lc3NhZ2VBc0F0dGFjaG1lbnQobWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRsZXQgdGVtcCA9IG1lc3NhZ2Uuc3ViamVjdCgpO1xuXHRcdFx0dGVtcCA9ICcuZW1sJyA9PT0gdGVtcC5zdWJzdHIoLTQpLnRvTG93ZXJDYXNlKCkgPyB0ZW1wIDogdGVtcCArICcuZW1sJztcblxuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IG5ldyBDb21wb3NlQXR0YWNobWVudE1vZGVsKG1lc3NhZ2UucmVxdWVzdEhhc2gsIHRlbXAsIG1lc3NhZ2Uuc2l6ZSgpKTtcblxuXHRcdFx0YXR0YWNobWVudC5mcm9tTWVzc2FnZSA9IHRydWU7XG5cdFx0XHRhdHRhY2htZW50LmNhbmNlbCA9IHRoaXMuY2FuY2VsQXR0YWNobWVudEhlbHBlcihtZXNzYWdlLnJlcXVlc3RIYXNoKTtcblx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdC51cGxvYWRpbmcodHJ1ZSlcblx0XHRcdFx0LmNvbXBsZXRlKHRydWUpO1xuXG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHNpemVcblx0ICogQHJldHVybnMge0NvbXBvc2VBdHRhY2htZW50TW9kZWx9XG5cdCAqL1xuXHRhZGRBdHRhY2htZW50SGVscGVyKHVybCwgbmFtZSwgc2l6ZSkge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCh1cmwsIG5hbWUsIHNpemUpO1xuXG5cdFx0YXR0YWNobWVudC5mcm9tTWVzc2FnZSA9IGZhbHNlO1xuXHRcdGF0dGFjaG1lbnQuY2FuY2VsID0gdGhpcy5jYW5jZWxBdHRhY2htZW50SGVscGVyKHVybCk7XG5cdFx0YXR0YWNobWVudFxuXHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHQudXBsb2FkaW5nKHRydWUpXG5cdFx0XHQuY29tcGxldGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXG5cdFx0cmV0dXJuIGF0dGFjaG1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRyb3Bib3hGaWxlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0YWRkRHJvcGJveEF0dGFjaG1lbnQoZHJvcGJveEZpbGUpIHtcblx0XHRjb25zdCBhdHRhY2htZW50U2l6ZUxpbWl0ID0gcEludChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXR0YWNobWVudExpbWl0JykpLFxuXHRcdFx0bVNpemUgPSBkcm9wYm94RmlsZS5ieXRlcyxcblx0XHRcdGF0dGFjaG1lbnQgPSB0aGlzLmFkZEF0dGFjaG1lbnRIZWxwZXIoZHJvcGJveEZpbGUubGluaywgZHJvcGJveEZpbGUubmFtZSwgbVNpemUpO1xuXG5cdFx0aWYgKDAgPCBtU2l6ZSAmJiAwIDwgYXR0YWNobWVudFNpemVMaW1pdCAmJiBhdHRhY2htZW50U2l6ZUxpbWl0IDwgbVNpemUpIHtcblx0XHRcdGF0dGFjaG1lbnQudXBsb2FkaW5nKGZhbHNlKS5jb21wbGV0ZSh0cnVlKTtcblx0XHRcdGF0dGFjaG1lbnQuZXJyb3IoaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRSZW1vdGUuY29tcG9zZVVwbG9hZEV4dGVybmFscyhcblx0XHRcdChzdGF0dXNSZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRhdHRhY2htZW50LnVwbG9hZGluZyhmYWxzZSkuY29tcGxldGUodHJ1ZSk7XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHN0YXR1c1Jlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC50ZW1wTmFtZShkYXRhLlJlc3VsdFthdHRhY2htZW50LmlkXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhdHRhY2htZW50LmVycm9yKGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdFtkcm9wYm94RmlsZS5saW5rXVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZHJpdmVGaWxlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhY2Nlc3NUb2tlblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGFkZERyaXZlQXR0YWNobWVudChkcml2ZUZpbGUsIGFjY2Vzc1Rva2VuKSB7XG5cdFx0Y29uc3QgYXR0YWNobWVudFNpemVMaW1pdCA9IHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSxcblx0XHRcdHNpemUgPSBkcml2ZUZpbGUuZmlsZVNpemUgPyBwSW50KGRyaXZlRmlsZS5maWxlU2l6ZSkgOiAwLFxuXHRcdFx0YXR0YWNobWVudCA9IHRoaXMuYWRkQXR0YWNobWVudEhlbHBlcihkcml2ZUZpbGUuZG93bmxvYWRVcmwsIGRyaXZlRmlsZS50aXRsZSwgc2l6ZSk7XG5cblx0XHRpZiAoMCA8IHNpemUgJiYgMCA8IGF0dGFjaG1lbnRTaXplTGltaXQgJiYgYXR0YWNobWVudFNpemVMaW1pdCA8IHNpemUpIHtcblx0XHRcdGF0dGFjaG1lbnQudXBsb2FkaW5nKGZhbHNlKS5jb21wbGV0ZSh0cnVlKTtcblx0XHRcdGF0dGFjaG1lbnQuZXJyb3IoaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRSZW1vdGUuY29tcG9zZVVwbG9hZERyaXZlKFxuXHRcdFx0KHN0YXR1c1Jlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdGF0dGFjaG1lbnQudXBsb2FkaW5nKGZhbHNlKS5jb21wbGV0ZSh0cnVlKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc3RhdHVzUmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHRbYXR0YWNobWVudC5pZF0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LnRlbXBOYW1lKGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdWzBdKTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuc2l6ZShwSW50KGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdWzFdKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhdHRhY2htZW50LmVycm9yKGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRyaXZlRmlsZS5kb3dubG9hZFVybCxcblx0XHRcdGFjY2Vzc1Rva2VuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG5cdCAqL1xuXHRwcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIHR5cGUpIHtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0aWYgKENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQgPT09IHR5cGUpIHtcblx0XHRcdFx0dGhpcy5hZGRNZXNzYWdlQXNBdHRhY2htZW50KG1lc3NhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzKCk7XG5cdFx0XHRcdF8uZWFjaChpc05vbkVtcHR5QXJyYXkoYXR0YWNobWVudHMpID8gYXR0YWNobWVudHMgOiBbXSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRsZXQgYWRkID0gZmFsc2U7XG5cdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLlJlcGx5OlxuXHRcdFx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0XHRcdFx0YWRkID0gaXRlbS5pc0xpbmtlZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZDpcblx0XHRcdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRHJhZnQ6XG5cdFx0XHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkVkaXRBc05ldzpcblx0XHRcdFx0XHRcdFx0YWRkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGFkZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IG5ldyBDb21wb3NlQXR0YWNobWVudE1vZGVsKFxuXHRcdFx0XHRcdFx0XHRpdGVtLmRvd25sb2FkLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmZpbGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmVzdGltYXRlZFNpemUsXG5cdFx0XHRcdFx0XHRcdGl0ZW0uaXNJbmxpbmUsXG5cdFx0XHRcdFx0XHRcdGl0ZW0uaXNMaW5rZWQsXG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2lkLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmNvbnRlbnRMb2NhdGlvblxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5mcm9tTWVzc2FnZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LmNhbmNlbCA9IHRoaXMuY2FuY2VsQXR0YWNobWVudEhlbHBlcihpdGVtLmRvd25sb2FkKTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcodHJ1ZSlcblx0XHRcdFx0XHRcdFx0LmNvbXBsZXRlKGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlTGlua2VkQXR0YWNobWVudHMoKSB7XG5cdFx0Y29uc3QgYXJyYWNobWVudCA9IF8uZmluZCh0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmIGl0ZW0uaXNMaW5rZWQpO1xuXHRcdGlmIChhcnJhY2htZW50KSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzLnJlbW92ZShhcnJhY2htZW50KTtcblx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGFycmFjaG1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdHNldE1lc3NhZ2VBdHRhY2htZW50RmFpbGVkRG93bmxvYWRUZXh0KCkge1xuXHRcdF8uZWFjaCh0aGlzLmF0dGFjaG1lbnRzKCksIChhdHRhY2htZW50KSA9PiB7XG5cdFx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmZyb21NZXNzYWdlKSB7XG5cdFx0XHRcdGF0dGFjaG1lbnRcblx0XHRcdFx0XHQud2FpdGluZyhmYWxzZSlcblx0XHRcdFx0XHQudXBsb2FkaW5nKGZhbHNlKVxuXHRcdFx0XHRcdC5jb21wbGV0ZSh0cnVlKVxuXHRcdFx0XHRcdC5lcnJvcihnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUoVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gaW5jbHVkZUF0dGFjaG1lbnRJblByb2dyZXNzID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHlGb3JtKGluY2x1ZGVBdHRhY2htZW50SW5Qcm9ncmVzcyA9IHRydWUpIHtcblx0XHRjb25zdCB3aXRob3V0QXR0YWNobWVudCA9IGluY2x1ZGVBdHRhY2htZW50SW5Qcm9ncmVzc1xuXHRcdFx0PyAwID09PSB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoXG5cdFx0XHQ6IDAgPT09IHRoaXMuYXR0YWNobWVudHNJblJlYWR5KCkubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDAgPT09IHRoaXMudG8oKS5sZW5ndGggJiZcblx0XHRcdDAgPT09IHRoaXMuY2MoKS5sZW5ndGggJiZcblx0XHRcdDAgPT09IHRoaXMuYmNjKCkubGVuZ3RoICYmXG5cdFx0XHQwID09PSB0aGlzLnJlcGx5VG8oKS5sZW5ndGggJiZcblx0XHRcdDAgPT09IHRoaXMuc3ViamVjdCgpLmxlbmd0aCAmJlxuXHRcdFx0d2l0aG91dEF0dGFjaG1lbnQgJiZcblx0XHRcdCghdGhpcy5vRWRpdG9yIHx8ICcnID09PSB0aGlzLm9FZGl0b3IuZ2V0RGF0YSgpKVxuXHRcdCk7XG5cdH1cblxuXHRyZXNldCgpIHtcblx0XHR0aGlzLnRvKCcnKTtcblx0XHR0aGlzLmNjKCcnKTtcblx0XHR0aGlzLmJjYygnJyk7XG5cdFx0dGhpcy5yZXBseVRvKCcnKTtcblx0XHR0aGlzLnN1YmplY3QoJycpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0RHNuKGZhbHNlKTtcblx0XHR0aGlzLnJlcXVlc3RSZWFkUmVjZWlwdChmYWxzZSk7XG5cdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQoZmFsc2UpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKGZhbHNlKTtcblxuXHRcdHRoaXMuYURyYWZ0SW5mbyA9IG51bGw7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5iRnJvbURyYWZ0ID0gZmFsc2U7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0dGhpcy5zZW5kRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuc2F2ZWRFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5zYXZlZFRpbWUoMCk7XG5cdFx0dGhpcy5lbXB0eVRvRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLnNob3dDYyhmYWxzZSk7XG5cdFx0dGhpcy5zaG93QmNjKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvKGZhbHNlKTtcblxuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KHRoaXMuYXR0YWNobWVudHMoKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50cyhbXSk7XG5cblx0XHR0aGlzLmRyYWdBbmREcm9wT3ZlcihmYWxzZSk7XG5cdFx0dGhpcy5kcmFnQW5kRHJvcFZpc2libGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kcmFmdEZvbGRlcignJyk7XG5cdFx0dGhpcy5kcmFmdFVpZCgnJyk7XG5cblx0XHR0aGlzLnNlbmRpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLm9FZGl0b3IpIHtcblx0XHRcdHRoaXMub0VkaXRvci5jbGVhcihmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdGdldEF0dGFjaG1lbnRzRG93bmxvYWRzRm9yVXBsb2FkKCkge1xuXHRcdHJldHVybiBfLm1hcChcblx0XHRcdF8uZmlsdGVyKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgPT09IGl0ZW0udGVtcE5hbWUoKSksXG5cdFx0XHQoaXRlbSkgPT4gaXRlbS5pZFxuXHRcdCk7XG5cdH1cblxuXHRyZXNpemVyVHJpZ2dlcigpIHtcblx0XHR0aGlzLnJlc2l6ZXIoIXRoaXMucmVzaXplcigpKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb21wb3NlUG9wdXBWaWV3LCBDb21wb3NlUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjYuNCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xuXG52YXIgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJiAhZmFpbHMocG9zdCkpIHtcbiAgICBkZWZlciA9IHBvc3Q7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMsIHNoYW0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhKFxuICAgICAgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgJiZcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDAgJiZcbiAgICAgICFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgICkpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSwge1xuICAgICAgUkVQTEFDRV9LRUVQU18kMDogUkVQTEFDRV9LRUVQU18kMCxcbiAgICAgIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFOiBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgIH0pO1xuICAgIHZhciBzdHJpbmdNZXRob2QgPSBtZXRob2RzWzBdO1xuICAgIHZhciByZWdleE1ldGhvZCA9IG1ldGhvZHNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmluZ01ldGhvZCk7XG4gICAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cblxuICBpZiAoc2hhbSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cC5wcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2V4cEV4ZWMuY2FsbChSLCBTKTtcbn07XG5cbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgY3Jvc3Nyb2FkcyBmcm9tICdjcm9zc3JvYWRzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNjcmVlbiB7XG5cdG9Dcm9zcyA9IG51bGw7XG5cdHNTY3JlZW5OYW1lO1xuXHRhVmlld01vZGVscztcblxuXHRjb25zdHJ1Y3RvcihzY3JlZW5OYW1lLCB2aWV3TW9kZWxzID0gW10pIHtcblx0XHR0aGlzLnNTY3JlZW5OYW1lID0gc2NyZWVuTmFtZTtcblx0XHR0aGlzLmFWaWV3TW9kZWxzID0gaXNBcnJheSh2aWV3TW9kZWxzKSA/IHZpZXdNb2RlbHMgOiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHR2aWV3TW9kZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLmFWaWV3TW9kZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzY3JlZW5OYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLnNTY3JlZW5OYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/QXJyYXkpfVxuXHQgKi9cblx0cm91dGVzKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/T2JqZWN0fVxuXHQgKi9cblx0X19jcm9zcygpIHtcblx0XHRyZXR1cm4gdGhpcy5vQ3Jvc3M7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRfX3N0YXJ0KCkge1xuXHRcdGxldCByb3V0ZSA9IG51bGwsXG5cdFx0XHRmTWF0Y2hlciA9IG51bGw7XG5cdFx0Y29uc3Qgcm91dGVzID0gdGhpcy5yb3V0ZXMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocm91dGVzKSkge1xuXHRcdFx0Zk1hdGNoZXIgPSBfLmJpbmQodGhpcy5vblJvdXRlIHx8IG5vb3AsIHRoaXMpO1xuXHRcdFx0cm91dGUgPSBjcm9zc3JvYWRzLmNyZWF0ZSgpO1xuXG5cdFx0XHRyb3V0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiByb3V0ZSkge1xuXHRcdFx0XHRcdHJvdXRlLmFkZFJvdXRlKGl0ZW1bMF0sIGZNYXRjaGVyKS5ydWxlcyA9IGl0ZW1bMV07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm9Dcm9zcyA9IHJvdXRlO1xuXHRcdH1cblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnNzbTsiLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIGl0ZXJhdGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZm4sIHRoYXQsIEFTX0VOVFJJRVMsIElTX0lURVJBVE9SKSB7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChmbiwgdGhhdCwgQVNfRU5UUklFUyA/IDIgOiAxKTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoJ1RhcmdldCBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IEFTX0VOVFJJRVNcbiAgICAgICAgICA/IGJvdW5kRnVuY3Rpb24oYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pXG4gICAgICAgICAgOiBib3VuZEZ1bmN0aW9uKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpO1xuICB9XG5cbiAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgYm91bmRGdW5jdGlvbiwgc3RlcC52YWx1ZSwgQVNfRU5UUklFUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuXG5pdGVyYXRlLnN0b3AgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIHJlc3VsdCk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuXG5jb25zdCBTVE9SQUdFX0tFWSA9ICdfX3JsQSc7XG5jb25zdCBUSU1FX0tFWSA9ICdfX3JsVCc7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3JhZ2VOYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RvcmFnZVN1cHBvcnRlZChzdG9yYWdlTmFtZSkge1xuXHRsZXQgc3RvcmFnZUlzQXZhaWxhYmxlID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0Ly8gYXQ6IHdpbmRvd1tzdG9yYWdlTmFtZV0gZmlyZWZveCB0aHJvd3MgU2VjdXJpdHlFcnJvcjogVGhlIG9wZXJhdGlvbiBpcyBpbnNlY3VyZS4gd2hlbiBpbiBpZnJhbWVcblx0XHRzdG9yYWdlSXNBdmFpbGFibGUgPSBzdG9yYWdlTmFtZSBpbiB3aW5kb3cgJiYgd2luZG93W3N0b3JhZ2VOYW1lXSAmJiB3aW5kb3dbc3RvcmFnZU5hbWVdLnNldEl0ZW07XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRpZiAoc3RvcmFnZUlzQXZhaWxhYmxlKSB7XG5cdFx0Y29uc3QgcyA9IHdpbmRvd1tzdG9yYWdlTmFtZV0sXG5cdFx0XHRrZXkgPSAndGVzdExvY2FsU3RvcmFnZV8nICsgd2luZG93Lk1hdGgucmFuZG9tKCk7XG5cblx0XHR0cnkge1xuXHRcdFx0cy5zZXRJdGVtKGtleSwga2V5KTtcblx0XHRcdGlmIChrZXkgPT09IHMuZ2V0SXRlbShrZXkpKSB7XG5cdFx0XHRcdHMucmVtb3ZlSXRlbShrZXkpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IFNFU1NfU1RPUkFHRSA9IGlzU3RvcmFnZVN1cHBvcnRlZCgnc2Vzc2lvblN0b3JhZ2UnKSA/IHdpbmRvdy5zZXNzaW9uU3RvcmFnZSB8fCBudWxsIDogbnVsbDtcbmNvbnN0IFdJTl9TVE9SQUdFID0gd2luZG93LnRvcCB8fCB3aW5kb3cgfHwgbnVsbDtcblxuY29uc3QgX19nZXQgPSAoa2V5KSA9PiB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoU0VTU19TVE9SQUdFKSB7XG5cdFx0cmVzdWx0ID0gU0VTU19TVE9SQUdFLmdldEl0ZW0oa2V5KSB8fCBudWxsO1xuXHR9IGVsc2UgaWYgKFdJTl9TVE9SQUdFICYmIHdpbmRvdy5KU09OKSB7XG5cdFx0Y29uc3QgZGF0YSA9XG5cdFx0XHRXSU5fU1RPUkFHRS5uYW1lICYmICd7JyA9PT0gV0lOX1NUT1JBR0UubmFtZS50b1N0cmluZygpLnN1YnN0cigwLCAxKVxuXHRcdFx0XHQ/IHdpbmRvdy5KU09OLnBhcnNlKFdJTl9TVE9SQUdFLm5hbWUudG9TdHJpbmcoKSlcblx0XHRcdFx0OiBudWxsO1xuXHRcdHJlc3VsdCA9IGRhdGEgPyBkYXRhW2tleV0gfHwgbnVsbCA6IG51bGw7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgX19zZXQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuXHRpZiAoU0VTU19TVE9SQUdFKSB7XG5cdFx0U0VTU19TVE9SQUdFLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSBpZiAoV0lOX1NUT1JBR0UgJiYgd2luZG93LkpTT04pIHtcblx0XHRsZXQgZGF0YSA9XG5cdFx0XHRXSU5fU1RPUkFHRS5uYW1lICYmICd7JyA9PT0gV0lOX1NUT1JBR0UubmFtZS50b1N0cmluZygpLnN1YnN0cigwLCAxKVxuXHRcdFx0XHQ/IHdpbmRvdy5KU09OLnBhcnNlKFdJTl9TVE9SQUdFLm5hbWUudG9TdHJpbmcoKSlcblx0XHRcdFx0OiBudWxsO1xuXHRcdGRhdGEgPSBkYXRhIHx8IHt9O1xuXHRcdGRhdGFba2V5XSA9IHZhbHVlO1xuXG5cdFx0V0lOX1NUT1JBR0UubmFtZSA9IHdpbmRvdy5KU09OLnN0cmluZ2lmeShkYXRhKTtcblx0fVxufTtcblxuY29uc3QgdGltZXN0YW1wID0gKCkgPT4gd2luZG93Lk1hdGgucm91bmQobmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XG5cbmNvbnN0IHNldFRpbWVzdGFtcCA9ICgpID0+IF9fc2V0KFRJTUVfS0VZLCB0aW1lc3RhbXAoKSk7XG5cbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpID0+IHtcblx0Y29uc3QgdGltZSA9IF9fZ2V0KFRJTUVfS0VZLCAwKTtcblx0cmV0dXJuIHRpbWUgPyB3aW5kb3cucGFyc2VJbnQodGltZSwgMTApIHx8IDAgOiAwO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGFzaCgpIHtcblx0cmV0dXJuIF9fZ2V0KFNUT1JBR0VfS0VZKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goKSB7XG5cdGNvbnN0IGtleSA9ICdBdXRoQWNjb3VudEhhc2gnLFxuXHRcdGFwcERhdGEgPSB3aW5kb3cuX19ybGFoX2RhdGEoKTtcblxuXHRfX3NldChTVE9SQUdFX0tFWSwgYXBwRGF0YSAmJiBhcHBEYXRhW2tleV0gPyBhcHBEYXRhW2tleV0gOiAnJyk7XG5cdHNldFRpbWVzdGFtcCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJIYXNoKCkge1xuXHRfX3NldChTVE9SQUdFX0tFWSwgJycpO1xuXHRzZXRUaW1lc3RhbXAoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVGltZXN0YW1wKCkge1xuXHRpZiAodGltZXN0YW1wKCkgPiBnZXRUaW1lc3RhbXAoKSArIDEwMDAgKiA2MCAqIDYwKSB7XG5cdFx0Ly8gNjBtXG5cdFx0Y2xlYXJIYXNoKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbndpbmRvdy5zZXRJbnRlcnZhbChzZXRUaW1lc3RhbXAsIDEwMDAgKiA2MCk7IC8vIDFtXG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAqL1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IGRvY3VtZW50LmRvbWFpbiAmJiBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gYWN0aXZlWERvY3VtZW50ID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKCk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjbGFzc29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlck91dCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBJU19GSUxURVJfT1VUID0gVFlQRSA9PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX09VVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyT3V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJPdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyT3V0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5jcm9zc3JvYWRzOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0Q2hlY2tib3ggZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zID0ge31cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWU7XG5cdFx0aWYgKGlzVW5kKHRoaXMudmFsdWUpIHx8ICF0aGlzLnZhbHVlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy52YWx1ZSkgPyBmYWxzZSA6ICEhdGhpcy52YWx1ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5lbmFibGUgPSBwYXJhbXMuZW5hYmxlO1xuXHRcdGlmIChpc1VuZCh0aGlzLmVuYWJsZSkgfHwgIXRoaXMuZW5hYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5lbmFibGUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMuZW5hYmxlKSA/IHRydWUgOiAhIXRoaXMuZW5hYmxlKTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc2FibGUgPSBwYXJhbXMuZGlzYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5kaXNhYmxlKSB8fCAhdGhpcy5kaXNhYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmRpc2FibGUpID8gZmFsc2UgOiAhIXRoaXMuZGlzYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLmlubGluZSA9IGlzVW5kKHBhcmFtcy5pbmxpbmUpID8gZmFsc2UgOiBwYXJhbXMuaW5saW5lO1xuXG5cdFx0dGhpcy5yZWFkT25seSA9IGlzVW5kKHBhcmFtcy5yZWFkT25seSkgPyBmYWxzZSA6ICEhcGFyYW1zLnJlYWRPbmx5O1xuXHRcdHRoaXMuaW52ZXJ0ZWQgPSBpc1VuZChwYXJhbXMuaW52ZXJ0ZWQpID8gZmFsc2UgOiAhIXBhcmFtcy5pbnZlcnRlZDtcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMubGFiZWxBbmltYXRlZCA9ICEhcGFyYW1zLmxhYmVsQW5pbWF0ZWQ7XG5cdH1cblxuXHRjbGljaygpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdGhpcy5lbmFibGUoKSAmJiAhdGhpcy5kaXNhYmxlKCkpIHtcblx0XHRcdHRoaXMudmFsdWUoIXRoaXMudmFsdWUoKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0Q2hlY2tib3gsIEFic3RyYWN0Q2hlY2tib3ggYXMgZGVmYXVsdCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBwYXJzZTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBQYXJzZXMgc3RydWN0dXJlZCBlLW1haWwgYWRkcmVzc2VzIGZyb20gYW4gYWRkcmVzcyBmaWVsZFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgXCJOYW1lIDxhZGRyZXNzQGRvbWFpbj5cIlxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvXG4gKlxuICogICAgIFt7bmFtZTogXCJOYW1lXCIsIGFkZHJlc3M6IFwiYWRkcmVzc0Bkb21haW5cIn1dXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYWRkcmVzcyBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihzdHIpO1xuICB2YXIgdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKCk7XG5cbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgYWRkcmVzcyA9IFtdO1xuICB2YXIgcGFyc2VkQWRkcmVzc2VzID0gW107XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIGFkZHJlc3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzcy5wdXNoKHRva2VuKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICB9XG5cbiAgYWRkcmVzc2VzLmZvckVhY2goZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICBhZGRyZXNzID0gX2hhbmRsZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZEFkZHJlc3Nlcztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyh0b2tlbnMpIHtcbiAgdmFyIGlzR3JvdXAgPSBmYWxzZTtcbiAgdmFyIHN0YXRlID0gJ3RleHQnO1xuICB2YXIgYWRkcmVzcyA9IHZvaWQgMDtcbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgZGF0YSA9IHtcbiAgICBhZGRyZXNzOiBbXSxcbiAgICBjb21tZW50OiBbXSxcbiAgICBncm91cDogW10sXG4gICAgdGV4dDogW11cblxuICAgIC8vIEZpbHRlciBvdXQgPGFkZHJlc3Nlcz4sIChjb21tZW50cykgYW5kIHJlZ3VsYXIgdGV4dFxuICB9O2ZvciAodmFyIGkgPSAwLCBsZW4gPSB0b2tlbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgIHN0YXRlID0gJ2dyb3VwJztcbiAgICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdGF0ZSA9ICd0ZXh0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnZhbHVlKSB7XG4gICAgICAgIGRhdGFbc3RhdGVdLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgIGRhdGEuY29tbWVudCA9IFtdO1xuICB9XG5cbiAgaWYgKGlzR3JvdXApIHtcbiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI2FwcGVuZGl4LUEuMS4zXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgYWRkcmVzcyAmJiBhZGRyZXNzLm5hbWUsXG4gICAgICBncm91cDogZGF0YS5ncm91cC5sZW5ndGggPyBwYXJzZShkYXRhLmdyb3VwLmpvaW4oJywnKSkgOiBbXVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIGFkZHJlc3Mgd2FzIGZvdW5kLCB0cnkgdG8gZGV0ZWN0IG9uZSBmcm9tIHJlZ3VsYXIgdGV4dFxuICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCAmJiBkYXRhLnRleHQubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBfaSA+PSAwOyBfaS0tKSB7XG4gICAgICAgIGlmIChkYXRhLnRleHRbX2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKF9pLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIF9yZWdleEhhbmRsZXIoYWRkcmVzcykge1xuICAgICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBbYWRkcmVzcy50cmltKCldO1xuICAgICAgICAgIHJldHVybiAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIHN0aWxsIG5vIGFkZHJlc3NcbiAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kyID49IDA7IF9pMi0tKSB7XG4gICAgICAgICAgZGF0YS50ZXh0W19pMl0gPSBkYXRhLnRleHRbX2kyXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpO1xuICAgICAgICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCBleGl4dHMsIHJlcGxhY2UgdGhlIHR3b1xuICAgIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLmNvbW1lbnQ7XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIG9ubHkgdGhlIGZpcnN0IGFkZHJlc3Mgb2NjdXJlbmNlLCBwdXNoIG90aGVycyB0byByZWd1bGFyIHRleHRcbiAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5jb25jYXQoZGF0YS5hZGRyZXNzLnNwbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy8gSm9pbiB2YWx1ZXMgd2l0aCBzcGFjZXNcbiAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuam9pbignICcpO1xuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJyk7XG5cbiAgICBpZiAoIWRhdGEuYWRkcmVzcyAmJiBpc0dyb3VwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MgPSB7XG4gICAgICAgIGFkZHJlc3M6IGRhdGEuYWRkcmVzcyB8fCBkYXRhLnRleHQgfHwgJycsXG4gICAgICAgIG5hbWU6IGRhdGEudGV4dCB8fCBkYXRhLmFkZHJlc3MgfHwgJydcbiAgICAgIH07XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcyA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXM7XG59O1xuXG4vKlxuICogT3BlcmF0b3IgdG9rZW5zIGFuZCB3aGljaCB0b2tlbnMgYXJlIGV4cGVjdGVkIHRvIGVuZCB0aGUgc2VxdWVuY2VcbiAqL1xudmFyIE9QRVJBVE9SUyA9IHtcbiAgJ1wiJzogJ1wiJyxcbiAgJygnOiAnKScsXG4gICc8JzogJz4nLFxuICAnLCc6ICcnLFxuICAvLyBHcm91cHMgYXJlIGVuZGVkIGJ5IHNlbWljb2xvbnNcbiAgJzonOiAnOycsXG4gIC8vIFNlbWljb2xvbnMgYXJlIG5vdCBhIGxlZ2FsIGRlbGltaXRlciBwZXIgdGhlIFJGQzI4MjIgZ3JhbW1hciBvdGhlclxuICAvLyB0aGFuIGZvciB0ZXJtaW5hdGluZyBhIGdyb3VwLCBidXQgdGhleSBhcmUgYWxzbyBub3QgdmFsaWQgZm9yIGFueVxuICAvLyBvdGhlciB1c2UgaW4gdGhpcyBjb250ZXh0LiAgR2l2ZW4gdGhhdCBzb21lIG1haWwgY2xpZW50cyBoYXZlXG4gIC8vIGhpc3RvcmljYWxseSBhbGxvd2VkIHRoZSBzZW1pY29sb24gYXMgYSBkZWxpbWl0ZXIgZXF1aXZhbGVudCB0byB0aGVcbiAgLy8gY29tbWEgaW4gdGhlaXIgVUksIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IHRoZW0gdGhlIHNhbWUgYXMgYSBjb21tYVxuICAvLyB3aGVuIHVzZWQgb3V0c2lkZSBvZiBhIGdyb3VwLlxuICAnOyc6ICcnXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICAgKi9cbn07XG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb2tlbml6ZXIoc3RyKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuaXplcik7XG5cbiAgICB0aGlzLnN0ciA9IChzdHIgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJztcbiAgICB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nID0gJyc7XG4gICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxpc3QgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZXMgdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygb3BlcmF0b3J8dGV4dCB0b2tlbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoVG9rZW5pemVyLCBbe1xuICAgIGtleTogJ3Rva2VuaXplJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9rZW5pemUoKSB7XG4gICAgICB2YXIgY2hyID0gdm9pZCAwO1xuICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjaHIgPSB0aGlzLnN0ci5jaGFyQXQoaSk7XG4gICAgICAgIHRoaXMuY2hlY2tDaGFyKGNocik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSAobm9kZS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbGlzdC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgY2hhcmFjdGVyIGlzIGFuIG9wZXJhdG9yIG9yIHRleHQgYW5kIGFjdHMgYWNjb3JkaW5nbHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjaHIgQ2hhcmFjdGVyIGZyb20gdGhlIGFkZHJlc3MgZmllbGRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2hlY2tDaGFyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tDaGFyKGNocikge1xuICAgICAgaWYgKChjaHIgaW4gT1BFUkFUT1JTIHx8IGNociA9PT0gJ1xcXFwnKSAmJiB0aGlzLmVzY2FwZWQpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyID09PSB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9IE9QRVJBVE9SU1tjaHJdO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZXNjYXBlZCAmJiBjaHIgPT09ICdcXFxcJykge1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5ub2RlLnZhbHVlICs9ICdcXFxcJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2RlLnZhbHVlICs9IGNocjtcbiAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2tlbml6ZXI7XG59KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OWhaR1J5WlhOemNHRnljMlZ5TG1weklsMHNJbTVoYldWeklqcGJJbkJoY25ObElpd2ljM1J5SWl3aWRHOXJaVzVwZW1WeUlpd2lWRzlyWlc1cGVtVnlJaXdpZEc5clpXNXpJaXdpZEc5clpXNXBlbVVpTENKaFpHUnlaWE56WlhNaUxDSmhaR1J5WlhOeklpd2ljR0Z5YzJWa1FXUmtjbVZ6YzJWeklpd2labTl5UldGamFDSXNJblJ2YTJWdUlpd2lkSGx3WlNJc0luWmhiSFZsSWl3aWJHVnVaM1JvSWl3aWNIVnphQ0lzSWw5b1lXNWtiR1ZCWkdSeVpYTnpJaXdpWTI5dVkyRjBJaXdpYVhOSGNtOTFjQ0lzSW5OMFlYUmxJaXdpWkdGMFlTSXNJbU52YlcxbGJuUWlMQ0puY205MWNDSXNJblJsZUhRaUxDSnBJaXdpYkdWdUlpd2lhbTlwYmlJc0ltNWhiV1VpTENKdFlYUmphQ0lzSW5Od2JHbGpaU0lzSWw5eVpXZGxlRWhoYm1Sc1pYSWlMQ0owY21sdElpd2ljbVZ3YkdGalpTSXNJazlRUlZKQlZFOVNVeUlzSW5SdlUzUnlhVzVuSWl3aWIzQmxjbUYwYjNKRGRYSnlaVzUwSWl3aWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jaUxDSnViMlJsSWl3aVpYTmpZWEJsWkNJc0lteHBjM1FpTENKamFISWlMQ0pqYUdGeVFYUWlMQ0pqYUdWamEwTm9ZWElpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN08ydENRV04zUWtFc1N6czdPenRCUVdSNFFqczdPenM3T3pzN096czdPenM3UVVGalpTeFRRVUZUUVN4TFFVRlVMRU5CUVdkQ1F5eEhRVUZvUWl4RlFVRnhRanRCUVVOc1F5eE5RVUZOUXl4WlFVRlpMRWxCUVVsRExGTkJRVW9zUTBGQlkwWXNSMEZCWkN4RFFVRnNRanRCUVVOQkxFMUJRVTFITEZOQlFWTkdMRlZCUVZWSExGRkJRVllzUlVGQlpqczdRVUZGUVN4TlFVRk5ReXhaUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCU1VNc1ZVRkJWU3hGUVVGa08wRkJRMEVzVFVGQlNVTXNhMEpCUVd0Q0xFVkJRWFJDT3p0QlFVVkJTaXhUUVVGUFN5eFBRVUZRTEVOQlFXVXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVU01UWl4UlFVRkpRU3hOUVVGTlF5eEpRVUZPTEV0QlFXVXNWVUZCWml4TFFVRTRRa1FzVFVGQlRVVXNTMEZCVGl4TFFVRm5RaXhIUVVGb1FpeEpRVUYxUWtZc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRnlSU3hEUVVGS0xFVkJRU3RGTzBGQlF6ZEZMRlZCUVVsTUxGRkJRVkZOTEUxQlFWb3NSVUZCYjBJN1FVRkRiRUpRTEd0Q1FVRlZVU3hKUVVGV0xFTkJRV1ZRTEU5QlFXWTdRVUZEUkR0QlFVTkVRU3huUWtGQlZTeEZRVUZXTzBGQlEwUXNTMEZNUkN4TlFVdFBPMEZCUTB4QkxHTkJRVkZQTEVsQlFWSXNRMEZCWVVvc1MwRkJZanRCUVVORU8wRkJRMFlzUjBGVVJEczdRVUZYUVN4TlFVRkpTQ3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1VDeGpRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEczdRVUZGUkVRc1dVRkJWVWNzVDBGQlZpeERRVUZyUWl4VlFVRlZSaXhQUVVGV0xFVkJRVzFDTzBGQlEyNURRU3hqUVVGVlVTeGxRVUZsVWl4UFFVRm1MRU5CUVZZN1FVRkRRU3hSUVVGSlFTeFJRVUZSVFN4TlFVRmFMRVZCUVc5Q08wRkJRMnhDVEN4M1FrRkJhMEpCTEdkQ1FVRm5RbEVzVFVGQmFFSXNRMEZCZFVKVUxFOUJRWFpDTEVOQlFXeENPMEZCUTBRN1FVRkRSaXhIUVV4RU96dEJRVTlCTEZOQlFVOURMR1ZCUVZBN1FVRkRSRHM3UVVGRlJEczdPenM3TzBGQlRVRXNVMEZCVTA4c1kwRkJWQ3hEUVVGNVFsZ3NUVUZCZWtJc1JVRkJhVU03UVVGREwwSXNUVUZCU1dFc1ZVRkJWU3hMUVVGa08wRkJRMEVzVFVGQlNVTXNVVUZCVVN4TlFVRmFPMEZCUTBFc1RVRkJTVmdzWjBKQlFVbzdRVUZEUVN4TlFVRk5SQ3haUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCVFdFc1QwRkJUenRCUVVOWVdpeGhRVUZUTEVWQlJFVTdRVUZGV0dFc1lVRkJVeXhGUVVaRk8wRkJSMWhETEZkQlFVOHNSVUZJU1R0QlFVbFlReXhWUVVGTk96dEJRVWRTTzBGQlVHRXNSMEZCWWl4RFFWRkJMRXRCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZTTEVWQlFWZERMRTFCUVUxd1FpeFBRVUZQVXl4TlFVRTNRaXhGUVVGeFExVXNTVUZCU1VNc1IwRkJla01zUlVGQk9FTkVMRWRCUVRsRExFVkJRVzFFTzBGQlEycEVMRkZCUVUxaUxGRkJRVkZPTEU5QlFVOXRRaXhEUVVGUUxFTkJRV1E3TzBGQlJVRXNVVUZCU1dJc1RVRkJUVU1zU1VGQlRpeExRVUZsTEZWQlFXNUNMRVZCUVN0Q08wRkJRemRDTEdOQlFWRkVMRTFCUVUxRkxFdEJRV1E3UVVGRFJTeGhRVUZMTEVkQlFVdzdRVUZEUlUwc2EwSkJRVkVzVTBGQlVqdEJRVU5CTzBGQlEwWXNZVUZCU3l4SFFVRk1PMEZCUTBWQkxHdENRVUZSTEZOQlFWSTdRVUZEUVR0QlFVTkdMR0ZCUVVzc1IwRkJURHRCUVVORlFTeHJRa0ZCVVN4UFFVRlNPMEZCUTBGRUxHOUNRVUZWTEVsQlFWWTdRVUZEUVR0QlFVTkdPMEZCUTBWRExHdENRVUZSTEUxQlFWSTdRVUZhU2p0QlFXTkVMRXRCWmtRc1RVRmxUenRCUVVOTUxGVkJRVWxTTEUxQlFVMUZMRXRCUVZZc1JVRkJhVUk3UVVGRFprOHNZVUZCUzBRc1MwRkJUQ3hGUVVGWlNpeEpRVUZhTEVOQlFXbENTaXhOUVVGTlJTeExRVUYyUWp0QlFVTkVPMEZCUTBZN1FVRkRSanM3UVVGRlJEdEJRVU5CTEUxQlFVa3NRMEZCUTA4c1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRllMRWxCUVhGQ1RTeExRVUZMUXl4UFFVRk1MRU5CUVdGUUxFMUJRWFJETEVWQlFUaERPMEZCUXpWRFRTeFRRVUZMUnl4SlFVRk1MRWRCUVZsSUxFdEJRVXRETEU5QlFXcENPMEZCUTBGRUxGTkJRVXRETEU5QlFVd3NSMEZCWlN4RlFVRm1PMEZCUTBRN08wRkJSVVFzVFVGQlNVZ3NUMEZCU2l4RlFVRmhPMEZCUTFnN1FVRkRRVVVzVTBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVkhMRWxCUVZZc1EwRkJaU3hIUVVGbUxFTkJRVm83UVVGRFFXNUNMR05CUVZWUkxFbEJRVllzUTBGQlpUdEJRVU5pV1N4WlFVRk5VQ3hMUVVGTFJ5eEpRVUZNTEVsQlFXTm1MRmRCUVZkQkxGRkJRVkZ0UWl4SlFVUXhRanRCUVVWaVRDeGhRVUZQUml4TFFVRkxSU3hMUVVGTUxFTkJRVmRTTEUxQlFWZ3NSMEZCYjBKaUxFMUJRVTF0UWl4TFFVRkxSU3hMUVVGTUxFTkJRVmRKTEVsQlFWZ3NRMEZCWjBJc1IwRkJhRUlzUTBGQlRpeERRVUZ3UWl4SFFVRnJSRHRCUVVZMVF5eExRVUZtTzBGQlNVUXNSMEZRUkN4TlFVOVBPMEZCUTB3N1FVRkRRU3hSUVVGSkxFTkJRVU5PTEV0QlFVdGFMRTlCUVV3c1EwRkJZVTBzVFVGQlpDeEpRVUYzUWswc1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRjBReXhGUVVFNFF6dEJRVU0xUXl4WFFVRkxMRWxCUVVsVkxFdEJRVWxLTEV0QlFVdEhMRWxCUVV3c1EwRkJWVlFzVFVGQlZpeEhRVUZ0UWl4RFFVRm9ReXhGUVVGdFExVXNUVUZCU3l4RFFVRjRReXhGUVVFeVEwRXNTVUZCTTBNc1JVRkJaMFE3UVVGRE9VTXNXVUZCU1Vvc1MwRkJTMGNzU1VGQlRDeERRVUZWUXl4RlFVRldMRVZCUVdGSkxFdEJRV0lzUTBGQmJVSXNiVUpCUVc1Q0xFTkJRVW9zUlVGQk5rTTdRVUZETTBOU0xHVkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMGNzU1VGQlRDeERRVUZWVFN4TlFVRldMRU5CUVdsQ1RDeEZRVUZxUWl4RlFVRnZRaXhEUVVGd1FpeERRVUZtTzBGQlEwRTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGVkJRVWxOTEdkQ1FVRm5RaXhUUVVGb1FrRXNZVUZCWjBJc1EwRkJWWFJDTEU5QlFWWXNSVUZCYlVJN1FVRkRja01zV1VGQlNTeERRVUZEV1N4TFFVRkxXaXhQUVVGTUxFTkJRV0ZOTEUxQlFXeENMRVZCUVRCQ08wRkJRM2hDVFN4bFFVRkxXaXhQUVVGTUxFZEJRV1VzUTBGQlEwRXNVVUZCVVhWQ0xFbEJRVklzUlVGQlJDeERRVUZtTzBGQlEwRXNhVUpCUVU4c1IwRkJVRHRCUVVORUxGTkJTRVFzVFVGSFR6dEJRVU5NTEdsQ1FVRlBka0lzVDBGQlVEdEJRVU5FTzBGQlEwWXNUMEZRUkRzN1FVRlRRVHRCUVVOQkxGVkJRVWtzUTBGQlExa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaFRTeE5RVUZzUWl4RlFVRXdRanRCUVVONFFpeGhRVUZMTEVsQlFVbFZMRTFCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVDBGQlN5eERRVUY0UXl4RlFVRXlRMEVzUzBGQk0wTXNSVUZCWjBRN1FVRkRPVU5LTEdWQlFVdEhMRWxCUVV3c1EwRkJWVU1zUjBGQlZpeEpRVUZsU2l4TFFVRkxSeXhKUVVGTUxFTkJRVlZETEVkQlFWWXNSVUZCWVZFc1QwRkJZaXhEUVVGeFFpd3lRa0ZCY2tJc1JVRkJhMFJHTEdGQlFXeEVMRVZCUVdsRlF5eEpRVUZxUlN4RlFVRm1PMEZCUTBFc1kwRkJTVmdzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGcVFpeEZRVUY1UWp0QlFVTjJRanRCUVVORU8wRkJRMFk3UVVGRFJqdEJRVU5HT3p0QlFVVkVPMEZCUTBFc1VVRkJTU3hEUVVGRFRTeExRVUZMUnl4SlFVRk1MRU5CUVZWVUxFMUJRVmdzU1VGQmNVSk5MRXRCUVV0RExFOUJRVXdzUTBGQllWQXNUVUZCZEVNc1JVRkJPRU03UVVGRE5VTk5MRmRCUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBNc1QwRkJha0k3UVVGRFFVUXNWMEZCUzBNc1QwRkJUQ3hIUVVGbExFVkJRV1k3UVVGRFJEczdRVUZGUkR0QlFVTkJMRkZCUVVsRUxFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJZaXhIUVVGelFpeERRVUV4UWl4RlFVRTJRanRCUVVNelFrMHNWMEZCUzBjc1NVRkJUQ3hIUVVGWlNDeExRVUZMUnl4SlFVRk1MRU5CUVZWT0xFMUJRVllzUTBGQmFVSkhMRXRCUVV0YUxFOUJRVXdzUTBGQllYRkNMRTFCUVdJc1EwRkJiMElzUTBGQmNFSXNRMEZCYWtJc1EwRkJXanRCUVVORU96dEJRVVZFTzBGQlEwRlVMRk5CUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlJ5eEpRVUZXTEVOQlFXVXNSMEZCWml4RFFVRmFPMEZCUTBGT0xGTkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMW9zVDBGQlRDeERRVUZoYTBJc1NVRkJZaXhEUVVGclFpeEhRVUZzUWl4RFFVRm1PenRCUVVWQkxGRkJRVWtzUTBGQlEwNHNTMEZCUzFvc1QwRkJUaXhKUVVGcFFsVXNUMEZCY2tJc1JVRkJPRUk3UVVGRE5VSXNZVUZCVHl4RlFVRlFPMEZCUTBRc1MwRkdSQ3hOUVVWUE8wRkJRMHhXTEdkQ1FVRlZPMEZCUTFKQkxHbENRVUZUV1N4TFFVRkxXaXhQUVVGTUxFbEJRV2RDV1N4TFFVRkxSeXhKUVVGeVFpeEpRVUUyUWl4RlFVUTVRanRCUVVWU1NTeGpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV0ZJTEV0QlFVdGFMRTlCUVd4Q0xFbEJRVFpDTzBGQlJqTkNMRTlCUVZZN08wRkJTMEVzVlVGQlNVRXNVVUZCVVVFc1QwRkJVaXhMUVVGdlFrRXNVVUZCVVcxQ0xFbEJRV2hETEVWQlFYTkRPMEZCUTNCRExGbEJRVWtzUTBGQlEyNUNMRkZCUVZGQkxFOUJRVklzU1VGQmJVSXNSVUZCY0VJc1JVRkJkMEp2UWl4TFFVRjRRaXhEUVVFNFFpeEhRVUU1UWl4RFFVRktMRVZCUVhkRE8wRkJRM1JEY0VJc2EwSkJRVkZ0UWl4SlFVRlNMRWRCUVdVc1JVRkJaanRCUVVORUxGTkJSa1FzVFVGRlR6dEJRVU5NYmtJc2EwSkJRVkZCTEU5QlFWSXNSMEZCYTBJc1JVRkJiRUk3UVVGRFJEdEJRVU5HT3p0QlFVVkVSQ3huUWtGQlZWRXNTVUZCVml4RFFVRmxVQ3hQUVVGbU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlBSQ3hUUVVGUU8wRkJRMFE3TzBGQlJVUTdPenRCUVVkQkxFbEJRVTB3UWl4WlFVRlpPMEZCUTJoQ0xFOUJRVXNzUjBGRVZ6dEJRVVZvUWl4UFFVRkxMRWRCUmxjN1FVRkhhRUlzVDBGQlN5eEhRVWhYTzBGQlNXaENMRTlCUVVzc1JVRktWenRCUVV0b1FqdEJRVU5CTEU5QlFVc3NSMEZPVnp0QlFVOW9RanRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4UFFVRkxPenRCUVVkUU96czdPenM3UVVGb1FtdENMRU5CUVd4Q08wbEJjMEpOTjBJc1V6dEJRVU5LTEhGQ1FVRmhSaXhIUVVGaUxFVkJRV3RDTzBGQlFVRTdPMEZCUTJoQ0xGTkJRVXRCTEVkQlFVd3NSMEZCVnl4RFFVRkRRU3hQUVVGUExFVkJRVklzUlVGQldXZERMRkZCUVZvc1JVRkJXRHRCUVVOQkxGTkJRVXRETEdWQlFVd3NSMEZCZFVJc1JVRkJka0k3UVVGRFFTeFRRVUZMUXl4cFFrRkJUQ3hIUVVGNVFpeEZRVUY2UWp0QlFVTkJMRk5CUVV0RExFbEJRVXdzUjBGQldTeEpRVUZhTzBGQlEwRXNVMEZCUzBNc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFTeFRRVUZMUXl4SlFVRk1MRWRCUVZrc1JVRkJXanRCUVVORU96dEJRVVZFT3pzN096czdPenM3SzBKQlMxazdRVUZEVml4VlFVRkpReXhaUVVGS08wRkJRMEVzVlVGQlNVUXNUMEZCVHl4RlFVRllPMEZCUTBFc1YwRkJTeXhKUVVGSlppeEpRVUZKTEVOQlFWSXNSVUZCVjBNc1RVRkJUU3hMUVVGTGRrSXNSMEZCVEN4RFFVRlRXU3hOUVVFdlFpeEZRVUYxUTFVc1NVRkJTVU1zUjBGQk0wTXNSVUZCWjBSRUxFZEJRV2hFTEVWQlFYRkVPMEZCUTI1RVowSXNZMEZCVFN4TFFVRkxkRU1zUjBGQlRDeERRVUZUZFVNc1RVRkJWQ3hEUVVGblFtcENMRU5CUVdoQ0xFTkJRVTQ3UVVGRFFTeGhRVUZMYTBJc1UwRkJUQ3hEUVVGbFJpeEhRVUZtTzBGQlEwUTdPMEZCUlVRc1YwRkJTMFFzU1VGQlRDeERRVUZWTjBJc1QwRkJWaXhEUVVGclFpeFZRVUZWTWtJc1NVRkJWaXhGUVVGblFqdEJRVU5vUTBFc1lVRkJTM2hDTEV0QlFVd3NSMEZCWVN4RFFVRkRkMElzUzBGQlMzaENMRXRCUVV3c1NVRkJZeXhGUVVGbUxFVkJRVzFDY1VJc1VVRkJia0lzUjBGQk9FSklMRWxCUVRsQ0xFVkJRV0k3UVVGRFFTeFpRVUZKVFN4TFFVRkxlRUlzUzBGQlZDeEZRVUZuUWp0QlFVTmtNRUlzWlVGQlMzaENMRWxCUVV3c1EwRkJWWE5DTEVsQlFWWTdRVUZEUkR0QlFVTkdMRTlCVEVRN08wRkJUMEVzWVVGQlQwVXNTVUZCVUR0QlFVTkVPenRCUVVWRU96czdPenM3T3pzNFFrRkxWME1zUnl4RlFVRkxPMEZCUTJRc1ZVRkJTU3hEUVVGRFFTeFBRVUZQVUN4VFFVRlFMRWxCUVc5Q1R5eFJRVUZSTEVsQlFUZENMRXRCUVhORExFdEJRVXRHTEU5QlFTOURMRVZCUVhkRU8wRkJRM1JFTEdGQlFVdEJMRTlCUVV3c1IwRkJaU3hMUVVGbU8wRkJRMFFzVDBGR1JDeE5RVVZQTEVsQlFVa3NTMEZCUzBZc2FVSkJRVXdzU1VGQk1FSkpMRkZCUVZFc1MwRkJTMG9zYVVKQlFUTkRMRVZCUVRoRU8wRkJRMjVGTEdGQlFVdERMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDTEVWQlFYcENPMEZCUTBFc1lVRkJTMFVzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVMRTlCVmswc1RVRlZRU3hKUVVGSkxFTkJRVU1zUzBGQlMwWXNhVUpCUVU0c1NVRkJNa0pKTEU5QlFVOVFMRk5CUVhSRExFVkJRV2xFTzBGQlEzUkVMR0ZCUVV0SkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVlVGRVNUdEJRVVZXUXl4cFFrRkJUekpDTzBGQlJrY3NVMEZCV2p0QlFVbEJMR0ZCUVV0RUxFbEJRVXdzUTBGQlZYaENMRWxCUVZZc1EwRkJaU3hMUVVGTGMwSXNTVUZCY0VJN1FVRkRRU3hoUVVGTFFTeEpRVUZNTEVkQlFWa3NTVUZCV2p0QlFVTkJMR0ZCUVV0RUxHbENRVUZNTEVkQlFYbENTQ3hWUVVGVlR5eEhRVUZXTEVOQlFYcENPMEZCUTBFc1lVRkJTMFlzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVWtzUTBGQlF5eExRVUZMUVN4UFFVRk9MRWxCUVdsQ1JTeFJRVUZSTEVsQlFUZENMRVZCUVcxRE8wRkJRMnBETEdGQlFVdEdMRTlCUVV3c1IwRkJaU3hKUVVGbU8wRkJRMEU3UVVGRFJEczdRVUZGUkN4VlFVRkpMRU5CUVVNc1MwRkJTMFFzU1VGQlZpeEZRVUZuUWp0QlFVTmtMR0ZCUVV0QkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVFVGRVNUdEJRVVZXUXl4cFFrRkJUenRCUVVaSExGTkJRVm83UVVGSlFTeGhRVUZMTUVJc1NVRkJUQ3hEUVVGVmVFSXNTVUZCVml4RFFVRmxMRXRCUVV0elFpeEpRVUZ3UWp0QlFVTkVPenRCUVVWRUxGVkJRVWtzUzBGQlMwTXNUMEZCVEN4SlFVRm5Ra1VzVVVGQlVTeEpRVUUxUWl4RlFVRnJRenRCUVVOb1F5eGhRVUZMU0N4SlFVRk1MRU5CUVZWNFFpeExRVUZXTEVsQlFXMUNMRWxCUVc1Q08wRkJRMFE3TzBGQlJVUXNWMEZCUzNkQ0xFbEJRVXdzUTBGQlZYaENMRXRCUVZZc1NVRkJiVUl5UWl4SFFVRnVRanRCUVVOQkxGZEJRVXRHTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRaUxDSm1hV3hsSWpvaVlXUmtjbVZ6YzNCaGNuTmxjaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1VHRnljMlZ6SUhOMGNuVmpkSFZ5WldRZ1pTMXRZV2xzSUdGa1pISmxjM05sY3lCbWNtOXRJR0Z1SUdGa1pISmxjM01nWm1sbGJHUmNiaUFxWEc0Z0tpQkZlR0Z0Y0d4bE9seHVJQ3BjYmlBcUlDQWdJRndpVG1GdFpTQThZV1JrY21WemMwQmtiMjFoYVc0K1hDSmNiaUFxWEc0Z0tpQjNhV3hzSUdKbElHTnZiblpsY25SbFpDQjBiMXh1SUNwY2JpQXFJQ0FnSUNCYmUyNWhiV1U2SUZ3aVRtRnRaVndpTENCaFpHUnlaWE56T2lCY0ltRmtaSEpsYzNOQVpHOXRZV2x1WENKOVhWeHVJQ3BjYmlBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCemRISWdRV1JrY21WemN5Qm1hV1ZzWkZ4dUlDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JR0ZrWkhKbGMzTWdiMkpxWldOMGMxeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaUJ3WVhKelpTQW9jM1J5S1NCN1hHNGdJR052Ym5OMElIUnZhMlZ1YVhwbGNpQTlJRzVsZHlCVWIydGxibWw2WlhJb2MzUnlLVnh1SUNCamIyNXpkQ0IwYjJ0bGJuTWdQU0IwYjJ0bGJtbDZaWEl1ZEc5clpXNXBlbVVvS1Z4dVhHNGdJR052Ym5OMElHRmtaSEpsYzNObGN5QTlJRnRkWEc0Z0lHeGxkQ0JoWkdSeVpYTnpJRDBnVzExY2JpQWdiR1YwSUhCaGNuTmxaRUZrWkhKbGMzTmxjeUE5SUZ0ZFhHNWNiaUFnZEc5clpXNXpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLSFJ2YTJWdUtTQjdYRzRnSUNBZ2FXWWdLSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZHZjR1Z5WVhSdmNpY2dKaVlnS0hSdmEyVnVMblpoYkhWbElEMDlQU0FuTENjZ2ZId2dkRzlyWlc0dWRtRnNkV1VnUFQwOUlDYzdKeWtwSUh0Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoaFpHUnlaWE56S1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWVdSa2NtVnpjeUE5SUZ0ZFhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR0ZrWkhKbGMzTXVjSFZ6YUNoMGIydGxiaWxjYmlBZ0lDQjlYRzRnSUgwcFhHNWNiaUFnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnWVdSa2NtVnpjMlZ6TG5CMWMyZ29ZV1JrY21WemN5bGNiaUFnZlZ4dVhHNGdJR0ZrWkhKbGMzTmxjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hoWkdSeVpYTnpLU0I3WEc0Z0lDQWdZV1JrY21WemN5QTlJRjlvWVc1a2JHVkJaR1J5WlhOektHRmtaSEpsYzNNcFhHNGdJQ0FnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1JCWkdSeVpYTnpaWE1nUFNCd1lYSnpaV1JCWkdSeVpYTnpaWE11WTI5dVkyRjBLR0ZrWkhKbGMzTXBYRzRnSUNBZ2ZWeHVJQ0I5S1Z4dVhHNGdJSEpsZEhWeWJpQndZWEp6WldSQlpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cUtseHVJQ29nUTI5dWRtVnlkSE1nZEc5clpXNXpJR1p2Y2lCaElITnBibWRzWlNCaFpHUnlaWE56SUdsdWRHOGdZVzRnWVdSa2NtVnpjeUJ2WW1wbFkzUmNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1ZlNCMGIydGxibk1nVkc5clpXNXpJRzlpYW1WamRGeHVJQ29nUUhKbGRIVnliaUI3VDJKcVpXTjBmU0JCWkdSeVpYTnpJRzlpYW1WamRGeHVJQ292WEc1bWRXNWpkR2x2YmlCZmFHRnVaR3hsUVdSa2NtVnpjeUFvZEc5clpXNXpLU0I3WEc0Z0lHeGxkQ0JwYzBkeWIzVndJRDBnWm1Gc2MyVmNiaUFnYkdWMElITjBZWFJsSUQwZ0ozUmxlSFFuWEc0Z0lHeGxkQ0JoWkdSeVpYTnpYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR052Ym5OMElHUmhkR0VnUFNCN1hHNGdJQ0FnWVdSa2NtVnpjem9nVzEwc1hHNGdJQ0FnWTI5dGJXVnVkRG9nVzEwc1hHNGdJQ0FnWjNKdmRYQTZJRnRkTEZ4dUlDQWdJSFJsZUhRNklGdGRYRzRnSUgxY2JseHVJQ0F2THlCR2FXeDBaWElnYjNWMElEeGhaR1J5WlhOelpYTStMQ0FvWTI5dGJXVnVkSE1wSUdGdVpDQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJ2YTJWdWN5NXNaVzVuZEdnN0lHa2dQQ0JzWlc0N0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElIUnZhMlZ1SUQwZ2RHOXJaVzV6VzJsZFhHNWNiaUFnSUNCcFppQW9kRzlyWlc0dWRIbHdaU0E5UFQwZ0oyOXdaWEpoZEc5eUp5a2dlMXh1SUNBZ0lDQWdjM2RwZEdOb0lDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJQ2M4SnpwY2JpQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlDZGhaR1J5WlhOekoxeHVJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lHTmhjMlVnSnlnbk9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKMk52YlcxbGJuUW5YRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbk9pYzZYRzRnSUNBZ0lDQWdJQ0FnYzNSaGRHVWdQU0FuWjNKdmRYQW5YRzRnSUNBZ0lDQWdJQ0FnYVhOSGNtOTFjQ0E5SUhSeWRXVmNiaUFnSUNBZ0lDQWdJQ0JpY21WaGExeHVJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNoMGIydGxiaTUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaFczTjBZWFJsWFM1d2RYTm9LSFJ2YTJWdUxuWmhiSFZsS1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklFbG1JSFJvWlhKbElHbHpJRzV2SUhSbGVIUWdZblYwSUdFZ1kyOXRiV1Z1ZEN3Z2NtVndiR0ZqWlNCMGFHVWdkSGR2WEc0Z0lHbG1JQ2doWkdGMFlTNTBaWGgwTG14bGJtZDBhQ0FtSmlCa1lYUmhMbU52YlcxbGJuUXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdaR0YwWVM1amIyMXRaVzUwSUQwZ1cxMWNiaUFnZlZ4dVhHNGdJR2xtSUNocGMwZHliM1Z3S1NCN1hHNGdJQ0FnTHk4Z2FIUjBjRG92TDNSdmIyeHpMbWxsZEdZdWIzSm5MMmgwYld3dmNtWmpNamd5TWlOaGNIQmxibVJwZUMxQkxqRXVNMXh1SUNBZ0lHUmhkR0V1ZEdWNGRDQTlJR1JoZEdFdWRHVjRkQzVxYjJsdUtDY2dKeWxjYmlBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoN1hHNGdJQ0FnSUNCdVlXMWxPaUJrWVhSaExuUmxlSFFnZkh3Z0tHRmtaSEpsYzNNZ0ppWWdZV1JrY21WemN5NXVZVzFsS1N4Y2JpQWdJQ0FnSUdkeWIzVndPaUJrWVhSaExtZHliM1Z3TG14bGJtZDBhQ0EvSUhCaGNuTmxLR1JoZEdFdVozSnZkWEF1YW05cGJpZ25MQ2NwS1NBNklGdGRYRzRnSUNBZ2ZTbGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQXZMeUJKWmlCdWJ5QmhaR1J5WlhOeklIZGhjeUJtYjNWdVpDd2dkSEo1SUhSdklHUmxkR1ZqZENCdmJtVWdabkp2YlNCeVpXZDFiR0Z5SUhSbGVIUmNiaUFnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dnSmlZZ1pHRjBZUzUwWlhoMExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHRjBZUzUwWlhoMFcybGRMbTFoZEdOb0tDOWVXMTVBWEZ4elhTdEFXMTVBWEZ4elhTc2tMeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoTG1Ga1pISmxjM01nUFNCa1lYUmhMblJsZUhRdWMzQnNhV05sS0drc0lERXBYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ1gzSmxaMlY0U0dGdVpHeGxjaUE5SUdaMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWkdGMFlTNWhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlGdGhaR1J5WlhOekxuUnlhVzBvS1YxY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5QW5YRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0ZrWkhKbGMzTmNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCemRHbHNiQ0J1YnlCaFpHUnlaWE56WEc0Z0lDQWdJQ0JwWmlBb0lXUmhkR0V1WVdSa2NtVnpjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlHUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdWRHVjRkRnRwWFNBOUlHUmhkR0V1ZEdWNGRGdHBYUzV5WlhCc1lXTmxLQzljWEhNcVhGeGlXMTVBWEZ4elhTdEFXMTVBWEZ4elhTdGNYR0pjWEhNcUx5d2dYM0psWjJWNFNHRnVaR3hsY2lrdWRISnBiU2dwWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnU1dZZ2RHaGxjbVVuY3lCemRHbHNiQ0JwY3lCdWJ5QjBaWGgwSUdKMWRDQmhJR052YlcxbGJuUWdaWGhwZUhSekxDQnlaWEJzWVdObElIUm9aU0IwZDI5Y2JpQWdJQ0JwWmlBb0lXUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0ppWWdaR0YwWVM1amIyMXRaVzUwTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzVqYjIxdFpXNTBYRzRnSUNBZ0lDQmtZWFJoTG1OdmJXMWxiblFnUFNCYlhWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFdGxaWEFnYjI1c2VTQjBhR1VnWm1seWMzUWdZV1JrY21WemN5QnZZMk4xY21WdVkyVXNJSEIxYzJnZ2IzUm9aWEp6SUhSdklISmxaM1ZzWVhJZ2RHVjRkRnh1SUNBZ0lHbG1JQ2hrWVhSaExtRmtaSEpsYzNNdWJHVnVaM1JvSUQ0Z01Ta2dlMXh1SUNBZ0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1OdmJtTmhkQ2hrWVhSaExtRmtaSEpsYzNNdWMzQnNhV05sS0RFcEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFcHZhVzRnZG1Gc2RXVnpJSGRwZEdnZ2MzQmhZMlZ6WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1wdmFXNG9KeUFuS1Z4dUlDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlHUmhkR0V1WVdSa2NtVnpjeTVxYjJsdUtDY2dKeWxjYmx4dUlDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpJQ1ltSUdselIzSnZkWEFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJiWFZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmhaR1J5WlhOeklEMGdlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpPaUJrWVhSaExtRmtaSEpsYzNNZ2ZId2daR0YwWVM1MFpYaDBJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2daR0YwWVM1aFpHUnlaWE56SUh4OElDY25YRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoaFpHUnlaWE56TG1Ga1pISmxjM01nUFQwOUlHRmtaSEpsYzNNdWJtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9LR0ZrWkhKbGMzTXVZV1JrY21WemN5QjhmQ0FuSnlrdWJXRjBZMmdvTDBBdktTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdGa1pISmxjM011Ym1GdFpTQTlJQ2NuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtjbVZ6Y3k1aFpHUnlaWE56SUQwZ0p5ZGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCaFpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cVhHNGdLaUJQY0dWeVlYUnZjaUIwYjJ0bGJuTWdZVzVrSUhkb2FXTm9JSFJ2YTJWdWN5QmhjbVVnWlhod1pXTjBaV1FnZEc4Z1pXNWtJSFJvWlNCelpYRjFaVzVqWlZ4dUlDb3ZYRzVqYjI1emRDQlBVRVZTUVZSUFVsTWdQU0I3WEc0Z0lDZGNJaWM2SUNkY0lpY3NYRzRnSUNjb0p6b2dKeWtuTEZ4dUlDQW5QQ2M2SUNjK0p5eGNiaUFnSnl3bk9pQW5KeXhjYmlBZ0x5OGdSM0p2ZFhCeklHRnlaU0JsYm1SbFpDQmllU0J6WlcxcFkyOXNiMjV6WEc0Z0lDYzZKem9nSnpzbkxGeHVJQ0F2THlCVFpXMXBZMjlzYjI1eklHRnlaU0J1YjNRZ1lTQnNaV2RoYkNCa1pXeHBiV2wwWlhJZ2NHVnlJSFJvWlNCU1JrTXlPREl5SUdkeVlXMXRZWElnYjNSb1pYSmNiaUFnTHk4Z2RHaGhiaUJtYjNJZ2RHVnliV2x1WVhScGJtY2dZU0JuY205MWNDd2dZblYwSUhSb1pYa2dZWEpsSUdGc2MyOGdibTkwSUhaaGJHbGtJR1p2Y2lCaGJubGNiaUFnTHk4Z2IzUm9aWElnZFhObElHbHVJSFJvYVhNZ1kyOXVkR1Y0ZEM0Z0lFZHBkbVZ1SUhSb1lYUWdjMjl0WlNCdFlXbHNJR05zYVdWdWRITWdhR0YyWlZ4dUlDQXZMeUJvYVhOMGIzSnBZMkZzYkhrZ1lXeHNiM2RsWkNCMGFHVWdjMlZ0YVdOdmJHOXVJR0Z6SUdFZ1pHVnNhVzFwZEdWeUlHVnhkV2wyWVd4bGJuUWdkRzhnZEdobFhHNGdJQzh2SUdOdmJXMWhJR2x1SUhSb1pXbHlJRlZKTENCcGRDQnRZV3RsY3lCelpXNXpaU0IwYnlCMGNtVmhkQ0IwYUdWdElIUm9aU0J6WVcxbElHRnpJR0VnWTI5dGJXRmNiaUFnTHk4Z2QyaGxiaUIxYzJWa0lHOTFkSE5wWkdVZ2IyWWdZU0JuY205MWNDNWNiaUFnSnpzbk9pQW5KMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQlViMnRsYm1sNlpYSWdiMkpxWldOMElHWnZjaUIwYjJ0bGJtbDZhVzVuSUdGa1pISmxjM01nWm1sbGJHUWdjM1J5YVc1bmMxeHVJQ3BjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvZ1FIQmhjbUZ0SUh0VGRISnBibWQ5SUhOMGNpQkJaR1J5WlhOeklHWnBaV3hrSUhOMGNtbHVaMXh1SUNvdlhHNWpiR0Z6Y3lCVWIydGxibWw2WlhJZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lBb2MzUnlLU0I3WEc0Z0lDQWdkR2hwY3k1emRISWdQU0FvYzNSeUlIeDhJQ2NuS1M1MGIxTjBjbWx1WnlncFhHNGdJQ0FnZEdocGN5NXZjR1Z5WVhSdmNrTjFjbkpsYm5RZ1BTQW5KMXh1SUNBZ0lIUm9hWE11YjNCbGNtRjBiM0pGZUhCbFkzUnBibWNnUFNBbkoxeHVJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lIUm9hWE11YkdsemRDQTlJRnRkWEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHOXJaVzVwZW1WeklIUm9aU0J2Y21sbmFXNWhiQ0JwYm5CMWRDQnpkSEpwYm1kY2JpQWdJQ3BjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JRzl3WlhKaGRHOXlmSFJsZUhRZ2RHOXJaVzV6WEc0Z0lDQXFMMXh1SUNCMGIydGxibWw2WlNBb0tTQjdYRzRnSUNBZ2JHVjBJR05vY2x4dUlDQWdJR3hsZENCc2FYTjBJRDBnVzExY2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2diR1Z1SUQwZ2RHaHBjeTV6ZEhJdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR05vY2lBOUlIUm9hWE11YzNSeUxtTm9ZWEpCZENocEtWeHVJQ0FnSUNBZ2RHaHBjeTVqYUdWamEwTm9ZWElvWTJoeUtWeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXViR2x6ZEM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNodWIyUmxLU0I3WEc0Z0lDQWdJQ0J1YjJSbExuWmhiSFZsSUQwZ0tHNXZaR1V1ZG1Gc2RXVWdmSHdnSnljcExuUnZVM1J5YVc1bktDa3VkSEpwYlNncFhHNGdJQ0FnSUNCcFppQW9ibTlrWlM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FYTjBMbkIxYzJnb2JtOWtaU2xjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1WEc0Z0lDQWdjbVYwZFhKdUlHeHBjM1JjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGFHVmphM01nYVdZZ1lTQmphR0Z5WVdOMFpYSWdhWE1nWVc0Z2IzQmxjbUYwYjNJZ2IzSWdkR1Y0ZENCaGJtUWdZV04wY3lCaFkyTnZjbVJwYm1kc2VWeHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdZMmh5SUVOb1lYSmhZM1JsY2lCbWNtOXRJSFJvWlNCaFpHUnlaWE56SUdacFpXeGtYRzRnSUNBcUwxeHVJQ0JqYUdWamEwTm9ZWElnS0dOb2Npa2dlMXh1SUNBZ0lHbG1JQ2dvWTJoeUlHbHVJRTlRUlZKQlZFOVNVeUI4ZkNCamFISWdQVDA5SUNkY1hGeGNKeWtnSmlZZ2RHaHBjeTVsYzJOaGNHVmtLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ1BUMDlJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJSHRjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dKMjl3WlhKaGRHOXlKeXhjYmlBZ0lDQWdJQ0FnZG1Gc2RXVTZJR05vY2x4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnYm5Wc2JGeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUE5SUNjblhHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ2FXNGdUMUJGVWtGVVQxSlRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtNXZaR1VnUFNCN1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUNkdmNHVnlZWFJ2Y2ljc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lCamFISmNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11YkdsemRDNXdkWE5vS0hSb2FYTXVibTlrWlNsY2JpQWdJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQlBVRVZTUVZSUFVsTmJZMmh5WFZ4dUlDQWdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdJQ0FnSUhKbGRIVnlibHh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWxjMk5oY0dWa0lDWW1JR05vY2lBOVBUMGdKMXhjWEZ3bktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCMGNuVmxYRzRnSUNBZ0lDQnlaWFIxY201Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lYUm9hWE11Ym05a1pTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnZTF4dUlDQWdJQ0FnSUNCMGVYQmxPaUFuZEdWNGRDY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQW5KMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1c2FYTjBMbkIxYzJnb2RHaHBjeTV1YjJSbEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1WelkyRndaV1FnSmlZZ1kyaHlJQ0U5UFNBblhGeGNYQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlM1MllXeDFaU0FyUFNBblhGeGNYQ2RjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG01dlpHVXVkbUZzZFdVZ0t6MGdZMmh5WEc0Z0lDQWdkR2hwY3k1bGMyTmhjR1ZrSUQwZ1ptRnNjMlZjYmlBZ2ZWeHVmVnh1SWwxOSIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChTUExJVCwgbmF0aXZlU3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJy5zcGxpdCgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sICFTVVBQT1JUU19ZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubGlua1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2xpbmsnKSB9LCB7XG4gIGxpbms6IGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lkp1YTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5cbi8vIGltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmNsYXNzIFRlbXBsYXRlVXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50ZW1wbGF0ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMudGVtcGxhdGVzLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXG5cdFx0dGhpcy50ZW1wbGF0ZXNOYW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMDAgfSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXNOYW1lcy5za2lwRmlyc3QgPSB0cnVlO1xuXG5cdFx0dGhpcy5zdWJzY3JpYmVycygpO1xuXHR9XG5cblx0c3Vic2NyaWJlcnMoKSB7XG5cdFx0dGhpcy50ZW1wbGF0ZXMuc3Vic2NyaWJlKChsaXN0KSA9PiB7XG5cdFx0XHR0aGlzLnRlbXBsYXRlc05hbWVzKF8uY29tcGFjdChfLm1hcChsaXN0LCAoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLm5hbWUgOiBudWxsKSkpKTtcblx0XHR9KTtcblxuXHRcdC8vIHRoaXMudGVtcGxhdGVzTmFtZXMuc3Vic2NyaWJlKChhTGlzdCkgPT4ge1xuXHRcdC8vIFx0aWYgKHRoaXMudGVtcGxhdGVzTmFtZXMuc2tpcEZpcnN0KVxuXHRcdC8vIFx0e1xuXHRcdC8vIFx0XHR0aGlzLnRlbXBsYXRlc05hbWVzLnNraXBGaXJzdCA9IGZhbHNlO1xuXHRcdC8vIFx0fVxuXHRcdC8vIFx0ZWxzZSBpZiAoYUxpc3QgJiYgMSA8IGFMaXN0Lmxlbmd0aClcblx0XHQvLyBcdHtcblx0XHQvLyBcdFx0UmVtb3RlLnRlbXBsYXRlc1NvcnRPcmRlcihudWxsLCBhTGlzdCk7XG5cdFx0Ly8gXHR9XG5cdFx0Ly8gfSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFRlbXBsYXRlVXNlclN0b3JlKCk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJBbGxvd1BkZlByZXZpZXcsIGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyB0cmltLCBwSW50LCBpbkFycmF5LCBpc05vbkVtcHR5QXJyYXksIGdldEZpbGVFeHRlbnNpb24sIGZyaWVuZGx5U2l6ZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQge1xuXHRhdHRhY2htZW50RG93bmxvYWQsXG5cdGF0dGFjaG1lbnRQcmV2aWV3LFxuXHRhdHRhY2htZW50RnJhbWVkLFxuXHRhdHRhY2htZW50UHJldmlld0FzUGxhaW4sXG5cdGF0dGFjaG1lbnRUaHVtYm5haWxQcmV2aWV3XG59IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0TW9kZWwgfSBmcm9tICdLbm9pbi9BYnN0cmFjdE1vZGVsJztcblxuaW1wb3J0IEF1ZGlvIGZyb20gJ0NvbW1vbi9BdWRpbyc7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNFeHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzTWltZVR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aWNGaWxlVHlwZSA9IF8ubWVtb2l6ZSgoZXh0LCBtaW1lVHlwZSkgPT4ge1xuXHRleHQgPSB0cmltKGV4dCkudG9Mb3dlckNhc2UoKTtcblx0bWltZVR5cGUgPSB0cmltKG1pbWVUeXBlKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGxldCByZXN1bHQgPSBGaWxlVHlwZS5Vbmtub3duO1xuXHRjb25zdCBtaW1lVHlwZVBhcnRzID0gbWltZVR5cGUuc3BsaXQoJy8nKTtcblxuXHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlICdpbWFnZScgPT09IG1pbWVUeXBlUGFydHNbMF0gfHwgLTEgPCBpbkFycmF5KGV4dCwgWydwbmcnLCAnanBnJywgJ2pwZWcnLCAnZ2lmJywgJ2JtcCddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkltYWdlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXVkaW8nID09PSBtaW1lVHlwZVBhcnRzWzBdIHx8IC0xIDwgaW5BcnJheShleHQsIFsnbXAzJywgJ29nZycsICdvZ2EnLCAnd2F2J10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuQXVkaW87XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICd2aWRlbycgPT09IG1pbWVUeXBlUGFydHNbMF0gfHwgLTEgPCBpbkFycmF5KGV4dCwgWydta3YnLCAnYXZpJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuVmlkZW87XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDwgaW5BcnJheShleHQsIFsncGhwJywgJ2pzJywgJ2NzcyddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkNvZGU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdlbWwnID09PSBleHQgfHwgLTEgPCBpbkFycmF5KG1pbWVUeXBlLCBbJ21lc3NhZ2UvZGVsaXZlcnktc3RhdHVzJywgJ21lc3NhZ2UvcmZjODIyJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuRW1sO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAoJ3RleHQnID09PSBtaW1lVHlwZVBhcnRzWzBdICYmICdodG1sJyAhPT0gbWltZVR5cGVQYXJ0c1sxXSkgfHwgLTEgPCBpbkFycmF5KGV4dCwgWyd0eHQnLCAnbG9nJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuVGV4dDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3RleHQvaHRtbCcgPT09IG1pbWVUeXBlIHx8IC0xIDwgaW5BcnJheShleHQsIFsnaHRtbCddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkh0bWw7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDxcblx0XHRcdGluQXJyYXkobWltZVR5cGVQYXJ0c1sxXSwgW1xuXHRcdFx0XHQnemlwJyxcblx0XHRcdFx0Jzd6Jyxcblx0XHRcdFx0J3RhcicsXG5cdFx0XHRcdCdyYXInLFxuXHRcdFx0XHQnZ3ppcCcsXG5cdFx0XHRcdCdiemlwJyxcblx0XHRcdFx0J2J6aXAyJyxcblx0XHRcdFx0J3gtemlwJyxcblx0XHRcdFx0J3gtN3onLFxuXHRcdFx0XHQneC1yYXInLFxuXHRcdFx0XHQneC10YXInLFxuXHRcdFx0XHQneC1nemlwJyxcblx0XHRcdFx0J3gtYnppcCcsXG5cdFx0XHRcdCd4LWJ6aXAyJyxcblx0XHRcdFx0J3gtemlwLWNvbXByZXNzZWQnLFxuXHRcdFx0XHQneC03ei1jb21wcmVzc2VkJyxcblx0XHRcdFx0J3gtcmFyLWNvbXByZXNzZWQnXG5cdFx0XHRdKSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ3ppcCcsICc3eicsICd0YXInLCAncmFyJywgJ2d6aXAnLCAnYnppcCcsICdiemlwMiddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkFyY2hpdmU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDwgaW5BcnJheShtaW1lVHlwZVBhcnRzWzFdLCBbJ3BkZicsICd4LXBkZiddKSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ3BkZiddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLlBkZjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPCBpbkFycmF5KG1pbWVUeXBlLCBbJ2FwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUnLCAnYXBwbGljYXRpb24vcGdwLWtleXMnXSkgfHxcblx0XHRcdC0xIDwgaW5BcnJheShleHQsIFsnYXNjJywgJ3BlbScsICdwcGsnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5DZXJ0aWZpY2F0ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPCBpbkFycmF5KG1pbWVUeXBlLCBbJ2FwcGxpY2F0aW9uL3BrY3M3LXNpZ25hdHVyZSddKSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ3A3cyddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkNlcnRpZmljYXRlQmluO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8XG5cdFx0XHRpbkFycmF5KG1pbWVUeXBlUGFydHNbMV0sIFtcblx0XHRcdFx0J3J0ZicsXG5cdFx0XHRcdCdtc3dvcmQnLFxuXHRcdFx0XHQndm5kLm1zd29yZCcsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC50ZW1wbGF0ZScsXG5cdFx0XHRcdCd2bmQubXMtd29yZC5kb2N1bWVudC5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLXdvcmQudGVtcGxhdGUubWFjcm9FbmFibGVkLjEyJ1xuXHRcdFx0XSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5Xb3JkVGV4dDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPFxuXHRcdFx0aW5BcnJheShtaW1lVHlwZVBhcnRzWzFdLCBbXG5cdFx0XHRcdCdleGNlbCcsXG5cdFx0XHRcdCdtcy1leGNlbCcsXG5cdFx0XHRcdCd2bmQubXMtZXhjZWwnLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUnLFxuXHRcdFx0XHQndm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQuMTInXG5cdFx0XHRdKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLlNoZWV0O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8XG5cdFx0XHRpbkFycmF5KG1pbWVUeXBlUGFydHNbMV0sIFtcblx0XHRcdFx0J3Bvd2VycG9pbnQnLFxuXHRcdFx0XHQnbXMtcG93ZXJwb2ludCcsXG5cdFx0XHRcdCd2bmQubXMtcG93ZXJwb2ludCcsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZScsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93Jyxcblx0XHRcdFx0J3ZuZC5tcy1wb3dlcnBvaW50LmFkZGluLm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtcG93ZXJwb2ludC5wcmVzZW50YXRpb24ubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy1wb3dlcnBvaW50LnRlbXBsYXRlLm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtcG93ZXJwb2ludC5zbGlkZXNob3cubWFjcm9FbmFibGVkLjEyJ1xuXHRcdFx0XSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5QcmVzZW50YXRpb247XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufSk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNGaWxlVHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRpY0ljb25DbGFzcyA9IF8ubWVtb2l6ZSgoZmlsZVR5cGUpID0+IHtcblx0bGV0IHJlc3VsdFRleHQgPSAnJyxcblx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUnO1xuXG5cdHN3aXRjaCAoZmlsZVR5cGUpIHtcblx0XHRjYXNlIEZpbGVUeXBlLlRleHQ6XG5cdFx0Y2FzZSBGaWxlVHlwZS5FbWw6XG5cdFx0Y2FzZSBGaWxlVHlwZS5Xb3JkVGV4dDpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS10ZXh0Jztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuSHRtbDpcblx0XHRjYXNlIEZpbGVUeXBlLkNvZGU6XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtY29kZSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLkltYWdlOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLWltYWdlJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuQXVkaW86XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtbXVzaWMnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5WaWRlbzpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1tb3ZpZSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLkFyY2hpdmU6XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtemlwJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuQ2VydGlmaWNhdGU6XG5cdFx0Y2FzZSBGaWxlVHlwZS5DZXJ0aWZpY2F0ZUJpbjpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1jZXJ0aWZpY2F0ZSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLlNoZWV0OlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLWV4Y2VsJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuUHJlc2VudGF0aW9uOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLWNoYXJ0LWdyYXBoJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuUGRmOlxuXHRcdFx0cmVzdWx0VGV4dCA9ICdwZGYnO1xuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1ub25lJztcblx0XHRcdGJyZWFrO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiBbcmVzdWx0Q2xhc3MsIHJlc3VsdFRleHRdO1xufSk7XG5cbi8qKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHtzdHJpbmd9IHNGaWxlVHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRpY0NvbWJpbmVkSWNvbkNsYXNzID0gKGRhdGEpID0+IHtcblx0bGV0IHJlc3VsdCA9ICcnLFxuXHRcdHR5cGVzID0gW107XG5cblx0aWYgKGlzTm9uRW1wdHlBcnJheShkYXRhKSkge1xuXHRcdHJlc3VsdCA9ICdpY29uLWF0dGFjaG1lbnQnO1xuXHRcdHR5cGVzID0gXy51bmlxKF8uY29tcGFjdChfLm1hcChkYXRhLCAoaXRlbSkgPT4gKGl0ZW0gPyBzdGF0aWNGaWxlVHlwZShnZXRGaWxlRXh0ZW5zaW9uKGl0ZW1bMF0pLCBpdGVtWzFdKSA6ICcnKSkpKTtcblxuXHRcdGlmICh0eXBlcyAmJiAxID09PSB0eXBlcy5sZW5ndGggJiYgdHlwZXNbMF0pIHtcblx0XHRcdHN3aXRjaCAodHlwZXNbMF0pIHtcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5UZXh0OlxuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLldvcmRUZXh0OlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtdGV4dCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuSHRtbDpcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5Db2RlOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtY29kZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuSW1hZ2U6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1pbWFnZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuQXVkaW86XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1tdXNpYyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuVmlkZW86XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1tb3ZpZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuQXJjaGl2ZTpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLXppcCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuQ2VydGlmaWNhdGU6XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuQ2VydGlmaWNhdGVCaW46XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1jZXJ0aWZpY2F0ZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuU2hlZXQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS1leGNlbCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuUHJlc2VudGF0aW9uOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtY2hhcnQtZ3JhcGgnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmNsYXNzIEF0dGFjaG1lbnRNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignQXR0YWNobWVudE1vZGVsJyk7XG5cblx0XHR0aGlzLmNoZWNrZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubWltZVR5cGUgPSAnJztcblx0XHR0aGlzLmZpbGVOYW1lID0gJyc7XG5cdFx0dGhpcy5maWxlTmFtZUV4dCA9ICcnO1xuXHRcdHRoaXMuZmlsZVR5cGUgPSBGaWxlVHlwZS5Vbmtub3duO1xuXHRcdHRoaXMuZXN0aW1hdGVkU2l6ZSA9IDA7XG5cdFx0dGhpcy5mcmllbmRseVNpemUgPSAnJztcblx0XHR0aGlzLmlzSW5saW5lID0gZmFsc2U7XG5cdFx0dGhpcy5pc0xpbmtlZCA9IGZhbHNlO1xuXHRcdHRoaXMuaXNUaHVtYm5haWwgPSBmYWxzZTtcblx0XHR0aGlzLmNpZCA9ICcnO1xuXHRcdHRoaXMuY2lkV2l0aE91dFRhZ3MgPSAnJztcblx0XHR0aGlzLmNvbnRlbnRMb2NhdGlvbiA9ICcnO1xuXHRcdHRoaXMuZG93bmxvYWQgPSAnJztcblx0XHR0aGlzLmZvbGRlciA9ICcnO1xuXHRcdHRoaXMudWlkID0gJyc7XG5cdFx0dGhpcy5taW1lSW5kZXggPSAnJztcblx0XHR0aGlzLmZyYW1lZCA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtBamF4SnNvbkF0dGFjaG1lbnR9IGpzb25cblx0ICogQHJldHVybnMgez9BdHRhY2htZW50TW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgYXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50TW9kZWwoKTtcblx0XHRyZXR1cm4gYXR0YWNobWVudC5pbml0QnlKc29uKGpzb24pID8gYXR0YWNobWVudCA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbkF0dGFjaG1lbnR9IGpzb25cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpbml0QnlKc29uKGpzb24pIHtcblx0XHRsZXQgYlJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvQXR0YWNobWVudCcgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5taW1lVHlwZSA9IHRyaW0oKGpzb24uTWltZVR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0dGhpcy5maWxlTmFtZSA9IHRyaW0oanNvbi5GaWxlTmFtZSk7XG5cdFx0XHR0aGlzLmVzdGltYXRlZFNpemUgPSBwSW50KGpzb24uRXN0aW1hdGVkU2l6ZSk7XG5cdFx0XHR0aGlzLmlzSW5saW5lID0gISFqc29uLklzSW5saW5lO1xuXHRcdFx0dGhpcy5pc0xpbmtlZCA9ICEhanNvbi5Jc0xpbmtlZDtcblx0XHRcdHRoaXMuaXNUaHVtYm5haWwgPSAhIWpzb24uSXNUaHVtYm5haWw7XG5cdFx0XHR0aGlzLmNpZCA9IGpzb24uQ0lEO1xuXHRcdFx0dGhpcy5jb250ZW50TG9jYXRpb24gPSBqc29uLkNvbnRlbnRMb2NhdGlvbjtcblx0XHRcdHRoaXMuZG93bmxvYWQgPSBqc29uLkRvd25sb2FkO1xuXG5cdFx0XHR0aGlzLmZvbGRlciA9IGpzb24uRm9sZGVyO1xuXHRcdFx0dGhpcy51aWQgPSBqc29uLlVpZDtcblx0XHRcdHRoaXMubWltZUluZGV4ID0ganNvbi5NaW1lSW5kZXg7XG5cdFx0XHR0aGlzLmZyYW1lZCA9ICEhanNvbi5GcmFtZWQ7XG5cblx0XHRcdHRoaXMuZnJpZW5kbHlTaXplID0gZnJpZW5kbHlTaXplKHRoaXMuZXN0aW1hdGVkU2l6ZSk7XG5cdFx0XHR0aGlzLmNpZFdpdGhPdXRUYWdzID0gdGhpcy5jaWQucmVwbGFjZSgvXjwrLywgJycpLnJlcGxhY2UoLz4rJC8sICcnKTtcblxuXHRcdFx0dGhpcy5maWxlTmFtZUV4dCA9IGdldEZpbGVFeHRlbnNpb24odGhpcy5maWxlTmFtZSk7XG5cdFx0XHR0aGlzLmZpbGVUeXBlID0gc3RhdGljRmlsZVR5cGUodGhpcy5maWxlTmFtZUV4dCwgdGhpcy5taW1lVHlwZSk7XG5cblx0XHRcdGJSZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBiUmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNJbWFnZSgpIHtcblx0XHRyZXR1cm4gRmlsZVR5cGUuSW1hZ2UgPT09IHRoaXMuZmlsZVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc01wMygpIHtcblx0XHRyZXR1cm4gRmlsZVR5cGUuQXVkaW8gPT09IHRoaXMuZmlsZVR5cGUgJiYgJ21wMycgPT09IHRoaXMuZmlsZU5hbWVFeHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc09nZygpIHtcblx0XHRyZXR1cm4gRmlsZVR5cGUuQXVkaW8gPT09IHRoaXMuZmlsZVR5cGUgJiYgKCdvZ2EnID09PSB0aGlzLmZpbGVOYW1lRXh0IHx8ICdvZ2cnID09PSB0aGlzLmZpbGVOYW1lRXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzV2F2KCkge1xuXHRcdHJldHVybiBGaWxlVHlwZS5BdWRpbyA9PT0gdGhpcy5maWxlVHlwZSAmJiAnd2F2JyA9PT0gdGhpcy5maWxlTmFtZUV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGhhc1RodW1ibmFpbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5pc1RodW1ibmFpbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzVGV4dCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0RmlsZVR5cGUuVGV4dCA9PT0gdGhpcy5maWxlVHlwZSB8fFxuXHRcdFx0RmlsZVR5cGUuRW1sID09PSB0aGlzLmZpbGVUeXBlIHx8XG5cdFx0XHRGaWxlVHlwZS5DZXJ0aWZpY2F0ZSA9PT0gdGhpcy5maWxlVHlwZSB8fFxuXHRcdFx0RmlsZVR5cGUuSHRtbCA9PT0gdGhpcy5maWxlVHlwZSB8fFxuXHRcdFx0RmlsZVR5cGUuQ29kZSA9PT0gdGhpcy5maWxlVHlwZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1BkZigpIHtcblx0XHRyZXR1cm4gRmlsZVR5cGUuUGRmID09PSB0aGlzLmZpbGVUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNGcmFtZWQoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuZnJhbWVkICYmXG5cdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fICYmXG5cdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWQoKSAmJlxuXHRcdFx0ISh0aGlzLmlzUGRmKCkgJiYgYkFsbG93UGRmUHJldmlldykgJiZcblx0XHRcdCF0aGlzLmlzVGV4dCgpICYmXG5cdFx0XHQhdGhpcy5pc0ltYWdlKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzUHJldmlldygpIHtcblx0XHRyZXR1cm4gdGhpcy5pc0ltYWdlKCkgfHwgKHRoaXMuaXNQZGYoKSAmJiBiQWxsb3dQZGZQcmV2aWV3KSB8fCB0aGlzLmlzVGV4dCgpIHx8IHRoaXMuaXNGcmFtZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGhhc1ByZXBsYXkoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdChBdWRpby5zdXBwb3J0ZWRNcDMgJiYgdGhpcy5pc01wMygpKSB8fFxuXHRcdFx0KEF1ZGlvLnN1cHBvcnRlZE9nZyAmJiB0aGlzLmlzT2dnKCkpIHx8XG5cdFx0XHQoQXVkaW8uc3VwcG9ydGVkV2F2ICYmIHRoaXMuaXNXYXYoKSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rRG93bmxvYWQoKSB7XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnREb3dubG9hZCh0aGlzLmRvd25sb2FkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua1ByZXZpZXcoKSB7XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnRQcmV2aWV3KHRoaXMuZG93bmxvYWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rVGh1bWJuYWlsKCkge1xuXHRcdHJldHVybiB0aGlzLmhhc1RodW1ibmFpbCgpID8gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcodGhpcy5kb3dubG9hZCkgOiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua1RodW1ibmFpbFByZXZpZXdTdHlsZSgpIHtcblx0XHRjb25zdCBsaW5rID0gdGhpcy5saW5rVGh1bWJuYWlsKCk7XG5cdFx0cmV0dXJuICcnID09PSBsaW5rID8gJycgOiAnYmFja2dyb3VuZDp1cmwoJyArIGxpbmsgKyAnKSc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtGcmFtZWQoKSB7XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnRGcmFtZWQodGhpcy5kb3dubG9hZCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtQcmV2aWV3QXNQbGFpbigpIHtcblx0XHRyZXR1cm4gYXR0YWNobWVudFByZXZpZXdBc1BsYWluKHRoaXMuZG93bmxvYWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rUHJldmlld01haW4oKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0Y2FzZSB0aGlzLmlzSW1hZ2UoKTpcblx0XHRcdGNhc2UgdGhpcy5pc1BkZigpICYmIGJBbGxvd1BkZlByZXZpZXc6XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMubGlua1ByZXZpZXcoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIHRoaXMuaXNUZXh0KCk6XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMubGlua1ByZXZpZXdBc1BsYWluKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSB0aGlzLmlzRnJhbWVkKCk6XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMubGlua0ZyYW1lZCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZW5lcmF0ZVRyYW5zZmVyRG93bmxvYWRVcmwoKSB7XG5cdFx0bGV0IGxpbmsgPSB0aGlzLmxpbmtEb3dubG9hZCgpO1xuXHRcdGlmICgnaHR0cCcgIT09IGxpbmsuc3Vic3RyKDAsIDQpKSB7XG5cdFx0XHRsaW5rID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgbGluaztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5taW1lVHlwZSArICc6JyArIHRoaXMuZmlsZU5hbWUgKyAnOicgKyBsaW5rO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QXR0YWNobWVudE1vZGVsfSBhdHRhY2htZW50XG5cdCAqIEBwYXJhbSB7Kn0gZXZlbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRldmVudERyYWdTdGFydChhdHRhY2htZW50LCBldmVudCkge1xuXHRcdGNvbnN0IGxvY2FsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXHRcdGlmIChhdHRhY2htZW50ICYmIGxvY2FsRXZlbnQgJiYgbG9jYWxFdmVudC5kYXRhVHJhbnNmZXIgJiYgbG9jYWxFdmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSkge1xuXHRcdFx0bG9jYWxFdmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnRG93bmxvYWRVUkwnLCB0aGlzLmdlbmVyYXRlVHJhbnNmZXJEb3dubG9hZFVybCgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aWNvbkNsYXNzKCkge1xuXHRcdHJldHVybiBzdGF0aWNJY29uQ2xhc3ModGhpcy5maWxlVHlwZSlbMF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGljb25UZXh0KCkge1xuXHRcdHJldHVybiBzdGF0aWNJY29uQ2xhc3ModGhpcy5maWxlVHlwZSlbMV07XG5cdH1cbn1cblxuZXhwb3J0IHsgQXR0YWNobWVudE1vZGVsLCBBdHRhY2htZW50TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzKHRhcmdldCwga2V5KSkgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICB9XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwidmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICYmICFTeW1ib2wuc2hhbVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgY29kZVBvaW50QXQsIGF0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklORyA/IFMuY2hhckF0KHBvc2l0aW9uKSA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkcgPyBTLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogaW5kZXgsIGRvbmU6IGZhbHNlIH07XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogdGFyZ2V0W2luZGV4XSwgZG9uZTogZmFsc2UgfTtcbiAgcmV0dXJuIHsgdmFsdWU6IFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGRvbmU6IGZhbHNlIH07XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgJyArIChuYW1lID8gbmFtZSArICcgJyA6ICcnKSArICdpbnZvY2F0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB2YXIgcmV0dXJuTWV0aG9kID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXR1cm5NZXRob2QgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0dXJuTWV0aG9kLmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgcXVldWVNaWNyb3Rhc2sgPSBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgJiYgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yLnZhbHVlO1xuXG52YXIgZmx1c2gsIGhlYWQsIGxhc3QsIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFxdWV1ZU1pY3JvdGFzaykge1xuICBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChNdXRhdGlvbk9ic2VydmVyICYmICFJU19JT1MpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIHRoZW4gPSBwcm9taXNlLnRoZW47XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbi5jYWxsKHByb21pc2UsIGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1ZXVlTWljcm90YXNrIHx8IGZ1bmN0aW9uIChmbikge1xuICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gIGlmICghaGVhZCkge1xuICAgIGhlYWQgPSB0YXNrO1xuICAgIG5vdGlmeSgpO1xuICB9IGxhc3QgPSB0YXNrO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChNQVRDSCwgbmF0aXZlTWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgbWF0Y2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgIT09IHVuZGVmaW5lZCA/IG1hdGNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgUFJFRkVSUkVEX1NUUklORykge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaW5wdXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdICsgbWF0Y2hbMV07XG59IGVsc2UgaWYgKHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDaGVja2JveCB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoQ2hlY2tib3hDb21wb25lbnQsICdDaGVja2JveENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCB7IGh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnLCBodG1sRWRpdG9yTGFuZ3NNYXAgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBFdmVudEtleUNvZGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgSHRtbEVkaXRvciB7XG5cdGVkaXRvcjtcblx0Ymx1clRpbWVyID0gMDtcblxuXHRfX3Jlc2l6YWJsZSA9IGZhbHNlO1xuXHRfX2luaXRlZCA9IGZhbHNlO1xuXG5cdG9uQmx1ciA9IG51bGw7XG5cdG9uUmVhZHkgPSBudWxsO1xuXHRvbk1vZGVDaGFuZ2UgPSBudWxsO1xuXG5cdGVsZW1lbnQ7XG5cdCRlbGVtZW50O1xuXG5cdHJlc2l6ZTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQmx1clxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZWFkeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25Nb2RlQ2hhbmdlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbGVtZW50LCBvbkJsdXIgPSBudWxsLCBvblJlYWR5ID0gbnVsbCwgb25Nb2RlQ2hhbmdlID0gbnVsbCkge1xuXHRcdHRoaXMub25CbHVyID0gb25CbHVyO1xuXHRcdHRoaXMub25SZWFkeSA9IG9uUmVhZHk7XG5cdFx0dGhpcy5vbk1vZGVDaGFuZ2UgPSBvbk1vZGVDaGFuZ2U7XG5cblx0XHR0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXHRcdHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuXG5cdFx0dGhpcy5yZXNpemUgPSBfLnRocm90dGxlKF8uYmluZCh0aGlzLnJlc2l6ZUVkaXRvciwgdGhpcyksIDEwMCk7XG5cblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXG5cdHJ1bk9uQmx1cigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHRoaXMub25CbHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0Ymx1clRyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHRcdHRoaXMuYmx1clRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJ1bk9uQmx1cigpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0Zm9jdXNUcmlnZ2VyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNIdG1sKCkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRvciA/ICd3eXNpd3lnJyA9PT0gdGhpcy5lZGl0b3IubW9kZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXJDYWNoZWRTaWduYXR1cmUoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRjbGVhckNhY2hlOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZVxuXHQgKiBAcGFyYW0ge2Jvb2x9IGh0bWxcblx0ICogQHBhcmFtIHtib29sfSBpbnNlcnRCZWZvcmVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzZXRTaWduYXR1cmUoc2lnbmF0dXJlLCBodG1sLCBpbnNlcnRCZWZvcmUgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoJ2luc2VydFNpZ25hdHVyZScsIHtcblx0XHRcdFx0aXNIdG1sOiBodG1sLFxuXHRcdFx0XHRpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcblx0XHRcdFx0c2lnbmF0dXJlOiBzaWduYXR1cmVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNoZWNrRGlydHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gdGhpcy5lZGl0b3IuY2hlY2tEaXJ0eSgpIDogZmFsc2U7XG5cdH1cblxuXHRyZXNldERpcnR5KCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5lZGl0b3IucmVzZXREaXJ0eSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwSXNIdG1sID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldERhdGEod3JhcElzSHRtbCA9IGZhbHNlKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCdwbGFpbicgPT09IHRoaXMuZWRpdG9yLm1vZGUgJiYgdGhpcy5lZGl0b3IucGx1Z2lucy5wbGFpbiAmJiB0aGlzLmVkaXRvci5fX3BsYWluKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5lZGl0b3IuX19wbGFpbi5nZXRSYXdEYXRhKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gd3JhcElzSHRtbFxuXHRcdFx0XHRcdFx0PyAnPGRpdiBkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcj1cInRydWVcIiBzdHlsZT1cImZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxM3B4O1wiPicgK1xuXHRcdFx0XHRcdFx0ICB0aGlzLmVkaXRvci5nZXREYXRhKCkgK1xuXHRcdFx0XHRcdFx0ICAnPC9kaXY+J1xuXHRcdFx0XHRcdFx0OiB0aGlzLmVkaXRvci5nZXREYXRhKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YVdpdGhIdG1sTWFyayh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gKHRoaXMuaXNIdG1sKCkgPyAnOkhUTUw6JyA6ICcnKSArIHRoaXMuZ2V0RGF0YSh3cmFwSXNIdG1sKTtcblx0fVxuXG5cdG1vZGVUb2dnbGUocGxhaW4sIHJlc2l6ZSkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHBsYWluKSB7XG5cdFx0XHRcdFx0aWYgKCdwbGFpbicgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnNldE1vZGUoJ3d5c2l3eWcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgncGxhaW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAocmVzaXplKSB7XG5cdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2V0SHRtbE9yUGxhaW4odGV4dCwgZm9jdXMpIHtcblx0XHRpZiAoJzpIVE1MOicgPT09IHRleHQuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHR0aGlzLnNldEh0bWwodGV4dC5zdWJzdHIoNiksIGZvY3VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRQbGFpbih0ZXh0LCBmb2N1cyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0SHRtbChodG1sLCBmb2N1cykge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9faW5pdGVkKSB7XG5cdFx0XHR0aGlzLmNsZWFyQ2FjaGVkU2lnbmF0dXJlKCk7XG5cblx0XHRcdHRoaXMubW9kZVRvZ2dsZSh0cnVlKTtcblxuXHRcdFx0aHRtbCA9IGh0bWwucmVwbGFjZSgvPHBbXj5dKj48XFwvcD4vZ2ksICcnKTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0RGF0YShodG1sKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdFx0aWYgKGZvY3VzKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXBsYWNlSHRtbChmaW5kLCByZXBsYWNlSHRtbCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9faW5pdGVkICYmICd3eXNpd3lnJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0RGF0YSh0aGlzLmVkaXRvci5nZXREYXRhKCkucmVwbGFjZShmaW5kLCByZXBsYWNlSHRtbCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFBsYWluKHBsYWluLCBmb2N1cykge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9faW5pdGVkKSB7XG5cdFx0XHR0aGlzLmNsZWFyQ2FjaGVkU2lnbmF0dXJlKCk7XG5cblx0XHRcdHRoaXMubW9kZVRvZ2dsZShmYWxzZSk7XG5cdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuX19wbGFpbi5zZXRSYXdEYXRhKHBsYWluKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0RGF0YShwbGFpbik7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZvY3VzKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdGlmICh0aGlzLmVsZW1lbnQgJiYgIXRoaXMuZWRpdG9yKSB7XG5cdFx0XHRjb25zdCBpbml0RnVuYyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gaHRtbEVkaXRvckRlZmF1bHRDb25maWcsXG5cdFx0XHRcdFx0bGFuZ3VhZ2UgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2UnKSxcblx0XHRcdFx0XHRhbGxvd1NvdXJjZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvclNvdXJjZUJ1dHRvbicpLFxuXHRcdFx0XHRcdGJpdGkgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0h0bWxFZGl0b3JCaXRpQnV0dG9ucycpO1xuXG5cdFx0XHRcdGlmICgoYWxsb3dTb3VyY2UgfHwgIWJpdGkpICYmICFjb25maWcudG9vbGJhckdyb3Vwcy5fX2NmZ0luaXRlZCkge1xuXHRcdFx0XHRcdGNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGlmIChhbGxvd1NvdXJjZSkge1xuXHRcdFx0XHRcdFx0Y29uZmlnLnJlbW92ZUJ1dHRvbnMgPSBjb25maWcucmVtb3ZlQnV0dG9ucy5yZXBsYWNlKCcsU291cmNlJywgJycpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghYml0aSkge1xuXHRcdFx0XHRcdFx0Y29uZmlnLnJlbW92ZVBsdWdpbnMgKz0gKGNvbmZpZy5yZW1vdmVQbHVnaW5zID8gJywnIDogJycpICsgJ2JpZGknO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbmZpZy5lbnRlck1vZGUgPSB3aW5kb3cuQ0tFRElUT1IuRU5URVJfQlI7XG5cdFx0XHRcdGNvbmZpZy5zaGlmdEVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9QO1xuXG5cdFx0XHRcdGNvbmZpZy5sYW5ndWFnZSA9IGh0bWxFZGl0b3JMYW5nc01hcFsobGFuZ3VhZ2UgfHwgJ2VuJykudG9Mb3dlckNhc2UoKV0gfHwgJ2VuJztcblx0XHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUi5lbnYpIHtcblx0XHRcdFx0XHR3aW5kb3cuQ0tFRElUT1IuZW52LmlzQ29tcGF0aWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvciA9IHdpbmRvdy5DS0VESVRPUi5hcHBlbmRUbyh0aGlzLmVsZW1lbnQsIGNvbmZpZyk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2tleScsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5kYXRhICYmIEV2ZW50S2V5Q29kZS5UYWIgPT09IGV2ZW50LmRhdGEua2V5Q29kZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignYmx1cicsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmJsdXJUcmlnZ2VyKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdtb2RlJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0XHRpZiAodGhpcy5vbk1vZGVDaGFuZ2UpIHtcblx0XHRcdFx0XHRcdHRoaXMub25Nb2RlQ2hhbmdlKCdwbGFpbicgIT09IHRoaXMuZWRpdG9yLm1vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2ZvY3VzJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNUcmlnZ2VyKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmICh3aW5kb3cuRmlsZVJlYWRlcikge1xuXHRcdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdkcm9wJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoMCA8IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmdldEZpbGVzQ291bnQoKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmaWxlID0gZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZSgwKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZpbGUgJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuaWQgJiYgZmlsZS50eXBlICYmIGZpbGUudHlwZS5tYXRjaCgvXmltYWdlL2kpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaWQgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdGltYWdlSWQgPSBgW2ltZz0ke2lkfV1gLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVhZGVyID0gbmV3IHdpbmRvdy5GaWxlUmVhZGVyKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlYWRlci5yZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXBsYWNlSHRtbChpbWFnZUlkLCBgPGltZyBzcmM9XCIke3JlYWRlci5yZXN1bHR9XCIgLz5gKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L2h0bWwnLCBpbWFnZUlkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2luc3RhbmNlUmVhZHknLCAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgnY3V0Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgnY29weScpO1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0oJ3Bhc3RlJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5fX3Jlc2l6YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fX2luaXRlZCA9IHRydWU7XG5cblx0XHRcdFx0XHR0aGlzLnJlc2l6ZSgpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMub25SZWFkeSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vblJlYWR5KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdGlmICh3aW5kb3cuQ0tFRElUT1IpIHtcblx0XHRcdFx0aW5pdEZ1bmMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvdy5fX2luaXRFZGl0b3IgPSBpbml0RnVuYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yLmZvY3VzKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0aGFzRm9jdXMoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gISF0aGlzLmVkaXRvci5mb2N1c01hbmFnZXIuaGFzRm9jdXM7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ymx1cigpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5ibHVyKHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHJlc2l6ZUVkaXRvcigpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5fX3Jlc2l6YWJsZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IucmVzaXplKHRoaXMuJGVsZW1lbnQud2lkdGgoKSwgdGhpcy4kZWxlbWVudC5pbm5lckhlaWdodCgpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRzZXRSZWFkT25seSh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0UmVhZE9ubHkoISF2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXIoZm9jdXMpIHtcblx0XHR0aGlzLnNldEh0bWwoJycsIGZvY3VzKTtcblx0fVxufVxuXG5leHBvcnQgeyBIdG1sRWRpdG9yLCBIdG1sRWRpdG9yIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbGFzdC1pbmRleC1vZlwiKTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5cbmNvbnN0IE9wZW50aXAgPSB3aW5kb3cuT3BlbnRpcCB8fCB7fTtcblxuT3BlbnRpcC5zdHlsZXMgPSBPcGVudGlwLnN0eWxlcyB8fCB7fTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3AgPSB7XG5cdCdleHRlbmRzJzogJ3N0YW5kYXJkJyxcblxuXHQnZml4ZWQnOiB0cnVlLFxuXHQndGFyZ2V0JzogdHJ1ZSxcblxuXHQnZGVsYXknOiAwLjIsXG5cdCdoaWRlRGVsYXknOiAwLFxuXG5cdCdoaWRlRWZmZWN0JzogJ2ZhZGUnLFxuXHQnaGlkZUVmZmVjdER1cmF0aW9uJzogMC4yLFxuXG5cdCdzaG93RWZmZWN0JzogJ2ZhZGUnLFxuXHQnc2hvd0VmZmVjdER1cmF0aW9uJzogMC4yLFxuXG5cdCdzaG93T24nOiAnbW91c2VvdmVyIGNsaWNrJyxcblx0J3JlbW92ZUVsZW1lbnRzT25IaWRlJzogdHJ1ZSxcblxuXHQnYmFja2dyb3VuZCc6ICcjZmZmJyxcblx0J3NoYWRvdyc6IGZhbHNlLFxuXG5cdCdib3JkZXJDb2xvcic6ICcjOTk5Jyxcblx0J2JvcmRlclJhZGl1cyc6IDIsXG5cdCdib3JkZXJXaWR0aCc6IDFcbn07XG5cbk9wZW50aXAuc3R5bGVzLnJhaW5sb29wVGlwID0ge1xuXHQnZXh0ZW5kcyc6ICdyYWlubG9vcCcsXG5cdCdkZWxheSc6IDAuNCxcblx0J2dyb3VwJzogJ3JhaW5sb29wVGlwcydcbn07XG5cbk9wZW50aXAuc3R5bGVzLnJhaW5sb29wRXJyb3JUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2NsYXNzTmFtZSc6ICdyYWlubG9vcEVycm9yVGlwJ1xufTtcblxuZXhwb3J0IHsgT3BlbnRpcCwgT3BlbnRpcCBhcyBkZWZhdWx0IH07XG4iLCIvKiFcbiAqIFBpa2FkYXlcbiAqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNCBEYXZpZCBCdXNoZWxsIHwgQlNEICYgTUlUIGxpY2Vuc2UgfCBodHRwczovL2dpdGh1Yi5jb20vUGlrYWRheS9QaWthZGF5XG4gKi9cblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KVxue1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBtb21lbnQ7XG4gICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBDb21tb25KUyBtb2R1bGVcbiAgICAgICAgLy8gTG9hZCBtb21lbnQuanMgYXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeVxuICAgICAgICB0cnkgeyBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTsgfSBjYXRjaCAoZSkge31cbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KG1vbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgICAgICBkZWZpbmUoZnVuY3Rpb24gKHJlcSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gTG9hZCBtb21lbnQuanMgYXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeVxuICAgICAgICAgICAgdmFyIGlkID0gJ21vbWVudCc7XG4gICAgICAgICAgICB0cnkgeyBtb21lbnQgPSByZXEoaWQpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkobW9tZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5QaWthZGF5ID0gZmFjdG9yeShyb290Lm1vbWVudCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KVxue1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIGZlYXR1cmUgZGV0ZWN0aW9uIGFuZCBoZWxwZXIgZnVuY3Rpb25zXG4gICAgICovXG4gICAgdmFyIGhhc01vbWVudCA9IHR5cGVvZiBtb21lbnQgPT09ICdmdW5jdGlvbicsXG5cbiAgICBoYXNFdmVudExpc3RlbmVycyA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIsXG5cbiAgICBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCxcblxuICAgIHN0byA9IHdpbmRvdy5zZXRUaW1lb3V0LFxuXG4gICAgYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5hdHRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGUsIGNhbGxiYWNrLCBjYXB0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGUsIGNhbGxiYWNrLCAhIWNhcHR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwuZGV0YWNoRXZlbnQoJ29uJyArIGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB0cmltID0gZnVuY3Rpb24oc3RyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCcnKTtcbiAgICB9LFxuXG4gICAgaGFzQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pXG4gICAge1xuICAgICAgICByZXR1cm4gKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbiArICcgJykgIT09IC0xO1xuICAgIH0sXG5cbiAgICBhZGRDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIGlmICghaGFzQ2xhc3MoZWwsIGNuKSkge1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gKGVsLmNsYXNzTmFtZSA9PT0gJycpID8gY24gOiBlbC5jbGFzc05hbWUgKyAnICcgKyBjbjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIGVsLmNsYXNzTmFtZSA9IHRyaW0oKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykucmVwbGFjZSgnICcgKyBjbiArICcgJywgJyAnKSk7XG4gICAgfSxcblxuICAgIGlzQXJyYXkgPSBmdW5jdGlvbihvYmopXG4gICAge1xuICAgICAgICByZXR1cm4gKC9BcnJheS8pLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpO1xuICAgIH0sXG5cbiAgICBpc0RhdGUgPSBmdW5jdGlvbihvYmopXG4gICAge1xuICAgICAgICByZXR1cm4gKC9EYXRlLykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgJiYgIWlzTmFOKG9iai5nZXRUaW1lKCkpO1xuICAgIH0sXG5cbiAgICBpc1dlZWtlbmQgPSBmdW5jdGlvbihkYXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2O1xuICAgIH0sXG5cbiAgICBpc0xlYXBZZWFyID0gZnVuY3Rpb24oeWVhcilcbiAgICB7XG4gICAgICAgIC8vIHNvbHV0aW9uIGJ5IE1hdHRpIFZpcmtrdW5lbjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDg4MTk1MVxuICAgICAgICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFszMSwgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb250aF07XG4gICAgfSxcblxuICAgIHNldFRvU3RhcnRPZkRheSA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSBkYXRlLnNldEhvdXJzKDAsMCwwLDApO1xuICAgIH0sXG5cbiAgICBjb21wYXJlRGF0ZXMgPSBmdW5jdGlvbihhLGIpXG4gICAge1xuICAgICAgICAvLyB3ZWFrIGRhdGUgY29tcGFyaXNvbiAodXNlIHNldFRvU3RhcnRPZkRheShkYXRlKSB0byBlbnN1cmUgY29ycmVjdCByZXN1bHQpXG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gICAgfSxcblxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKHRvLCBmcm9tLCBvdmVyd3JpdGUpXG4gICAge1xuICAgICAgICB2YXIgcHJvcCwgaGFzUHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGZyb20pIHtcbiAgICAgICAgICAgIGhhc1Byb3AgPSB0b1twcm9wXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIGZyb21bcHJvcF0gPT09ICdvYmplY3QnICYmIGZyb21bcHJvcF0gIT09IG51bGwgJiYgZnJvbVtwcm9wXS5ub2RlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGF0ZShmcm9tW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IG5ldyBEYXRlKGZyb21bcHJvcF0uZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZnJvbVtwcm9wXS5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZXh0ZW5kKHt9LCBmcm9tW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcndyaXRlIHx8ICFoYXNQcm9wKSB7XG4gICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9LFxuXG4gICAgZmlyZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2ZW50TmFtZSwgZGF0YSlcbiAgICB7XG4gICAgICAgIHZhciBldjtcblxuICAgICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICAgICAgICAgIGV2LmluaXRFdmVudChldmVudE5hbWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgICAgICAgICBldiA9IGV4dGVuZChldiwgZGF0YSk7XG4gICAgICAgICAgICBlbC5maXJlRXZlbnQoJ29uJyArIGV2ZW50TmFtZSwgZXYpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFkanVzdENhbGVuZGFyID0gZnVuY3Rpb24oY2FsZW5kYXIpIHtcbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoIDwgMCkge1xuICAgICAgICAgICAgY2FsZW5kYXIueWVhciAtPSBNYXRoLmNlaWwoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoICs9IDEyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhci5tb250aCA+IDExKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyICs9IE1hdGguZmxvb3IoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoIC09IDEyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxlbmRhcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdHMgYW5kIGxvY2FsaXNhdGlvblxuICAgICAqL1xuICAgIGRlZmF1bHRzID0ge1xuXG4gICAgICAgIC8vIGJpbmQgdGhlIHBpY2tlciB0byBhIGZvcm0gZmllbGRcbiAgICAgICAgZmllbGQ6IG51bGwsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzaG93L2hpZGUgdGhlIHBpY2tlciBvbiBgZmllbGRgIGZvY3VzIChkZWZhdWx0IGB0cnVlYCBpZiBgZmllbGRgIGlzIHNldClcbiAgICAgICAgYm91bmQ6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZmllbGQgd2l0aCBhbiBhcmlhIGFzc2lzdGFuY2UgdGVrc3QgKG9ubHkgYXBwbGllZCB3aGVuIGBib3VuZGAgaXMgc2V0KVxuICAgICAgICBhcmlhTGFiZWw6ICdVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUnLFxuXG4gICAgICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBkYXRlcGlja2VyLCByZWxhdGl2ZSB0byB0aGUgZmllbGQgKGRlZmF1bHQgdG8gYm90dG9tICYgbGVmdClcbiAgICAgICAgLy8gKCdib3R0b20nICYgJ2xlZnQnIGtleXdvcmRzIGFyZSBub3QgdXNlZCwgJ3RvcCcgJiAncmlnaHQnIGFyZSBtb2RpZmllciBvbiB0aGUgYm90dG9tL2xlZnQgcG9zaXRpb24pXG4gICAgICAgIHBvc2l0aW9uOiAnYm90dG9tIGxlZnQnLFxuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZml0IGluIHRoZSB2aWV3cG9ydCBldmVuIGlmIGl0IG1lYW5zIHJlcG9zaXRpb25pbmcgZnJvbSB0aGUgcG9zaXRpb24gb3B0aW9uXG4gICAgICAgIHJlcG9zaXRpb246IHRydWUsXG5cbiAgICAgICAgLy8gdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdCBmb3IgYC50b1N0cmluZygpYCBhbmQgYGZpZWxkYCB2YWx1ZVxuICAgICAgICBmb3JtYXQ6ICdZWVlZLU1NLUREJyxcblxuICAgICAgICAvLyB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gd2hpY2ggZ2V0cyBwYXNzZWQgYSBjdXJyZW50IGRhdGUgb2JqZWN0IGFuZCBmb3JtYXRcbiAgICAgICAgLy8gYW5kIHJldHVybnMgYSBzdHJpbmdcbiAgICAgICAgdG9TdHJpbmc6IG51bGwsXG5cbiAgICAgICAgLy8gdXNlZCB0byBjcmVhdGUgZGF0ZSBvYmplY3QgZnJvbSBjdXJyZW50IGlucHV0IHN0cmluZ1xuICAgICAgICBwYXJzZTogbnVsbCxcblxuICAgICAgICAvLyB0aGUgaW5pdGlhbCBkYXRlIHRvIHZpZXcgd2hlbiBmaXJzdCBvcGVuZWRcbiAgICAgICAgZGVmYXVsdERhdGU6IG51bGwsXG5cbiAgICAgICAgLy8gbWFrZSB0aGUgYGRlZmF1bHREYXRlYCB0aGUgaW5pdGlhbCBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICBzZXREZWZhdWx0RGF0ZTogZmFsc2UsXG5cbiAgICAgICAgLy8gZmlyc3QgZGF5IG9mIHdlZWsgKDA6IFN1bmRheSwgMTogTW9uZGF5IGV0YylcbiAgICAgICAgZmlyc3REYXk6IDAsXG5cbiAgICAgICAgLy8gdGhlIGRlZmF1bHQgZmxhZyBmb3IgbW9tZW50J3Mgc3RyaWN0IGRhdGUgcGFyc2luZ1xuICAgICAgICBmb3JtYXRTdHJpY3Q6IGZhbHNlLFxuXG4gICAgICAgIC8vIHRoZSBtaW5pbXVtL2VhcmxpZXN0IGRhdGUgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgbWluRGF0ZTogbnVsbCxcbiAgICAgICAgLy8gdGhlIG1heGltdW0vbGF0ZXN0IGRhdGUgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgbWF4RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBudW1iZXIgb2YgeWVhcnMgZWl0aGVyIHNpZGUsIG9yIGFycmF5IG9mIHVwcGVyL2xvd2VyIHJhbmdlXG4gICAgICAgIHllYXJSYW5nZTogMTAsXG5cbiAgICAgICAgLy8gc2hvdyB3ZWVrIG51bWJlcnMgYXQgaGVhZCBvZiByb3dcbiAgICAgICAgc2hvd1dlZWtOdW1iZXI6IGZhbHNlLFxuXG4gICAgICAgIC8vIFdlZWsgcGlja2VyIG1vZGVcbiAgICAgICAgcGlja1dob2xlV2VlazogZmFsc2UsXG5cbiAgICAgICAgLy8gdXNlZCBpbnRlcm5hbGx5IChkb24ndCBjb25maWcgb3V0c2lkZSlcbiAgICAgICAgbWluWWVhcjogMCxcbiAgICAgICAgbWF4WWVhcjogOTk5OSxcbiAgICAgICAgbWluTW9udGg6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4TW9udGg6IHVuZGVmaW5lZCxcblxuICAgICAgICBzdGFydFJhbmdlOiBudWxsLFxuICAgICAgICBlbmRSYW5nZTogbnVsbCxcblxuICAgICAgICBpc1JUTDogZmFsc2UsXG5cbiAgICAgICAgLy8gQWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgeWVhciBpbiB0aGUgY2FsZW5kYXIgdGl0bGVcbiAgICAgICAgeWVhclN1ZmZpeDogJycsXG5cbiAgICAgICAgLy8gUmVuZGVyIHRoZSBtb250aCBhZnRlciB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICBzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLFxuXG4gICAgICAgIC8vIFJlbmRlciBkYXlzIG9mIHRoZSBjYWxlbmRhciBncmlkIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBmYWxzZSxcblxuICAgICAgICAvLyBBbGxvd3MgdXNlciB0byBzZWxlY3QgZGF5cyB0aGF0IGZhbGwgaW4gdGhlIG5leHQgb3IgcHJldmlvdXMgbW9udGhcbiAgICAgICAgZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBmYWxzZSxcblxuICAgICAgICAvLyBob3cgbWFueSBtb250aHMgYXJlIHZpc2libGVcbiAgICAgICAgbnVtYmVyT2ZNb250aHM6IDEsXG5cbiAgICAgICAgLy8gd2hlbiBudW1iZXJPZk1vbnRocyBpcyB1c2VkLCB0aGlzIHdpbGwgaGVscCB5b3UgdG8gY2hvb3NlIHdoZXJlIHRoZSBtYWluIGNhbGVuZGFyIHdpbGwgYmUgKGRlZmF1bHQgYGxlZnRgLCBjYW4gYmUgc2V0IHRvIGByaWdodGApXG4gICAgICAgIC8vIG9ubHkgdXNlZCBmb3IgdGhlIGZpcnN0IGRpc3BsYXkgb3Igd2hlbiBhIHNlbGVjdGVkIGRhdGUgaXMgbm90IHZpc2libGVcbiAgICAgICAgbWFpbkNhbGVuZGFyOiAnbGVmdCcsXG5cbiAgICAgICAgLy8gU3BlY2lmeSBhIERPTSBlbGVtZW50IHRvIHJlbmRlciB0aGUgY2FsZW5kYXIgaW5cbiAgICAgICAgY29udGFpbmVyOiB1bmRlZmluZWQsXG5cbiAgICAgICAgLy8gQmx1ciBmaWVsZCB3aGVuIGRhdGUgaXMgc2VsZWN0ZWRcbiAgICAgICAgYmx1ckZpZWxkT25TZWxlY3QgOiB0cnVlLFxuXG4gICAgICAgIC8vIGludGVybmF0aW9uYWxpemF0aW9uXG4gICAgICAgIGkxOG46IHtcbiAgICAgICAgICAgIHByZXZpb3VzTW9udGggOiAnUHJldmlvdXMgTW9udGgnLFxuICAgICAgICAgICAgbmV4dE1vbnRoICAgICA6ICdOZXh0IE1vbnRoJyxcbiAgICAgICAgICAgIG1vbnRocyAgICAgICAgOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG4gICAgICAgICAgICB3ZWVrZGF5cyAgICAgIDogWydTdW5kYXknLCdNb25kYXknLCdUdWVzZGF5JywnV2VkbmVzZGF5JywnVGh1cnNkYXknLCdGcmlkYXknLCdTYXR1cmRheSddLFxuICAgICAgICAgICAgd2Vla2RheXNTaG9ydCA6IFsnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J11cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBUaGVtZSBDbGFzc25hbWVcbiAgICAgICAgdGhlbWU6IG51bGwsXG5cbiAgICAgICAgLy8gZXZlbnRzIGFycmF5XG4gICAgICAgIGV2ZW50czogW10sXG5cbiAgICAgICAgLy8gY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgb25TZWxlY3Q6IG51bGwsXG4gICAgICAgIG9uT3BlbjogbnVsbCxcbiAgICAgICAgb25DbG9zZTogbnVsbCxcbiAgICAgICAgb25EcmF3OiBudWxsLFxuXG4gICAgICAgIC8vIEVuYWJsZSBrZXlib2FyZCBpbnB1dFxuICAgICAgICBrZXlib2FyZElucHV0OiB0cnVlXG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogdGVtcGxhdGluZyBmdW5jdGlvbnMgdG8gYWJzdHJhY3QgSFRNTCByZW5kZXJpbmdcbiAgICAgKi9cbiAgICByZW5kZXJEYXlOYW1lID0gZnVuY3Rpb24ob3B0cywgZGF5LCBhYmJyKVxuICAgIHtcbiAgICAgICAgZGF5ICs9IG9wdHMuZmlyc3REYXk7XG4gICAgICAgIHdoaWxlIChkYXkgPj0gNykge1xuICAgICAgICAgICAgZGF5IC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFiYnIgPyBvcHRzLmkxOG4ud2Vla2RheXNTaG9ydFtkYXldIDogb3B0cy5pMThuLndlZWtkYXlzW2RheV07XG4gICAgfSxcblxuICAgIHJlbmRlckRheSA9IGZ1bmN0aW9uKG9wdHMpXG4gICAge1xuICAgICAgICB2YXIgYXJyID0gW107XG4gICAgICAgIHZhciBhcmlhU2VsZWN0ZWQgPSAnZmFsc2UnO1xuICAgICAgICBpZiAob3B0cy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLW91dHNpZGUtY3VycmVudC1tb250aCcpO1xuXG4gICAgICAgICAgICAgICAgaWYoIW9wdHMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3Rpb24tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICc8dGQgY2xhc3M9XCJpcy1lbXB0eVwiPjwvdGQ+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc1RvZGF5KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtdG9kYXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIGFyaWFTZWxlY3RlZCA9ICd0cnVlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5oYXNFdmVudCkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2hhcy1ldmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzSW5SYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLWlucmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc1N0YXJ0UmFuZ2UpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zdGFydHJhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNFbmRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLWVuZHJhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICc8dGQgZGF0YS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCIgY2xhc3M9XCInICsgYXJyLmpvaW4oJyAnKSArICdcIiBhcmlhLXNlbGVjdGVkPVwiJyArIGFyaWFTZWxlY3RlZCArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJwaWthLWJ1dHRvbiBwaWthLWRheVwiIHR5cGU9XCJidXR0b25cIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtcGlrYS15ZWFyPVwiJyArIG9wdHMueWVhciArICdcIiBkYXRhLXBpa2EtbW9udGg9XCInICsgb3B0cy5tb250aCArICdcIiBkYXRhLXBpa2EtZGF5PVwiJyArIG9wdHMuZGF5ICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5kYXkgK1xuICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJXZWVrID0gZnVuY3Rpb24gKGQsIG0sIHkpIHtcbiAgICAgICAgLy8gTGlmdGVkIGZyb20gaHR0cDovL2phdmFzY3JpcHQuYWJvdXQuY29tL2xpYnJhcnkvYmx3ZWVreWVhci5odG0sIGxpZ2h0bHkgbW9kaWZpZWQuXG4gICAgICAgIHZhciBvbmVqYW4gPSBuZXcgRGF0ZSh5LCAwLCAxKSxcbiAgICAgICAgICAgIHdlZWtOdW0gPSBNYXRoLmNlaWwoKCgobmV3IERhdGUoeSwgbSwgZCkgLSBvbmVqYW4pIC8gODY0MDAwMDApICsgb25lamFuLmdldERheSgpKzEpLzcpO1xuICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cInBpa2Etd2Vla1wiPicgKyB3ZWVrTnVtICsgJzwvdGQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyUm93ID0gZnVuY3Rpb24oZGF5cywgaXNSVEwsIHBpY2tXaG9sZVdlZWssIGlzUm93U2VsZWN0ZWQpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0ciBjbGFzcz1cInBpa2Etcm93JyArIChwaWNrV2hvbGVXZWVrID8gJyBwaWNrLXdob2xlLXdlZWsnIDogJycpICsgKGlzUm93U2VsZWN0ZWQgPyAnIGlzLXNlbGVjdGVkJyA6ICcnKSArICdcIj4nICsgKGlzUlRMID8gZGF5cy5yZXZlcnNlKCkgOiBkYXlzKS5qb2luKCcnKSArICc8L3RyPic7XG4gICAgfSxcblxuICAgIHJlbmRlckJvZHkgPSBmdW5jdGlvbihyb3dzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGJvZHk+JyArIHJvd3Muam9pbignJykgKyAnPC90Ym9keT4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJIZWFkID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBpLCBhcnIgPSBbXTtcbiAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGg+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPHRoIHNjb3BlPVwiY29sXCI+PGFiYnIgdGl0bGU9XCInICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpKSArICdcIj4nICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpLCB0cnVlKSArICc8L2FiYnI+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0aGVhZD48dHI+JyArIChvcHRzLmlzUlRMID8gYXJyLnJldmVyc2UoKSA6IGFycikuam9pbignJykgKyAnPC90cj48L3RoZWFkPic7XG4gICAgfSxcblxuICAgIHJlbmRlclRpdGxlID0gZnVuY3Rpb24oaW5zdGFuY2UsIGMsIHllYXIsIG1vbnRoLCByZWZZZWFyLCByYW5kSWQpXG4gICAge1xuICAgICAgICB2YXIgaSwgaiwgYXJyLFxuICAgICAgICAgICAgb3B0cyA9IGluc3RhbmNlLl9vLFxuICAgICAgICAgICAgaXNNaW5ZZWFyID0geWVhciA9PT0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgaXNNYXhZZWFyID0geWVhciA9PT0gb3B0cy5tYXhZZWFyLFxuICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IGlkPVwiJyArIHJhbmRJZCArICdcIiBjbGFzcz1cInBpa2EtdGl0bGVcIiByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPicsXG4gICAgICAgICAgICBtb250aEh0bWwsXG4gICAgICAgICAgICB5ZWFySHRtbCxcbiAgICAgICAgICAgIHByZXYgPSB0cnVlLFxuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG5cbiAgICAgICAgZm9yIChhcnIgPSBbXSwgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPG9wdGlvbiB2YWx1ZT1cIicgKyAoeWVhciA9PT0gcmVmWWVhciA/IGkgLSBjIDogMTIgKyBpIC0gYykgKyAnXCInICtcbiAgICAgICAgICAgICAgICAoaSA9PT0gbW9udGggPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArXG4gICAgICAgICAgICAgICAgKChpc01pblllYXIgJiYgaSA8IG9wdHMubWluTW9udGgpIHx8IChpc01heFllYXIgJiYgaSA+IG9wdHMubWF4TW9udGgpID8gJ2Rpc2FibGVkPVwiZGlzYWJsZWRcIicgOiAnJykgKyAnPicgK1xuICAgICAgICAgICAgICAgIG9wdHMuaTE4bi5tb250aHNbaV0gKyAnPC9vcHRpb24+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBtb250aEh0bWwgPSAnPGRpdiBjbGFzcz1cInBpa2EtbGFiZWxcIj4nICsgb3B0cy5pMThuLm1vbnRoc1ttb250aF0gKyAnPHNlbGVjdCBjbGFzcz1cInBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LW1vbnRoXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAoaXNBcnJheShvcHRzLnllYXJSYW5nZSkpIHtcbiAgICAgICAgICAgIGkgPSBvcHRzLnllYXJSYW5nZVswXTtcbiAgICAgICAgICAgIGogPSBvcHRzLnllYXJSYW5nZVsxXSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpID0geWVhciAtIG9wdHMueWVhclJhbmdlO1xuICAgICAgICAgICAgaiA9IDEgKyB5ZWFyICsgb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGFyciA9IFtdOyBpIDwgaiAmJiBpIDw9IG9wdHMubWF4WWVhcjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA+PSBvcHRzLm1pblllYXIpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiJyArIChpID09PSB5ZWFyID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInOiAnJykgKyAnPicgKyAoaSkgKyAnPC9vcHRpb24+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWVhckh0bWwgPSAnPGRpdiBjbGFzcz1cInBpa2EtbGFiZWxcIj4nICsgeWVhciArIG9wdHMueWVhclN1ZmZpeCArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhclwiIHRhYmluZGV4PVwiLTFcIj4nICsgYXJyLmpvaW4oJycpICsgJzwvc2VsZWN0PjwvZGl2Pic7XG5cbiAgICAgICAgaWYgKG9wdHMuc2hvd01vbnRoQWZ0ZXJZZWFyKSB7XG4gICAgICAgICAgICBodG1sICs9IHllYXJIdG1sICsgbW9udGhIdG1sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHRtbCArPSBtb250aEh0bWwgKyB5ZWFySHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01pblllYXIgJiYgKG1vbnRoID09PSAwIHx8IG9wdHMubWluTW9udGggPj0gbW9udGgpKSB7XG4gICAgICAgICAgICBwcmV2ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXhZZWFyICYmIChtb250aCA9PT0gMTEgfHwgb3B0cy5tYXhNb250aCA8PSBtb250aCkpIHtcbiAgICAgICAgICAgIG5leHQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjID09PSAwKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIGNsYXNzPVwicGlrYS1wcmV2JyArIChwcmV2ID8gJycgOiAnIGlzLWRpc2FibGVkJykgKyAnXCIgdHlwZT1cImJ1dHRvblwiPicgKyBvcHRzLmkxOG4ucHJldmlvdXNNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAoaW5zdGFuY2UuX28ubnVtYmVyT2ZNb250aHMgLSAxKSApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLW5leHQnICsgKG5leHQgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5uZXh0TW9udGggKyAnPC9idXR0b24+JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBodG1sICs9ICc8L2Rpdj4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJUYWJsZSA9IGZ1bmN0aW9uKG9wdHMsIGRhdGEsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwicGlrYS10YWJsZVwiIHJvbGU9XCJncmlkXCIgYXJpYS1sYWJlbGxlZGJ5PVwiJyArIHJhbmRJZCArICdcIj4nICsgcmVuZGVySGVhZChvcHRzKSArIHJlbmRlckJvZHkoZGF0YSkgKyAnPC90YWJsZT4nO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFBpa2FkYXkgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBQaWthZGF5ID0gZnVuY3Rpb24ob3B0aW9ucylcbiAgICB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIG9wdHMgPSBzZWxmLmNvbmZpZyhvcHRpb25zKTtcblxuICAgICAgICBzZWxmLl9vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtYnV0dG9uJykgJiYgIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWVtcHR5JykgJiYgIWhhc0NsYXNzKHRhcmdldC5wYXJlbnROb2RlLCAnaXMtZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUobmV3IERhdGUodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLXllYXInKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLW1vbnRoJyksIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGlrYS1kYXknKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJsdXJGaWVsZE9uU2VsZWN0ICYmIG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWVsZC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXByZXYnKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZNb250aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLW5leHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRNb250aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1zZWxlY3QnKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdG91Y2ggZXZlbnQgcHJldmVudCBtb3VzZSBldmVudHMgZW11bGF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DaGFuZ2UgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1zZWxlY3QtbW9udGgnKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b01vbnRoKHRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC15ZWFyJykpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9ZZWFyKHRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25LZXlDaGFuZ2UgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzZWxmLmlzVmlzaWJsZSgpKSB7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKXtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWVsZC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnc3VidHJhY3QnLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ2FkZCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ2FkZCcsIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRDaGFuZ2UgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0ZTtcblxuICAgICAgICAgICAgaWYgKGUuZmlyZWRCeSA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLnBhcnNlKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG9wdHMucGFyc2Uob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNNb21lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbW9tZW50KG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0LCBvcHRzLmZvcm1hdFN0cmljdCk7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IChkYXRlICYmIGRhdGUuaXNWYWxpZCgpKSA/IGRhdGUudG9EYXRlKCkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2Uob3B0cy5maWVsZC52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3YpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Rm9jdXMgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRDbGljayA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dEJsdXIgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIElFIGFsbG93cyBwaWthIGRpdiB0byBnYWluIGZvY3VzOyBjYXRjaCBibHVyIHRoZSBpbnB1dCBmaWVsZFxuICAgICAgICAgICAgdmFyIHBFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcblxuICAgICAgICAgICAgaWYgKCFzZWxmLl9jKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fYiA9IHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5fYyA9IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50LFxuICAgICAgICAgICAgICAgIHBFbCA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNFdmVudExpc3RlbmVycyAmJiBoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQub25jaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCAncmV0dXJuOycpO1xuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCh0YXJnZXQsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyhwRWwsICdwaWthLXNpbmdsZScpIHx8IHBFbCA9PT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoKHBFbCA9IHBFbC5wYXJlbnROb2RlKSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5fdiAmJiB0YXJnZXQgIT09IG9wdHMudHJpZ2dlciAmJiBwRWwgIT09IG9wdHMudHJpZ2dlcikge1xuICAgICAgICAgICAgICAgIHNlbGYuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgPSAncGlrYS1zaW5nbGUnICsgKG9wdHMuaXNSVEwgPyAnIGlzLXJ0bCcgOiAnJykgKyAob3B0cy50aGVtZSA/ICcgJyArIG9wdHMudGhlbWUgOiAnJyk7XG5cbiAgICAgICAgYWRkRXZlbnQoc2VsZi5lbCwgJ21vdXNlZG93bicsIHNlbGYuX29uTW91c2VEb3duLCB0cnVlKTtcbiAgICAgICAgYWRkRXZlbnQoc2VsZi5lbCwgJ3RvdWNoZW5kJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnY2hhbmdlJywgc2VsZi5fb25DaGFuZ2UpO1xuXG4gICAgICAgIGlmIChvcHRzLmtleWJvYXJkSW5wdXQpIHtcbiAgICAgICAgICAgIGFkZEV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHNlbGYuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBvcHRzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsZi5lbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdHMuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5lbCwgb3B0cy5maWVsZC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLmZpZWxkLCAnY2hhbmdlJywgc2VsZi5fb25JbnB1dENoYW5nZSk7XG5cbiAgICAgICAgICAgIGlmICghb3B0cy5kZWZhdWx0RGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNNb21lbnQgJiYgb3B0cy5maWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmRlZmF1bHREYXRlID0gbW9tZW50KG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0KS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdHMuc2V0RGVmYXVsdERhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlZkRhdGUgPSBvcHRzLmRlZmF1bHREYXRlO1xuXG4gICAgICAgIGlmIChpc0RhdGUoZGVmRGF0ZSkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNldERlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZkRhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9EYXRlKGRlZkRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuZWwuY2xhc3NOYW1lICs9ICcgaXMtYm91bmQnO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnY2xpY2snLCBzZWxmLl9vbklucHV0Q2xpY2spO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCBzZWxmLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHNlbGYuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogcHVibGljIFBpa2FkYXkgQVBJXG4gICAgICovXG4gICAgUGlrYWRheS5wcm90b3R5cGUgPSB7XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogY29uZmlndXJlIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICovXG4gICAgICAgIGNvbmZpZzogZnVuY3Rpb24ob3B0aW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3B0cyA9IGV4dGVuZCh0aGlzLl9vLCBvcHRpb25zLCB0cnVlKTtcblxuICAgICAgICAgICAgb3B0cy5pc1JUTCA9ICEhb3B0cy5pc1JUTDtcblxuICAgICAgICAgICAgb3B0cy5maWVsZCA9IChvcHRzLmZpZWxkICYmIG9wdHMuZmllbGQubm9kZU5hbWUpID8gb3B0cy5maWVsZCA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMudGhlbWUgPSAodHlwZW9mIG9wdHMudGhlbWUpID09PSAnc3RyaW5nJyAmJiBvcHRzLnRoZW1lID8gb3B0cy50aGVtZSA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMuYm91bmQgPSAhIShvcHRzLmJvdW5kICE9PSB1bmRlZmluZWQgPyBvcHRzLmZpZWxkICYmIG9wdHMuYm91bmQgOiBvcHRzLmZpZWxkKTtcblxuICAgICAgICAgICAgb3B0cy50cmlnZ2VyID0gKG9wdHMudHJpZ2dlciAmJiBvcHRzLnRyaWdnZXIubm9kZU5hbWUpID8gb3B0cy50cmlnZ2VyIDogb3B0cy5maWVsZDtcblxuICAgICAgICAgICAgb3B0cy5kaXNhYmxlV2Vla2VuZHMgPSAhIW9wdHMuZGlzYWJsZVdlZWtlbmRzO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVEYXlGbiA9ICh0eXBlb2Ygb3B0cy5kaXNhYmxlRGF5Rm4pID09PSAnZnVuY3Rpb24nID8gb3B0cy5kaXNhYmxlRGF5Rm4gOiBudWxsO1xuXG4gICAgICAgICAgICB2YXIgbm9tID0gcGFyc2VJbnQob3B0cy5udW1iZXJPZk1vbnRocywgMTApIHx8IDE7XG4gICAgICAgICAgICBvcHRzLm51bWJlck9mTW9udGhzID0gbm9tID4gNCA/IDQgOiBub207XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWluRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWF4RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgob3B0cy5taW5EYXRlICYmIG9wdHMubWF4RGF0ZSkgJiYgb3B0cy5tYXhEYXRlIDwgb3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5tYXhEYXRlID0gb3B0cy5taW5EYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNaW5EYXRlKG9wdHMubWluRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhEYXRlKG9wdHMubWF4RGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgICAgIHZhciBmYWxsYmFjayA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDEwO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzBdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMF0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZVsxXSA9IHBhcnNlSW50KG9wdHMueWVhclJhbmdlWzFdLCAxMCkgfHwgZmFsbGJhY2s7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gTWF0aC5hYnMocGFyc2VJbnQob3B0cy55ZWFyUmFuZ2UsIDEwKSkgfHwgZGVmYXVsdHMueWVhclJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnllYXJSYW5nZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZSA9IDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAodXNpbmcgTW9tZW50LmpzIGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9vLmZvcm1hdDtcbiAgICAgICAgICAgIGlmICghaXNEYXRlKHRoaXMuX2QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX28udG9TdHJpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX28udG9TdHJpbmcodGhpcy5fZCwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNNb21lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLl9kKS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBNb21lbnQuanMgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0TW9tZW50OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNNb21lbnQgPyBtb21lbnQodGhpcy5fZCkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZyb20gYSBNb21lbnQuanMgb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNb21lbnQ6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGUoZGF0ZS50b0RhdGUoKSwgcHJldmVudE9uU2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmV0dXJuIGEgRGF0ZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXREYXRlOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RhdGUodGhpcy5fZCkgPyBuZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBzZXREYXRlOiBmdW5jdGlvbihkYXRlLCBwcmV2ZW50T25TZWxlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5maWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmaXJlRXZlbnQodGhpcy5fby5maWVsZCwgJ2NoYW5nZScsIHsgZmlyZWRCeTogdGhpcyB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLl9vLm1pbkRhdGUsXG4gICAgICAgICAgICAgICAgbWF4ID0gdGhpcy5fby5tYXhEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKG1pbikgJiYgZGF0ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtaW47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShtYXgpICYmIGRhdGUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbWF4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHRoaXMuX2QpO1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2ZW50T25TZWxlY3QgJiYgdHlwZW9mIHRoaXMuX28ub25TZWxlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcywgdGhpcy5nZXREYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9EYXRlOiBmdW5jdGlvbihkYXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3Q2FsZW5kYXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpcnN0VmlzaWJsZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1swXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsIDEpLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlRGF0ZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgZW5kIG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXRNb250aChsYXN0VmlzaWJsZURhdGUuZ2V0TW9udGgoKSsxKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZURhdGUuc2V0RGF0ZShsYXN0VmlzaWJsZURhdGUuZ2V0RGF0ZSgpLTEpO1xuICAgICAgICAgICAgICAgIG5ld0NhbGVuZGFyID0gKHZpc2libGVEYXRlIDwgZmlyc3RWaXNpYmxlRGF0ZS5nZXRUaW1lKCkgfHwgbGFzdFZpc2libGVEYXRlLmdldFRpbWUoKSA8IHZpc2libGVEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5tYWluQ2FsZW5kYXIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKz0gMSAtIHRoaXMuX28ubnVtYmVyT2ZNb250aHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFkanVzdERhdGU6IGZ1bmN0aW9uKHNpZ24sIGRheXMpIHtcblxuICAgICAgICAgICAgdmFyIGRheSA9IHRoaXMuZ2V0RGF0ZSgpIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IHBhcnNlSW50KGRheXMpKjI0KjYwKjYwKjEwMDA7XG5cbiAgICAgICAgICAgIHZhciBuZXdEYXk7XG5cbiAgICAgICAgICAgIGlmIChzaWduID09PSAnYWRkJykge1xuICAgICAgICAgICAgICAgIG5ld0RheSA9IG5ldyBEYXRlKGRheS52YWx1ZU9mKCkgKyBkaWZmZXJlbmNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2lnbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgICAgIG5ld0RheSA9IG5ldyBEYXRlKGRheS52YWx1ZU9mKCkgLSBkaWZmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKG5ld0RheSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0Q2FsZW5kYXJzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdID0gYWRqdXN0Q2FsZW5kYXIodGhpcy5jYWxlbmRhcnNbMF0pO1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDE7IGMgPCB0aGlzLl9vLm51bWJlck9mTW9udGhzOyBjKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1tjXSA9IGFkanVzdENhbGVuZGFyKHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoICsgYyxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogdGhpcy5jYWxlbmRhcnNbMF0ueWVhclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ290b1RvZGF5OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ290b0RhdGUobmV3IERhdGUoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgbW9udGggKHplcm8taW5kZXgsIGUuZy4gMDogSmFudWFyeSlcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9Nb250aDogZnVuY3Rpb24obW9udGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggPSBwYXJzZUludChtb250aCwgMTApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmV4dE1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKys7XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHByZXZNb250aDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tO1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBmdWxsIHllYXIgKGUuZy4gXCIyMDEyXCIpXG4gICAgICAgICAqL1xuICAgICAgICBnb3RvWWVhcjogZnVuY3Rpb24oeWVhcilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTih5ZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLnllYXIgPSBwYXJzZUludCh5ZWFyLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtaW5EYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNaW5EYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pblllYXIgID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbk1vbnRoID0gdmFsdWUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5EYXRlID0gZGVmYXVsdHMubWluRGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pblllYXIgID0gZGVmYXVsdHMubWluWWVhcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbk1vbnRoID0gZGVmYXVsdHMubWluTW9udGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5zdGFydFJhbmdlID0gZGVmYXVsdHMuc3RhcnRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB0aGUgbWF4RGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0TWF4RGF0ZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFRvU3RhcnRPZkRheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhEYXRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhZZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heE1vbnRoID0gdmFsdWUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhEYXRlID0gZGVmYXVsdHMubWF4RGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSBkZWZhdWx0cy5tYXhZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSBkZWZhdWx0cy5tYXhNb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLmVuZFJhbmdlID0gZGVmYXVsdHMuZW5kUmFuZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldFN0YXJ0UmFuZ2U6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRFbmRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVmcmVzaCB0aGUgSFRNTFxuICAgICAgICAgKi9cbiAgICAgICAgZHJhdzogZnVuY3Rpb24oZm9yY2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdiAmJiAhZm9yY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb3B0cyA9IHRoaXMuX28sXG4gICAgICAgICAgICAgICAgbWluWWVhciA9IG9wdHMubWluWWVhcixcbiAgICAgICAgICAgICAgICBtYXhZZWFyID0gb3B0cy5tYXhZZWFyLFxuICAgICAgICAgICAgICAgIG1pbk1vbnRoID0gb3B0cy5taW5Nb250aCxcbiAgICAgICAgICAgICAgICBtYXhNb250aCA9IG9wdHMubWF4TW9udGgsXG4gICAgICAgICAgICAgICAgaHRtbCA9ICcnLFxuICAgICAgICAgICAgICAgIHJhbmRJZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3kgPD0gbWluWWVhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBtaW5ZZWFyO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4obWluTW9udGgpICYmIHRoaXMuX20gPCBtaW5Nb250aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tID0gbWluTW9udGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3kgPj0gbWF4WWVhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBtYXhZZWFyO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4obWF4TW9udGgpICYmIHRoaXMuX20gPiBtYXhNb250aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tID0gbWF4TW9udGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYW5kSWQgPSAncGlrYS10aXRsZS0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCAnJykuc3Vic3RyKDAsIDIpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IG9wdHMubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJwaWthLWxlbmRhclwiPicgKyByZW5kZXJUaXRsZSh0aGlzLCBjLCB0aGlzLmNhbGVuZGFyc1tjXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1tjXS5tb250aCwgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgcmFuZElkKSArIHRoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCByYW5kSWQpICsgJzwvZGl2Pic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZihvcHRzLmZpZWxkLnR5cGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMudHJpZ2dlci5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbkRyYXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uRHJhdyh0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIHNjcmVlbiByZWFkZXIgdXNlciBrbm93IHRvIHVzZSBhcnJvdyBrZXlzXG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBvcHRzLmFyaWFMYWJlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0UG9zaXRpb246IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpZWxkLCBwRWwsIHdpZHRoLCBoZWlnaHQsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCBzY3JvbGxUb3AsIGxlZnQsIHRvcCwgY2xpZW50UmVjdCwgbGVmdEFsaWduZWQsIGJvdHRvbUFsaWduZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vLmNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgICAgICAgICAgZmllbGQgPSB0aGlzLl9vLnRyaWdnZXI7XG4gICAgICAgICAgICBwRWwgPSBmaWVsZDtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5lbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGxlZnRBbGlnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJvdHRvbUFsaWduZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNsaWVudFJlY3QgPSBmaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRvcCA9IGNsaWVudFJlY3QuYm90dG9tICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgdG9wICA9IHBFbC5vZmZzZXRUb3AgKyBwRWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHdoaWxlKChwRWwgPSBwRWwub2Zmc2V0UGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBFbC5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBFbC5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBvc2l0aW9uIGlzIGJvdHRvbSAmIGxlZnRcbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIGxlZnQgKyB3aWR0aCA+IHZpZXdwb3J0V2lkdGgpIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHdpZHRoICsgZmllbGQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgbGVmdEFsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIHRvcCArIGhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ICsgc2Nyb2xsVG9wKSB8fFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0b3AgPSB0b3AgLSBoZWlnaHQgLSBmaWVsZC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcblxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBib3R0b21BbGlnbmVkID8gJ2JvdHRvbS1hbGlnbmVkJyA6ICd0b3AtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWxlZnRBbGlnbmVkID8gJ2xlZnQtYWxpZ25lZCcgOiAncmlnaHQtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlbmRlciBIVE1MIGZvciBhIHBhcnRpY3VsYXIgbW9udGhcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIHJhbmRJZClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgICA9IHRoaXMuX28sXG4gICAgICAgICAgICAgICAgbm93ICAgID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBkYXlzICAgPSBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgICAgICAgYmVmb3JlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpLFxuICAgICAgICAgICAgICAgIGRhdGEgICA9IFtdLFxuICAgICAgICAgICAgICAgIHJvdyAgICA9IFtdO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KG5vdyk7XG4gICAgICAgICAgICBpZiAob3B0cy5maXJzdERheSA+IDApIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUgLT0gb3B0cy5maXJzdERheTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKz0gNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNNb250aCA9IG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDEsXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoID0gbW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMSxcbiAgICAgICAgICAgICAgICB5ZWFyT2ZQcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyB5ZWFyIC0gMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgeWVhck9mTmV4dE1vbnRoID0gbW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyLFxuICAgICAgICAgICAgICAgIGRheXNJblByZXZpb3VzTW9udGggPSBnZXREYXlzSW5Nb250aCh5ZWFyT2ZQcmV2aW91c01vbnRoLCBwcmV2aW91c01vbnRoKTtcbiAgICAgICAgICAgIHZhciBjZWxscyA9IGRheXMgKyBiZWZvcmUsXG4gICAgICAgICAgICAgICAgYWZ0ZXIgPSBjZWxscztcbiAgICAgICAgICAgIHdoaWxlKGFmdGVyID4gNykge1xuICAgICAgICAgICAgICAgIGFmdGVyIC09IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxscyArPSA3IC0gYWZ0ZXI7XG4gICAgICAgICAgICB2YXIgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByID0gMDsgaSA8IGNlbGxzOyBpKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxICsgKGkgLSBiZWZvcmUpKSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGlzRGF0ZSh0aGlzLl9kKSA/IGNvbXBhcmVEYXRlcyhkYXksIHRoaXMuX2QpIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXkgPSBjb21wYXJlRGF0ZXMoZGF5LCBub3cpLFxuICAgICAgICAgICAgICAgICAgICBoYXNFdmVudCA9IG9wdHMuZXZlbnRzLmluZGV4T2YoZGF5LnRvRGF0ZVN0cmluZygpKSAhPT0gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBpIDwgYmVmb3JlIHx8IGkgPj0gKGRheXMgKyBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSAxICsgKGkgLSBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBtb250aE51bWJlciA9IG1vbnRoLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhcixcbiAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlID0gb3B0cy5zdGFydFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLnN0YXJ0UmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2UgPSBvcHRzLmVuZFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLmVuZFJhbmdlLCBkYXkpLFxuICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgb3B0cy5lbmRSYW5nZSAmJiBvcHRzLnN0YXJ0UmFuZ2UgPCBkYXkgJiYgZGF5IDwgb3B0cy5lbmRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZCA9IChvcHRzLm1pbkRhdGUgJiYgZGF5IDwgb3B0cy5taW5EYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdHMubWF4RGF0ZSAmJiBkYXkgPiBvcHRzLm1heERhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlV2Vla2VuZHMgJiYgaXNXZWVrZW5kKGRheSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlRGF5Rm4gJiYgb3B0cy5kaXNhYmxlRGF5Rm4oZGF5KSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5c0luUHJldmlvdXNNb250aCArIGRheU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gcHJldmlvdXNNb250aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyT2ZQcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5TnVtYmVyIC0gZGF5cztcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZk5leHRNb250aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkYXlDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXk6IGRheU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoOiBtb250aE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXI6IHllYXJOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFdmVudDogaGFzRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb2RheTogaXNUb2RheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlOiBpc1N0YXJ0UmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VuZFJhbmdlOiBpc0VuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlOiBpc0luUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5waWNrV2hvbGVXZWVrICYmIGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKHJlbmRlckRheShkYXlDb25maWcpKTtcblxuICAgICAgICAgICAgICAgIGlmICgrK3IgPT09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy51bnNoaWZ0KHJlbmRlcldlZWsoaSAtIGJlZm9yZSwgbW9udGgsIHllYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gocmVuZGVyUm93KHJvdywgb3B0cy5pc1JUTCwgb3B0cy5waWNrV2hvbGVXZWVrLCBpc1dlZWtTZWxlY3RlZCkpO1xuICAgICAgICAgICAgICAgICAgICByb3cgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlzV2Vla1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRhYmxlKG9wdHMsIGRhdGEsIHJhbmRJZCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNWaXNpYmxlOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92O1xuICAgICAgICB9LFxuXG4gICAgICAgIHNob3c6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGRvY3VtZW50LCAnY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX28ub25PcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ub25PcGVuLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGhpZGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLl92O1xuICAgICAgICAgICAgaWYgKHYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRpYyc7IC8vIHJlc2V0XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUudG9wID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsICdpcy1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGhpcy5fby5vbkNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR0FNRSBPVkVSXG4gICAgICAgICAqL1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbztcblxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmtleWJvYXJkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleUNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCB0aGlzLl9vbklucHV0Q2hhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHRoaXMuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2ZvY3VzJywgdGhpcy5fb25JbnB1dEZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHRoaXMuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgcmV0dXJuIFBpa2FkYXk7XG59KSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5BdXRvbGlua2VyOyIsIi8qIGVzbGludCBrZXktc3BhY2luZzogMCAqL1xuLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbmNvbnN0IE1pbWUgPSB7XG5cdCdlbWwnOiAnbWVzc2FnZS9yZmM4MjInLFxuXHQnbWltZSc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCd0eHQnOiAndGV4dC9wbGFpbicsXG5cdCd0ZXh0JzogJ3RleHQvcGxhaW4nLFxuXHQnZGVmJzogJ3RleHQvcGxhaW4nLFxuXHQnbGlzdCc6ICd0ZXh0L3BsYWluJyxcblx0J2luJzogJ3RleHQvcGxhaW4nLFxuXHQnaW5pJzogJ3RleHQvcGxhaW4nLFxuXHQnbG9nJzogJ3RleHQvcGxhaW4nLFxuXHQnc3FsJzogJ3RleHQvcGxhaW4nLFxuXHQnY2ZnJzogJ3RleHQvcGxhaW4nLFxuXHQnY29uZic6ICd0ZXh0L3BsYWluJyxcblx0J2FzYyc6ICd0ZXh0L3BsYWluJyxcblx0J3J0eCc6ICd0ZXh0L3JpY2h0ZXh0Jyxcblx0J3ZjYXJkJzogJ3RleHQvdmNhcmQnLFxuXHQndmNmJzogJ3RleHQvdmNhcmQnLFxuXHQnaHRtJzogJ3RleHQvaHRtbCcsXG5cdCdodG1sJzogJ3RleHQvaHRtbCcsXG5cdCdjc3YnOiAndGV4dC9jc3YnLFxuXHQnaWNzJzogJ3RleHQvY2FsZW5kYXInLFxuXHQnaWZiJzogJ3RleHQvY2FsZW5kYXInLFxuXHQneG1sJzogJ3RleHQveG1sJyxcblx0J2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXG5cdCdzd2YnOiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLFxuXHQnaGxwJzogJ2FwcGxpY2F0aW9uL3dpbmhscCcsXG5cdCd3Z3QnOiAnYXBwbGljYXRpb24vd2lkZ2V0Jyxcblx0J2NobSc6ICdhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHAnLFxuXHQncDEwJzogJ2FwcGxpY2F0aW9uL3BrY3MxMCcsXG5cdCdwN2MnOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN20nOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN3MnOiAnYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlJyxcblx0J3RvcnJlbnQnOiAnYXBwbGljYXRpb24veC1iaXR0b3JyZW50JyxcblxuXHQvLyBzY3JpcHRzXG5cdCdqcyc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Jyxcblx0J3BsJzogJ3RleHQvcGVybCcsXG5cdCdjc3MnOiAndGV4dC9jc3MnLFxuXHQnYXNwJzogJ3RleHQvYXNwJyxcblx0J3BocCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHAzJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDQnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNSc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHRtbCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cblx0Ly8gaW1hZ2VzXG5cdCdwbmcnOiAnaW1hZ2UvcG5nJyxcblx0J2pwZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZWcnOiAnaW1hZ2UvanBlZycsXG5cdCdqcGUnOiAnaW1hZ2UvanBlZycsXG5cdCdqZmlmJzogJ2ltYWdlL2pwZWcnLFxuXHQnZ2lmJzogJ2ltYWdlL2dpZicsXG5cdCdibXAnOiAnaW1hZ2UvYm1wJyxcblx0J2NnbSc6ICdpbWFnZS9jZ20nLFxuXHQnaWVmJzogJ2ltYWdlL2llZicsXG5cdCdpY28nOiAnaW1hZ2UveC1pY29uJyxcblx0J3RpZic6ICdpbWFnZS90aWZmJyxcblx0J3RpZmYnOiAnaW1hZ2UvdGlmZicsXG5cdCdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdzdmd6JzogJ2ltYWdlL3N2Zyt4bWwnLFxuXHQnZGp2JzogJ2ltYWdlL3ZuZC5kanZ1Jyxcblx0J2RqdnUnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnd2VicCc6ICdpbWFnZS93ZWJwJyxcblxuXHQvLyBhcmNoaXZlc1xuXHQnemlwJzogJ2FwcGxpY2F0aW9uL3ppcCcsXG5cdCc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxuXHQncmFyJzogJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnLFxuXHQnZXhlJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdkbGwnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J3Njcic6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY29tJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdiYXQnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J21zaSc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY2FiJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCcsXG5cdCdneic6ICdhcHBsaWNhdGlvbi94LWd6aXAnLFxuXHQndGd6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCdieic6ICdhcHBsaWNhdGlvbi94LWJ6aXAnLFxuXHQnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxuXHQnZGViJzogJ2FwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UnLFxuXG5cdC8vIGZvbnRzXG5cdCdwc2YnOiAnYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZicsXG5cdCdvdGYnOiAnYXBwbGljYXRpb24veC1mb250LW90ZicsXG5cdCdwY2YnOiAnYXBwbGljYXRpb24veC1mb250LXBjZicsXG5cdCdzbmYnOiAnYXBwbGljYXRpb24veC1mb250LXNuZicsXG5cdCd0dGYnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cdCd0dGMnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cblx0Ly8gYXVkaW9cblx0J21wMyc6ICdhdWRpby9tcGVnJyxcblx0J2Ftcic6ICdhdWRpby9hbXInLFxuXHQnYWFjJzogJ2F1ZGlvL3gtYWFjJyxcblx0J2FpZic6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmYyc6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmZic6ICdhdWRpby94LWFpZmYnLFxuXHQnd2F2JzogJ2F1ZGlvL3gtd2F2Jyxcblx0J3dtYSc6ICdhdWRpby94LW1zLXdtYScsXG5cdCd3YXgnOiAnYXVkaW8veC1tcy13YXgnLFxuXHQnbWlkaSc6ICdhdWRpby9taWRpJyxcblx0J21wNGEnOiAnYXVkaW8vbXA0Jyxcblx0J29nZyc6ICdhdWRpby9vZ2cnLFxuXHQnd2ViYSc6ICdhdWRpby93ZWJtJyxcblx0J3JhJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JhbSc6ICdhdWRpby94LXBuLXJlYWxhdWRpbycsXG5cdCdybXAnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJyxcblx0J20zdSc6ICdhdWRpby94LW1wZWd1cmwnLFxuXG5cdC8vIHZpZGVvXG5cdCdmbHYnOiAndmlkZW8veC1mbHYnLFxuXHQncXQnOiAndmlkZW8vcXVpY2t0aW1lJyxcblx0J21vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnd212JzogJ3ZpZGVvL3dpbmRvd3MtbWVkaWEnLFxuXHQnYXZpJzogJ3ZpZGVvL3gtbXN2aWRlbycsXG5cdCdtcGcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGVnJzogJ3ZpZGVvL21wZWcnLFxuXHQnbXBlJzogJ3ZpZGVvL21wZWcnLFxuXHQnbTF2JzogJ3ZpZGVvL21wZWcnLFxuXHQnbTJ2JzogJ3ZpZGVvL21wZWcnLFxuXHQnM2dwJzogJ3ZpZGVvLzNncHAnLFxuXHQnM2cyJzogJ3ZpZGVvLzNncHAyJyxcblx0J2gyNjEnOiAndmlkZW8vaDI2MScsXG5cdCdoMjYzJzogJ3ZpZGVvL2gyNjMnLFxuXHQnaDI2NCc6ICd2aWRlby9oMjY0Jyxcblx0J2pwZ3YnOiAndmlkZW8vanBndicsXG5cdCdtcDQnOiAndmlkZW8vbXA0Jyxcblx0J21wNHYnOiAndmlkZW8vbXA0Jyxcblx0J21wZzQnOiAndmlkZW8vbXA0Jyxcblx0J29ndic6ICd2aWRlby9vZ2cnLFxuXHQnd2VibSc6ICd2aWRlby93ZWJtJyxcblx0J200dic6ICd2aWRlby94LW00dicsXG5cdCdhc2YnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnYXN4JzogJ3ZpZGVvL3gtbXMtYXNmJyxcblx0J3dtJzogJ3ZpZGVvL3gtbXMtd20nLFxuXHQnd214JzogJ3ZpZGVvL3gtbXMtd214Jyxcblx0J3d2eCc6ICd2aWRlby94LW1zLXd2eCcsXG5cdCdtb3ZpZSc6ICd2aWRlby94LXNnaS1tb3ZpZScsXG5cblx0Ly8gYWRvYmVcblx0J3BkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxuXHQncHNkJzogJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnLFxuXHQnYWknOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdlcHMnOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JyxcblxuXHQvLyBtcyBvZmZpY2Vcblx0J2RvYyc6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuXHQnZG90JzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdydGYnOiAnYXBwbGljYXRpb24vcnRmJyxcblx0J3hscyc6ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuXHQncHB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50Jyxcblx0J2RvY3gnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuXHQneGxzeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG5cdCdkb3R4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlJyxcblx0J3BwdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG5cblx0Ly8gb3BlbiBvZmZpY2Vcblx0J29kdCc6ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnLFxuXHQnb2RzJzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnXG59O1xuXG5leHBvcnQgeyBNaW1lLCBNaW1lIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jbGFzcyBGaWx0ZXJVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNhcGEgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1vZHVsZXMgPSBrby5vYnNlcnZhYmxlKHt9KTtcblxuXHRcdHRoaXMuZmlsdGVycyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmZpbHRlcnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXHRcdHRoaXMuZmlsdGVycy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblxuXHRcdHRoaXMucmF3ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEZpbHRlclVzZXJTdG9yZSgpO1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInJlcXVpcmUoJy4vZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0Z1bmMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FzaycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBc2snXG59KVxuY2xhc3MgQXNrUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmFza0Rlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubm9CdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMueWVzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSB0cnVlO1xuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQXNrO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmFza0Rlc2MoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX1lFUycpKTtcblx0XHR0aGlzLm5vQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX05PJykpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXHR9XG5cblx0eWVzQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZlllc0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZlllc0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdG5vQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZk5vQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mTm9BY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBc2tEZXNjXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmWWVzRnVuY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZk5vRnVuY1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNZZXNCdXR0b25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTm9CdXR0b25cblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvY3VzWWVzT25TaG93ID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdyhhc2tEZXNjLCBmWWVzRnVuYyA9IG51bGwsIGZOb0Z1bmMgPSBudWxsLCB5ZXNCdXR0b24gPSAnJywgbm9CdXR0b24gPSAnJywgaXNGb2N1c1llc09uU2hvdyA9IHRydWUpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IGZZZXNGdW5jIHx8IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBmTm9GdW5jIHx8IG51bGw7XG5cblx0XHR0aGlzLmFza0Rlc2MoYXNrRGVzYyB8fCAnJyk7XG5cblx0XHRpZiAoeWVzQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnllc0J1dHRvbih5ZXNCdXR0b24pO1xuXHRcdH1cblxuXHRcdGlmIChub0J1dHRvbikge1xuXHRcdFx0dGhpcy5ub0J1dHRvbihub0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSAhIWlzRm9jdXNZZXNPblNob3c7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuYkZvY3VzWWVzT25TaG93KSB7XG5cdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgcmlnaHQsIGxlZnQnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMueWVzRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLm5vRm9jdXModHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0dGhpcy5ub0NsaWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQXNrUG9wdXBWaWV3LCBBc2tQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY2xhc3MgUXVvdGFVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnF1b3RhID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLnVzYWdlID0ga28ub2JzZXJ2YWJsZSgwKTtcblxuXHRcdHRoaXMucGVyY2VudGFnZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHF1b3RhID0gdGhpcy5xdW90YSgpLFxuXHRcdFx0XHR1c2FnZSA9IHRoaXMudXNhZ2UoKTtcblxuXHRcdFx0cmV0dXJuIDAgPCBxdW90YSA/IHdpbmRvdy5NYXRoLmNlaWwoKHVzYWdlIC8gcXVvdGEpICogMTAwKSA6IDA7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IHF1b3RhXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB1c2FnZVxuXHQgKi9cblx0cG9wdWxhdGVEYXRhKHF1b3RhLCB1c2FnZSkge1xuXHRcdHRoaXMucXVvdGEocXVvdGEgKiBNYWdpY3MuQml0TGVuZ3RoMTAyNCk7XG5cdFx0dGhpcy51c2FnZSh1c2FnZSAqIE1hZ2ljcy5CaXRMZW5ndGgxMDI0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUXVvdGFVc2VyU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmlmdmlzaWJsZTsiLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNhY2hlID0ge307XG5cbnZhciB0aHJvd2VyID0gZnVuY3Rpb24gKGl0KSB7IHRocm93IGl0OyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgb3B0aW9ucykge1xuICBpZiAoaGFzKGNhY2hlLCBNRVRIT0RfTkFNRSkpIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV07XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICB2YXIgQUNDRVNTT1JTID0gaGFzKG9wdGlvbnMsICdBQ0NFU1NPUlMnKSA/IG9wdGlvbnMuQUNDRVNTT1JTIDogZmFsc2U7XG4gIHZhciBhcmd1bWVudDAgPSBoYXMob3B0aW9ucywgMCkgPyBvcHRpb25zWzBdIDogdGhyb3dlcjtcbiAgdmFyIGFyZ3VtZW50MSA9IGhhcyhvcHRpb25zLCAxKSA/IG9wdGlvbnNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXSA9ICEhbWV0aG9kICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKEFDQ0VTU09SUyAmJiAhREVTQ1JJUFRPUlMpIHJldHVybiB0cnVlO1xuICAgIHZhciBPID0geyBsZW5ndGg6IC0xIH07XG5cbiAgICBpZiAoQUNDRVNTT1JTKSBkZWZpbmVQcm9wZXJ0eShPLCAxLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogdGhyb3dlciB9KTtcbiAgICBlbHNlIE9bMV0gPSAxO1xuXG4gICAgbWV0aG9kLmNhbGwoTywgYXJndW1lbnQwLCBhcmd1bWVudDEpO1xuICB9KTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSAmJiBpdCAhPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhpdCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBBcnJheUl0ZXJhdG9yTWV0aG9kcyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvck1ldGhvZHMudmFsdWVzO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUpIHtcbiAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gIT09IEFycmF5VmFsdWVzKSB0cnkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdID0gQXJyYXlWYWx1ZXM7XG4gICAgfVxuICAgIGlmICghQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gICAgfVxuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vZmFpbHMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3IsXG4vLyBzbyB3ZSB1c2UgYW4gaW50ZXJtZWRpYXRlIGZ1bmN0aW9uLlxuZnVuY3Rpb24gUkUocywgZikge1xuICByZXR1cm4gUmVnRXhwKHMsIGYpO1xufVxuXG5leHBvcnRzLlVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG4gIHZhciByZSA9IFJFKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPSBudWxsO1xufSk7XG5cbmV4cG9ydHMuQlJPS0VOX0NBUkVUID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gUkUoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPSBudWxsO1xufSk7XG4iLCJ2YXIgcmVkdWNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IHJlZHVjZSA6IG93bjtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YXJpYWJsZSA9PSAnZnVuY3Rpb24nID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjguMicsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG5pZiAoSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuaWYgKCFJU19QVVJFICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkge1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgKi9cbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBkb2N1bWVudC5kb21haW4gJiYgbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IGFjdGl2ZVhEb2N1bWVudCA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpO1xuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDLCBTRVRfTUVUSE9EKSB7XG4gIGlmIChpdCkge1xuICAgIHZhciB0YXJnZXQgPSBTVEFUSUMgPyBpdCA6IGl0LnByb3RvdHlwZTtcbiAgICBpZiAoIWhhcyh0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICAgIH1cbiAgICBpZiAoU0VUX01FVEhPRCAmJiAhVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCAndG9TdHJpbmcnLCB0b1N0cmluZyk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBuZXcgKEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQykobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgfHwgRE9NSXRlcmFibGVzLmhhc093blByb3BlcnR5KGNsYXNzb2YoaXQpKSA/IGZvckVhY2ggOiBvd247XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBjb252ZXJ0TGFuZ05hbWUgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG4vLyBpbXBvcnQge3ZpZXcsIFZpZXdUeXBlfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0xhbmd1YWdlcydcbn0pXG5jbGFzcyBMYW5ndWFnZXNQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZkxhbmcgPSBudWxsO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxhbmdzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdXNlckxhbmd1YWdlID0gdGhpcy51c2VyTGFuZ3VhZ2UoKTtcblx0XHRcdHJldHVybiBfLm1hcCh0aGlzLmxhbmdzKCksIChsYW5ndWFnZSkgPT4gKHtcblx0XHRcdFx0a2V5OiBsYW5ndWFnZSxcblx0XHRcdFx0dXNlcjogbGFuZ3VhZ2UgPT09IHVzZXJMYW5ndWFnZSxcblx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRmdWxsTmFtZTogY29udmVydExhbmdOYW1lKGxhbmd1YWdlKVxuXHRcdFx0fSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYW5ncy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRMYW5ndWFnZVNlbGVjdGlvbigpO1xuXHRcdH0pO1xuXHR9XG5cblx0bGFuZ3VhZ2VUb29sdGlwTmFtZShsYW5ndWFnZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgZmFsc2UpID09PSByZXN1bHQgPyAnJyA6IHJlc3VsdDtcblx0fVxuXG5cdHNldExhbmd1YWdlU2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5mTGFuZyA/IGtvLnVud3JhcCh0aGlzLmZMYW5nKSA6ICcnO1xuXHRcdF8uZWFjaCh0aGlzLmxhbmd1YWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0aXRlbS5zZWxlY3RlZChpdGVtLmtleSA9PT0gY3VycmVudExhbmcpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CZWZvcmVTaG93KCkge1xuXHRcdHRoaXMuZkxhbmcgPSBudWxsO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlKCcnKTtcblxuXHRcdHRoaXMubGFuZ3MoW10pO1xuXHR9XG5cblx0b25TaG93KGZMYW5ndWFnZSwgbGFuZ3MsIHVzZXJMYW5ndWFnZSkge1xuXHRcdHRoaXMuZkxhbmcgPSBmTGFuZ3VhZ2U7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UodXNlckxhbmd1YWdlIHx8ICcnKTtcblxuXHRcdHRoaXMubGFuZ3MobGFuZ3MpO1xuXHR9XG5cblx0Y2hhbmdlTGFuZ3VhZ2UobGFuZykge1xuXHRcdGlmICh0aGlzLmZMYW5nKSB7XG5cdFx0XHR0aGlzLmZMYW5nKGxhbmcpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExhbmd1YWdlc1BvcHVwVmlldywgTGFuZ3VhZ2VzUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGtpbGxDdHJsQUN0cmxTLCBkZXRlY3REcm9wZG93blZpc2liaWxpdHksIGNyZWF0ZUNvbW1hbmRMZWdhY3ksIGRvbVJlYWR5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICR3aW4sICRodG1sLCBkYXRhIGFzIEdsb2JhbHNEYXRhLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgRW51bXMgZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFBsdWdpbnMgZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IChBcHApID0+IHtcblx0R2xvYmFsc0RhdGEuX19BUFBfXyA9IEFwcDtcblxuXHQkd2luLm9uKCdrZXlkb3duJywga2lsbEN0cmxBQ3RybFMpLm9uKCd1bmxvYWQnLCAoKSA9PiB7XG5cdFx0R2xvYmFsc0RhdGEuYlVubG9hZCA9IHRydWU7XG5cdH0pO1xuXG5cdCRodG1sLmFkZENsYXNzKGJNb2JpbGVEZXZpY2UgPyAnbW9iaWxlJyA6ICduby1tb2JpbGUnKS5vbignY2xpY2suZHJvcGRvd24uZGF0YS1hcGknLCBkZXRlY3REcm9wZG93blZpc2liaWxpdHkpO1xuXG5cdGNvbnN0IHJsID0gd2luZG93LnJsIHx8IHt9O1xuXG5cdHJsLmkxOG4gPSBpMThuO1xuXHRybC5jcmVhdGVDb21tYW5kID0gY3JlYXRlQ29tbWFuZExlZ2FjeTtcblxuXHRybC5hZGRTZXR0aW5nc1ZpZXdNb2RlbCA9IFBsdWdpbnMuYWRkU2V0dGluZ3NWaWV3TW9kZWw7XG5cdHJsLmFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4gPSBQbHVnaW5zLmFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW47XG5cblx0cmwuYWRkSG9vayA9IFBsdWdpbnMuYWRkSG9vaztcblx0cmwuc2V0dGluZ3NHZXQgPSBQbHVnaW5zLm1haW5TZXR0aW5nc0dldDtcblx0cmwucGx1Z2luU2V0dGluZ3NHZXQgPSBQbHVnaW5zLnNldHRpbmdzR2V0O1xuXHRybC5wbHVnaW5SZW1vdGVSZXF1ZXN0ID0gUGx1Z2lucy5yZW1vdGVSZXF1ZXN0O1xuXG5cdHJsLkVtYWlsTW9kZWwgPSBFbWFpbE1vZGVsO1xuXHRybC5FbnVtcyA9IEVudW1zO1xuXG5cdHdpbmRvdy5ybCA9IHJsO1xuXG5cdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCduby1qcyBybC1ib290ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1ib290ZWQnKTtcblxuXHRcdFx0QXBwLmJvb3RzdGFydCgpO1xuXHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdH07XG5cblx0d2luZG93Ll9fQVBQX0JPT1QgPSAoZkVycm9yQ2FsbGJhY2spID0+IHtcblx0XHRkb21SZWFkeSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhaW5sb29wLXRlbXBsYXRlcy1pZCcpKSB7XG5cdFx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0fSBlbHNlIGlmICh3aW5kb3cucmFpbmxvb3BURU1QTEFURVMgJiYgd2luZG93LnJhaW5sb29wVEVNUExBVEVTWzBdKSB7XG5cdFx0XHRcdFx0d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdybC10ZW1wbGF0ZXMnKS5pbm5lckhUTUwgPSB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF07XG5cdFx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmRXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2luZG93Ll9fQVBQX0JPT1QgPSBudWxsO1xuXHRcdFx0fSwgRW51bXMuTWFnaWNzLlRpbWUxMG1zKTtcblx0XHR9KTtcblx0fTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZVwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgJGh0bWwsIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQWJzdHJhY3RBcHBTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbiA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3QgYW5pbSA9IGJNb2JpbGVEZXZpY2UgfHwgIXZhbHVlO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWFuaW0nLCAhYW5pbSkudG9nZ2xlQ2xhc3MoJ25vLXJsLWFuaW0nLCBhbmltKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXG5cdFx0dGhpcy5wcmVtID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb21tdW5pdHkgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dMYW5ndWFnZXNPbkxvZ2luJykpO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncycpKTtcblx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlcighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdOZXdNb3ZlVG9Gb2xkZXInKSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdJbnRlcmZhY2VBbmltYXRpb24nKSk7XG5cblx0XHR0aGlzLnByZW0oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnUHJlbVR5cGUnKSk7XG5cdFx0dGhpcy5jb21tdW5pdHkoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29tbXVuaXR5JykpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QXBwU3RvcmUsIEFic3RyYWN0QXBwU3RvcmUgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9rZXlzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBUT0tFTl9FUlJPUl9MSU1JVCwgQUpBWF9FUlJPUl9MSU1JVCwgREVGQVVMVF9BSkFYX1RJTUVPVVQgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaW5BcnJheSwgcEludCwgcFN0cmluZywgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGFqYXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgcnVuSG9vayB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QWpheFJlbW90ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcXVlc3RBY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUeXBlXG5cdCAqIEBwYXJhbSB7P0FqYXhKc29uRGVmYXVsdFJlc3BvbnNlfSBvRGF0YVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJDYWNoZWRcblx0ICogQHBhcmFtIHsqPX0gb1JlcXVlc3RQYXJhbWV0ZXJzXG5cdCAqL1xuXHRkZWZhdWx0UmVzcG9uc2UoZkNhbGxiYWNrLCBzUmVxdWVzdEFjdGlvbiwgc1R5cGUsIG9EYXRhLCBiQ2FjaGVkLCBvUmVxdWVzdFBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBmQ2FsbCA9ICgpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSBzVHlwZSAmJiBHbG9iYWxzRGF0YS5iVW5sb2FkKSB7XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuVW5sb2FkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgJiYgb0RhdGEgJiYgIW9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0RhdGEgJiZcblx0XHRcdFx0XHQtMSA8XG5cdFx0XHRcdFx0XHRpbkFycmF5KG9EYXRhLkVycm9yQ29kZSwgW1xuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQXV0aEVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjZXNzRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bkVycm9yXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgKz0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YSAmJiBOb3RpZmljYXRpb24uSW52YWxpZFRva2VuID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoVE9LRU5fRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50KSB7XG5cdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9EYXRhLkNsZWFyQXV0aCB8fCBvRGF0YS5Mb2dvdXQgfHwgQUpBWF9FUlJPUl9MSU1JVCA8IEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFvRGF0YS5DbGVhckF1dGggJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCA9IDA7XG5cdFx0XHRcdEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVzcG9uc2UnLCBbXG5cdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0c1R5cGUsXG5cdFx0XHRcdGJDYWNoZWQsXG5cdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XSk7XG5cblx0XHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdFx0ZkNhbGxiYWNrKFxuXHRcdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRcdFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlID8gb0RhdGEgOiBudWxsLFxuXHRcdFx0XHRcdGJDYWNoZWQsXG5cdFx0XHRcdFx0c1JlcXVlc3RBY3Rpb24sXG5cdFx0XHRcdFx0b1JlcXVlc3RQYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHN3aXRjaCAoc1R5cGUpIHtcblx0XHRcdGNhc2UgJ3N1Y2Nlc3MnOlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWJvcnQnOlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5FcnJvciA9PT0gc1R5cGUpIHtcblx0XHRcdF8uZGVsYXkoZkNhbGwsIDMwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZDYWxsKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmUmVzdWx0Q2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSB7P251bWJlcj19IGlUaW1lT3V0ID0gMjAwMDBcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKiBAcmV0dXJucyB7alF1ZXJ5LmpxWEhSfVxuXHQgKi9cblx0YWpheFJlcXVlc3QoZlJlc3VsdENhbGxiYWNrLCBwYXJhbXMsIGlUaW1lT3V0ID0gMjAwMDAsIHNHZXRBZGQgPSAnJywgYWJvcnRBY3Rpb25zID0gW10pIHtcblx0XHRjb25zdCBpc1Bvc3QgPSAnJyA9PT0gc0dldEFkZCxcblx0XHRcdGhlYWRlcnMgPSB7fSxcblx0XHRcdHN0YXJ0ID0gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0bGV0IGFjdGlvbiA9ICcnO1xuXG5cdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdGFjdGlvbiA9IHBhcmFtcy5BY3Rpb24gfHwgJyc7XG5cblx0XHRpZiAoYWN0aW9uICYmIDAgPCBhYm9ydEFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRfLmVhY2goYWJvcnRBY3Rpb25zLCAoYWN0aW9uVG9BYm9ydCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0pIHtcblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5hYm9ydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0gPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNQb3N0KSB7XG5cdFx0XHRwYXJhbXMuWFRva2VuID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3Rva2VuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RlZkFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dHlwZTogaXNQb3N0ID8gJ1BPU1QnIDogJ0dFVCcsXG5cdFx0XHR1cmw6IGFqYXgoc0dldEFkZCksXG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGRhdGFUeXBlOiAnanNvbicsXG5cdFx0XHRkYXRhOiBpc1Bvc3QgPyBwYXJhbXMgOiB7fSxcblx0XHRcdGhlYWRlcnM6IGhlYWRlcnMsXG5cdFx0XHR0aW1lb3V0OiBpVGltZU91dCxcblx0XHRcdGdsb2JhbDogdHJ1ZVxuXHRcdH0pO1xuXG5cdFx0b0RlZkFqYXguYWx3YXlzKChvRGF0YSwgc1R5cGUpID0+IHtcblx0XHRcdGxldCBjYWNoZWQgPSBmYWxzZTtcblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5UaW1lKSB7XG5cdFx0XHRcdGNhY2hlZCA9IHBJbnQob0RhdGEuVGltZSkgPiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9EYXRhICYmIG9EYXRhLlVwZGF0ZVRva2VuKSB7XG5cdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5zZXRDbGllbnRTaWRlVG9rZW4ob0RhdGEuVXBkYXRlVG9rZW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhY3Rpb24gJiYgdGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQpIHtcblx0XHRcdFx0XHRzVHlwZSA9ICdhYm9ydCc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kZWZhdWx0UmVzcG9uc2UoZlJlc3VsdENhbGxiYWNrLCBhY3Rpb24sIHNUeXBlLCBvRGF0YSwgY2FjaGVkLCBwYXJhbXMpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCAmJiAtMSA8IGluQXJyYXkoYWN0aW9uLCBhYm9ydEFjdGlvbnMpKSB7XG5cdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLl9fYWJvcnRlZCA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLmFib3J0KSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gb0RlZkFqYXg7XG5cdFx0fVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0XHRvRGVmQWpheC5jYXRjaChjb25zb2xlLmxvZyk7XG5cdFx0cmV0dXJuIG9EZWZBamF4O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3Q9fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZW91dFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNHZXRBZGQgPSAnJ1xuXHQgKiBAcGFyYW0ge0FycmF5PX0gYUFib3J0QWN0aW9ucyA9IFtdXG5cdCAqL1xuXHRkZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssIHNBY3Rpb24sIG9QYXJhbWV0ZXJzLCBpVGltZW91dCwgc0dldEFkZCwgYUFib3J0QWN0aW9ucykge1xuXHRcdG9QYXJhbWV0ZXJzID0gb1BhcmFtZXRlcnMgfHwge307XG5cdFx0b1BhcmFtZXRlcnMuQWN0aW9uID0gc0FjdGlvbjtcblxuXHRcdHNHZXRBZGQgPSBwU3RyaW5nKHNHZXRBZGQpO1xuXG5cdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlcXVlc3QnLCBbc0FjdGlvbiwgb1BhcmFtZXRlcnMsIHNHZXRBZGRdKTtcblxuXHRcdHJldHVybiB0aGlzLmFqYXhSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0b1BhcmFtZXRlcnMsXG5cdFx0XHRpc1VuZChpVGltZW91dCkgPyBERUZBVUxUX0FKQVhfVElNRU9VVCA6IHBJbnQoaVRpbWVvdXQpLFxuXHRcdFx0c0dldEFkZCxcblx0XHRcdGFBYm9ydEFjdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdG5vb3AoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdOb29wJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Z2V0UHVibGljS2V5KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnR2V0UHVibGljS2V5Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1ZlcnNpb25cblx0ICovXG5cdGpzVmVyc2lvbihmQ2FsbGJhY2ssIHNWZXJzaW9uKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdWZXJzaW9uJywge1xuXHRcdFx0J1ZlcnNpb24nOiBzVmVyc2lvblxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QWpheFJlbW90ZSwgQWJzdHJhY3RBamF4UmVtb3RlIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBWSUVXX01PREVMUyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGRlbGVnYXRlUnVuLCB3aW5kb3dSZXNpemUsIGxvZywgaXNVbmQsIHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmNsYXNzIEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSB2aWV3TW9kZWxzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2aWV3TW9kZWxzKSB7XG5cdFx0c3VwZXIoJ3NldHRpbmdzJywgdmlld01vZGVscyk7XG5cblx0XHR0aGlzLm1lbnUgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbiA9IG51bGw7XG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSBudWxsO1xuXG5cdFx0dGhpcy5zZXR1cFNldHRpbmdzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFja1xuXHQgKi9cblx0c2V0dXBTZXR0aW5ncyhmQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKGZDYWxsYmFjaykge1xuXHRcdFx0ZkNhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0b25Sb3V0ZShzdWJOYW1lKSB7XG5cdFx0bGV0IHNldHRpbmdzU2NyZWVuID0gbnVsbCxcblx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbCxcblx0XHRcdHZpZXdNb2RlbFBsYWNlID0gbnVsbCxcblx0XHRcdHZpZXdNb2RlbERvbSA9IG51bGw7XG5cblx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFZJRVdfTU9ERUxTLnNldHRpbmdzLFxuXHRcdFx0KFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIHN1Yk5hbWUgPT09IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHQpO1xuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdF8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRcdFx0RGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsID09PSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdF8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwpIHtcblx0XHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgJiYgUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX192bSkge1xuXHRcdFx0XHRzZXR0aW5nc1NjcmVlbiA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2aWV3TW9kZWxQbGFjZSA9IHRoaXMub1ZpZXdNb2RlbFBsYWNlO1xuXHRcdFx0XHRpZiAodmlld01vZGVsUGxhY2UgJiYgMSA9PT0gdmlld01vZGVsUGxhY2UubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBuZXcgUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwoKTtcblxuXHRcdFx0XHRcdHZpZXdNb2RlbERvbSA9ICQoJzxkaXY+PC9kaXY+Jylcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygncmwtc2V0dGluZ3Mtdmlldy1tb2RlbCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpO1xuXHRcdFx0XHRcdHZpZXdNb2RlbERvbS5hcHBlbmRUbyh2aWV3TW9kZWxQbGFjZSk7XG5cblx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbi52aWV3TW9kZWxEb20gPSB2aWV3TW9kZWxEb207XG5cblx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbi5fX3JsU2V0dGluZ3NEYXRhID0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YTtcblxuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fZG9tID0gdmlld01vZGVsRG9tO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX192bSA9IHNldHRpbmdzU2NyZWVuO1xuXG5cdFx0XHRcdFx0Y29uc3QgdG1wbCA9IHsgbmFtZTogUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5UZW1wbGF0ZSB9O1xuXHRcdFx0XHRcdGtvLmFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZShcblx0XHRcdFx0XHRcdHZpZXdNb2RlbERvbVswXSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiAoKSA9PiB0bXBsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW5cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oc2V0dGluZ3NTY3JlZW4sICdvbkJ1aWxkJywgW3ZpZXdNb2RlbERvbV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxvZygnQ2Fubm90IGZpbmQgc3ViIHNldHRpbmdzIHZpZXcgbW9kZWwgcG9zaXRpb246IFNldHRpbmdzU3ViU2NyZWVuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzU2NyZWVuKSB7XG5cdFx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGhpZGVcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uaGlkZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbiA9IHNldHRpbmdzU2NyZWVuO1xuXG5cdFx0XHRcdFx0Ly8gc2hvd1xuXHRcdFx0XHRcdGlmICh0aGlzLm9DdXJyZW50U3ViU2NyZWVuKSB7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25CZWZvcmVTaG93Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DdXJyZW50U3ViU2NyZWVuLnZpZXdNb2RlbERvbS5zaG93KCk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25TaG93V2l0aERlbGF5JywgW10sIDIwMCk7XG5cblx0XHRcdFx0XHRcdF8uZWFjaCh0aGlzLm1lbnUoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0aXRlbS5zZWxlY3RlZChcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbS5yb3V0ZSA9PT0gc2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YS5Sb3V0ZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdCQoJyNybC1jb250ZW50IC5iLXNldHRpbmdzIC5iLWNvbnRlbnQgLmNvbnRlbnQnKS5zY3JvbGxUb3AoMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldEhhc2goc2V0dGluZ3MoKSwgZmFsc2UsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbiAmJiB0aGlzLm9DdXJyZW50U3ViU2NyZWVuLnZpZXdNb2RlbERvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uSGlkZScpO1xuXHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uaGlkZSgpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5lYWNoKFZJRVdfTU9ERUxTLnNldHRpbmdzLCAoU2V0dGluZ3NWaWV3TW9kZWwpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiZcblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJlxuXHRcdFx0XHQhXy5maW5kKFxuXHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1yZW1vdmVkJ10sXG5cdFx0XHRcdFx0KFJlbW92ZVNldHRpbmdzVmlld01vZGVsKSA9PiBSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCAmJiBSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMubWVudS5wdXNoKHtcblx0XHRcdFx0XHRyb3V0ZTogU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Sb3V0ZSxcblx0XHRcdFx0XHRsYWJlbDogU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5MYWJlbCxcblx0XHRcdFx0XHRzZWxlY3RlZDoga28ub2JzZXJ2YWJsZShmYWxzZSksXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6ICEhXy5maW5kKFxuXHRcdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsID09PSBTZXR0aW5nc1ZpZXdNb2RlbFxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm9WaWV3TW9kZWxQbGFjZSA9ICQoJyNybC1jb250ZW50ICNybC1zZXR0aW5ncy1zdWJzY3JlZW4nKTtcblx0fVxuXG5cdHJvdXRlcygpIHtcblx0XHRjb25zdCBEZWZhdWx0Vmlld01vZGVsID0gXy5maW5kKFxuXHRcdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdFx0KFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Jc0RlZmF1bHRcblx0XHRcdCksXG5cdFx0XHRkZWZhdWx0Um91dGUgPVxuXHRcdFx0XHREZWZhdWx0Vmlld01vZGVsICYmIERlZmF1bHRWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSA/IERlZmF1bHRWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Sb3V0ZSA6ICdnZW5lcmFsJyxcblx0XHRcdHJ1bGVzID0ge1xuXHRcdFx0XHRzdWJuYW1lOiAvXiguKikkLyxcblx0XHRcdFx0bm9ybWFsaXplXzogKHJxdWVzdCwgdmFscykgPT4ge1xuXHRcdFx0XHRcdHZhbHMuc3VibmFtZSA9IGlzVW5kKHZhbHMuc3VibmFtZSkgPyBkZWZhdWx0Um91dGUgOiBwU3RyaW5nKHZhbHMuc3VibmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIFt2YWxzLnN1Ym5hbWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdFsne3N1Ym5hbWV9LycsIHJ1bGVzXSxcblx0XHRcdFsne3N1Ym5hbWV9JywgcnVsZXNdLFxuXHRcdFx0WycnLCBydWxlc11cblx0XHRdO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4sIEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgc3NtIGZyb20gJ3NzbSc7XG5cbmltcG9ydCB7XG5cdCR3aW4sXG5cdCRodG1sLFxuXHQkZG9jLFxuXHRsZWZ0UGFuZWxEaXNhYmxlZCxcblx0bGVmdFBhbmVsVHlwZSxcblx0c1VzZXJBZ2VudCxcblx0Yk1vYmlsZURldmljZSxcblx0YkFuaW1hdGlvblN1cHBvcnRlZFxufSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IGlzTm9ybWFsLCBwU3RyaW5nLCBkZXRlY3REcm9wZG93blZpc2liaWxpdHksIHdpbmRvd1Jlc2l6ZUNhbGxiYWNrIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyByb290LCByb290QWRtaW4sIHJvb3RVc2VyLCBwb3B1bGF0ZUF1dGhTdWZmaXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UsIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IFRoZW1lU3RvcmUgZnJvbSAnU3RvcmVzL1RoZW1lJztcbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IHsgcm91dGVPZmYsIHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdEJvb3QgfSBmcm9tICdLbm9pbi9BYnN0cmFjdEJvb3QnO1xuXG5jbGFzcyBBYnN0cmFjdEFwcCBleHRlbmRzIEFic3RyYWN0Qm9vdCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge1JlbW90ZVN0b3JhZ2V8QWRtaW5SZW1vdGVTdG9yYWdlfSBSZW1vdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSA9IG51bGw7XG5cdFx0dGhpcy5pc0xvY2FsQXV0b2NvbXBsZXRlID0gdHJ1ZTtcblx0XHR0aGlzLmlmcmFtZSA9IG51bGw7XG5cdFx0dGhpcy5sYXN0RXJyb3JUaW1lID0gMDtcblxuXHRcdHRoaXMuaWZyYW1lID0gJCgnPGlmcmFtZSBjbGFzcz1cImludGVybmFsLWhpZGRkZW5cIiAvPicpLmFwcGVuZFRvKCdib2R5Jyk7XG5cblx0XHQkd2luLm9uKCdyZXNpemUnLCAoKSA9PiB7XG5cdFx0XHRFdmVudHMucHViKCd3aW5kb3cucmVzaXplJyk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKFxuXHRcdFx0J3dpbmRvdy5yZXNpemUnLFxuXHRcdFx0Xy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlIID0gJHdpbi5oZWlnaHQoKSxcblx0XHRcdFx0XHRpVyA9ICR3aW4uaGVpZ2h0KCk7XG5cblx0XHRcdFx0aWYgKCR3aW4uX19zaXplc1swXSAhPT0gaUggfHwgJHdpbi5fX3NpemVzWzFdICE9PSBpVykge1xuXHRcdFx0XHRcdCR3aW4uX19zaXplc1swXSA9IGlIO1xuXHRcdFx0XHRcdCR3aW4uX19zaXplc1sxXSA9IGlXO1xuXG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTBtcylcblx0XHQpO1xuXG5cdFx0Ly8gREVCVUdcblx0XHQvL1x0XHRFdmVudHMuc3ViKHtcblx0XHQvL1x0XHRcdCd3aW5kb3cucmVzaXplJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZScpO1xuXHRcdC8vXHRcdFx0fSxcblx0XHQvL1x0XHRcdCd3aW5kb3cucmVzaXplLnJlYWwnOiBmdW5jdGlvbigpIHtcblx0XHQvL1x0XHRcdFx0d2luZG93LmNvbnNvbGUubG9nKCd3aW5kb3cucmVzaXplLnJlYWwnKTtcblx0XHQvL1x0XHRcdH1cblx0XHQvL1x0XHR9KTtcblxuXHRcdCRkb2Ncblx0XHRcdC5vbigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSkge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1jdHJsLWtleS1wcmVzc2VkJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQub24oJ2tleXVwJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiAhZXZlbnQuY3RybEtleSkge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1jdHJsLWtleS1wcmVzc2VkJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0JGRvYy5vbihcblx0XHRcdCdtb3VzZW1vdmUga2V5cHJlc3MgY2xpY2snLFxuXHRcdFx0Xy5kZWJvdW5jZSgoKSA9PiB7XG5cdFx0XHRcdEV2ZW50cy5wdWIoJ3JsLmF1dG8tbG9nb3V0LXJlZnJlc2gnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNXMpXG5cdFx0KTtcblxuXHRcdGtleSgnZXNjLCBlbnRlcicsIEtleVN0YXRlLkFsbCwgKCkgPT4ge1xuXHRcdFx0ZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRkYXRhKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uKG5hbWUsIGRlZmF1bHRfKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25Db25maWd1cmF0aW9uW25hbWVdIHx8IGRlZmF1bHRfO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaW5rXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZG93bmxvYWQobGluaykge1xuXHRcdGlmIChzVXNlckFnZW50ICYmICgtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignY2hyb21lJykgfHwgLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpKSkge1xuXHRcdFx0Y29uc3Qgb0xpbmsgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0b0xpbmsuaHJlZiA9IGxpbms7XG5cblx0XHRcdGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IG9FID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50Lk1vdXNlRXZlbnRzO1xuXHRcdFx0XHRpZiAob0UgJiYgb0UuaW5pdEV2ZW50ICYmIG9MaW5rLmRpc3BhdGNoRXZlbnQpIHtcblx0XHRcdFx0XHRvRS5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0b0xpbmsuZGlzcGF0Y2hFdmVudChvRSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYk1vYmlsZURldmljZSkge1xuXHRcdFx0d2luZG93Lm9wZW4obGluaywgJ19zZWxmJyk7XG5cdFx0XHR3aW5kb3cuZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5pZnJhbWUuYXR0cignc3JjJywgbGluayk7XG5cdFx0XHQvLyB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGxpbms7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRnb29nbGVQcmV2aWV3U3VwcG9ydGVkKCkge1xuXHRcdGlmIChudWxsID09PSB0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSkge1xuXHRcdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPVxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmICEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsUHJldmlldycpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICovXG5cdHNldFdpbmRvd1RpdGxlKHRpdGxlKSB7XG5cdFx0dGl0bGUgPSBpc05vcm1hbCh0aXRsZSkgJiYgMCA8IHRpdGxlLmxlbmd0aCA/ICcnICsgdGl0bGUgOiAnJztcblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RpdGxlJykpIHtcblx0XHRcdHRpdGxlICs9ICh0aXRsZSA/ICcgLSAnIDogJycpICsgU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RpdGxlJyk7XG5cdFx0fVxuXG5cdFx0d2luZG93LmRvY3VtZW50LnRpdGxlID0gdGl0bGUgKyAnIC4uLic7XG5cdFx0d2luZG93LmRvY3VtZW50LnRpdGxlID0gdGl0bGU7XG5cdH1cblxuXHRyZWRpcmVjdFRvQWRtaW5QYW5lbCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcm9vdEFkbWluKCk7XG5cdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdH1cblxuXHRjbGVhckNsaWVudFNpZGVUb2tlbigpIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9jbGVhcikge1xuXHRcdFx0d2luZG93Ll9fcmxhaF9jbGVhcigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cblx0ICovXG5cdHNldENsaWVudFNpZGVUb2tlbih0b2tlbikge1xuXHRcdGlmICh3aW5kb3cuX19ybGFoX3NldCkge1xuXHRcdFx0d2luZG93Ll9fcmxhaF9zZXQodG9rZW4pO1xuXG5cdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnQXV0aEFjY291bnRIYXNoJywgdG9rZW4pO1xuXHRcdFx0cG9wdWxhdGVBdXRoU3VmZml4KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGFkbWluID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gbG9nb3V0ID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gY2xvc2UgPSBmYWxzZVxuXHQgKi9cblx0bG9naW5BbmRMb2dvdXRSZWxvYWQoYWRtaW4gPSBmYWxzZSwgbG9nb3V0ID0gZmFsc2UsIGNsb3NlID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbklmcmFtZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2luSWZyYW1lJyk7XG5cdFx0bGV0IGN1c3RvbUxvZ291dExpbmsgPSBwU3RyaW5nKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdjdXN0b21Mb2dvdXRMaW5rJykpO1xuXG5cdFx0aWYgKGxvZ291dCkge1xuXHRcdFx0dGhpcy5jbGVhckNsaWVudFNpZGVUb2tlbigpO1xuXHRcdH1cblxuXHRcdGlmIChsb2dvdXQgJiYgY2xvc2UgJiYgd2luZG93LmNsb3NlKSB7XG5cdFx0XHR3aW5kb3cuY2xvc2UoKTtcblx0XHR9XG5cblx0XHRjdXN0b21Mb2dvdXRMaW5rID0gY3VzdG9tTG9nb3V0TGluayB8fCAoYWRtaW4gPyByb290QWRtaW4oKSA6IHJvb3RVc2VyKCkpO1xuXG5cdFx0aWYgKGxvZ291dCAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiAhPT0gY3VzdG9tTG9nb3V0TGluaykge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGlmIChpbklmcmFtZSAmJiB3aW5kb3cucGFyZW50KSB7XG5cdFx0XHRcdFx0d2luZG93LnBhcmVudC5sb2NhdGlvbi5ocmVmID0gY3VzdG9tTG9nb3V0TGluaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0c2V0SGFzaChyb290KCksIHRydWUpO1xuXHRcdFx0cm91dGVPZmYoKTtcblxuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGlmIChpbklmcmFtZSAmJiB3aW5kb3cucGFyZW50KSB7XG5cdFx0XHRcdFx0d2luZG93LnBhcmVudC5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdGhpc3RvcnlCYWNrKCkge1xuXHRcdHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcblx0fVxuXG5cdGJvb3RzdGFydCgpIHtcblx0XHQvLyBsb2coJ1BzJyArICdzcywgaGFjJyArICdrZXJzISBUaGUnICsgJ3JlXFwncyBub3QnICsgJ2hpbmcgaW50ZScgKyAncmVzdGluZyA6JyArICcpJyk7XG5cblx0XHRFdmVudHMucHViKCdybC5ib290c3RhcnQnKTtcblxuXHRcdGNvbnN0IG1vYmlsZSA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1NhdmVUcmlnZ2VyJywgcmVxdWlyZSgnQ29tcG9uZW50L1NhdmVUcmlnZ2VyJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignSW5wdXQnLCByZXF1aXJlKCdDb21wb25lbnQvSW5wdXQnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTZWxlY3QnLCByZXF1aXJlKCdDb21wb25lbnQvU2VsZWN0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignUmFkaW8nLCByZXF1aXJlKCdDb21wb25lbnQvUmFkaW8nKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdUZXh0QXJlYScsIHJlcXVpcmUoJ0NvbXBvbmVudC9UZXh0QXJlYScpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0RhdGUnLCByZXF1aXJlKCdDb21wb25lbnQvRGF0ZScpLmRlZmF1bHQpO1xuXG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcigneC1zY3JpcHQnLCByZXF1aXJlKCdDb21wb25lbnQvU2NyaXB0JykuZGVmYXVsdCk7XG5cdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3Rlcignc3ZnLWljb24nLCByZXF1aXJlKCdDb21wb25lbnQvU3ZnSWNvbicpLmRlZmF1bHQpO1xuXG5cdFx0aWYgKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtYXRlcmlhbERlc2lnbicpICYmIGJBbmltYXRpb25TdXBwb3J0ZWQpIHtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94JywgcmVxdWlyZSgnQ29tcG9uZW50L01hdGVyaWFsRGVzaWduL0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveFNpbXBsZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9DbGFzc2ljL0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHQvLyBrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveFNpbXBsZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9DbGFzc2ljL0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9XG5cblx0XHRpbml0T25TdGFydE9yTGFuZ0NoYW5nZShpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UpO1xuXG5cdFx0Xy5kZWxheSh3aW5kb3dSZXNpemVDYWxsYmFjaywgTWFnaWNzLlRpbWUxcyk7XG5cblx0XHRFdmVudHMuc3ViKCdzc20ubW9iaWxlLWVudGVyJywgKCkgPT4ge1xuXHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCdzc20ubW9iaWxlLWxlYXZlJywgKCkgPT4ge1xuXHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKCFtb2JpbGUpIHtcblx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1kZXNrdG9wJyk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnbW9iaWxlJyxcblx0XHRcdFx0cXVlcnk6ICcobWF4LXdpZHRoOiA3NjdweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLW1vYmlsZScpO1xuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3NzbS5tb2JpbGUtbGVhdmUnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAndGFibGV0Jyxcblx0XHRcdFx0cXVlcnk6ICcobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5OXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLXRhYmxldCcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTAwMHB4KSBhbmQgKG1heC13aWR0aDogMTQwMHB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICdkZXNrdG9wLWxhcmdlJyxcblx0XHRcdFx0cXVlcnk6ICcobWluLXdpZHRoOiAxNDAxcHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wLWxhcmdlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLW1vYmlsZScpLmFkZENsYXNzKCdybC1tb2JpbGUnKTtcblx0XHRcdEV2ZW50cy5wdWIoJ3NzbS5tb2JpbGUtZW50ZXInKTtcblx0XHR9XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC5zdWJzY3JpYmUoKGJWYWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtZGlzYWJsZWQnLCBiVmFsdWUpO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtZW5hYmxlZCcsICFiVmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0bGVmdFBhbmVsVHlwZS5zdWJzY3JpYmUoKHNWYWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtbm9uZScsICdub25lJyA9PT0gc1ZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLXNob3J0JywgJ3Nob3J0JyA9PT0gc1ZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbERpc2FibGVkLnZhbHVlSGFzTXV0YXRlZCgpO1xuXG5cdFx0TGFuZ3VhZ2VTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdFRoZW1lU3RvcmUucG9wdWxhdGUoKTtcblx0XHRTb2NpYWxTdG9yZS5wb3B1bGF0ZSgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QXBwLCBBYnN0cmFjdEFwcCBhcyBkZWZhdWx0IH07XG4iLCJleHBvcnQgY2xhc3MgQWJzdHJhY3RCb290IHtcblx0Ym9vdHN0YXJ0KCkge1xuXHRcdC8qIG5vLWVtcHR5ICovXG5cdH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RSYWRpbyBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlO1xuXHRcdGlmIChpc1VuZCh0aGlzLnZhbHVlKSB8fCAhdGhpcy52YWx1ZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR9XG5cblx0XHR0aGlzLmlubGluZSA9IGlzVW5kKHBhcmFtcy5pbmxpbmUpID8gZmFsc2UgOiBwYXJhbXMuaW5saW5lO1xuXHRcdHRoaXMucmVhZE9ubHkgPSBpc1VuZChwYXJhbXMucmVhZE9ubHkpID8gZmFsc2UgOiAhIXBhcmFtcy5yZWFkT25seTtcblxuXHRcdGlmIChwYXJhbXMudmFsdWVzKSB7XG5cdFx0XHR0aGlzLnZhbHVlcyhfLm1hcChwYXJhbXMudmFsdWVzLCAobGFiZWwsIHZhbHVlKSA9PiAoeyBsYWJlbDogbGFiZWwsIHZhbHVlOiB2YWx1ZSB9KSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xpY2sgPSBfLmJpbmQodGhpcy5jbGljaywgdGhpcyk7XG5cdH1cblxuXHRjbGljayh2YWx1ZSkge1xuXHRcdGlmICghdGhpcy5yZWFkT25seSAmJiB2YWx1ZSkge1xuXHRcdFx0dGhpcy52YWx1ZSh2YWx1ZS52YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0UmFkaW8sIEFic3RyYWN0UmFkaW8gYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCwgcEludCwgZnJpZW5kbHlTaXplLCBtaW1lQ29udGVudFR5cGUsIGdldEZpbGVFeHRlbnNpb24gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBzdGF0aWNJY29uQ2xhc3MsIHN0YXRpY0ZpbGVUeXBlIH0gZnJvbSAnTW9kZWwvQXR0YWNobWVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIENvbXBvc2VBdHRhY2htZW50TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gc2l6ZSA9IG51bGxcblx0ICogQHBhcmFtIHtib29sZWFuPX0gaXNJbmxpbmUgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0xpbmtlZCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gQ0lEID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBjb250ZW50TG9jYXRpb24gPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IoaWQsIGZpbGVOYW1lLCBzaXplID0gbnVsbCwgaXNJbmxpbmUgPSBmYWxzZSwgaXNMaW5rZWQgPSBmYWxzZSwgQ0lEID0gJycsIGNvbnRlbnRMb2NhdGlvbiA9ICcnKSB7XG5cdFx0c3VwZXIoJ0NvbXBvc2VBdHRhY2htZW50TW9kZWwnKTtcblxuXHRcdHRoaXMuaWQgPSBpZDtcblx0XHR0aGlzLmlzSW5saW5lID0gISFpc0lubGluZTtcblx0XHR0aGlzLmlzTGlua2VkID0gISFpc0xpbmtlZDtcblx0XHR0aGlzLkNJRCA9IENJRDtcblx0XHR0aGlzLmNvbnRlbnRMb2NhdGlvbiA9IGNvbnRlbnRMb2NhdGlvbjtcblx0XHR0aGlzLmZyb21NZXNzYWdlID0gZmFsc2U7XG5cblx0XHR0aGlzLmZpbGVOYW1lID0ga28ub2JzZXJ2YWJsZShmaWxlTmFtZSk7XG5cdFx0dGhpcy5zaXplID0ga28ub2JzZXJ2YWJsZShzaXplKTtcblx0XHR0aGlzLnRlbXBOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnByb2dyZXNzID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy53YWl0aW5nID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnVwbG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb21wbGV0ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5wcm9ncmVzc1RleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5wcm9ncmVzcygpO1xuXHRcdFx0cmV0dXJuIDAgPT09IHAgPyAnJyA6ICcnICsgKDk4IDwgcCA/IDEwMCA6IHApICsgJyUnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wcm9ncmVzc1N0eWxlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IHRoaXMucHJvZ3Jlc3MoKTtcblx0XHRcdHJldHVybiAwID09PSBwID8gJycgOiAnd2lkdGg6JyArICg5OCA8IHAgPyAxMDAgOiBwKSArICclJztcblx0XHR9KTtcblxuXHRcdHRoaXMudGl0bGUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBlcnJvciA9IHRoaXMuZXJyb3IoKTtcblx0XHRcdHJldHVybiAnJyAhPT0gZXJyb3IgPyBlcnJvciA6IHRoaXMuZmlsZU5hbWUoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZnJpZW5kbHlTaXplID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbG9jYWxTaXplID0gdGhpcy5zaXplKCk7XG5cdFx0XHRyZXR1cm4gbnVsbCA9PT0gbG9jYWxTaXplID8gJycgOiBmcmllbmRseVNpemUobG9jYWxTaXplKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWltZVR5cGUgPSBrby5jb21wdXRlZCgoKSA9PiBtaW1lQ29udGVudFR5cGUodGhpcy5maWxlTmFtZSgpKSk7XG5cdFx0dGhpcy5maWxlRXh0ID0ga28uY29tcHV0ZWQoKCkgPT4gZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmZpbGVOYW1lKCkpKTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoW1xuXHRcdFx0dGhpcy5wcm9ncmVzc1RleHQsXG5cdFx0XHR0aGlzLnByb2dyZXNzU3R5bGUsXG5cdFx0XHR0aGlzLnRpdGxlLFxuXHRcdFx0dGhpcy5mcmllbmRseVNpemUsXG5cdFx0XHR0aGlzLm1pbWVUeXBlLFxuXHRcdFx0dGhpcy5maWxlRXh0XG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbkNvbXBvc2VBdHRhY2htZW50fSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5VXBsb2FkSnNvbihqc29uKSB7XG5cdFx0bGV0IGJSZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbikge1xuXHRcdFx0dGhpcy5maWxlTmFtZShqc29uLk5hbWUpO1xuXHRcdFx0dGhpcy5zaXplKGlzVW5kKGpzb24uU2l6ZSkgPyAwIDogcEludChqc29uLlNpemUpKTtcblx0XHRcdHRoaXMudGVtcE5hbWUoaXNVbmQoanNvbi5UZW1wTmFtZSkgPyAnJyA6IGpzb24uVGVtcE5hbWUpO1xuXHRcdFx0dGhpcy5pc0lubGluZSA9IGZhbHNlO1xuXG5cdFx0XHRiUmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYlJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aWNvbkNsYXNzKCkge1xuXHRcdHJldHVybiBzdGF0aWNJY29uQ2xhc3Moc3RhdGljRmlsZVR5cGUodGhpcy5maWxlRXh0KCksIHRoaXMubWltZVR5cGUoKSkpWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRpY29uVGV4dCgpIHtcblx0XHRyZXR1cm4gc3RhdGljSWNvbkNsYXNzKHN0YXRpY0ZpbGVUeXBlKHRoaXMuZmlsZUV4dCgpLCB0aGlzLm1pbWVUeXBlKCkpKVsxXTtcblx0fVxufVxuXG5leHBvcnQgeyBDb21wb3NlQXR0YWNobWVudE1vZGVsLCBDb21wb3NlQXR0YWNobWVudE1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENvbnRhY3RQcm9wZXJ0eVR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIENvbnRhY3RQcm9wZXJ0eU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcj19IHR5cGUgPSBFbnVtcy5Db250YWN0UHJvcGVydHlUeXBlLlVua25vd25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSB0eXBlU3RyID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSB2YWx1ZSA9ICcnXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGZvY3VzZWQgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHBsYWNlaG9sZGVyID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKHR5cGUgPSBDb250YWN0UHJvcGVydHlUeXBlLlVua25vd24sIHR5cGVTdHIgPSAnJywgdmFsdWUgPSAnJywgZm9jdXNlZCA9IGZhbHNlLCBwbGFjZWhvbGRlciA9ICcnKSB7XG5cdFx0c3VwZXIoJ0NvbnRhY3RQcm9wZXJ0eU1vZGVsJyk7XG5cblx0XHR0aGlzLnR5cGUgPSBrby5vYnNlcnZhYmxlKHBJbnQodHlwZSkpO1xuXHRcdHRoaXMudHlwZVN0ciA9IGtvLm9ic2VydmFibGUocFN0cmluZyh0eXBlU3RyKSk7XG5cdFx0dGhpcy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZSghIWZvY3VzZWQpO1xuXHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKHBTdHJpbmcodmFsdWUpKTtcblxuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBrby5vYnNlcnZhYmxlKHBsYWNlaG9sZGVyKTtcblxuXHRcdHRoaXMucGxhY2Vob2xkZXJWYWx1ZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHYgPSB0aGlzLnBsYWNlaG9sZGVyKCk7XG5cdFx0XHRyZXR1cm4gdiA/IGkxOG4odikgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMubGFyZ2VWYWx1ZSA9IGtvLmNvbXB1dGVkKCgpID0+IENvbnRhY3RQcm9wZXJ0eVR5cGUuTm90ZSA9PT0gdGhpcy50eXBlKCkpO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhbdGhpcy5wbGFjZWhvbGRlclZhbHVlLCB0aGlzLmxhcmdlVmFsdWVdKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb250YWN0UHJvcGVydHlNb2RlbCwgQ29udGFjdFByb3BlcnR5TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuLy8gRWRnZSAxNC0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoU0VBUkNILCBuYXRpdmVTZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc2VhcmNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gc2VhcmNoZXIgIT09IHVuZGVmaW5lZCA/IHNlYXJjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24sIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIsIG5vb3AsIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0ZvbGRlclN5c3RlbScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNGb2xkZXJTeXN0ZW0nXG59KVxuY2xhc3MgRm9sZGVyU3lzdGVtUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnNDaG9vc2VPblRleHQgPSAnJztcblx0XHR0aGlzLnNVbnVzZVRleHQgPSAnJztcblxuXHRcdGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKCgpID0+IHtcblx0XHRcdHRoaXMuc0Nob29zZU9uVGV4dCA9IGkxOG4oJ1BPUFVQU19TWVNURU1fRk9MREVSUy9TRUxFQ1RfQ0hPT1NFX09ORScpO1xuXHRcdFx0dGhpcy5zVW51c2VUZXh0ID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL1NFTEVDVF9VTlVTRV9OQU1FJyk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm5vdGlmaWNhdGlvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5mb2xkZXJTZWxlY3RMaXN0ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0W10sXG5cdFx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QoKSxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdFN5c3RlbU5hbWVzKCksXG5cdFx0XHRcdFtcblx0XHRcdFx0XHRbJycsIHRoaXMuc0Nob29zZU9uVGV4dF0sXG5cdFx0XHRcdFx0W1VOVVNFRF9PUFRJT05fVkFMVUUsIHRoaXMuc1VudXNlVGV4dF1cblx0XHRcdFx0XSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHR0aGlzLnNlbnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyO1xuXHRcdHRoaXMuZHJhZnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcjtcblx0XHR0aGlzLnNwYW1Gb2xkZXIgPSBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyO1xuXHRcdHRoaXMudHJhc2hGb2xkZXIgPSBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcjtcblx0XHR0aGlzLmFyY2hpdmVGb2xkZXIgPSBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyO1xuXG5cdFx0Y29uc3QgZlNldFN5c3RlbUZvbGRlcnMgPSAoKSA9PiB7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdTZW50Rm9sZGVyJywgRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0RyYWZ0Rm9sZGVyJywgRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdTcGFtRm9sZGVyJywgRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1RyYXNoRm9sZGVyJywgRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdBcmNoaXZlRm9sZGVyJywgRm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcigpKTtcblx0XHRcdH0sXG5cdFx0XHRmU2F2ZVN5c3RlbUZvbGRlcnMgPSBfLmRlYm91bmNlKCgpID0+IHtcblx0XHRcdFx0ZlNldFN5c3RlbUZvbGRlcnMoKTtcblx0XHRcdFx0UmVtb3RlLnNhdmVTeXN0ZW1Gb2xkZXJzKG5vb3AsIHtcblx0XHRcdFx0XHRTZW50Rm9sZGVyOiBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCksXG5cdFx0XHRcdFx0RHJhZnRGb2xkZXI6IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdFx0U3BhbUZvbGRlcjogRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpLFxuXHRcdFx0XHRcdFRyYXNoRm9sZGVyOiBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpLFxuXHRcdFx0XHRcdEFyY2hpdmVGb2xkZXI6IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSxcblx0XHRcdFx0XHROdWxsRm9sZGVyOiAnTnVsbEZvbGRlcidcblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTFzKSxcblx0XHRcdGZDYWxsYmFjayA9ICgpID0+IHtcblx0XHRcdFx0ZlNldFN5c3RlbUZvbGRlcnMoKTtcblx0XHRcdFx0ZlNhdmVTeXN0ZW1Gb2xkZXJzKCk7XG5cdFx0XHR9O1xuXG5cdFx0Rm9sZGVyU3RvcmUuc2VudEZvbGRlci5zdWJzY3JpYmUoZkNhbGxiYWNrKTtcblx0XHRGb2xkZXJTdG9yZS5kcmFmdEZvbGRlci5zdWJzY3JpYmUoZkNhbGxiYWNrKTtcblx0XHRGb2xkZXJTdG9yZS5zcGFtRm9sZGVyLnN1YnNjcmliZShmQ2FsbGJhY2spO1xuXHRcdEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyLnN1YnNjcmliZShmQ2FsbGJhY2spO1xuXHRcdEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIuc3Vic2NyaWJlKGZDYWxsYmFjayk7XG5cblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcj19IG5vdGlmaWNhdGlvblR5cGUgPSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLk5vbmVcblx0ICovXG5cdG9uU2hvdyhub3RpZmljYXRpb25UeXBlID0gU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5Ob25lKSB7XG5cdFx0bGV0IG5vdGlmaWNhdGlvbiA9ICcnO1xuXHRcdHN3aXRjaCAobm90aWZpY2F0aW9uVHlwZSkge1xuXHRcdFx0Y2FzZSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLlNlbnQ6XG5cdFx0XHRcdG5vdGlmaWNhdGlvbiA9IGkxOG4oJ1BPUFVQU19TWVNURU1fRk9MREVSUy9OT1RJRklDQVRJT05fU0VOVCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5EcmFmdDpcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL05PVElGSUNBVElPTl9EUkFGVFMnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uU3BhbTpcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL05PVElGSUNBVElPTl9TUEFNJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLlRyYXNoOlxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvTk9USUZJQ0FUSU9OX1RSQVNIJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLkFyY2hpdmU6XG5cdFx0XHRcdG5vdGlmaWNhdGlvbiA9IGkxOG4oJ1BPUFVQU19TWVNURU1fRk9MREVSUy9OT1RJRklDQVRJT05fQVJDSElWRScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cblx0XHR0aGlzLm5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlclN5c3RlbVBvcHVwVmlldywgRm9sZGVyU3lzdGVtUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RCYXNpY1Byb21pc2VzIHtcblx0b1Byb21pc2VzU3RhY2sgPSB7fTtcblxuXHRmdW5jKGZGdW5jKSB7XG5cdFx0ZkZ1bmMoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGZhc3RSZXNvbHZlKG1EYXRhKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnJlc29sdmUobURhdGEpO1xuXHR9XG5cblx0ZmFzdFJlamVjdChtRGF0YSkge1xuXHRcdHJldHVybiB3aW5kb3cuUHJvbWlzZS5yZWplY3QobURhdGEpO1xuXHR9XG5cblx0c2V0VHJpZ2dlcih0cmlnZ2VyLCB2YWx1ZSkge1xuXHRcdGlmICh0cmlnZ2VyKSB7XG5cdFx0XHR2YWx1ZSA9ICEhdmFsdWU7XG5cdFx0XHQoaXNBcnJheSh0cmlnZ2VyKSA/IHRyaWdnZXIgOiBbdHJpZ2dlcl0pLmZvckVhY2goKGZUcmlnZ2VyKSA9PiB7XG5cdFx0XHRcdGlmIChmVHJpZ2dlcikge1xuXHRcdFx0XHRcdGZUcmlnZ2VyKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCB7IENhcGEsIE1hZ2ljcywgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuY2xhc3MgQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxvZ29JbWcgPSB0cmltKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTG9nbycpKTtcblx0XHR0aGlzLmxvZ29UaXRsZSA9IHRyaW0oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMb2dvVGl0bGUnKSk7XG5cblx0XHR0aGlzLm1vYmlsZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXHRcdHRoaXMubW9iaWxlRGV2aWNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlRGV2aWNlJyk7XG5cblx0XHR0aGlzLmFsbG93U2V0dGluZ3MgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5TZXR0aW5ncyk7XG5cdFx0dGhpcy5hbGxvd0hlbHAgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5IZWxwKTtcblxuXHRcdHRoaXMuY3VycmVudEF1ZGlvID0gQXBwU3RvcmUuY3VycmVudEF1ZGlvO1xuXG5cdFx0dGhpcy5hY2NvdW50RW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWw7XG5cblx0XHR0aGlzLmFjY291bnRzID0gQWNjb3VudFN0b3JlLmFjY291bnRzO1xuXHRcdHRoaXMuYWNjb3VudHNVbnJlYWRDb3VudCA9IEFjY291bnRTdG9yZS5hY2NvdW50c1VucmVhZENvdW50O1xuXG5cdFx0dGhpcy5hY2NvdW50TWVudURyb3Bkb3duVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2FwYUFkZGl0aW9uYWxBY2NvdW50cyA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cykpO1xuXG5cdFx0dGhpcy5hZGRBY2NvdW50Q2xpY2sgPSBfLmJpbmQodGhpcy5hZGRBY2NvdW50Q2xpY2ssIHRoaXMpO1xuXG5cdFx0RXZlbnRzLnN1YignYXVkaW8uc3RvcCcsICgpID0+IEFwcFN0b3JlLmN1cnJlbnRBdWRpbygnJykpO1xuXHRcdEV2ZW50cy5zdWIoJ2F1ZGlvLnN0YXJ0JywgKG5hbWUpID0+IEFwcFN0b3JlLmN1cnJlbnRBdWRpbyhuYW1lKSk7XG5cdH1cblxuXHRzdG9wUGxheSgpIHtcblx0XHRFdmVudHMucHViKCdhdWRpby5hcGkuc3RvcCcpO1xuXHR9XG5cblx0YWNjb3VudENsaWNrKGFjY291bnQsIGV2ZW50KSB7XG5cdFx0aWYgKGFjY291bnQgJiYgZXZlbnQgJiYgIWlzVW5kKGV2ZW50LndoaWNoKSAmJiAxID09PSBldmVudC53aGljaCkge1xuXHRcdFx0QWNjb3VudFN0b3JlLmFjY291bnRzLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IEFjY291bnRTdG9yZS5hY2NvdW50cy5sb2FkaW5nKGZhbHNlKSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRlbWFpbFRpdGxlKCkge1xuXHRcdHJldHVybiBBY2NvdW50U3RvcmUuZW1haWwoKTtcblx0fVxuXG5cdHNldHRpbmdzQ2xpY2soKSB7XG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5TZXR0aW5ncykpIHtcblx0XHRcdHNldEhhc2goc2V0dGluZ3MoKSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0dGluZ3NIZWxwKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuSGVscCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0tleWJvYXJkU2hvcnRjdXRzSGVscCcpKTtcblx0XHR9XG5cdH1cblxuXHRhZGRBY2NvdW50Q2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuY2FwYUFkZGl0aW9uYWxBY2NvdW50cygpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9BY2NvdW50JykpO1xuXHRcdH1cblx0fVxuXG5cdGxvZ291dENsaWNrKCkge1xuXHRcdGdldEFwcCgpLmxvZ291dCgpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRrZXkoJ2AnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCBLZXlTdGF0ZS5TZXR0aW5nc10sICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUZ1bGxTY3JlZW5Nb2RlKGZhbHNlKTtcblx0XHRcdFx0dGhpcy5hY2NvdW50TWVudURyb3Bkb3duVHJpZ2dlcih0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIHNob3J0Y3V0cyBoZWxwXG5cdFx0a2V5KCdzaGlmdCsvJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgS2V5U3RhdGUuU2V0dGluZ3NdLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy52aWV3TW9kZWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJykpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcsIEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpbkFycmF5LCBub29wLCBub29wVHJ1ZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmNsYXNzIFNlbGVjdG9yIHtcblx0bGlzdDtcblx0bGlzdENoZWNrZWQ7XG5cdGlzTGlzdENoZWNrZWQ7XG5cblx0Zm9jdXNlZEl0ZW07XG5cdHNlbGVjdGVkSXRlbTtcblxuXHRpdGVtU2VsZWN0ZWRUaHJvdHRsZTtcblxuXHRzZWxlY3RlZEl0ZW1Vc2VDYWxsYmFjayA9IHRydWU7XG5cblx0aVNlbGVjdE5leHRIZWxwZXIgPSAwO1xuXHRpRm9jdXNlZE5leHRIZWxwZXIgPSAwO1xuXHRvQ29udGVudFZpc2libGU7XG5cdG9Db250ZW50U2Nyb2xsYWJsZTtcblxuXHRzSXRlbVNlbGVjdG9yO1xuXHRzSXRlbVNlbGVjdGVkU2VsZWN0b3I7XG5cdHNJdGVtQ2hlY2tlZFNlbGVjdG9yO1xuXHRzSXRlbUZvY3VzZWRTZWxlY3RvcjtcblxuXHRzTGFzdFVpZCA9ICcnO1xuXHRvQ2FsbGJhY2tzID0ge307XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7a29Qcm9wZXJ0eX0ga29MaXN0XG5cdCAqIEBwYXJhbSB7a29Qcm9wZXJ0eX0ga29TZWxlY3RlZEl0ZW1cblx0ICogQHBhcmFtIHtrb1Byb3BlcnR5fSBrb0ZvY3VzZWRJdGVtXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSXRlbVNlbGVjdG9yXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSXRlbVNlbGVjdGVkU2VsZWN0b3Jcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtQ2hlY2tlZFNlbGVjdG9yXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSXRlbUZvY3VzZWRTZWxlY3RvclxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0a29MaXN0LFxuXHRcdGtvU2VsZWN0ZWRJdGVtLFxuXHRcdGtvRm9jdXNlZEl0ZW0sXG5cdFx0c0l0ZW1TZWxlY3Rvcixcblx0XHRzSXRlbVNlbGVjdGVkU2VsZWN0b3IsXG5cdFx0c0l0ZW1DaGVja2VkU2VsZWN0b3IsXG5cdFx0c0l0ZW1Gb2N1c2VkU2VsZWN0b3Jcblx0KSB7XG5cdFx0dGhpcy5saXN0ID0ga29MaXN0O1xuXG5cdFx0dGhpcy5saXN0Q2hlY2tlZCA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMubGlzdCgpLCAoaXRlbSkgPT4gaXRlbS5jaGVja2VkKCkpKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cdFx0dGhpcy5pc0xpc3RDaGVja2VkID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMubGlzdENoZWNrZWQoKS5sZW5ndGgpO1xuXG5cdFx0dGhpcy5mb2N1c2VkSXRlbSA9IGtvRm9jdXNlZEl0ZW0gfHwga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IGtvU2VsZWN0ZWRJdGVtIHx8IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLml0ZW1TZWxlY3RlZFRocm90dGxlID0gXy5kZWJvdW5jZShfLmJpbmQodGhpcy5pdGVtU2VsZWN0ZWQsIHRoaXMpLCAzMDApO1xuXG5cdFx0dGhpcy5saXN0Q2hlY2tlZC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG5cdFx0XHRpZiAoMCA8IGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAobnVsbCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW0oKSkge1xuXHRcdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbShudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmF1dG9TZWxlY3QoKSAmJiB0aGlzLmZvY3VzZWRJdGVtKCkpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0odGhpcy5mb2N1c2VkSXRlbSgpKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0aWYgKHRoaXMuaXNMaXN0Q2hlY2tlZCgpKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKHRoaXMubGlzdENoZWNrZWQoKSwgKHN1Ykl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdHN1Ykl0ZW0uY2hlY2tlZChmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW1Vc2VDYWxsYmFjaykge1xuXHRcdFx0XHRcdHRoaXMuaXRlbVNlbGVjdGVkVGhyb3R0bGUoaXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEl0ZW1Vc2VDYWxsYmFjaykge1xuXHRcdFx0XHR0aGlzLml0ZW1TZWxlY3RlZChudWxsKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW0uZXh0ZW5kKHsgdG9nZ2xlU3Vic2NyaWJlUHJvcGVydHk6IFt0aGlzLCAnc2VsZWN0ZWQnXSB9KTtcblx0XHR0aGlzLmZvY3VzZWRJdGVtID0gdGhpcy5mb2N1c2VkSXRlbS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW251bGwsICdmb2N1c2VkJ10gfSk7XG5cblx0XHR0aGlzLnNJdGVtU2VsZWN0b3IgPSBzSXRlbVNlbGVjdG9yO1xuXHRcdHRoaXMuc0l0ZW1TZWxlY3RlZFNlbGVjdG9yID0gc0l0ZW1TZWxlY3RlZFNlbGVjdG9yO1xuXHRcdHRoaXMuc0l0ZW1DaGVja2VkU2VsZWN0b3IgPSBzSXRlbUNoZWNrZWRTZWxlY3Rvcjtcblx0XHR0aGlzLnNJdGVtRm9jdXNlZFNlbGVjdG9yID0gc0l0ZW1Gb2N1c2VkU2VsZWN0b3I7XG5cblx0XHR0aGlzLmZvY3VzZWRJdGVtLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0dGhpcy5zTGFzdFVpZCA9IHRoaXMuZ2V0SXRlbVVpZChpdGVtKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdGxldCBhQ2FjaGUgPSBbXSxcblx0XHRcdGFDaGVja2VkQ2FjaGUgPSBbXSxcblx0XHRcdG1Gb2N1c2VkID0gbnVsbCxcblx0XHRcdG1TZWxlY3RlZCA9IG51bGw7XG5cblx0XHR0aGlzLmxpc3Quc3Vic2NyaWJlKFxuXHRcdFx0KGl0ZW1zKSA9PiB7XG5cdFx0XHRcdGlmIChpc0FycmF5KGl0ZW1zKSkge1xuXHRcdFx0XHRcdF8uZWFjaChpdGVtcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHVpZCA9IHRoaXMuZ2V0SXRlbVVpZChpdGVtKTtcblxuXHRcdFx0XHRcdFx0XHRhQ2FjaGUucHVzaCh1aWQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5jaGVja2VkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRhQ2hlY2tlZENhY2hlLnB1c2godWlkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAobnVsbCA9PT0gbUZvY3VzZWQgJiYgaXRlbS5mb2N1c2VkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRtRm9jdXNlZCA9IHVpZDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAobnVsbCA9PT0gbVNlbGVjdGVkICYmIGl0ZW0uc2VsZWN0ZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdG1TZWxlY3RlZCA9IHVpZDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcyxcblx0XHRcdCdiZWZvcmVDaGFuZ2UnXG5cdFx0KTtcblxuXHRcdHRoaXMubGlzdC5zdWJzY3JpYmUoKGFJdGVtcykgPT4ge1xuXHRcdFx0bGV0IHRlbXAgPSBudWxsLFxuXHRcdFx0XHRnZXROZXh0ID0gZmFsc2UsXG5cdFx0XHRcdGlzTmV4dEZvY3VzZWQgPSBtRm9jdXNlZCxcblx0XHRcdFx0aXNDaGVja2VkID0gZmFsc2UsXG5cdFx0XHRcdGlzU2VsZWN0ZWQgPSBmYWxzZSxcblx0XHRcdFx0bGVuID0gMDtcblxuXHRcdFx0Y29uc3QgdWlkcyA9IFtdO1xuXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrID0gZmFsc2U7XG5cblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0obnVsbCk7XG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbShudWxsKTtcblxuXHRcdFx0aWYgKGlzQXJyYXkoYUl0ZW1zKSkge1xuXHRcdFx0XHRsZW4gPSBhQ2hlY2tlZENhY2hlLmxlbmd0aDtcblxuXHRcdFx0XHRfLmVhY2goYUl0ZW1zLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHVpZCA9IHRoaXMuZ2V0SXRlbVVpZChpdGVtKTtcblx0XHRcdFx0XHR1aWRzLnB1c2godWlkKTtcblxuXHRcdFx0XHRcdGlmIChudWxsICE9PSBtRm9jdXNlZCAmJiBtRm9jdXNlZCA9PT0gdWlkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtKGl0ZW0pO1xuXHRcdFx0XHRcdFx0bUZvY3VzZWQgPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgwIDwgbGVuICYmIC0xIDwgaW5BcnJheSh1aWQsIGFDaGVja2VkQ2FjaGUpKSB7XG5cdFx0XHRcdFx0XHRpc0NoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aXRlbS5jaGVja2VkKHRydWUpO1xuXHRcdFx0XHRcdFx0bGVuIC09IDE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFpc0NoZWNrZWQgJiYgbnVsbCAhPT0gbVNlbGVjdGVkICYmIG1TZWxlY3RlZCA9PT0gdWlkKSB7XG5cdFx0XHRcdFx0XHRpc1NlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKGl0ZW0pO1xuXHRcdFx0XHRcdFx0bVNlbGVjdGVkID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtVXNlQ2FsbGJhY2sgPSB0cnVlO1xuXG5cdFx0XHRcdGlmICghaXNDaGVja2VkICYmICFpc1NlbGVjdGVkICYmIHRoaXMuYXV0b1NlbGVjdCgpKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZm9jdXNlZEl0ZW0oKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0odGhpcy5mb2N1c2VkSXRlbSgpKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKDAgPCBhSXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAobnVsbCAhPT0gaXNOZXh0Rm9jdXNlZCkge1xuXHRcdFx0XHRcdFx0XHRnZXROZXh0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGlzTmV4dEZvY3VzZWQgPSBfLmZpbmQoYUNhY2hlLCAoc1VpZCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChnZXROZXh0ICYmIC0xIDwgaW5BcnJheShzVWlkLCB1aWRzKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNVaWQ7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc05leHRGb2N1c2VkID09PSBzVWlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRnZXROZXh0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNOZXh0Rm9jdXNlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRlbXAgPSBfLmZpbmQoYUl0ZW1zLCAob0l0ZW0pID0+IGlzTmV4dEZvY3VzZWQgPT09IHRoaXMuZ2V0SXRlbVVpZChvSXRlbSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKHRlbXAgfHwgbnVsbCk7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoMCAhPT0gdGhpcy5pU2VsZWN0TmV4dEhlbHBlciB8fCAwICE9PSB0aGlzLmlGb2N1c2VkTmV4dEhlbHBlcikgJiZcblx0XHRcdFx0XHQwIDwgYUl0ZW1zLmxlbmd0aCAmJlxuXHRcdFx0XHRcdCF0aGlzLmZvY3VzZWRJdGVtKClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGVtcCA9IG51bGw7XG5cdFx0XHRcdFx0aWYgKDAgIT09IHRoaXMuaUZvY3VzZWROZXh0SGVscGVyKSB7XG5cdFx0XHRcdFx0XHR0ZW1wID0gYUl0ZW1zWy0xID09PSB0aGlzLmlGb2N1c2VkTmV4dEhlbHBlciA/IGFJdGVtcy5sZW5ndGggLSAxIDogMF0gfHwgbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIXRlbXAgJiYgMCAhPT0gdGhpcy5pU2VsZWN0TmV4dEhlbHBlcikge1xuXHRcdFx0XHRcdFx0dGVtcCA9IGFJdGVtc1stMSA9PT0gdGhpcy5pU2VsZWN0TmV4dEhlbHBlciA/IGFJdGVtcy5sZW5ndGggLSAxIDogMF0gfHwgbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGVtcCkge1xuXHRcdFx0XHRcdFx0aWYgKDAgIT09IHRoaXMuaVNlbGVjdE5leHRIZWxwZXIpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0odGVtcCB8fCBudWxsKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbSh0ZW1wIHx8IG51bGwpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLnNjcm9sbFRvRm9jdXNlZCgpO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCksIDEwMCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5pU2VsZWN0TmV4dEhlbHBlciA9IDA7XG5cdFx0XHRcdFx0dGhpcy5pRm9jdXNlZE5leHRIZWxwZXIgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGFDYWNoZSA9IFtdO1xuXHRcdFx0YUNoZWNrZWRDYWNoZSA9IFtdO1xuXHRcdFx0bUZvY3VzZWQgPSBudWxsO1xuXHRcdFx0bVNlbGVjdGVkID0gbnVsbDtcblx0XHR9KTtcblx0fVxuXG5cdGl0ZW1TZWxlY3RlZChpdGVtKSB7XG5cdFx0aWYgKHRoaXMuaXNMaXN0Q2hlY2tlZCgpKSB7XG5cdFx0XHRpZiAoIWl0ZW0pIHtcblx0XHRcdFx0KHRoaXMub0NhbGxiYWNrcy5vbkl0ZW1TZWxlY3QgfHwgbm9vcCkoaXRlbSB8fCBudWxsKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGl0ZW0pIHtcblx0XHRcdCh0aGlzLm9DYWxsYmFja3Mub25JdGVtU2VsZWN0IHx8IG5vb3ApKGl0ZW0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlU2VsZWN0XG5cdCAqL1xuXHRnb0Rvd24oZm9yY2VTZWxlY3QpIHtcblx0XHR0aGlzLm5ld1NlbGVjdFBvc2l0aW9uKEV2ZW50S2V5Q29kZS5Eb3duLCBmYWxzZSwgZm9yY2VTZWxlY3QpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VTZWxlY3Rcblx0ICovXG5cdGdvVXAoZm9yY2VTZWxlY3QpIHtcblx0XHR0aGlzLm5ld1NlbGVjdFBvc2l0aW9uKEV2ZW50S2V5Q29kZS5VcCwgZmFsc2UsIGZvcmNlU2VsZWN0KTtcblx0fVxuXG5cdHVuc2VsZWN0KCkge1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtKG51bGwpO1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW0obnVsbCk7XG5cdH1cblxuXHRpbml0KGNvbnRlbnRWaXNpYmxlLCBjb250ZW50U2Nyb2xsYWJsZSwga2V5U2NvcGUgPSAnYWxsJykge1xuXHRcdHRoaXMub0NvbnRlbnRWaXNpYmxlID0gY29udGVudFZpc2libGU7XG5cdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUgPSBjb250ZW50U2Nyb2xsYWJsZTtcblxuXHRcdGlmICh0aGlzLm9Db250ZW50VmlzaWJsZSAmJiB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSkge1xuXHRcdFx0JCh0aGlzLm9Db250ZW50VmlzaWJsZSlcblx0XHRcdFx0Lm9uKCdzZWxlY3RzdGFydCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignY2xpY2snLCB0aGlzLnNJdGVtU2VsZWN0b3IsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uQ2xpY2soa28uZGF0YUZvcihldmVudC5jdXJyZW50VGFyZ2V0KSwgZXZlbnQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oJ2NsaWNrJywgdGhpcy5zSXRlbUNoZWNrZWRTZWxlY3RvciwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IGtvLmRhdGFGb3IoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbkNsaWNrKGl0ZW0sIGV2ZW50KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0oaXRlbSk7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2hlY2tlZCghaXRlbS5jaGVja2VkKCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdGtleSgnZW50ZXInLCBrZXlTY29wZSwgKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5mb2N1c2VkSXRlbSgpICYmICF0aGlzLmZvY3VzZWRJdGVtKCkuc2VsZWN0ZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uQ2xpY2sodGhpcy5mb2N1c2VkSXRlbSgpKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRrZXkoJ2N0cmwrdXAsIGNvbW1hbmQrdXAsIGN0cmwrZG93biwgY29tbWFuZCtkb3duJywga2V5U2NvcGUsICgpID0+IGZhbHNlKTtcblxuXHRcdFx0a2V5KCd1cCwgc2hpZnQrdXAsIGRvd24sIHNoaWZ0K2Rvd24sIGhvbWUsIGVuZCwgcGFnZXVwLCBwYWdlZG93biwgaW5zZXJ0LCBzcGFjZScsIGtleVNjb3BlLCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGhhbmRsZXIgJiYgaGFuZGxlci5zaG9ydGN1dCkge1xuXHRcdFx0XHRcdGxldCBldmVudEtleSA9IDA7XG5cdFx0XHRcdFx0c3dpdGNoIChoYW5kbGVyLnNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0XHRjYXNlICd1cCc6XG5cdFx0XHRcdFx0XHRjYXNlICdzaGlmdCt1cCc6XG5cdFx0XHRcdFx0XHRcdGV2ZW50S2V5ID0gRXZlbnRLZXlDb2RlLlVwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2Rvd24nOlxuXHRcdFx0XHRcdFx0Y2FzZSAnc2hpZnQrZG93bic6XG5cdFx0XHRcdFx0XHRcdGV2ZW50S2V5ID0gRXZlbnRLZXlDb2RlLkRvd247XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnaW5zZXJ0Jzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuSW5zZXJ0O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3NwYWNlJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuU3BhY2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnaG9tZSc6XG5cdFx0XHRcdFx0XHRcdGV2ZW50S2V5ID0gRXZlbnRLZXlDb2RlLkhvbWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZW5kJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuRW5kO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3BhZ2V1cCc6XG5cdFx0XHRcdFx0XHRcdGV2ZW50S2V5ID0gRXZlbnRLZXlDb2RlLlBhZ2VVcDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdwYWdlZG93bic6XG5cdFx0XHRcdFx0XHRcdGV2ZW50S2V5ID0gRXZlbnRLZXlDb2RlLlBhZ2VEb3duO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoMCA8IGV2ZW50S2V5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm5ld1NlbGVjdFBvc2l0aW9uKGV2ZW50S2V5LCBrZXkuc2hpZnQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0YXV0b1NlbGVjdCgpIHtcblx0XHRyZXR1cm4gISEodGhpcy5vQ2FsbGJhY2tzLm9uQXV0b1NlbGVjdCB8fCBub29wVHJ1ZSkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHVwXG5cdCAqL1xuXHRkb1VwVXBPckRvd25Eb3duKHVwKSB7XG5cdFx0KHRoaXMub0NhbGxiYWNrcy5vblVwVXBPckRvd25Eb3duIHx8IG5vb3BUcnVlKSghIXVwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb0l0ZW1cblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldEl0ZW1VaWQoaXRlbSkge1xuXHRcdGxldCB1aWQgPSAnJztcblxuXHRcdGNvbnN0IGdldEl0ZW1VaWRDYWxsYmFjayA9IHRoaXMub0NhbGxiYWNrcy5vbkl0ZW1HZXRVaWQgfHwgbnVsbDtcblx0XHRpZiAoZ2V0SXRlbVVpZENhbGxiYWNrICYmIGl0ZW0pIHtcblx0XHRcdHVpZCA9IGdldEl0ZW1VaWRDYWxsYmFjayhpdGVtKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdWlkLnRvU3RyaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlFdmVudEtleUNvZGVcblx0ICogQHBhcmFtIHtib29sZWFufSBiU2hpZnRLZXlcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvcmNlU2VsZWN0ID0gZmFsc2Vcblx0ICovXG5cdG5ld1NlbGVjdFBvc2l0aW9uKGlFdmVudEtleUNvZGUsIGJTaGlmdEtleSwgYkZvcmNlU2VsZWN0KSB7XG5cdFx0bGV0IGluZGV4ID0gMCxcblx0XHRcdGlzTmV4dCA9IGZhbHNlLFxuXHRcdFx0aXNTdG9wID0gZmFsc2UsXG5cdFx0XHRyZXN1bHQgPSBudWxsO1xuXG5cdFx0Y29uc3QgcGFnZVN0ZXAgPSAxMCxcblx0XHRcdGxpc3QgPSB0aGlzLmxpc3QoKSxcblx0XHRcdGxpc3RMZW4gPSBsaXN0ID8gbGlzdC5sZW5ndGggOiAwLFxuXHRcdFx0Zm9jdXNlZCA9IHRoaXMuZm9jdXNlZEl0ZW0oKTtcblxuXHRcdGlmICgwIDwgbGlzdExlbikge1xuXHRcdFx0aWYgKCFmb2N1c2VkKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuRG93biA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5JbnNlcnQgPT09IGlFdmVudEtleUNvZGUgfHxcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuU3BhY2UgPT09IGlFdmVudEtleUNvZGUgfHxcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuSG9tZSA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5QYWdlVXAgPT09IGlFdmVudEtleUNvZGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gbGlzdFswXTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuVXAgPT09IGlFdmVudEtleUNvZGUgfHxcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuRW5kID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLlBhZ2VEb3duID09PSBpRXZlbnRLZXlDb2RlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGxpc3RbbGlzdC5sZW5ndGggLSAxXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChmb2N1c2VkKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuRG93biA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5JbnNlcnQgPT09IGlFdmVudEtleUNvZGUgfHxcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuU3BhY2UgPT09IGlFdmVudEtleUNvZGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Xy5lYWNoKGxpc3QsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWlzU3RvcCkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIEV2ZW50S2V5Q29kZS5VcDpcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb2N1c2VkID09PSBpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlzU3RvcCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBpdGVtO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBFdmVudEtleUNvZGUuRG93bjpcblx0XHRcdFx0XHRcdFx0XHRjYXNlIEV2ZW50S2V5Q29kZS5JbnNlcnQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXNOZXh0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGl0ZW07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlzU3RvcCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZvY3VzZWQgPT09IGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNOZXh0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKCFyZXN1bHQgJiYgKEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuZG9VcFVwT3JEb3duRG93bihFdmVudEtleUNvZGUuVXAgPT09IGlFdmVudEtleUNvZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuSG9tZSA9PT0gaUV2ZW50S2V5Q29kZSB8fCBFdmVudEtleUNvZGUuRW5kID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0aWYgKEV2ZW50S2V5Q29kZS5Ib21lID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBsaXN0WzBdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkVuZCA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuUGFnZURvd24gPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRmb3IgKDsgaW5kZXggPCBsaXN0TGVuOyBpbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZm9jdXNlZCA9PT0gbGlzdFtpbmRleF0pIHtcblx0XHRcdFx0XHRcdFx0aW5kZXggKz0gcGFnZVN0ZXA7XG5cdFx0XHRcdFx0XHRcdGluZGV4ID0gbGlzdExlbiAtIDEgPCBpbmRleCA/IGxpc3RMZW4gLSAxIDogaW5kZXg7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGxpc3RbaW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLlBhZ2VVcCA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdGZvciAoaW5kZXggPSBsaXN0TGVuOyAwIDw9IGluZGV4OyBpbmRleC0tKSB7XG5cdFx0XHRcdFx0XHRpZiAoZm9jdXNlZCA9PT0gbGlzdFtpbmRleF0pIHtcblx0XHRcdFx0XHRcdFx0aW5kZXggLT0gcGFnZVN0ZXA7XG5cdFx0XHRcdFx0XHRcdGluZGV4ID0gMCA+IGluZGV4ID8gMCA6IGluZGV4O1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBsaXN0W2luZGV4XTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbShyZXN1bHQpO1xuXG5cdFx0XHRpZiAoZm9jdXNlZCkge1xuXHRcdFx0XHRpZiAoYlNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0aWYgKEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSB8fCBFdmVudEtleUNvZGUuRG93biA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdFx0Zm9jdXNlZC5jaGVja2VkKCFmb2N1c2VkLmNoZWNrZWQoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5JbnNlcnQgPT09IGlFdmVudEtleUNvZGUgfHwgRXZlbnRLZXlDb2RlLlNwYWNlID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0Zm9jdXNlZC5jaGVja2VkKCFmb2N1c2VkLmNoZWNrZWQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCh0aGlzLmF1dG9TZWxlY3QoKSB8fCAhIWJGb3JjZVNlbGVjdCkgJiYgIXRoaXMuaXNMaXN0Q2hlY2tlZCgpICYmIEV2ZW50S2V5Q29kZS5TcGFjZSAhPT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbShyZXN1bHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNjcm9sbFRvRm9jdXNlZCgpO1xuXHRcdH0gZWxzZSBpZiAoZm9jdXNlZCkge1xuXHRcdFx0aWYgKGJTaGlmdEtleSAmJiAoRXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlKSkge1xuXHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fCBFdmVudEtleUNvZGUuU3BhY2UgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0Zm9jdXNlZC5jaGVja2VkKCFmb2N1c2VkLmNoZWNrZWQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0oZm9jdXNlZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2Nyb2xsVG9Gb2N1c2VkKCkge1xuXHRcdGlmICghdGhpcy5vQ29udGVudFZpc2libGUgfHwgIXRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gMjAsXG5cdFx0XHRsaXN0ID0gdGhpcy5saXN0KCksXG5cdFx0XHQkZm9jdXNlZCA9ICQodGhpcy5zSXRlbUZvY3VzZWRTZWxlY3RvciwgdGhpcy5vQ29udGVudFNjcm9sbGFibGUpLFxuXHRcdFx0cG9zID0gJGZvY3VzZWQucG9zaXRpb24oKSxcblx0XHRcdHZpc2libGVIZWlnaHQgPSB0aGlzLm9Db250ZW50VmlzaWJsZS5oZWlnaHQoKSxcblx0XHRcdGZvY3VzZWRIZWlnaHQgPSAkZm9jdXNlZC5vdXRlckhlaWdodCgpO1xuXG5cdFx0aWYgKGxpc3QgJiYgbGlzdFswXSAmJiBsaXN0WzBdLmZvY3VzZWQoKSkge1xuXHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKDApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmIChwb3MgJiYgKDAgPiBwb3MudG9wIHx8IHBvcy50b3AgKyBmb2N1c2VkSGVpZ2h0ID4gdmlzaWJsZUhlaWdodCkpIHtcblx0XHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcChcblx0XHRcdFx0MCA+IHBvcy50b3Bcblx0XHRcdFx0XHQ/IHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcCgpICsgcG9zLnRvcCAtIG9mZnNldFxuXHRcdFx0XHRcdDogdGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKCkgKyBwb3MudG9wIC0gdmlzaWJsZUhlaWdodCArIGZvY3VzZWRIZWlnaHQgKyBvZmZzZXRcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmYXN0ID0gZmFsc2Vcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzY3JvbGxUb1RvcChmYXN0ID0gZmFsc2UpIHtcblx0XHRpZiAoIXRoaXMub0NvbnRlbnRWaXNpYmxlIHx8ICF0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChmYXN0IHx8IDUwID4gdGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKCkpIHtcblx0XHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcCgwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc3RvcCgpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgMjAwKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGV2ZW50Q2xpY2tGdW5jdGlvbihpdGVtLCBldmVudCkge1xuXHRcdGxldCBpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSAwLFxuXHRcdFx0Y2hhbmdlUmFuZ2UgPSBmYWxzZSxcblx0XHRcdGlzSW5SYW5nZSA9IGZhbHNlLFxuXHRcdFx0bGlzdCA9IFtdLFxuXHRcdFx0Y2hlY2tlZCA9IGZhbHNlLFxuXHRcdFx0bGlzdEl0ZW0gPSBudWxsLFxuXHRcdFx0bGluZVVpZCA9ICcnO1xuXG5cdFx0Y29uc3QgdWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXHRcdGlmIChldmVudCAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0aWYgKCcnICE9PSB1aWQgJiYgJycgIT09IHRoaXMuc0xhc3RVaWQgJiYgdWlkICE9PSB0aGlzLnNMYXN0VWlkKSB7XG5cdFx0XHRcdGxpc3QgPSB0aGlzLmxpc3QoKTtcblx0XHRcdFx0Y2hlY2tlZCA9IGl0ZW0uY2hlY2tlZCgpO1xuXG5cdFx0XHRcdGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsaXN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdFx0XHRsaXN0SXRlbSA9IGxpc3RbaW5kZXhdO1xuXHRcdFx0XHRcdGxpbmVVaWQgPSB0aGlzLmdldEl0ZW1VaWQobGlzdEl0ZW0pO1xuXG5cdFx0XHRcdFx0Y2hhbmdlUmFuZ2UgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAobGluZVVpZCA9PT0gdGhpcy5zTGFzdFVpZCB8fCBsaW5lVWlkID09PSB1aWQpIHtcblx0XHRcdFx0XHRcdGNoYW5nZVJhbmdlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoY2hhbmdlUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGlzSW5SYW5nZSA9ICFpc0luUmFuZ2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzSW5SYW5nZSB8fCBjaGFuZ2VSYW5nZSkge1xuXHRcdFx0XHRcdFx0bGlzdEl0ZW0uY2hlY2tlZChjaGVja2VkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnNMYXN0VWlkID0gJycgPT09IHVpZCA/ICcnIDogdWlkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gZXZlbnRcblx0ICovXG5cdGFjdGlvbkNsaWNrKGl0ZW0sIGV2ZW50ID0gbnVsbCkge1xuXHRcdGlmIChpdGVtKSB7XG5cdFx0XHRsZXQgY2xpY2sgPSB0cnVlO1xuXHRcdFx0aWYgKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5zaGlmdEtleSAmJiAhKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdFx0XHRcdGNsaWNrID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKCcnID09PSB0aGlzLnNMYXN0VWlkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNMYXN0VWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGl0ZW0uY2hlY2tlZCghaXRlbS5jaGVja2VkKCkpO1xuXHRcdFx0XHRcdHRoaXMuZXZlbnRDbGlja0Z1bmN0aW9uKGl0ZW0sIGV2ZW50KTtcblxuXHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0oaXRlbSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5hbHRLZXkpIHtcblx0XHRcdFx0XHRjbGljayA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0oaXRlbSk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW0oKSAmJiBpdGVtICE9PSB0aGlzLnNlbGVjdGVkSXRlbSgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSgpLmNoZWNrZWQodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXRlbS5jaGVja2VkKCFpdGVtLmNoZWNrZWQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsaWNrKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0TWVzc2FnZUl0ZW0oaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b24oZXZlbnROYW1lLCBjYWxsYmFjaykge1xuXHRcdHRoaXMub0NhbGxiYWNrc1tldmVudE5hbWVdID0gY2FsbGJhY2s7XG5cdH1cblxuXHRzZWxlY3RNZXNzYWdlSXRlbShtZXNzYWdlSXRlbSkge1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW0obWVzc2FnZUl0ZW0pO1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtKG1lc3NhZ2VJdGVtKTtcblx0XHR0aGlzLnNjcm9sbFRvRm9jdXNlZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNlbGVjdG9yLCBTZWxlY3RvciBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGxvemFkIGZyb20gJ2xvemFkJztcblxuaW1wb3J0IHsgTWVzc2FnZVByaW9yaXR5LCBTaWduZWRWZXJpZnlTdGF0dXMgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IERBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMgfSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuaW1wb3J0IHtcblx0cEludCxcblx0aW5BcnJheSxcblx0aXNBcnJheSxcblx0aXNVbmQsXG5cdHRyaW0sXG5cdHByZXZpZXdNZXNzYWdlLFxuXHR3aW5kb3dSZXNpemUsXG5cdGZyaWVuZGx5U2l6ZSxcblx0aXNOb25FbXB0eUFycmF5XG59IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7ICR3aW4gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBtZXNzYWdlVmlld0xpbmssIG1lc3NhZ2VEb3dubG9hZExpbmsgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuXG5pbXBvcnQgeyBlbWFpbEFycmF5RnJvbUpzb24sIGVtYWlsQXJyYXlUb1N0cmluZ0NsZWFyLCBlbWFpbEFycmF5VG9TdHJpbmcsIHJlcGx5SGVscGVyIH0gZnJvbSAnSGVscGVyL01lc3NhZ2UnO1xuXG5pbXBvcnQgeyBBdHRhY2htZW50TW9kZWwsIHN0YXRpY0NvbWJpbmVkSWNvbkNsYXNzIH0gZnJvbSAnTW9kZWwvQXR0YWNobWVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIE1lc3NhZ2VNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignTWVzc2FnZU1vZGVsJyk7XG5cblx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0gJyc7XG5cdFx0dGhpcy51aWQgPSAnJztcblx0XHR0aGlzLmhhc2ggPSAnJztcblx0XHR0aGlzLnJlcXVlc3RIYXNoID0gJyc7XG5cdFx0dGhpcy5zdWJqZWN0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zdWJqZWN0UHJlZml4ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zdWJqZWN0U3VmZml4ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaXplID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLmRhdGVUaW1lU3RhbXBJblVUQyA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5wcmlvcml0eSA9IGtvLm9ic2VydmFibGUoTWVzc2FnZVByaW9yaXR5Lk5vcm1hbCk7XG5cblx0XHR0aGlzLnByb3h5ID0gZmFsc2U7XG5cblx0XHR0aGlzLmZyb21FbWFpbFN0cmluZyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZnJvbUNsZWFyRW1haWxTdHJpbmcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvRW1haWxzU3RyaW5nID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50b0NsZWFyRW1haWxzU3RyaW5nID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNlbmRlckVtYWlsc1N0cmluZyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2VuZGVyQ2xlYXJFbWFpbHNTdHJpbmcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZW1haWxzID0gW107XG5cblx0XHR0aGlzLmZyb20gPSBbXTtcblx0XHR0aGlzLnRvID0gW107XG5cdFx0dGhpcy5jYyA9IFtdO1xuXHRcdHRoaXMuYmNjID0gW107XG5cdFx0dGhpcy5yZXBseVRvID0gW107XG5cdFx0dGhpcy5kZWxpdmVyZWRUbyA9IFtdO1xuXHRcdHRoaXMudW5zdWJzcmliZUxpbmtzID0gW107XG5cblx0XHR0aGlzLm5ld0ZvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kZWxldGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kZWxldGVkTWFyayA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudW5zZWVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mbGFnZ2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hbnN3ZXJlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZm9yd2FyZGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5pc1JlYWRSZWNlaXB0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlbGVjdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jaGVja2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5oYXNBdHRhY2htZW50cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNTcGVjRGF0YSA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRJY29uQ2xhc3MgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0c3RhdGljQ29tYmluZWRJY29uQ2xhc3ModGhpcy5oYXNBdHRhY2htZW50cygpID8gdGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKCkgOiBbXSlcblx0XHQpO1xuXG5cdFx0dGhpcy5ib2R5ID0gbnVsbDtcblxuXHRcdHRoaXMuaXNIdG1sID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5oYXNJbWFnZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuaXNQZ3BTaWduZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmlzUGdwRW5jcnlwdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wZ3BTaWduZWRWZXJpZnlTdGF0dXMgPSBrby5vYnNlcnZhYmxlKFNpZ25lZFZlcmlmeVN0YXR1cy5Ob25lKTtcblx0XHR0aGlzLnBncFNpZ25lZFZlcmlmeVVzZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucHJpb3JpdHkgPSBrby5vYnNlcnZhYmxlKE1lc3NhZ2VQcmlvcml0eS5Ob3JtYWwpO1xuXHRcdHRoaXMucmVhZFJlY2VpcHQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuYURyYWZ0SW5mbyA9IFtdO1xuXHRcdHRoaXMuc01lc3NhZ2VJZCA9ICcnO1xuXHRcdHRoaXMuc0luUmVwbHlUbyA9ICcnO1xuXHRcdHRoaXMuc1JlZmVyZW5jZXMgPSAnJztcblxuXHRcdHRoaXMuaGFzVW5zZWVuU3ViTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaGFzRmxhZ2dlZFN1Yk1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudGhyZWFkcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnRocmVhZHNMZW4gPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLnRocmVhZHMoKS5sZW5ndGgpO1xuXHRcdHRoaXMuaXNJbXBvcnRhbnQgPSBrby5jb21wdXRlZCgoKSA9PiBNZXNzYWdlUHJpb3JpdHkuSGlnaCA9PT0gdGhpcy5wcmlvcml0eSgpKTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoW3RoaXMuYXR0YWNobWVudEljb25DbGFzcywgdGhpcy50aHJlYWRzTGVuLCB0aGlzLmlzSW1wb3J0YW50XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uTWVzc2FnZX0gb0pzb25NZXNzYWdlXG5cdCAqIEByZXR1cm5zIHs/TWVzc2FnZU1vZGVsfVxuXHQgKi9cblx0c3RhdGljIG5ld0luc3RhbmNlRnJvbUpzb24oanNvbikge1xuXHRcdGNvbnN0IG9NZXNzYWdlTW9kZWwgPSBuZXcgTWVzc2FnZU1vZGVsKCk7XG5cdFx0cmV0dXJuIG9NZXNzYWdlTW9kZWwuaW5pdEJ5SnNvbihqc29uKSA/IG9NZXNzYWdlTW9kZWwgOiBudWxsO1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5mb2xkZXJGdWxsTmFtZVJhdyA9ICcnO1xuXHRcdHRoaXMudWlkID0gJyc7XG5cdFx0dGhpcy5oYXNoID0gJyc7XG5cdFx0dGhpcy5yZXF1ZXN0SGFzaCA9ICcnO1xuXHRcdHRoaXMuc3ViamVjdCgnJyk7XG5cdFx0dGhpcy5zdWJqZWN0UHJlZml4KCcnKTtcblx0XHR0aGlzLnN1YmplY3RTdWZmaXgoJycpO1xuXHRcdHRoaXMuc2l6ZSgwKTtcblx0XHR0aGlzLmRhdGVUaW1lU3RhbXBJblVUQygwKTtcblx0XHR0aGlzLnByaW9yaXR5KE1lc3NhZ2VQcmlvcml0eS5Ob3JtYWwpO1xuXG5cdFx0dGhpcy5wcm94eSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5mcm9tRW1haWxTdHJpbmcoJycpO1xuXHRcdHRoaXMuZnJvbUNsZWFyRW1haWxTdHJpbmcoJycpO1xuXHRcdHRoaXMudG9FbWFpbHNTdHJpbmcoJycpO1xuXHRcdHRoaXMudG9DbGVhckVtYWlsc1N0cmluZygnJyk7XG5cdFx0dGhpcy5zZW5kZXJFbWFpbHNTdHJpbmcoJycpO1xuXHRcdHRoaXMuc2VuZGVyQ2xlYXJFbWFpbHNTdHJpbmcoJycpO1xuXG5cdFx0dGhpcy5lbWFpbHMgPSBbXTtcblxuXHRcdHRoaXMuZnJvbSA9IFtdO1xuXHRcdHRoaXMudG8gPSBbXTtcblx0XHR0aGlzLmNjID0gW107XG5cdFx0dGhpcy5iY2MgPSBbXTtcblx0XHR0aGlzLnJlcGx5VG8gPSBbXTtcblx0XHR0aGlzLmRlbGl2ZXJlZFRvID0gW107XG5cdFx0dGhpcy51bnN1YnNyaWJlTGlua3MgPSBbXTtcblxuXHRcdHRoaXMubmV3Rm9yQW5pbWF0aW9uKGZhbHNlKTtcblxuXHRcdHRoaXMuZGVsZXRlZChmYWxzZSk7XG5cdFx0dGhpcy5kZWxldGVkTWFyayhmYWxzZSk7XG5cdFx0dGhpcy51bnNlZW4oZmFsc2UpO1xuXHRcdHRoaXMuZmxhZ2dlZChmYWxzZSk7XG5cdFx0dGhpcy5hbnN3ZXJlZChmYWxzZSk7XG5cdFx0dGhpcy5mb3J3YXJkZWQoZmFsc2UpO1xuXHRcdHRoaXMuaXNSZWFkUmVjZWlwdChmYWxzZSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkKGZhbHNlKTtcblx0XHR0aGlzLmNoZWNrZWQoZmFsc2UpO1xuXHRcdHRoaXMuaGFzQXR0YWNobWVudHMoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNTcGVjRGF0YShbXSk7XG5cblx0XHR0aGlzLmJvZHkgPSBudWxsO1xuXHRcdHRoaXMuaXNIdG1sKGZhbHNlKTtcblx0XHR0aGlzLmhhc0ltYWdlcyhmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50cyhbXSk7XG5cblx0XHR0aGlzLmlzUGdwU2lnbmVkKGZhbHNlKTtcblx0XHR0aGlzLmlzUGdwRW5jcnlwdGVkKGZhbHNlKTtcblx0XHR0aGlzLnBncFNpZ25lZFZlcmlmeVN0YXR1cyhTaWduZWRWZXJpZnlTdGF0dXMuTm9uZSk7XG5cdFx0dGhpcy5wZ3BTaWduZWRWZXJpZnlVc2VyKCcnKTtcblxuXHRcdHRoaXMucHJpb3JpdHkoTWVzc2FnZVByaW9yaXR5Lk5vcm1hbCk7XG5cdFx0dGhpcy5yZWFkUmVjZWlwdCgnJyk7XG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gW107XG5cdFx0dGhpcy5zTWVzc2FnZUlkID0gJyc7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0dGhpcy50aHJlYWRzKFtdKTtcblxuXHRcdHRoaXMuaGFzVW5zZWVuU3ViTWVzc2FnZShmYWxzZSk7XG5cdFx0dGhpcy5oYXNGbGFnZ2VkU3ViTWVzc2FnZShmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRnZXRFbWFpbHMocHJvcGVydGllcykge1xuXHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRfLnVuaXEoXG5cdFx0XHRcdF8ubWFwKFxuXHRcdFx0XHRcdF8ucmVkdWNlKHByb3BlcnRpZXMsIChjYXJyeSwgcHJvcGVydHkpID0+IGNhcnJ5LmNvbmNhdCh0aGlzW3Byb3BlcnR5XSksIFtdKSxcblx0XHRcdFx0XHQob0l0ZW0pID0+IChvSXRlbSA/IG9JdGVtLmVtYWlsIDogJycpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdGdldFJlY2lwaWVudHNFbWFpbHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RW1haWxzKFsndG8nLCAnY2MnXSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZyaWVuZGx5U2l6ZSgpIHtcblx0XHRyZXR1cm4gZnJpZW5kbHlTaXplKHRoaXMuc2l6ZSgpKTtcblx0fVxuXG5cdGNvbXB1dGVTZW5kZXJFbWFpbCgpIHtcblx0XHRjb25zdCBzZW50Rm9sZGVyID0gRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpLFxuXHRcdFx0ZHJhZnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpO1xuXG5cdFx0dGhpcy5zZW5kZXJFbWFpbHNTdHJpbmcoXG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID09PSBzZW50Rm9sZGVyIHx8IHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPT09IGRyYWZ0Rm9sZGVyXG5cdFx0XHRcdD8gdGhpcy50b0VtYWlsc1N0cmluZygpXG5cdFx0XHRcdDogdGhpcy5mcm9tRW1haWxTdHJpbmcoKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNlbmRlckNsZWFyRW1haWxzU3RyaW5nKFxuXHRcdFx0dGhpcy5mb2xkZXJGdWxsTmFtZVJhdyA9PT0gc2VudEZvbGRlciB8fCB0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID09PSBkcmFmdEZvbGRlclxuXHRcdFx0XHQ/IHRoaXMudG9DbGVhckVtYWlsc1N0cmluZygpXG5cdFx0XHRcdDogdGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZygpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uTWVzc2FnZX0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdHByaW9yaXR5ID0gTWVzc2FnZVByaW9yaXR5Lk5vcm1hbDtcblxuXHRcdGlmIChqc29uICYmICdPYmplY3QvTWVzc2FnZScgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0cHJpb3JpdHkgPSBwSW50KGpzb24uUHJpb3JpdHkpO1xuXHRcdFx0dGhpcy5wcmlvcml0eShcblx0XHRcdFx0LTEgPCBpbkFycmF5KHByaW9yaXR5LCBbTWVzc2FnZVByaW9yaXR5LkhpZ2gsIE1lc3NhZ2VQcmlvcml0eS5Mb3ddKSA/IHByaW9yaXR5IDogTWVzc2FnZVByaW9yaXR5Lk5vcm1hbFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5mb2xkZXJGdWxsTmFtZVJhdyA9IGpzb24uRm9sZGVyO1xuXHRcdFx0dGhpcy51aWQgPSBqc29uLlVpZDtcblx0XHRcdHRoaXMuaGFzaCA9IGpzb24uSGFzaDtcblx0XHRcdHRoaXMucmVxdWVzdEhhc2ggPSBqc29uLlJlcXVlc3RIYXNoO1xuXG5cdFx0XHR0aGlzLnByb3h5ID0gISFqc29uLkV4dGVybmFsUHJveHk7XG5cblx0XHRcdHRoaXMuc2l6ZShwSW50KGpzb24uU2l6ZSkpO1xuXG5cdFx0XHR0aGlzLmZyb20gPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5Gcm9tKTtcblx0XHRcdHRoaXMudG8gPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5Ubyk7XG5cdFx0XHR0aGlzLmNjID0gZW1haWxBcnJheUZyb21Kc29uKGpzb24uQ2MpO1xuXHRcdFx0dGhpcy5iY2MgPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5CY2MpO1xuXHRcdFx0dGhpcy5yZXBseVRvID0gZW1haWxBcnJheUZyb21Kc29uKGpzb24uUmVwbHlUbyk7XG5cdFx0XHR0aGlzLmRlbGl2ZXJlZFRvID0gZW1haWxBcnJheUZyb21Kc29uKGpzb24uRGVsaXZlcmVkVG8pO1xuXHRcdFx0dGhpcy51bnN1YnNyaWJlTGlua3MgPSBpc05vbkVtcHR5QXJyYXkoanNvbi5VbnN1YnNyaWJlTGlua3MpID8ganNvbi5VbnN1YnNyaWJlTGlua3MgOiBbXTtcblxuXHRcdFx0dGhpcy5zdWJqZWN0KGpzb24uU3ViamVjdCk7XG5cdFx0XHRpZiAoaXNBcnJheShqc29uLlN1YmplY3RQYXJ0cykpIHtcblx0XHRcdFx0dGhpcy5zdWJqZWN0UHJlZml4KGpzb24uU3ViamVjdFBhcnRzWzBdKTtcblx0XHRcdFx0dGhpcy5zdWJqZWN0U3VmZml4KGpzb24uU3ViamVjdFBhcnRzWzFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc3ViamVjdFByZWZpeCgnJyk7XG5cdFx0XHRcdHRoaXMuc3ViamVjdFN1ZmZpeCh0aGlzLnN1YmplY3QoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDKHBJbnQoanNvbi5EYXRlVGltZVN0YW1wSW5VVEMpKTtcblx0XHRcdHRoaXMuaGFzQXR0YWNobWVudHMoISFqc29uLkhhc0F0dGFjaG1lbnRzKTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNTcGVjRGF0YShpc0FycmF5KGpzb24uQXR0YWNobWVudHNTcGVjRGF0YSkgPyBqc29uLkF0dGFjaG1lbnRzU3BlY0RhdGEgOiBbXSk7XG5cblx0XHRcdHRoaXMuZnJvbUVtYWlsU3RyaW5nKGVtYWlsQXJyYXlUb1N0cmluZyh0aGlzLmZyb20sIHRydWUpKTtcblx0XHRcdHRoaXMuZnJvbUNsZWFyRW1haWxTdHJpbmcoZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIodGhpcy5mcm9tKSk7XG5cdFx0XHR0aGlzLnRvRW1haWxzU3RyaW5nKGVtYWlsQXJyYXlUb1N0cmluZyh0aGlzLnRvLCB0cnVlKSk7XG5cdFx0XHR0aGlzLnRvQ2xlYXJFbWFpbHNTdHJpbmcoZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIodGhpcy50bykpO1xuXG5cdFx0XHR0aGlzLnRocmVhZHMoaXNBcnJheShqc29uLlRocmVhZHMpID8ganNvbi5UaHJlYWRzIDogW10pO1xuXG5cdFx0XHR0aGlzLmluaXRGbGFnc0J5SnNvbihqc29uKTtcblx0XHRcdHRoaXMuY29tcHV0ZVNlbmRlckVtYWlsKCk7XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uTWVzc2FnZX0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRVcGRhdGVCeU1lc3NhZ2VKc29uKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2UsXG5cdFx0XHRwcmlvcml0eSA9IE1lc3NhZ2VQcmlvcml0eS5Ob3JtYWw7XG5cblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L01lc3NhZ2UnID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHByaW9yaXR5ID0gcEludChqc29uLlByaW9yaXR5KTtcblx0XHRcdHRoaXMucHJpb3JpdHkoXG5cdFx0XHRcdC0xIDwgaW5BcnJheShwcmlvcml0eSwgW01lc3NhZ2VQcmlvcml0eS5IaWdoLCBNZXNzYWdlUHJpb3JpdHkuTG93XSkgPyBwcmlvcml0eSA6IE1lc3NhZ2VQcmlvcml0eS5Ob3JtYWxcblx0XHRcdCk7XG5cblx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IGpzb24uRHJhZnRJbmZvO1xuXG5cdFx0XHR0aGlzLnNNZXNzYWdlSWQgPSBqc29uLk1lc3NhZ2VJZDtcblx0XHRcdHRoaXMuc0luUmVwbHlUbyA9IGpzb24uSW5SZXBseVRvO1xuXHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IGpzb24uUmVmZXJlbmNlcztcblxuXHRcdFx0dGhpcy5wcm94eSA9ICEhanNvbi5FeHRlcm5hbFByb3h5O1xuXG5cdFx0XHRpZiAoUGdwU3RvcmUuY2FwYU9wZW5QR1AoKSkge1xuXHRcdFx0XHR0aGlzLmlzUGdwU2lnbmVkKCEhanNvbi5QZ3BTaWduZWQpO1xuXHRcdFx0XHR0aGlzLmlzUGdwRW5jcnlwdGVkKCEhanNvbi5QZ3BFbmNyeXB0ZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmhhc0F0dGFjaG1lbnRzKCEhanNvbi5IYXNBdHRhY2htZW50cyk7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzU3BlY0RhdGEoaXNBcnJheShqc29uLkF0dGFjaG1lbnRzU3BlY0RhdGEpID8ganNvbi5BdHRhY2htZW50c1NwZWNEYXRhIDogW10pO1xuXG5cdFx0XHR0aGlzLmZvdW5kZWRDSURzID0gaXNBcnJheShqc29uLkZvdW5kZWRDSURzKSA/IGpzb24uRm91bmRlZENJRHMgOiBbXTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHModGhpcy5pbml0QXR0YWNobWVudHNGcm9tSnNvbihqc29uLkF0dGFjaG1lbnRzKSk7XG5cblx0XHRcdHRoaXMucmVhZFJlY2VpcHQoanNvbi5SZWFkUmVjZWlwdCB8fCAnJyk7XG5cblx0XHRcdHRoaXMuY29tcHV0ZVNlbmRlckVtYWlsKCk7XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0geyhBamF4SnNvbkF0dGFjaG1lbnR8bnVsbCl9IG9Kc29uQXR0YWNobWVudHNcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0aW5pdEF0dGFjaG1lbnRzRnJvbUpzb24oanNvbikge1xuXHRcdGxldCBpbmRleCA9IDAsXG5cdFx0XHRsZW4gPSAwLFxuXHRcdFx0YXR0YWNobWVudCA9IG51bGw7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAoanNvbiAmJiAnQ29sbGVjdGlvbi9BdHRhY2htZW50Q29sbGVjdGlvbicgPT09IGpzb25bJ0BPYmplY3QnXSAmJiBpc05vbkVtcHR5QXJyYXkoanNvblsnQENvbGxlY3Rpb24nXSkpIHtcblx0XHRcdGZvciAoaW5kZXggPSAwLCBsZW4gPSBqc29uWydAQ29sbGVjdGlvbiddLmxlbmd0aDsgaW5kZXggPCBsZW47IGluZGV4KyspIHtcblx0XHRcdFx0YXR0YWNobWVudCA9IEF0dGFjaG1lbnRNb2RlbC5uZXdJbnN0YW5jZUZyb21Kc29uKGpzb25bJ0BDb2xsZWN0aW9uJ11baW5kZXhdKTtcblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQnJyAhPT0gYXR0YWNobWVudC5jaWRXaXRoT3V0VGFncyAmJlxuXHRcdFx0XHRcdFx0MCA8IHRoaXMuZm91bmRlZENJRHMubGVuZ3RoICYmXG5cdFx0XHRcdFx0XHQwIDw9IGluQXJyYXkoYXR0YWNobWVudC5jaWRXaXRoT3V0VGFncywgdGhpcy5mb3VuZGVkQ0lEcylcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuaXNMaW5rZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFjaG1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGhhc1Vuc3Vic3JpYmVMaW5rcygpIHtcblx0XHRyZXR1cm4gdGhpcy51bnN1YnNyaWJlTGlua3MgJiYgMCA8IHRoaXMudW5zdWJzcmliZUxpbmtzLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0Rmlyc3RVbnN1YnNyaWJlTGluaygpIHtcblx0XHRyZXR1cm4gdGhpcy51bnN1YnNyaWJlTGlua3MgJiYgMCA8IHRoaXMudW5zdWJzcmliZUxpbmtzLmxlbmd0aCA/IHRoaXMudW5zdWJzcmliZUxpbmtzWzBdIHx8ICcnIDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbk1lc3NhZ2V9IGpzb25cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpbml0RmxhZ3NCeUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L01lc3NhZ2UnID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHRoaXMudW5zZWVuKCFqc29uLklzU2Vlbik7XG5cdFx0XHR0aGlzLmZsYWdnZWQoISFqc29uLklzRmxhZ2dlZCk7XG5cdFx0XHR0aGlzLmFuc3dlcmVkKCEhanNvbi5Jc0Fuc3dlcmVkKTtcblx0XHRcdHRoaXMuZm9yd2FyZGVkKCEhanNvbi5Jc0ZvcndhcmRlZCk7XG5cdFx0XHR0aGlzLmlzUmVhZFJlY2VpcHQoISFqc29uLklzUmVhZFJlY2VpcHQpO1xuXHRcdFx0dGhpcy5kZWxldGVkTWFyayghIWpzb24uSXNEZWxldGVkKTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmcm9tVG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuZnJvbSwgZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmspO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmcm9tRGtpbURhdGEoKSB7XG5cdFx0bGV0IHJlc3VsdCA9IFsnbm9uZScsICcnXTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHRoaXMuZnJvbSkgJiYgMSA9PT0gdGhpcy5mcm9tLmxlbmd0aCAmJiB0aGlzLmZyb21bMF0gJiYgdGhpcy5mcm9tWzBdLmRraW1TdGF0dXMpIHtcblx0XHRcdHJlc3VsdCA9IFt0aGlzLmZyb21bMF0uZGtpbVN0YXR1cywgdGhpcy5mcm9tWzBdLmRraW1WYWx1ZSB8fCAnJ107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZyaWVuZGx5Vmlld1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwV2l0aExpbmsgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9Ub0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSkge1xuXHRcdHJldHVybiBlbWFpbEFycmF5VG9TdHJpbmcodGhpcy50bywgZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmspO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRjY1RvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGVtYWlsQXJyYXlUb1N0cmluZyh0aGlzLmNjLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGJjY1RvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGVtYWlsQXJyYXlUb1N0cmluZyh0aGlzLmJjYywgZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmspO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRyZXBseVRvVG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZW1haWxBcnJheVRvU3RyaW5nKHRoaXMucmVwbHlUbywgZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmspO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gc3RyaW5nXG5cdCAqL1xuXHRsaW5lQXNDc3MoKSB7XG5cdFx0cmV0dXJuIGNsYXNzbmFtZXMoe1xuXHRcdFx0J2RlbGV0ZWQnOiB0aGlzLmRlbGV0ZWQoKSxcblx0XHRcdCdkZWxldGVkLW1hcmsnOiB0aGlzLmRlbGV0ZWRNYXJrKCksXG5cdFx0XHQnc2VsZWN0ZWQnOiB0aGlzLnNlbGVjdGVkKCksXG5cdFx0XHQnY2hlY2tlZCc6IHRoaXMuY2hlY2tlZCgpLFxuXHRcdFx0J2ZsYWdnZWQnOiB0aGlzLmZsYWdnZWQoKSxcblx0XHRcdCd1bnNlZW4nOiB0aGlzLnVuc2VlbigpLFxuXHRcdFx0J2Fuc3dlcmVkJzogdGhpcy5hbnN3ZXJlZCgpLFxuXHRcdFx0J2ZvcndhcmRlZCc6IHRoaXMuZm9yd2FyZGVkKCksXG5cdFx0XHQnZm9jdXNlZCc6IHRoaXMuZm9jdXNlZCgpLFxuXHRcdFx0J2ltcG9ydGFudCc6IHRoaXMuaXNJbXBvcnRhbnQoKSxcblx0XHRcdCd3aXRoQXR0YWNobWVudHMnOiB0aGlzLmhhc0F0dGFjaG1lbnRzKCksXG5cdFx0XHQnbmV3JzogdGhpcy5uZXdGb3JBbmltYXRpb24oKSxcblx0XHRcdCdlbXB0eVN1YmplY3QnOiAnJyA9PT0gdGhpcy5zdWJqZWN0KCksXG5cdFx0XHQvLyAnaGFzQ2hpbGRyZW5NZXNzYWdlJzogMSA8IHRoaXMudGhyZWFkc0xlbigpLFxuXHRcdFx0J2hhc1Vuc2VlblN1Yk1lc3NhZ2UnOiB0aGlzLmhhc1Vuc2VlblN1Yk1lc3NhZ2UoKSxcblx0XHRcdCdoYXNGbGFnZ2VkU3ViTWVzc2FnZSc6IHRoaXMuaGFzRmxhZ2dlZFN1Yk1lc3NhZ2UoKVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzVmlzaWJsZUF0dGFjaG1lbnRzKCkge1xuXHRcdHJldHVybiAhIV8uZmluZCh0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiAhaXRlbS5pc0xpbmtlZCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNpZFxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdGZpbmRBdHRhY2htZW50QnlDaWQoY2lkKSB7XG5cdFx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdFx0Y29uc3QgYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzKCk7XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGF0dGFjaG1lbnRzKSkge1xuXHRcdFx0Y2lkID0gY2lkLnJlcGxhY2UoL148Ky8sICcnKS5yZXBsYWNlKC8+KyQvLCAnJyk7XG5cdFx0XHRyZXN1bHQgPSBfLmZpbmQoYXR0YWNobWVudHMsIChpdGVtKSA9PiBjaWQgPT09IGl0ZW0uY2lkV2l0aE91dFRhZ3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudExvY2F0aW9uXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0ZmluZEF0dGFjaG1lbnRCeUNvbnRlbnRMb2NhdGlvbihjb250ZW50TG9jYXRpb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0XHRjb25zdCBhdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYXR0YWNobWVudHMpKSB7XG5cdFx0XHRyZXN1bHQgPSBfLmZpbmQoYXR0YWNobWVudHMsIChpdGVtKSA9PiBjb250ZW50TG9jYXRpb24gPT09IGl0ZW0uY29udGVudExvY2F0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0IHx8IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdG1lc3NhZ2VJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zTWVzc2FnZUlkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRpblJlcGx5VG8oKSB7XG5cdFx0cmV0dXJuIHRoaXMuc0luUmVwbHlUbztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cmVmZXJlbmNlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5zUmVmZXJlbmNlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnJvbUFzU2luZ2xlRW1haWwoKSB7XG5cdFx0cmV0dXJuIGlzQXJyYXkodGhpcy5mcm9tKSAmJiB0aGlzLmZyb21bMF0gPyB0aGlzLmZyb21bMF0uZW1haWwgOiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dmlld0xpbmsoKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VWaWV3TGluayh0aGlzLnJlcXVlc3RIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZG93bmxvYWRMaW5rKCkge1xuXHRcdHJldHVybiBtZXNzYWdlRG93bmxvYWRMaW5rKHRoaXMucmVxdWVzdEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBleGNsdWRlRW1haWxzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxhc3QgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRyZXBseUVtYWlscyhleGNsdWRlRW1haWxzLCBsYXN0ID0gZmFsc2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXSxcblx0XHRcdHVuaWMgPSBpc1VuZChleGNsdWRlRW1haWxzKSA/IHt9IDogZXhjbHVkZUVtYWlscztcblxuXHRcdHJlcGx5SGVscGVyKHRoaXMucmVwbHlUbywgdW5pYywgcmVzdWx0KTtcblx0XHRpZiAoMCA9PT0gcmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0cmVwbHlIZWxwZXIodGhpcy5mcm9tLCB1bmljLCByZXN1bHQpO1xuXHRcdH1cblxuXHRcdGlmICgwID09PSByZXN1bHQubGVuZ3RoICYmICFsYXN0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXBseUVtYWlscyh7fSwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXhjbHVkZUVtYWlsc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBsYXN0ID0gZmFsc2Vcblx0ICogQHJldHVybnMge0FycmF5LjxBcnJheT59XG5cdCAqL1xuXHRyZXBseUFsbEVtYWlscyhleGNsdWRlRW1haWxzLCBsYXN0ID0gZmFsc2UpIHtcblx0XHRsZXQgZGF0YSA9IFtdO1xuXHRcdGNvbnN0IHRvUmVzdWx0ID0gW10sXG5cdFx0XHRjY1Jlc3VsdCA9IFtdLFxuXHRcdFx0dW5pYyA9IGlzVW5kKGV4Y2x1ZGVFbWFpbHMpID8ge30gOiBleGNsdWRlRW1haWxzO1xuXG5cdFx0cmVwbHlIZWxwZXIodGhpcy5yZXBseVRvLCB1bmljLCB0b1Jlc3VsdCk7XG5cdFx0aWYgKDAgPT09IHRvUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0cmVwbHlIZWxwZXIodGhpcy5mcm9tLCB1bmljLCB0b1Jlc3VsdCk7XG5cdFx0fVxuXG5cdFx0cmVwbHlIZWxwZXIodGhpcy50bywgdW5pYywgdG9SZXN1bHQpO1xuXHRcdHJlcGx5SGVscGVyKHRoaXMuY2MsIHVuaWMsIGNjUmVzdWx0KTtcblxuXHRcdGlmICgwID09PSB0b1Jlc3VsdC5sZW5ndGggJiYgIWxhc3QpIHtcblx0XHRcdGRhdGEgPSB0aGlzLnJlcGx5QWxsRW1haWxzKHt9LCB0cnVlKTtcblx0XHRcdHJldHVybiBbZGF0YVswXSwgY2NSZXN1bHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbdG9SZXN1bHQsIGNjUmVzdWx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dGV4dEJvZHlUb1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5ib2R5ID8gdGhpcy5ib2R5Lmh0bWwoKSA6ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRhdHRhY2htZW50c1RvU3RyaW5nTGluZSgpIHtcblx0XHRjb25zdCBhdHRhY2hMaW5lcyA9IF8ubWFwKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0uZmlsZU5hbWUgKyAnICgnICsgaXRlbS5mcmllbmRseVNpemUgKyAnKScpO1xuXHRcdHJldHVybiBhdHRhY2hMaW5lcyAmJiAwIDwgYXR0YWNoTGluZXMubGVuZ3RoID8gYXR0YWNoTGluZXMuam9pbignLCAnKSA6ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHByaW50ID0gZmFsc2Vcblx0ICovXG5cdHZpZXdQb3B1cE1lc3NhZ2UocHJpbnQgPSBmYWxzZSkge1xuXHRcdHRoaXMuc2hvd0xhenlFeHRlcm5hbEltYWdlc0luQm9keSgpO1xuXG5cdFx0Y29uc3QgdGltZVN0YW1wSW5VVEMgPSB0aGlzLmRhdGVUaW1lU3RhbXBJblVUQygpIHx8IDAsXG5cdFx0XHRjY0xpbmUgPSB0aGlzLmNjVG9MaW5lKGZhbHNlKSxcblx0XHRcdG0gPSAwIDwgdGltZVN0YW1wSW5VVEMgPyBtb21lbnQudW5peCh0aW1lU3RhbXBJblVUQykgOiBudWxsO1xuXG5cdFx0cHJldmlld01lc3NhZ2UoXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiB0aGlzLnN1YmplY3QoKSxcblx0XHRcdFx0c3ViamVjdDogdGhpcy5zdWJqZWN0KCksXG5cdFx0XHRcdGRhdGU6IG0gPyBtLmZvcm1hdCgnTExMJykgOiAnJyxcblx0XHRcdFx0ZnJvbUNyZWRzOiB0aGlzLmZyb21Ub0xpbmUoZmFsc2UpLFxuXHRcdFx0XHR0b0xhYmVsOiBpMThuKCdNRVNTQUdFL0xBQkVMX1RPJyksXG5cdFx0XHRcdHRvQ3JlZHM6IHRoaXMudG9Ub0xpbmUoZmFsc2UpLFxuXHRcdFx0XHRjY0NsYXNzOiBjY0xpbmUgPyAnJyA6ICdybC1wcmV2aWV3LWhpZGUnLFxuXHRcdFx0XHRjY0xhYmVsOiBpMThuKCdNRVNTQUdFL0xBQkVMX0NDJyksXG5cdFx0XHRcdGNjQ3JlZHM6IGNjTGluZVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuYm9keSxcblx0XHRcdHRoaXMuaXNIdG1sKCksXG5cdFx0XHRwcmludFxuXHRcdCk7XG5cdH1cblxuXHRwcmludE1lc3NhZ2UoKSB7XG5cdFx0dGhpcy52aWV3UG9wdXBNZXNzYWdlKHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZW5lcmF0ZVVpZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5mb2xkZXJGdWxsTmFtZVJhdyArICcvJyArIHRoaXMudWlkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBtZXNzYWdlXG5cdCAqIEByZXR1cm5zIHtNZXNzYWdlTW9kZWx9XG5cdCAqL1xuXHRwb3B1bGF0ZUJ5TWVzc2FnZUxpc3RJdGVtKG1lc3NhZ2UpIHtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0dGhpcy5mb2xkZXJGdWxsTmFtZVJhdyA9IG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdFx0XHR0aGlzLnVpZCA9IG1lc3NhZ2UudWlkO1xuXHRcdFx0dGhpcy5oYXNoID0gbWVzc2FnZS5oYXNoO1xuXHRcdFx0dGhpcy5yZXF1ZXN0SGFzaCA9IG1lc3NhZ2UucmVxdWVzdEhhc2g7XG5cdFx0XHR0aGlzLnN1YmplY3QobWVzc2FnZS5zdWJqZWN0KCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3ViamVjdFByZWZpeCh0aGlzLnN1YmplY3RQcmVmaXgoKSk7XG5cdFx0dGhpcy5zdWJqZWN0U3VmZml4KHRoaXMuc3ViamVjdFN1ZmZpeCgpKTtcblxuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHR0aGlzLnNpemUobWVzc2FnZS5zaXplKCkpO1xuXHRcdFx0dGhpcy5kYXRlVGltZVN0YW1wSW5VVEMobWVzc2FnZS5kYXRlVGltZVN0YW1wSW5VVEMoKSk7XG5cdFx0XHR0aGlzLnByaW9yaXR5KG1lc3NhZ2UucHJpb3JpdHkoKSk7XG5cblx0XHRcdHRoaXMucHJveHkgPSBtZXNzYWdlLnByb3h5O1xuXG5cdFx0XHR0aGlzLmZyb21FbWFpbFN0cmluZyhtZXNzYWdlLmZyb21FbWFpbFN0cmluZygpKTtcblx0XHRcdHRoaXMuZnJvbUNsZWFyRW1haWxTdHJpbmcobWVzc2FnZS5mcm9tQ2xlYXJFbWFpbFN0cmluZygpKTtcblx0XHRcdHRoaXMudG9FbWFpbHNTdHJpbmcobWVzc2FnZS50b0VtYWlsc1N0cmluZygpKTtcblx0XHRcdHRoaXMudG9DbGVhckVtYWlsc1N0cmluZyhtZXNzYWdlLnRvQ2xlYXJFbWFpbHNTdHJpbmcoKSk7XG5cblx0XHRcdHRoaXMuZW1haWxzID0gbWVzc2FnZS5lbWFpbHM7XG5cblx0XHRcdHRoaXMuZnJvbSA9IG1lc3NhZ2UuZnJvbTtcblx0XHRcdHRoaXMudG8gPSBtZXNzYWdlLnRvO1xuXHRcdFx0dGhpcy5jYyA9IG1lc3NhZ2UuY2M7XG5cdFx0XHR0aGlzLmJjYyA9IG1lc3NhZ2UuYmNjO1xuXHRcdFx0dGhpcy5yZXBseVRvID0gbWVzc2FnZS5yZXBseVRvO1xuXHRcdFx0dGhpcy5kZWxpdmVyZWRUbyA9IG1lc3NhZ2UuZGVsaXZlcmVkVG87XG5cdFx0XHR0aGlzLnVuc3Vic3JpYmVMaW5rcyA9IG1lc3NhZ2UudW5zdWJzcmliZUxpbmtzO1xuXG5cdFx0XHR0aGlzLnVuc2VlbihtZXNzYWdlLnVuc2VlbigpKTtcblx0XHRcdHRoaXMuZmxhZ2dlZChtZXNzYWdlLmZsYWdnZWQoKSk7XG5cdFx0XHR0aGlzLmFuc3dlcmVkKG1lc3NhZ2UuYW5zd2VyZWQoKSk7XG5cdFx0XHR0aGlzLmZvcndhcmRlZChtZXNzYWdlLmZvcndhcmRlZCgpKTtcblx0XHRcdHRoaXMuaXNSZWFkUmVjZWlwdChtZXNzYWdlLmlzUmVhZFJlY2VpcHQoKSk7XG5cdFx0XHR0aGlzLmRlbGV0ZWRNYXJrKG1lc3NhZ2UuZGVsZXRlZE1hcmsoKSk7XG5cblx0XHRcdHRoaXMucHJpb3JpdHkobWVzc2FnZS5wcmlvcml0eSgpKTtcblxuXHRcdFx0dGhpcy5zZWxlY3RlZChtZXNzYWdlLnNlbGVjdGVkKCkpO1xuXHRcdFx0dGhpcy5jaGVja2VkKG1lc3NhZ2UuY2hlY2tlZCgpKTtcblx0XHRcdHRoaXMuaGFzQXR0YWNobWVudHMobWVzc2FnZS5oYXNBdHRhY2htZW50cygpKTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNTcGVjRGF0YShtZXNzYWdlLmF0dGFjaG1lbnRzU3BlY0RhdGEoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5ib2R5ID0gbnVsbDtcblxuXHRcdHRoaXMuYURyYWZ0SW5mbyA9IFtdO1xuXHRcdHRoaXMuc01lc3NhZ2VJZCA9ICcnO1xuXHRcdHRoaXMuc0luUmVwbHlUbyA9ICcnO1xuXHRcdHRoaXMuc1JlZmVyZW5jZXMgPSAnJztcblxuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHR0aGlzLnRocmVhZHMobWVzc2FnZS50aHJlYWRzKCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29tcHV0ZVNlbmRlckVtYWlsKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNob3dMYXp5RXh0ZXJuYWxJbWFnZXNJbkJvZHkoKSB7XG5cdFx0aWYgKHRoaXMuYm9keSkge1xuXHRcdFx0JCgnLmxhenkubGF6eS1pbml0ZWRbZGF0YS1vcmlnaW5hbF0nLCB0aGlzLmJvZHkpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQodGhpcylcblx0XHRcdFx0XHQuYXR0cignc3JjJywgJCh0aGlzKS5hdHRyKCdkYXRhLW9yaWdpbmFsJykpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ2RhdGEtb3JpZ2luYWwnKVxuXHRcdFx0XHRcdC5yZW1vdmVBdHRyKCdkYXRhLWxvYWRlZCcpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0bG96YWQoKSB7XG5cdFx0bG96YWQoJ2ltZy5sYXp5Om5vdCgubGF6eS1pbml0ZWQpJywge1xuXHRcdFx0dGhyZXNob2xkOiAwLjQsXG5cdFx0XHRsb2FkOiAoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnbGF6eScsIGVsZW1lbnQuZGF0YXNldC5vcmlnaW5hbCk7XG5cdFx0XHRcdGVsZW1lbnQuc3JjID0gREFUQV9JTUFHRV9MQVpZX1BMQUNFSE9MREVSX1BJQztcblx0XHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHRcdC5hZGRDbGFzcygnbGF6eS1pbml0ZWQnKVxuXHRcdFx0XHRcdC5hdHRyKCdzcmMnLCBlbGVtZW50LmRhdGFzZXQub3JpZ2luYWwpXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ2RhdGEtbG9hZGVkJylcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1vcmlnaW5hbCcpXG5cdFx0XHRcdFx0LmNzcyh7IG9wYWNpdHk6IDAuMyB9KVxuXHRcdFx0XHRcdC5hbmltYXRlKHsgb3BhY2l0eTogMSB9LCA1MDApO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoKTtcblx0fVxuXG5cdHNob3dFeHRlcm5hbEltYWdlcyhsYXp5ID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5kYXRhKCdybC1oYXMtaW1hZ2VzJykpIHtcblx0XHRcdHRoaXMuaGFzSW1hZ2VzKGZhbHNlKTtcblx0XHRcdHRoaXMuYm9keS5kYXRhKCdybC1oYXMtaW1hZ2VzJywgZmFsc2UpO1xuXG5cdFx0XHRsZXQgYXR0ciA9IHRoaXMucHJveHkgPyAnZGF0YS14LWFkZGl0aW9uYWwtc3JjJyA6ICdkYXRhLXgtc3JjJztcblx0XHRcdCQoJ1snICsgYXR0ciArICddJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChsYXp5ICYmICR0aGlzLmlzKCdpbWcnKSkge1xuXHRcdFx0XHRcdCR0aGlzXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ2xhenknKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ2RhdGEtb3JpZ2luYWwnLCAkdGhpcy5hdHRyKGF0dHIpKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ2RhdGEtbG9hZGVkJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JHRoaXMuYXR0cignc3JjJywgJHRoaXMuYXR0cihhdHRyKSkucmVtb3ZlQXR0cignZGF0YS1sb2FkZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGF0dHIgPSB0aGlzLnByb3h5ID8gJ2RhdGEteC1hZGRpdGlvbmFsLXN0eWxlLXVybCcgOiAnZGF0YS14LXN0eWxlLXVybCc7XG5cdFx0XHQkKCdbJyArIGF0dHIgKyAnXScsIHRoaXMuYm9keSkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRsZXQgc3R5bGUgPSB0cmltKCR0aGlzLmF0dHIoJ3N0eWxlJykpO1xuXHRcdFx0XHRzdHlsZSA9ICcnID09PSBzdHlsZSA/ICcnIDogJzsnID09PSBzdHlsZS5zdWJzdHIoLTEpID8gc3R5bGUgKyAnICcgOiBzdHlsZSArICc7ICc7XG5cdFx0XHRcdCR0aGlzLmF0dHIoJ3N0eWxlJywgc3R5bGUgKyAkdGhpcy5hdHRyKGF0dHIpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAobGF6eSkge1xuXHRcdFx0XHR0aGlzLmxvemFkKCk7XG5cdFx0XHRcdCR3aW4ucmVzaXplKCk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvd1Jlc2l6ZSg1MDApO1xuXHRcdH1cblx0fVxuXG5cdHNob3dJbnRlcm5hbEltYWdlcyhsYXp5ID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5ib2R5ICYmICF0aGlzLmJvZHkuZGF0YSgncmwtaW5pdC1pbnRlcm5hbC1pbWFnZXMnKSkge1xuXHRcdFx0dGhpcy5ib2R5LmRhdGEoJ3JsLWluaXQtaW50ZXJuYWwtaW1hZ2VzJywgdHJ1ZSk7XG5cblx0XHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0XHQkKCdbZGF0YS14LXNyYy1jaWRdJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0YXR0YWNobWVudCA9IHNlbGYuZmluZEF0dGFjaG1lbnRCeUNpZCgkdGhpcy5hdHRyKCdkYXRhLXgtc3JjLWNpZCcpKTtcblxuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmRvd25sb2FkKSB7XG5cdFx0XHRcdFx0aWYgKGxhenkgJiYgJHRoaXMuaXMoJ2ltZycpKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5hZGRDbGFzcygnbGF6eScpLmF0dHIoJ2RhdGEtb3JpZ2luYWwnLCBhdHRhY2htZW50LmxpbmtQcmV2aWV3KCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5hdHRyKCdzcmMnLCBhdHRhY2htZW50LmxpbmtQcmV2aWV3KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdCQoJ1tkYXRhLXgtc3JjLWxvY2F0aW9uXScsIHRoaXMuYm9keSkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRsZXQgYXR0YWNobWVudCA9IHNlbGYuZmluZEF0dGFjaG1lbnRCeUNvbnRlbnRMb2NhdGlvbigkdGhpcy5hdHRyKCdkYXRhLXgtc3JjLWxvY2F0aW9uJykpO1xuXHRcdFx0XHRpZiAoIWF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRhdHRhY2htZW50ID0gc2VsZi5maW5kQXR0YWNobWVudEJ5Q2lkKCR0aGlzLmF0dHIoJ2RhdGEteC1zcmMtbG9jYXRpb24nKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmRvd25sb2FkKSB7XG5cdFx0XHRcdFx0aWYgKGxhenkgJiYgJHRoaXMuaXMoJ2ltZycpKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5hZGRDbGFzcygnbGF6eScpLmF0dHIoJ2RhdGEtb3JpZ2luYWwnLCBhdHRhY2htZW50LmxpbmtQcmV2aWV3KCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5hdHRyKCdzcmMnLCBhdHRhY2htZW50LmxpbmtQcmV2aWV3KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdCQoJ1tkYXRhLXgtc3R5bGUtY2lkXScsIHRoaXMuYm9keSkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0bGV0IHN0eWxlID0gJycsXG5cdFx0XHRcdFx0bmFtZSA9ICcnO1xuXG5cdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRhdHRhY2htZW50ID0gc2VsZi5maW5kQXR0YWNobWVudEJ5Q2lkKCR0aGlzLmF0dHIoJ2RhdGEteC1zdHlsZS1jaWQnKSk7XG5cblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC5saW5rUHJldmlldykge1xuXHRcdFx0XHRcdG5hbWUgPSAkdGhpcy5hdHRyKCdkYXRhLXgtc3R5bGUtY2lkLW5hbWUnKTtcblx0XHRcdFx0XHRpZiAoJycgIT09IG5hbWUpIHtcblx0XHRcdFx0XHRcdHN0eWxlID0gdHJpbSgkdGhpcy5hdHRyKCdzdHlsZScpKTtcblx0XHRcdFx0XHRcdHN0eWxlID0gJycgPT09IHN0eWxlID8gJycgOiAnOycgPT09IHN0eWxlLnN1YnN0cigtMSkgPyBzdHlsZSArICcgJyA6IHN0eWxlICsgJzsgJztcblx0XHRcdFx0XHRcdCR0aGlzLmF0dHIoJ3N0eWxlJywgc3R5bGUgKyBuYW1lICsgXCI6IHVybCgnXCIgKyBhdHRhY2htZW50LmxpbmtQcmV2aWV3KCkgKyBcIicpXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChsYXp5KSB7XG5cdFx0XHRcdC8vICQoJy5STC1NYWlsTWVzc2FnZVZpZXcgLm1lc3NhZ2VWaWV3IC5tZXNzYWdlSXRlbSAuY29udGVudCcpWzBdXG5cdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5sb3phZCgpLCAzMDApO1xuXHRcdFx0fVxuXG5cdFx0XHR3aW5kb3dSZXNpemUoNTAwKTtcblx0XHR9XG5cdH1cblxuXHRzdG9yZURhdGFJbkRvbSgpIHtcblx0XHRpZiAodGhpcy5ib2R5KSB7XG5cdFx0XHR0aGlzLmJvZHkuZGF0YSgncmwtaXMtaHRtbCcsICEhdGhpcy5pc0h0bWwoKSk7XG5cdFx0XHR0aGlzLmJvZHkuZGF0YSgncmwtaGFzLWltYWdlcycsICEhdGhpcy5oYXNJbWFnZXMoKSk7XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hEYXRhRnJvbURvbSgpIHtcblx0XHRpZiAodGhpcy5ib2R5KSB7XG5cdFx0XHR0aGlzLmlzSHRtbCghIXRoaXMuYm9keS5kYXRhKCdybC1pcy1odG1sJykpO1xuXHRcdFx0dGhpcy5oYXNJbWFnZXMoISF0aGlzLmJvZHkuZGF0YSgncmwtaGFzLWltYWdlcycpKTtcblx0XHR9XG5cdH1cblxuXHRyZXBsYWNlUGxhbmVUZXh0Qm9keShwbGFpbikge1xuXHRcdGlmICh0aGlzLmJvZHkpIHtcblx0XHRcdHRoaXMuYm9keS5odG1sKHBsYWluKS5hZGRDbGFzcygnYi10ZXh0LXBhcnQgcGxhaW4nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZsYWdIYXNoKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHR0aGlzLmRlbGV0ZWQoKSxcblx0XHRcdHRoaXMuZGVsZXRlZE1hcmsoKSxcblx0XHRcdHRoaXMudW5zZWVuKCksXG5cdFx0XHR0aGlzLmZsYWdnZWQoKSxcblx0XHRcdHRoaXMuYW5zd2VyZWQoKSxcblx0XHRcdHRoaXMuZm9yd2FyZGVkKCksXG5cdFx0XHR0aGlzLmlzUmVhZFJlY2VpcHQoKVxuXHRcdF0uam9pbignLCcpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lc3NhZ2VNb2RlbCwgTWVzc2FnZU1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICogSmF2YVNjcmlwdCBDb29raWUgdjIuMi4xXG4gKiBodHRwczovL2dpdGh1Yi5jb20vanMtY29va2llL2pzLWNvb2tpZVxuICpcbiAqIENvcHlyaWdodCAyMDA2LCAyMDE1IEtsYXVzIEhhcnRsICYgRmFnbmVyIEJyYWNrXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuOyhmdW5jdGlvbiAoZmFjdG9yeSkge1xuXHR2YXIgcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyO1xuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XG5cdH1cblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XG5cdH1cblx0aWYgKCFyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIpIHtcblx0XHR2YXIgT2xkQ29va2llcyA9IHdpbmRvdy5Db29raWVzO1xuXHRcdHZhciBhcGkgPSB3aW5kb3cuQ29va2llcyA9IGZhY3RvcnkoKTtcblx0XHRhcGkubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHdpbmRvdy5Db29raWVzID0gT2xkQ29va2llcztcblx0XHRcdHJldHVybiBhcGk7XG5cdFx0fTtcblx0fVxufShmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIGV4dGVuZCAoKSB7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBhcmd1bWVudHNbIGkgXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gYXR0cmlidXRlc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVjb2RlIChzKSB7XG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvKCVbMC05QS1aXXsyfSkrL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbml0IChjb252ZXJ0ZXIpIHtcblx0XHRmdW5jdGlvbiBhcGkoKSB7fVxuXG5cdFx0ZnVuY3Rpb24gc2V0IChrZXksIHZhbHVlLCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGF0dHJpYnV0ZXMgPSBleHRlbmQoe1xuXHRcdFx0XHRwYXRoOiAnLydcblx0XHRcdH0sIGFwaS5kZWZhdWx0cywgYXR0cmlidXRlcyk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpICogMSArIGF0dHJpYnV0ZXMuZXhwaXJlcyAqIDg2NGUrNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlJ3JlIHVzaW5nIFwiZXhwaXJlc1wiIGJlY2F1c2UgXCJtYXgtYWdlXCIgaXMgbm90IHN1cHBvcnRlZCBieSBJRVxuXHRcdFx0YXR0cmlidXRlcy5leHBpcmVzID0gYXR0cmlidXRlcy5leHBpcmVzID8gYXR0cmlidXRlcy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgOiAnJztcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblx0XHRcdFx0aWYgKC9eW1xce1xcW10vLnRlc3QocmVzdWx0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gcmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0XHR2YWx1ZSA9IGNvbnZlcnRlci53cml0ZSA/XG5cdFx0XHRcdGNvbnZlcnRlci53cml0ZSh2YWx1ZSwga2V5KSA6XG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpO1xuXG5cdFx0XHRrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGtleSkpXG5cdFx0XHRcdC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDVFfDYwfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG5cdFx0XHRcdC5yZXBsYWNlKC9bXFwoXFwpXS9nLCBlc2NhcGUpO1xuXG5cdFx0XHR2YXIgc3RyaW5naWZpZWRBdHRyaWJ1dGVzID0gJyc7XG5cdFx0XHRmb3IgKHZhciBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0aWYgKCFhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc7ICcgKyBhdHRyaWJ1dGVOYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ29uc2lkZXJzIFJGQyA2MjY1IHNlY3Rpb24gNS4yOlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0Ly8gMy4gIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuXHRcdFx0XHQvLyAgICAgY2hhcmFjdGVyOlxuXHRcdFx0XHQvLyBDb25zdW1lIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHVwIHRvLFxuXHRcdFx0XHQvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpIGNoYXJhY3Rlci5cblx0XHRcdFx0Ly8gLi4uXG5cdFx0XHRcdHN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnPScgKyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnNwbGl0KCc7JylbMF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoZG9jdW1lbnQuY29va2llID0ga2V5ICsgJz0nICsgdmFsdWUgKyBzdHJpbmdpZmllZEF0dHJpYnV0ZXMpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldCAoa2V5LCBqc29uKSB7XG5cdFx0XHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBqYXIgPSB7fTtcblx0XHRcdC8vIFRvIHByZXZlbnQgdGhlIGZvciBsb29wIGluIHRoZSBmaXJzdCBwbGFjZSBhc3NpZ24gYW4gZW1wdHkgYXJyYXlcblx0XHRcdC8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLlxuXHRcdFx0dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXTtcblx0XHRcdHZhciBpID0gMDtcblxuXHRcdFx0Zm9yICg7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTtcblx0XHRcdFx0dmFyIGNvb2tpZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJz0nKTtcblxuXHRcdFx0XHRpZiAoIWpzb24gJiYgY29va2llLmNoYXJBdCgwKSA9PT0gJ1wiJykge1xuXHRcdFx0XHRcdGNvb2tpZSA9IGNvb2tpZS5zbGljZSgxLCAtMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhciBuYW1lID0gZGVjb2RlKHBhcnRzWzBdKTtcblx0XHRcdFx0XHRjb29raWUgPSAoY29udmVydGVyLnJlYWQgfHwgY29udmVydGVyKShjb29raWUsIG5hbWUpIHx8XG5cdFx0XHRcdFx0XHRkZWNvZGUoY29va2llKTtcblxuXHRcdFx0XHRcdGlmIChqc29uKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb29raWUgPSBKU09OLnBhcnNlKGNvb2tpZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGphcltuYW1lXSA9IGNvb2tpZTtcblxuXHRcdFx0XHRcdGlmIChrZXkgPT09IG5hbWUpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGtleSA/IGphcltrZXldIDogamFyO1xuXHRcdH1cblxuXHRcdGFwaS5zZXQgPSBzZXQ7XG5cdFx0YXBpLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBnZXQoa2V5LCBmYWxzZSAvKiByZWFkIGFzIHJhdyAqLyk7XG5cdFx0fTtcblx0XHRhcGkuZ2V0SlNPTiA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBnZXQoa2V5LCB0cnVlIC8qIHJlYWQgYXMganNvbiAqLyk7XG5cdFx0fTtcblx0XHRhcGkucmVtb3ZlID0gZnVuY3Rpb24gKGtleSwgYXR0cmlidXRlcykge1xuXHRcdFx0c2V0KGtleSwgJycsIGV4dGVuZChhdHRyaWJ1dGVzLCB7XG5cdFx0XHRcdGV4cGlyZXM6IC0xXG5cdFx0XHR9KSk7XG5cdFx0fTtcblxuXHRcdGFwaS5kZWZhdWx0cyA9IHt9O1xuXG5cdFx0YXBpLndpdGhDb252ZXJ0ZXIgPSBpbml0O1xuXG5cdFx0cmV0dXJuIGFwaTtcblx0fVxuXG5cdHJldHVybiBpbml0KGZ1bmN0aW9uICgpIHt9KTtcbn0pKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsLG5vLXRocm93LWxpdGVyYWxcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHRocm93IDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIHF1b3QgPSAvXCIvZztcblxuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVodG1sXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIG1ldGhvZCwgbG93ZXJjYXNlXG4vLyBvZiBhIHRhZyBhbmQgZXNjYXBpbmcgcXVvdGVzIGluIGFyZ3VtZW50c1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW01FVEhPRF9OQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmVkdWNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ3JlZHVjZScsIHsgMTogMCB9KTtcbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSCB8fCBDSFJPTUVfQlVHIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciB2YWx1ZXMgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBET01JdGVyYWJsZXMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihpdCkpID8gdmFsdWVzIDogb3duO1xufTtcbiIsInZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBvYmplY3RIYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChpbnNwZWN0U291cmNlKFdlYWtNYXApKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsLCBrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0O1xuICAgIHNldHRlci5jYWxsKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyLmNhbGwoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbn07XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS52YWx1ZXM7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNvbmNhdCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBjb25jYXQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5jb25jYXQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGO1xudmFyIE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCA9ICdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBTUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIVNQRUNJRVNfU1VQUE9SVDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gaW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuaW5kZXhPZjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2luZGV4T2YnLCB7IEFDQ0VTU09SUzogdHJ1ZSwgMTogMCB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IE5FR0FUSVZFX1pFUk8gfHwgIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBmaW5kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maW5kJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbmQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maW5kKSA/IGZpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmluZDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aChGSU5EKTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2xhc3QtaW5kZXgtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2xhc3QtaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubGFzdEluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5sYXN0SW5kZXhPZikgPyBsYXN0SW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5sYXN0SW5kZXhPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGxhc3RJbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5sYXN0aW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogbGFzdEluZGV4T2YgIT09IFtdLmxhc3RJbmRleE9mIH0sIHtcbiAgbGFzdEluZGV4T2Y6IGxhc3RJbmRleE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG52YXIgbmF0aXZlTGFzdEluZGV4T2YgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVMYXN0SW5kZXhPZiAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2xhc3RJbmRleE9mJyk7XG4vLyBGb3IgcHJldmVudGluZyBwb3NzaWJsZSBhbG1vc3QgaW5maW5pdGUgbG9vcCBpbiBub24tc3RhbmRhcmQgaW1wbGVtZW50YXRpb25zLCB0ZXN0IHRoZSBmb3J3YXJkIHZlcnNpb24gb2YgdGhlIG1ldGhvZFxudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2luZGV4T2YnLCB7IEFDQ0VTU09SUzogdHJ1ZSwgMTogMCB9KTtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5sYXN0aW5kZXhvZlxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiBuYXRpdmVMYXN0SW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gbWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPICYmIE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgcmV0dXJuIC0xO1xufSA6IG5hdGl2ZUxhc3RJbmRleE9mO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG93biA9PT0gRnVuY3Rpb25Qcm90b3R5cGUuYmluZCkgPyBiaW5kIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdGdW5jdGlvbicpLmJpbmQ7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiQoeyB0YXJnZXQ6ICdGdW5jdGlvbicsIHByb3RvOiB0cnVlIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoQywgYXJnc0xlbmd0aCwgYXJncykge1xuICBpZiAoIShhcmdzTGVuZ3RoIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBsaXN0ID0gW10sIGkgPSAwOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gRnVuY3Rpb24oJ0MsYScsICdyZXR1cm4gbmV3IEMoJyArIGxpc3Quam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogZm4uYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3RyaW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGl0IGluc3RhbmNlb2YgU3RyaW5nICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gdHJpbSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ1N0cmluZycpLnRyaW07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciB3aGl0ZXNwYWNlID0gJ1snICsgd2hpdGVzcGFjZXMgKyAnXSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyokJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKCkgfHwgbm9uW01FVEhPRF9OQU1FXSgpICE9IG5vbiB8fCB3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0ubmFtZSAhPT0gTUVUSE9EX05BTUU7XG4gIH0pO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9tYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgbWFwID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1hcCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcbi8vIEZGNDktIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFERVNDUklQVE9SUywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IG9iamVjdERlZmluZVByb3BlcnR5TW9kaWxlLmZcbn0pO1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgIC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpXG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBuZXcgKEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQykobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNhcnJheVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjbGFzc29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICghU1RSSUNUX01FVEhPRCB8fCAhVVNFU19UT19MRU5HVEgpID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSA6IFtdLmZvckVhY2g7XG4iLCIvLyBgU2FtZVZhbHVlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IFwiPGh0bWw+XFxuPGhlYWQ+XFxuXFx0PG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcInVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwiYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZVxcXCIgY29udGVudD1cXFwieWVzXFxcIiAvPlxcblxcdDxtZXRhIG5hbWU9XFxcInJvYm90c1xcXCIgY29udGVudD1cXFwibm9pbmRleCwgbm9mb2xsb3csIG5vb2RwXFxcIiAvPlxcblxcdDx0aXRsZT57e3RpdGxlfX08L3RpdGxlPlxcblxcdDxzdHlsZT5cXG5odG1sLCBib2R5IHtcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcblxcdGZvbnQtc2l6ZTogMTNweDtcXG5cXHRmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHBhZGRpbmc6IDA7XFxufVxcblxcbmEge2NvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZX1cXG5hOnZpc2l0ZWQge2NvbG9yOiAjNjA5fVxcbmE6YWN0aXZlIHtjb2xvcjogcmVkfVxcbmJsb2NrcXVvdGUge2JvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7IG1hcmdpbjogMDsgcGFkZGluZzogMHB4IDEwcHh9XFxuXFxucHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XFxufVxcblxcbi5ib2R5LXdycCB7XFxuXFx0cGFkZGluZzogMTBweDtcXG59XFxuXFxuLmJvZHktd3JwLmh0bWwgcHJlIHtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IG5vcm1hbDtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIHtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIHByZSB7XFxuXFx0bWFyZ2luOiAwcHg7XFxuXFx0cGFkZGluZzogMHB4O1xcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSB7XFxuXFx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibHVlO1xcblxcdGNvbG9yOiBibHVlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyZWVuO1xcblxcdGNvbG9yOiBncmVlbjtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIGJsb2NrcXVvdGUgYmxvY2txdW90ZSBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIHJlZDtcXG5cXHRjb2xvcjogcmVkO1xcbn1cXG4ucmwtcHJldmlldy1zdWJqZWN0IHtcXG5cXHRmb250LXNpemU6IDE2cHg7XFxuXFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XFxuXFx0cGFkZGluZzogMTVweDtcXG59XFxuLnJsLXByZXZpZXctY3JlZHMtZnJvbSwgLnJsLXByZXZpZXctY3JlZHMtdG8sIC5ybC1wcmV2aWV3LWNyZWRzLWNjIHtcXG5cXHRmb250LXNpemU6IDEycHg7XFxuXFx0cGFkZGluZzogNXB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LWRhdGUge1xcblxcdGZsb2F0OiByaWdodDtcXG5cXHRmb250LXNpemU6IDEycHg7XFxuXFx0cGFkZGluZzogMTBweCAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1zZWN0aW9uIHtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdG1hcmdpbjogMDtcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXG59XFxuLnJsLXByZXZpZXctaGlkZSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuXFx0PC9zdHlsZT5cXG48L2hlYWQ+XFxuPGJvZHk+XFxuXFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zZWN0aW9uXFxcIj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXN1YmplY3RcXFwiPnt7c3ViamVjdH19PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zZWN0aW9uXFxcIj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWRhdGVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy1mcm9tXFxcIj57e2Zyb21DcmVkc319PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy10b1xcXCI+e3t0b0xhYmVsfX06IHt7dG9DcmVkc319PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy1jYyB7e2NjQ2xhc3N9fVxcXCI+e3tjY0xhYmVsfX06IHt7Y2NDcmVkc319PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwiYm9keS13cnAge3tib2R5Q2xhc3N9fVxcXCI+e3todG1sfX08L2Rpdj5cXG48L2JvZHk+XFxuPC9odG1sPlwiOyIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgZmlsdGVyID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IGZpbHRlciA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZpbHRlcjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHNsaWNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNsaWNlKSA/IHNsaWNlIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zbGljZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdzbGljZScsIHsgQUNDRVNTT1JTOiB0cnVlLCAwOiAwLCAxOiAyIH0pO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlLmNhbGwodGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBrZXlzOiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXModG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9BY2NvdW50Jyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0FjY291bnQnXG59KVxuY2xhc3MgQWNjb3VudFBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5pc05ldyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5lbWFpbEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmVtYWlsRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yQWRkaXRpb25hbCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5lbWFpbEZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpKVxuXHRhZGRBY2NvdW50Q29tbWFuZCgpIHtcblx0XHR0aGlzLmVtYWlsRXJyb3IoJycgPT09IHRyaW0odGhpcy5lbWFpbCgpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMuZW1haWxFcnJvcigpIHx8IHRoaXMucGFzc3dvcmRFcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXG5cdFx0UmVtb3RlLmFjY291bnRTZXR1cChcblx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5hY2NvdW50c0FuZElkZW50aXRpZXMoKTtcblx0XHRcdFx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKFxuXHRcdFx0XHRcdFx0XHRkYXRhLkVycm9yQ29kZSA/IGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkgOiBnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcilcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChkYXRhLkVycm9yTWVzc2FnZUFkZGl0aW9uYWwpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGl0aW9uYWwoZGF0YS5FcnJvck1lc3NhZ2VBZGRpdGlvbmFsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpdGlvbmFsKCcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZW1haWwoKSxcblx0XHRcdHRoaXMucGFzc3dvcmQoKSxcblx0XHRcdHRoaXMuaXNOZXcoKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5pc05ldyh0cnVlKTtcblxuXHRcdHRoaXMuZW1haWwoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQoJycpO1xuXG5cdFx0dGhpcy5lbWFpbEVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yKCcnKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yQWRkaXRpb25hbCgnJyk7XG5cdH1cblxuXHRvblNob3coYWNjb3VudCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHRcdGlmIChhY2NvdW50ICYmIGFjY291bnQuY2FuQmVFZGl0KCkpIHtcblx0XHRcdHRoaXMuaXNOZXcoZmFsc2UpO1xuXHRcdFx0dGhpcy5lbWFpbChhY2NvdW50LmVtYWlsKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5lbWFpbEZvY3VzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFjY291bnRQb3B1cFZpZXcsIEFjY291bnRQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdHJpbSwgZmFrZU1kNSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvSWRlbnRpdHknLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzSWRlbnRpdHknXG59KVxuY2xhc3MgSWRlbnRpdHlQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuaWQgPSAnJztcblx0XHR0aGlzLmVkaXQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm93bmVyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJykudmFsaWRhdGVFbWFpbCgpO1xuXHRcdHRoaXMuZW1haWwuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmFtZS5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5yZXBseVRvID0ga28ub2JzZXJ2YWJsZSgnJykudmFsaWRhdGVTaW1wbGVFbWFpbCgpO1xuXHRcdHRoaXMucmVwbHlUby5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5iY2MgPSBrby5vYnNlcnZhYmxlKCcnKS52YWxpZGF0ZVNpbXBsZUVtYWlsKCk7XG5cdFx0dGhpcy5iY2MuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zaWduYXR1cmUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNpZ25hdHVyZUluc2VydEJlZm9yZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zaG93QmNjID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaG93UmVwbHlUbyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5iY2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKGZhbHNlID09PSB0aGlzLnNob3dCY2MoKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0JjYyh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMucmVwbHlUby5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHRoaXMuc2hvd1JlcGx5VG8oKSAmJiAwIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd1JlcGx5VG8odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpKVxuXHRhZGRPckVkaXRJZGVudGl0eUNvbW1hbmQoKSB7XG5cdFx0aWYgKHRoaXMuc2lnbmF0dXJlICYmIHRoaXMuc2lnbmF0dXJlLl9fZmV0Y2hFZGl0b3JWYWx1ZSkge1xuXHRcdFx0dGhpcy5zaWduYXR1cmUuX19mZXRjaEVkaXRvclZhbHVlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmVtYWlsLmhhc0Vycm9yKCkpIHtcblx0XHRcdHRoaXMuZW1haWwuaGFzRXJyb3IoJycgPT09IHRyaW0odGhpcy5lbWFpbCgpKSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW1haWwuaGFzRXJyb3IoKSkge1xuXHRcdFx0aWYgKCF0aGlzLm93bmVyKCkpIHtcblx0XHRcdFx0dGhpcy5lbWFpbC5mb2N1c2VkKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucmVwbHlUby5oYXNFcnJvcigpKSB7XG5cdFx0XHR0aGlzLnJlcGx5VG8uZm9jdXNlZCh0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5iY2MuaGFzRXJyb3IoKSkge1xuXHRcdFx0dGhpcy5iY2MuZm9jdXNlZCh0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cblx0XHRSZW1vdGUuaWRlbnRpdHlVcGRhdGUoXG5cdFx0XHQocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0XHRcdGlmIChkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0Z2V0QXBwKCkuYWNjb3VudHNBbmRJZGVudGl0aWVzKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmlkLFxuXHRcdFx0dGhpcy5lbWFpbCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cdFx0XHR0aGlzLnJlcGx5VG8oKSxcblx0XHRcdHRoaXMuYmNjKCksXG5cdFx0XHR0aGlzLnNpZ25hdHVyZSgpLFxuXHRcdFx0dGhpcy5zaWduYXR1cmVJbnNlcnRCZWZvcmUoKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5pZCA9ICcnO1xuXHRcdHRoaXMuZWRpdChmYWxzZSk7XG5cdFx0dGhpcy5vd25lcihmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUoJycpO1xuXHRcdHRoaXMuZW1haWwoJycpO1xuXHRcdHRoaXMucmVwbHlUbygnJyk7XG5cdFx0dGhpcy5iY2MoJycpO1xuXHRcdHRoaXMuc2lnbmF0dXJlKCcnKTtcblx0XHR0aGlzLnNpZ25hdHVyZUluc2VydEJlZm9yZShmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsLmhhc0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnJlcGx5VG8uaGFzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYmNjLmhhc0Vycm9yKGZhbHNlKTtcblxuXHRcdHRoaXMuc2hvd0JjYyhmYWxzZSk7XG5cdFx0dGhpcy5zaG93UmVwbHlUbyhmYWxzZSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IoJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0lkZW50aXR5TW9kZWx9IG9JZGVudGl0eVxuXHQgKi9cblx0b25TaG93KGlkZW50aXR5KSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdHRoaXMuZWRpdCh0cnVlKTtcblxuXHRcdFx0dGhpcy5pZCA9IGlkZW50aXR5LmlkKCkgfHwgJyc7XG5cdFx0XHR0aGlzLm5hbWUoaWRlbnRpdHkubmFtZSgpKTtcblx0XHRcdHRoaXMuZW1haWwoaWRlbnRpdHkuZW1haWwoKSk7XG5cdFx0XHR0aGlzLnJlcGx5VG8oaWRlbnRpdHkucmVwbHlUbygpKTtcblx0XHRcdHRoaXMuYmNjKGlkZW50aXR5LmJjYygpKTtcblx0XHRcdHRoaXMuc2lnbmF0dXJlKGlkZW50aXR5LnNpZ25hdHVyZSgpKTtcblx0XHRcdHRoaXMuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKGlkZW50aXR5LnNpZ25hdHVyZUluc2VydEJlZm9yZSgpKTtcblxuXHRcdFx0dGhpcy5vd25lcignJyA9PT0gdGhpcy5pZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWQgPSBmYWtlTWQ1KCk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICghdGhpcy5vd25lcigpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLmVtYWlsLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25IaWRlV2l0aERlbGF5KCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IElkZW50aXR5UG9wdXBWaWV3LCBJZGVudGl0eVBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNhdmVUcmlnZ2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IHBhcmFtcy5lbGVtZW50IHx8IG51bGw7XG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSAmJiBwYXJhbXMudmFsdWUuc3Vic2NyaWJlID8gcGFyYW1zLnZhbHVlIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cblx0XHRcdFx0aWYgKHBhcmFtcy52ZXJ0aWNhbEFsaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygndmVydGljYWwtYWxpZ24nLCBwYXJhbXMudmVydGljYWxBbGlnbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHRoaXMudmFsdWUoKSk7XG5cblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy52YWx1ZS5zdWJzY3JpYmUodGhpcy5zZXRTdGF0ZSwgdGhpcykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGU6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTYXZlVHJpZ2dlckNvbXBvbmVudCwgJ1NhdmVUcmlnZ2VyQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihJbnB1dENvbXBvbmVudCwgJ0lucHV0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyB8fCAnJztcblxuXHRcdHRoaXMub3B0aW9uc1RleHQgPSBwYXJhbXMub3B0aW9uc1RleHQgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNWYWx1ZSA9IHBhcmFtcy5vcHRpb25zVmFsdWUgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gcGFyYW1zLm9wdGlvbnNDYXB0aW9uIHx8IG51bGw7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zQ2FwdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IGkxOG4odGhpcy5vcHRpb25zQ2FwdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNlbGVjdENvbXBvbmVudCwgJ1NlbGVjdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0UmFkaW8gfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RSYWRpbyc7XG5cbmNsYXNzIFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RSYWRpbyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoUmFkaW9Db21wb25lbnQsICdSYWRpb0NvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfUk9XUyA9IDU7XG5cbmNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5yb3dzID0gcGFyYW1zLnJvd3MgfHwgREVGQVVMVF9ST1dTO1xuXHRcdHRoaXMuc3BlbGxjaGVjayA9IGlzVW5kKHBhcmFtcy5zcGVsbGNoZWNrKSA/IGZhbHNlIDogISFwYXJhbXMuc3BlbGxjaGVjaztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoVGV4dEFyZWFDb21wb25lbnQsICdUZXh0QXJlYUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihEYXRlQ29tcG9uZW50LCAnRGF0ZUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2NyaXB0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHBhcmFtcy5jb21wb25lbnQgJiZcblx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2RlcyAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnQgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUxcblx0XHQpIHtcblx0XHRcdGxldCBzY3JpcHQgPSBwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUw7XG5cdFx0XHRzY3JpcHQgPSAhc2NyaXB0ID8gJycgOiBzY3JpcHQucmVwbGFjZSgvPHgtc2NyaXB0L2ksICc8c2NyaXB0JykucmVwbGFjZSgvPGI+PFxcL2I+PFxcL3gtc2NyaXB0Pi9pLCAnPC9zY3JpcHQ+Jyk7XG5cblx0XHRcdGlmIChzY3JpcHQpIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQudGV4dCgnJyk7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlcGxhY2VXaXRoKFxuXHRcdFx0XHRcdCQoc2NyaXB0KS50ZXh0KFxuXHRcdFx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdICYmIHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0PyBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdDogJydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNjcmlwdENvbXBvbmVudCwgJ1NjcmlwdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCB0aGlzKTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKFxuXHRcdFx0dGhpcy52YWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0XHR9LCB0aGlzKVxuXHRcdCk7XG5cdH1cblxuXHRhbmltYXRpb25Cb3hTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQm94KHRydWUpO1xuXHR9XG5cblx0YW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayh0cnVlKTtcblx0fVxuXG5cdHRyaWdnZXJBbmltYXRpb24oYm94KSB7XG5cdFx0aWYgKGJveCkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgMjAwKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQsICdDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHByb2dyZXNzSnMgZnJvbSAncHJvZ3Jlc3NKcyc7XG5cbmltcG9ydCB7XG5cdG5vb3AsXG5cdHRyaW0sXG5cdGxvZyxcblx0aGFzLFxuXHRpc0FycmF5LFxuXHRpbkFycmF5LFxuXHRpc1VuZCxcblx0aXNOb3JtYWwsXG5cdGlzUG9zTnVtZXJpYyxcblx0aXNOb25FbXB0eUFycmF5LFxuXHRwSW50LFxuXHRwU3RyaW5nLFxuXHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSxcblx0bWFpbFRvSGVscGVyLFxuXHR3aW5kb3dSZXNpemUsXG5cdGphc3NsXG59IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7XG5cdExheW91dCxcblx0Q2FwYSxcblx0U3RvcmFnZVJlc3VsdFR5cGUsXG5cdE5vdGlmaWNhdGlvbixcblx0Rm9sZGVyVHlwZSxcblx0U2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbixcblx0TWVzc2FnZVNldEFjdGlvbixcblx0Q2xpZW50U2lkZUtleU5hbWUsXG5cdE1hZ2ljc1xufSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyAkaHRtbCwgbGVmdFBhbmVsV2lkdGgsIGxlZnRQYW5lbERpc2FibGVkLCBiQW5pbWF0aW9uU3VwcG9ydGVkLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgbW9tZW50Tm93VW5peCwgcmVsb2FkIGFzIG1vbWVudFJlbG9hZCB9IGZyb20gJ0NvbW1vbi9Nb21lbnRvcic7XG5cbmltcG9ydCB7XG5cdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUsXG5cdHNldEZvbGRlckhhc2gsXG5cdGdldEZvbGRlckhhc2gsXG5cdGdldEZvbGRlckluYm94TmFtZSxcblx0Z2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCxcblx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcixcblx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24sXG5cdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5Rm9sZGVyQW5kVWlkXG59IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7XG5cdHVzZXJCYWNrZ3JvdW5kLFxuXHRtYWlsQm94LFxuXHRyb290LFxuXHRvcGVuUGdwV29ya2VySnMsXG5cdG9wZW5QZ3BKcyxcblx0c29jaWFsR29vZ2xlLFxuXHRzb2NpYWxUd2l0dGVyLFxuXHRzb2NpYWxGYWNlYm9va1xufSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5cbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFNvY2lhbFN0b3JlIGZyb20gJ1N0b3Jlcy9Tb2NpYWwnO1xuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5pbXBvcnQgTm90aWZpY2F0aW9uU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTm90aWZpY2F0aW9uJztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgQ29udGFjdFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0NvbnRhY3QnO1xuaW1wb3J0IElkZW50aXR5U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvSWRlbnRpdHknO1xuaW1wb3J0IFRlbXBsYXRlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvVGVtcGxhdGUnO1xuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5pbXBvcnQgUXVvdGFTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9RdW90YSc7XG5cbmltcG9ydCAqIGFzIExvY2FsIGZyb20gJ1N0b3JhZ2UvQ2xpZW50JztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgY2hlY2tUaW1lc3RhbXAgfSBmcm9tICdTdG9yYWdlL1JhaW5Mb29wJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcbmltcG9ydCBQcm9taXNlcyBmcm9tICdQcm9taXNlcy9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuaW1wb3J0IHsgQWNjb3VudE1vZGVsIH0gZnJvbSAnTW9kZWwvQWNjb3VudCc7XG5pbXBvcnQgeyBJZGVudGl0eU1vZGVsIH0gZnJvbSAnTW9kZWwvSWRlbnRpdHknO1xuaW1wb3J0IHsgVGVtcGxhdGVNb2RlbCB9IGZyb20gJ01vZGVsL1RlbXBsYXRlJztcbmltcG9ydCB7IE9wZW5QZ3BLZXlNb2RlbCB9IGZyb20gJ01vZGVsL09wZW5QZ3BLZXknO1xuXG4vLyBpbXBvcnQge0Fib3V0VXNlclNjcmVlbn0gZnJvbSAnU2NyZWVuL1VzZXIvQWJvdXQnO1xuaW1wb3J0IHsgTG9naW5Vc2VyU2NyZWVuIH0gZnJvbSAnU2NyZWVuL1VzZXIvTG9naW4nO1xuaW1wb3J0IHsgTWFpbEJveFVzZXJTY3JlZW4gfSBmcm9tICdTY3JlZW4vVXNlci9NYWlsQm94JztcbmltcG9ydCB7IFNldHRpbmdzVXNlclNjcmVlbiB9IGZyb20gJ1NjcmVlbi9Vc2VyL1NldHRpbmdzJztcblxuaW1wb3J0IHsgaGlkZUxvYWRpbmcsIHJvdXRlT2ZmLCByb3V0ZU9uLCBzZXRIYXNoLCBzdGFydFNjcmVlbnMsIHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IHsgQWJzdHJhY3RBcHAgfSBmcm9tICdBcHAvQWJzdHJhY3QnO1xuXG5jbGFzcyBBcHBVc2VyIGV4dGVuZHMgQWJzdHJhY3RBcHAge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihSZW1vdGUpO1xuXG5cdFx0dGhpcy5tb3ZlQ2FjaGUgPSB7fTtcblxuXHRcdHRoaXMucXVvdGFEZWJvdW5jZSA9IF8uZGVib3VuY2UodGhpcy5xdW90YSwgTWFnaWNzLlRpbWUzMHMpO1xuXHRcdHRoaXMubW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIgPSBfLmJpbmQodGhpcy5tb3ZlT3JEZWxldGVSZXNwb25zZUhlbHBlciwgdGhpcyk7XG5cblx0XHR0aGlzLm1lc3NhZ2VzTW92ZVRyaWdnZXIgPSBfLmRlYm91bmNlKHRoaXMubWVzc2FnZXNNb3ZlVHJpZ2dlciwgNTAwKTtcblxuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4zMHMnKSwgTWFnaWNzLlRpbWUzMHMpO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xbScpLCBNYWdpY3MuVGltZTFtKTtcblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuMm0nKSwgTWFnaWNzLlRpbWUybSk7XG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjNtJyksIE1hZ2ljcy5UaW1lM20pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC41bScpLCBNYWdpY3MuVGltZTVtKTtcblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuMTBtJyksIE1hZ2ljcy5UaW1lMTBtKTtcblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuMTVtJyksIE1hZ2ljcy5UaW1lMTVtKTtcblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuMjBtJyksIE1hZ2ljcy5UaW1lMjBtKTtcblxuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4ybS1hZnRlcjVtJyksIE1hZ2ljcy5UaW1lMm0pLCBNYWdpY3MuVGltZTVtKTtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuNW0tYWZ0ZXI1bScpLCBNYWdpY3MuVGltZTVtKSwgTWFnaWNzLlRpbWU1bSk7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoXG5cdFx0XHQoKSA9PiB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuMTBtLWFmdGVyNW0nKSwgTWFnaWNzLlRpbWUxMG0pLFxuXHRcdFx0TWFnaWNzLlRpbWU1bVxuXHRcdCk7XG5cblx0XHQkLndha2VVcChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKGNoZWNrVGltZXN0YW1wKCkpIHtcblx0XHRcdFx0XHR0aGlzLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UmVtb3RlLmpzVmVyc2lvbigoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAhb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlbG9hZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cdFx0XHR9LFxuXHRcdFx0e30sXG5cdFx0XHRNYWdpY3MuVGltZTYwbVxuXHRcdCk7XG5cblx0XHRpZiAoY2hlY2tUaW1lc3RhbXAoKSkge1xuXHRcdFx0dGhpcy5yZWxvYWQoKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJCYWNrZ3JvdW5kSGFzaCcpKSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0JCgnI3JsLWJnJylcblx0XHRcdFx0XHQuYXR0cignc3R5bGUnLCAnYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50OycpXG5cdFx0XHRcdFx0LmJhY2tzdHJldGNoKHVzZXJCYWNrZ3JvdW5kKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZEhhc2gnKSksIHtcblx0XHRcdFx0XHRcdGZhZGU6IGJBbmltYXRpb25TdXBwb3J0ZWQgPyBNYWdpY3MuVGltZTFzIDogMCxcblx0XHRcdFx0XHRcdGNlbnRlcmVkWDogdHJ1ZSxcblx0XHRcdFx0XHRcdGNlbnRlcmVkWTogdHJ1ZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTFzKTtcblx0XHR9XG5cblx0XHR0aGlzLnNvY2lhbFVzZXJzID0gXy5iaW5kKHRoaXMuc29jaWFsVXNlcnMsIHRoaXMpO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBSZW1vdGU7XG5cdH1cblxuXHRyZWxvYWQoKSB7XG5cdFx0aWYgKHdpbmRvdy5wYXJlbnQgJiYgISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnaW5JZnJhbWUnKSkge1xuXHRcdFx0d2luZG93LnBhcmVudC5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdH1cblx0fVxuXG5cdHJlbG9hZEZsYWdzQ3VycmVudE1lc3NhZ2VMaXN0QW5kTWVzc2FnZUZyb21DYWNoZSgpIHtcblx0XHRfLmVhY2goTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCksIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UpO1xuXHRcdH0pO1xuXHRcdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUoTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkRyb3BQYWdlUG9zaXRpb24gPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiRHJvcEN1cnJlbkZvbGRlckNhY2hlID0gZmFsc2Vcblx0ICovXG5cdHJlbG9hZE1lc3NhZ2VMaXN0KGJEcm9wUGFnZVBvc2l0aW9uID0gZmFsc2UsIGJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUgPSBmYWxzZSkge1xuXHRcdGxldCBpT2Zmc2V0ID0gKE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UoKSAtIDEpICogU2V0dGluZ3NTdG9yZS5tZXNzYWdlc1BlclBhZ2UoKTtcblxuXHRcdGlmIChiRHJvcEN1cnJlbkZvbGRlckNhY2hlKSB7XG5cdFx0XHRzZXRGb2xkZXJIYXNoKEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLCAnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKGJEcm9wUGFnZVBvc2l0aW9uKSB7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlKDEpO1xuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZUJlZm9yZVRocmVhZCgxKTtcblx0XHRcdGlPZmZzZXQgPSAwO1xuXG5cdFx0XHRzZXRIYXNoKFxuXHRcdFx0XHRtYWlsQm94KFxuXHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlKCksXG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKClcblx0XHRcdFx0KSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5tZXNzYWdlTGlzdChcblx0XHRcdChzUmVzdWx0LCBvRGF0YSwgYkNhY2hlZCkgPT4ge1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFcnJvcignJyk7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0TG9hZGluZyhmYWxzZSk7XG5cblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUuc2V0TWVzc2FnZUxpc3Qob0RhdGEsIGJDYWNoZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZCA9PT0gc1Jlc3VsdCkge1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVycm9yKCcnKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCAhPT0gc1Jlc3VsdCkge1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdChbXSk7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0RXJyb3IoXG5cdFx0XHRcdFx0XHRvRGF0YSAmJiBvRGF0YS5FcnJvckNvZGUgPyBnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSA6IGkxOG4oJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRpT2Zmc2V0LFxuXHRcdFx0U2V0dGluZ3NTdG9yZS5tZXNzYWdlc1BlclBhZ2UoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFNlYXJjaCgpLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKClcblx0XHQpO1xuXHR9XG5cblx0cmVjYWNoZUluYm94TWVzc2FnZUxpc3QoKSB7XG5cdFx0UmVtb3RlLm1lc3NhZ2VMaXN0KG5vb3AsIGdldEZvbGRlckluYm94TmFtZSgpLCAwLCBTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpLCAnJywgJycsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZSZXN1bHRGdW5jXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFjdHNTeW5jKGZSZXN1bHRGdW5jKSB7XG5cdFx0Y29uc3Qgb0NvbnRhY3RzID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzO1xuXHRcdGlmIChcblx0XHRcdG9Db250YWN0cy5pbXBvcnRpbmcoKSB8fFxuXHRcdFx0b0NvbnRhY3RzLnN5bmNpbmcoKSB8fFxuXHRcdFx0IUNvbnRhY3RTdG9yZS5lbmFibGVDb250YWN0c1N5bmMoKSB8fFxuXHRcdFx0IUNvbnRhY3RTdG9yZS5hbGxvd0NvbnRhY3RzU3luYygpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0b0NvbnRhY3RzLnN5bmNpbmcodHJ1ZSk7XG5cblx0XHRSZW1vdGUuY29udGFjdHNTeW5jKChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0b0NvbnRhY3RzLnN5bmNpbmcoZmFsc2UpO1xuXG5cdFx0XHRpZiAoZlJlc3VsdEZ1bmMpIHtcblx0XHRcdFx0ZlJlc3VsdEZ1bmMoc1Jlc3VsdCwgb0RhdGEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRtZXNzYWdlc01vdmVUcmlnZ2VyKCkge1xuXHRcdGNvbnN0IHNUcmFzaEZvbGRlciA9IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCksXG5cdFx0XHRzU3BhbUZvbGRlciA9IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKTtcblxuXHRcdF8uZWFjaCh0aGlzLm1vdmVDYWNoZSwgKGl0ZW0pID0+IHtcblx0XHRcdGNvbnN0IGlzU3BhbSA9IHNTcGFtRm9sZGVyID09PSBpdGVtLlRvLFxuXHRcdFx0XHRpc1RyYXNoID0gc1RyYXNoRm9sZGVyID09PSBpdGVtLlRvLFxuXHRcdFx0XHRpc0hhbSA9ICFpc1NwYW0gJiYgc1NwYW1Gb2xkZXIgPT09IGl0ZW0uRnJvbSAmJiBnZXRGb2xkZXJJbmJveE5hbWUoKSA9PT0gaXRlbS5UbztcblxuXHRcdFx0UmVtb3RlLm1lc3NhZ2VzTW92ZShcblx0XHRcdFx0dGhpcy5tb3ZlT3JEZWxldGVSZXNwb25zZUhlbHBlcixcblx0XHRcdFx0aXRlbS5Gcm9tLFxuXHRcdFx0XHRpdGVtLlRvLFxuXHRcdFx0XHRpdGVtLlVpZCxcblx0XHRcdFx0aXNTcGFtID8gJ1NQQU0nIDogaXNIYW0gPyAnSEFNJyA6ICcnLFxuXHRcdFx0XHRpc1NwYW0gfHwgaXNUcmFzaFxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMubW92ZUNhY2hlID0ge307XG5cdH1cblxuXHRtZXNzYWdlc01vdmVIZWxwZXIoZnJvbUZvbGRlckZ1bGxOYW1lUmF3LCB0b0ZvbGRlckZ1bGxOYW1lUmF3LCB1aWRzRm9yTW92ZSkge1xuXHRcdGNvbnN0IGhhc2ggPSAnJCQnICsgZnJvbUZvbGRlckZ1bGxOYW1lUmF3ICsgJyQkJyArIHRvRm9sZGVyRnVsbE5hbWVSYXcgKyAnJCQnO1xuXHRcdGlmICghdGhpcy5tb3ZlQ2FjaGVbaGFzaF0pIHtcblx0XHRcdHRoaXMubW92ZUNhY2hlW2hhc2hdID0ge1xuXHRcdFx0XHRGcm9tOiBmcm9tRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFRvOiB0b0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRVaWQ6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMubW92ZUNhY2hlW2hhc2hdLlVpZCA9IF8udW5pb24odGhpcy5tb3ZlQ2FjaGVbaGFzaF0uVWlkLCB1aWRzRm9yTW92ZSk7XG5cdFx0dGhpcy5tZXNzYWdlc01vdmVUcmlnZ2VyKCk7XG5cdH1cblxuXHRtZXNzYWdlc0NvcHlIZWxwZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgc1RvRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRGb3JDb3B5KSB7XG5cdFx0UmVtb3RlLm1lc3NhZ2VzQ29weSh0aGlzLm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyLCBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBzVG9Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvckNvcHkpO1xuXHR9XG5cblx0bWVzc2FnZXNEZWxldGVIZWxwZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSkge1xuXHRcdFJlbW90ZS5tZXNzYWdlc0RlbGV0ZSh0aGlzLm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyLCBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0fVxuXG5cdG1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlcigpKSB7XG5cdFx0XHRpZiAob0RhdGEgJiYgaXNBcnJheShvRGF0YS5SZXN1bHQpICYmIDIgPT09IG9EYXRhLlJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0c2V0Rm9sZGVySGFzaChvRGF0YS5SZXN1bHRbMF0sIG9EYXRhLlJlc3VsdFsxXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRGb2xkZXJIYXNoKEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLCAnJyk7XG5cblx0XHRcdFx0aWYgKG9EYXRhICYmIC0xIDwgaW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtOb3RpZmljYXRpb24uQ2FudE1vdmVNZXNzYWdlLCBOb3RpZmljYXRpb24uQ2FudENvcHlNZXNzYWdlXSkpIHtcblx0XHRcdFx0XHR3aW5kb3cuYWxlcnQoZ2V0Tm90aWZpY2F0aW9uKG9EYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVsb2FkTWVzc2FnZUxpc3QoMCA9PT0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCkubGVuZ3RoKTtcblx0XHRcdHRoaXMucXVvdGFEZWJvdW5jZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Zyb21Gb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkRm9yUmVtb3ZlXG5cdCAqL1xuXHRkZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXJXaXRob3V0Q2hlY2soc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSkge1xuXHRcdHRoaXMubWVzc2FnZXNEZWxldGVIZWxwZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSk7XG5cdFx0TWVzc2FnZVN0b3JlLnJlbW92ZU1lc3NhZ2VzRnJvbUxpc3Qoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlEZWxldGVUeXBlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRGb3JSZW1vdmVcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYlVzZUZvbGRlciA9IHRydWVcblx0ICovXG5cdGRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcihpRGVsZXRlVHlwZSwgc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSwgYlVzZUZvbGRlcikge1xuXHRcdGxldCBvTW92ZUZvbGRlciA9IG51bGwsXG5cdFx0XHRuU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IG51bGw7XG5cblx0XHRzd2l0Y2ggKGlEZWxldGVUeXBlKSB7XG5cdFx0XHRjYXNlIEZvbGRlclR5cGUuU3BhbTpcblx0XHRcdFx0b01vdmVGb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSk7XG5cdFx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5TcGFtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgRm9sZGVyVHlwZS5Ob3RTcGFtOlxuXHRcdFx0XHRvTW92ZUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoZ2V0Rm9sZGVySW5ib3hOYW1lKCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgRm9sZGVyVHlwZS5UcmFzaDpcblx0XHRcdFx0b01vdmVGb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCkpO1xuXHRcdFx0XHRuU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uVHJhc2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBGb2xkZXJUeXBlLkFyY2hpdmU6XG5cdFx0XHRcdG9Nb3ZlRm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkpO1xuXHRcdFx0XHRuU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uQXJjaGl2ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXG5cdFx0YlVzZUZvbGRlciA9IGlzVW5kKGJVc2VGb2xkZXIpID8gdHJ1ZSA6ICEhYlVzZUZvbGRlcjtcblx0XHRpZiAoYlVzZUZvbGRlcikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoRm9sZGVyVHlwZS5TcGFtID09PSBpRGVsZXRlVHlwZSAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkpIHx8XG5cdFx0XHRcdChGb2xkZXJUeXBlLlRyYXNoID09PSBpRGVsZXRlVHlwZSAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpKSB8fFxuXHRcdFx0XHQoRm9sZGVyVHlwZS5BcmNoaXZlID09PSBpRGVsZXRlVHlwZSAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0YlVzZUZvbGRlciA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghb01vdmVGb2xkZXIgJiYgYlVzZUZvbGRlcikge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyksIFtuU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbl0pO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQhYlVzZUZvbGRlciB8fFxuXHRcdFx0KEZvbGRlclR5cGUuVHJhc2ggPT09IGlEZWxldGVUeXBlICYmXG5cdFx0XHRcdChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkgfHwgc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdyA9PT0gRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSkpXG5cdFx0KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Bc2snKSwgW1xuXHRcdFx0XHRpMThuKCdQT1BVUFNfQVNLL0RFU0NfV0FOVF9ERUxFVEVfTUVTU0FHRVMnKSxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZXNEZWxldGVIZWxwZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSk7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLnJlbW92ZU1lc3NhZ2VzRnJvbUxpc3Qoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSk7XG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH0gZWxzZSBpZiAob01vdmVGb2xkZXIpIHtcblx0XHRcdHRoaXMubWVzc2FnZXNNb3ZlSGVscGVyKHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIG9Nb3ZlRm9sZGVyLmZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRcdE1lc3NhZ2VTdG9yZS5yZW1vdmVNZXNzYWdlc0Zyb21MaXN0KHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRGb3JSZW1vdmUsIG9Nb3ZlRm9sZGVyLmZ1bGxOYW1lUmF3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGcm9tRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZEZvck1vdmVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJDb3B5ID0gZmFsc2Vcblx0ICovXG5cdG1vdmVNZXNzYWdlc1RvRm9sZGVyKHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRGb3JNb3ZlLCBzVG9Gb2xkZXJGdWxsTmFtZVJhdywgYkNvcHkpIHtcblx0XHRpZiAoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdyAhPT0gc1RvRm9sZGVyRnVsbE5hbWVSYXcgJiYgaXNBcnJheShhVWlkRm9yTW92ZSkgJiYgMCA8IGFVaWRGb3JNb3ZlLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qgb0Zyb21Gb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcpLFxuXHRcdFx0XHRvVG9Gb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNUb0ZvbGRlckZ1bGxOYW1lUmF3KTtcblxuXHRcdFx0aWYgKG9Gcm9tRm9sZGVyICYmIG9Ub0ZvbGRlcikge1xuXHRcdFx0XHRpZiAoaXNVbmQoYkNvcHkpID8gZmFsc2UgOiAhIWJDb3B5KSB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlc0NvcHlIZWxwZXIob0Zyb21Gb2xkZXIuZnVsbE5hbWVSYXcsIG9Ub0ZvbGRlci5mdWxsTmFtZVJhdywgYVVpZEZvck1vdmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZXNNb3ZlSGVscGVyKG9Gcm9tRm9sZGVyLmZ1bGxOYW1lUmF3LCBvVG9Gb2xkZXIuZnVsbE5hbWVSYXcsIGFVaWRGb3JNb3ZlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5yZW1vdmVNZXNzYWdlc0Zyb21MaXN0KG9Gcm9tRm9sZGVyLmZ1bGxOYW1lUmF3LCBhVWlkRm9yTW92ZSwgb1RvRm9sZGVyLmZ1bGxOYW1lUmF3LCBiQ29weSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgPSBudWxsXG5cdCAqL1xuXHRmb2xkZXJzUmVsb2FkKGNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGNvbnN0IHByb20gPSBQcm9taXNlcy5mb2xkZXJzUmVsb2FkKEZvbGRlclN0b3JlLmZvbGRlcnNMb2FkaW5nKTtcblx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdHByb21cblx0XHRcdFx0LnRoZW4oKHZhbHVlKSA9PiAhIXZhbHVlKVxuXHRcdFx0XHQudGhlbihjYWxsYmFjaylcblx0XHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayhmYWxzZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FsbGJhY2stcmV0dXJuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgMSk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGZvbGRlcnNQcm9taXNlc0FjdGlvbkhlbHBlcihwcm9taXNlLCBlcnJvckRlZkNvZGUpIHtcblx0XHRQcm9taXNlcy5hYm9ydCgnRm9sZGVycycpXG5cdFx0XHQuZmFzdFJlc29sdmUodHJ1ZSlcblx0XHRcdC50aGVuKCgpID0+IHByb21pc2UpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFByb21pc2VzLmZvbGRlcnNSZWxvYWRXaXRoVGltZW91dChGb2xkZXJTdG9yZS5mb2xkZXJzTG9hZGluZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdChlcnJvckNvZGUpID0+IHtcblx0XHRcdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0LmVycm9yKGdldE5vdGlmaWNhdGlvbihlcnJvckNvZGUsICcnLCBlcnJvckRlZkNvZGUpKTtcblx0XHRcdFx0XHRQcm9taXNlcy5mb2xkZXJzUmVsb2FkV2l0aFRpbWVvdXQoRm9sZGVyU3RvcmUuZm9sZGVyc0xvYWRpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHR9XG5cblx0cmVsb2FkT3BlblBncEtleXMoKSB7XG5cdFx0aWYgKFBncFN0b3JlLmNhcGFPcGVuUEdQKCkpIHtcblx0XHRcdGNvbnN0IGtleXMgPSBbXSxcblx0XHRcdFx0ZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpLFxuXHRcdFx0XHRvcGVucGdwS2V5cmluZyA9IFBncFN0b3JlLm9wZW5wZ3BLZXlyaW5nLFxuXHRcdFx0XHRvcGVucGdwS2V5cyA9IG9wZW5wZ3BLZXlyaW5nID8gb3BlbnBncEtleXJpbmcuZ2V0QWxsS2V5cygpIDogW107XG5cblx0XHRcdF8uZWFjaChvcGVucGdwS2V5cywgKG9JdGVtLCBpSW5kZXgpID0+IHtcblx0XHRcdFx0aWYgKG9JdGVtICYmIG9JdGVtLnByaW1hcnlLZXkpIHtcblx0XHRcdFx0XHRjb25zdCBhRW1haWxzID0gW10sXG5cdFx0XHRcdFx0XHRhVXNlcnMgPSBbXSxcblx0XHRcdFx0XHRcdHByaW1hcnlVc2VyID0gb0l0ZW0uZ2V0UHJpbWFyeVVzZXIoKSxcblx0XHRcdFx0XHRcdHVzZXIgPVxuXHRcdFx0XHRcdFx0XHRwcmltYXJ5VXNlciAmJiBwcmltYXJ5VXNlci51c2VyXG5cdFx0XHRcdFx0XHRcdFx0PyBwcmltYXJ5VXNlci51c2VyLnVzZXJJZC51c2VyaWRcblx0XHRcdFx0XHRcdFx0XHQ6IG9JdGVtLnVzZXJzICYmIG9JdGVtLnVzZXJzWzBdXG5cdFx0XHRcdFx0XHRcdFx0PyBvSXRlbS51c2Vyc1swXS51c2VySWQudXNlcmlkXG5cdFx0XHRcdFx0XHRcdFx0OiAnJztcblxuXHRcdFx0XHRcdGlmIChvSXRlbS51c2Vycykge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKG9JdGVtLnVzZXJzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbS51c2VySWQpIHtcblx0XHRcdFx0XHRcdFx0XHRlbWFpbC5jbGVhcigpO1xuXHRcdFx0XHRcdFx0XHRcdGVtYWlsLnBhcnNlKGl0ZW0udXNlcklkLnVzZXJpZCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVtYWlsLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFFbWFpbHMucHVzaChlbWFpbC5lbWFpbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhVXNlcnMucHVzaChpdGVtLnVzZXJJZC51c2VyaWQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGFFbWFpbHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRrZXlzLnB1c2goXG5cdFx0XHRcdFx0XHRcdG5ldyBPcGVuUGdwS2V5TW9kZWwoXG5cdFx0XHRcdFx0XHRcdFx0aUluZGV4LFxuXHRcdFx0XHRcdFx0XHRcdG9JdGVtLnByaW1hcnlLZXkuZ2V0RmluZ2VycHJpbnQoKSxcblx0XHRcdFx0XHRcdFx0XHRvSXRlbS5wcmltYXJ5S2V5XG5cdFx0XHRcdFx0XHRcdFx0XHQuZ2V0S2V5SWQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvSGV4KClcblx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0XHRcdF8udW5pcShfLmNvbXBhY3QoXy5tYXAob0l0ZW0uZ2V0S2V5SWRzKCksIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtLnRvSGV4ID8gaXRlbS50b0hleCgpIDogbnVsbCkpKSksXG5cdFx0XHRcdFx0XHRcdFx0YVVzZXJzLFxuXHRcdFx0XHRcdFx0XHRcdGFFbWFpbHMsXG5cdFx0XHRcdFx0XHRcdFx0b0l0ZW0uaXNQcml2YXRlKCksXG5cdFx0XHRcdFx0XHRcdFx0b0l0ZW0uYXJtb3IoKSxcblx0XHRcdFx0XHRcdFx0XHR1c2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koUGdwU3RvcmUub3BlbnBncGtleXMoKSk7XG5cdFx0XHRQZ3BTdG9yZS5vcGVucGdwa2V5cyhrZXlzKTtcblx0XHR9XG5cdH1cblxuXHRhY2NvdW50c0NvdW50cygpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Ly8gQWNjb3VudFN0b3JlLmFjY291bnRzLmxvYWRpbmcodHJ1ZSk7XG5cdFx0Ly9cblx0XHQvLyBSZW1vdGUuYWNjb3VudHNDb3VudHMoKHNSZXN1bHQsIG9EYXRhKSA9PiB7XG5cdFx0Ly9cblx0XHQvLyBcdEFjY291bnRTdG9yZS5hY2NvdW50cy5sb2FkaW5nKGZhbHNlKTtcblx0XHQvL1xuXHRcdC8vIFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEuUmVzdWx0ICYmIG9EYXRhLlJlc3VsdFsnQ291bnRzJ10pXG5cdFx0Ly8gXHR7XG5cdFx0Ly8gXHRcdHZhclxuXHRcdC8vIFx0XHRcdHNFbWFpbCA9IEFjY291bnRTdG9yZS5lbWFpbCgpLFxuXHRcdC8vIFx0XHRcdGFBY291bnRzID0gQWNjb3VudFN0b3JlLmFjY291bnRzKClcblx0XHQvLyBcdFx0O1xuXHRcdC8vXG5cdFx0Ly8gXHRcdF8uZWFjaChvRGF0YS5SZXN1bHRbJ0NvdW50cyddLCAob0l0ZW0pID0+IHtcblx0XHQvL1xuXHRcdC8vIFx0XHRcdHZhciBvQWNjb3VudCA9IF8uZmluZChhQWNvdW50cywgKG9BY2NvdW50KSA9PiB7XG5cdFx0Ly8gXHRcdFx0XHRyZXR1cm4gb0FjY291bnQgJiYgb0l0ZW1bMF0gPT09IG9BY2NvdW50LmVtYWlsICYmIHNFbWFpbCAhPT0gb0FjY291bnQuZW1haWw7XG5cdFx0Ly8gXHRcdFx0fSk7XG5cdFx0Ly9cblx0XHQvLyBcdFx0XHRpZiAob0FjY291bnQpXG5cdFx0Ly8gXHRcdFx0e1xuXHRcdC8vIFx0XHRcdFx0b0FjY291bnQuY291bnQocEludChvSXRlbVsxXSkpO1xuXHRcdC8vIFx0XHRcdH1cblx0XHQvLyBcdFx0fSk7XG5cdFx0Ly8gXHR9XG5cdFx0Ly8gfSk7XG5cdH1cblxuXHRhY2NvdW50c0FuZElkZW50aXRpZXMoYkJvb3QpIHtcblx0XHRBY2NvdW50U3RvcmUuYWNjb3VudHMubG9hZGluZyh0cnVlKTtcblx0XHRJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMubG9hZGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS5hY2NvdW50c0FuZElkZW50aXRpZXMoKHNSZXN1bHQsIG9EYXRhKSA9PiB7XG5cdFx0XHRBY2NvdW50U3RvcmUuYWNjb3VudHMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMubG9hZGluZyhmYWxzZSk7XG5cblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRjb25zdCBjb3VudHMgPSB7fSxcblx0XHRcdFx0XHRzQWNjb3VudEVtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCk7XG5cdFx0XHRcdGxldCBwYXJlbnRFbWFpbCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdQYXJlbnRFbWFpbCcpO1xuXG5cdFx0XHRcdHBhcmVudEVtYWlsID0gJycgPT09IHBhcmVudEVtYWlsID8gc0FjY291bnRFbWFpbCA6IHBhcmVudEVtYWlsO1xuXG5cdFx0XHRcdGlmIChpc0FycmF5KG9EYXRhLlJlc3VsdC5BY2NvdW50cykpIHtcblx0XHRcdFx0XHRfLmVhY2goQWNjb3VudFN0b3JlLmFjY291bnRzKCksIChvQWNjb3VudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y291bnRzW29BY2NvdW50LmVtYWlsXSA9IG9BY2NvdW50LmNvdW50KCk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShBY2NvdW50U3RvcmUuYWNjb3VudHMoKSk7XG5cblx0XHRcdFx0XHRBY2NvdW50U3RvcmUuYWNjb3VudHMoXG5cdFx0XHRcdFx0XHRfLm1hcChcblx0XHRcdFx0XHRcdFx0b0RhdGEuUmVzdWx0LkFjY291bnRzLFxuXHRcdFx0XHRcdFx0XHQoc1ZhbHVlKSA9PiBuZXcgQWNjb3VudE1vZGVsKHNWYWx1ZSwgc1ZhbHVlICE9PSBwYXJlbnRFbWFpbCwgY291bnRzW3NWYWx1ZV0gfHwgMClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzVW5kKGJCb290KSA/IGZhbHNlIDogISFiQm9vdCkge1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5hY2NvdW50c0NvdW50cygpLCAxMDAwICogNSk7XG5cdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMTBtLWFmdGVyNW0nLCAoKSA9PiB0aGlzLmFjY291bnRzQ291bnRzKCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob0RhdGEuUmVzdWx0LklkZW50aXRpZXMpKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzKCkpO1xuXG5cdFx0XHRcdFx0SWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzKFxuXHRcdFx0XHRcdFx0Xy5tYXAob0RhdGEuUmVzdWx0LklkZW50aXRpZXMsIChpZGVudGl0eURhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaWQgPSBwU3RyaW5nKGlkZW50aXR5RGF0YS5JZCksXG5cdFx0XHRcdFx0XHRcdFx0ZW1haWwgPSBwU3RyaW5nKGlkZW50aXR5RGF0YS5FbWFpbCksXG5cdFx0XHRcdFx0XHRcdFx0aWRlbnRpdHkgPSBuZXcgSWRlbnRpdHlNb2RlbChpZCwgZW1haWwpO1xuXG5cdFx0XHRcdFx0XHRcdGlkZW50aXR5Lm5hbWUocFN0cmluZyhpZGVudGl0eURhdGEuTmFtZSkpO1xuXHRcdFx0XHRcdFx0XHRpZGVudGl0eS5yZXBseVRvKHBTdHJpbmcoaWRlbnRpdHlEYXRhLlJlcGx5VG8pKTtcblx0XHRcdFx0XHRcdFx0aWRlbnRpdHkuYmNjKHBTdHJpbmcoaWRlbnRpdHlEYXRhLkJjYykpO1xuXHRcdFx0XHRcdFx0XHRpZGVudGl0eS5zaWduYXR1cmUocFN0cmluZyhpZGVudGl0eURhdGEuU2lnbmF0dXJlKSk7XG5cdFx0XHRcdFx0XHRcdGlkZW50aXR5LnNpZ25hdHVyZUluc2VydEJlZm9yZSghIWlkZW50aXR5RGF0YS5TaWduYXR1cmVJbnNlcnRCZWZvcmUpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpZGVudGl0eTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dGVtcGxhdGVzKCkge1xuXHRcdFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzLmxvYWRpbmcodHJ1ZSk7XG5cblx0XHRSZW1vdGUudGVtcGxhdGVzKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzLmxvYWRpbmcoZmFsc2UpO1xuXG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEuUmVzdWx0ICYmIGlzQXJyYXkoZGF0YS5SZXN1bHQuVGVtcGxhdGVzKSkge1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShUZW1wbGF0ZVN0b3JlLnRlbXBsYXRlcygpKTtcblxuXHRcdFx0XHRUZW1wbGF0ZVN0b3JlLnRlbXBsYXRlcyhcblx0XHRcdFx0XHRfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5UZW1wbGF0ZXMsICh0ZW1wbGF0ZURhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVNb2RlbCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGVtcGxhdGUucGFyc2UodGVtcGxhdGVEYXRhKSA/IHRlbXBsYXRlIDogbnVsbDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cXVvdGEoKSB7XG5cdFx0UmVtb3RlLnF1b3RhKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmXG5cdFx0XHRcdGRhdGEgJiZcblx0XHRcdFx0ZGF0YS5SZXN1bHQgJiZcblx0XHRcdFx0aXNBcnJheShkYXRhLlJlc3VsdCkgJiZcblx0XHRcdFx0MSA8IGRhdGEuUmVzdWx0Lmxlbmd0aCAmJlxuXHRcdFx0XHRpc1Bvc051bWVyaWMoZGF0YS5SZXN1bHRbMF0sIHRydWUpICYmXG5cdFx0XHRcdGlzUG9zTnVtZXJpYyhkYXRhLlJlc3VsdFsxXSwgdHJ1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRRdW90YVN0b3JlLnBvcHVsYXRlRGF0YShwSW50KGRhdGEuUmVzdWx0WzFdKSwgcEludChkYXRhLlJlc3VsdFswXSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcblx0ICogQHBhcmFtIHtBcnJheT19IGxpc3QgPSBbXVxuXHQgKi9cblx0Zm9sZGVySW5mb3JtYXRpb24oZm9sZGVyLCBsaXN0KSB7XG5cdFx0aWYgKCcnICE9PSB0cmltKGZvbGRlcikpIHtcblx0XHRcdFJlbW90ZS5mb2xkZXJJbmZvcm1hdGlvbihcblx0XHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0Lkhhc2ggJiYgZGF0YS5SZXN1bHQuRm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRcdGxldCB1aWQgPSAnJyxcblx0XHRcdFx0XHRcdFx0XHRjaGVjayA9IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHVucmVhZENvdW50Q2hhbmdlID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgZm9sZGVyRnJvbUNhY2hlID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChkYXRhLlJlc3VsdC5Gb2xkZXIpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZm9sZGVyRnJvbUNhY2hlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyRnJvbUNhY2hlLmludGVydmFsID0gbW9tZW50Tm93VW5peCgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0Lkhhc2gpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEZvbGRlckhhc2goZGF0YS5SZXN1bHQuRm9sZGVyLCBkYXRhLlJlc3VsdC5IYXNoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNOb3JtYWwoZGF0YS5SZXN1bHQuTWVzc2FnZUNvdW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyRnJvbUNhY2hlLm1lc3NhZ2VDb3VudEFsbChkYXRhLlJlc3VsdC5NZXNzYWdlQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocEludChmb2xkZXJGcm9tQ2FjaGUubWVzc2FnZUNvdW50VW5yZWFkKCkpICE9PSBwSW50KGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5yZWFkQ291bnRDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRmb2xkZXJGcm9tQ2FjaGUubWVzc2FnZUNvdW50VW5yZWFkKGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVucmVhZENvdW50Q2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKGZvbGRlckZyb21DYWNoZS5mdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0LkZsYWdzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHVpZCBpbiBkYXRhLlJlc3VsdC5GbGFncykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaGFzKGRhdGEuUmVzdWx0LkZsYWdzLCB1aWQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2sgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZsYWdzID0gZGF0YS5SZXN1bHQuRmxhZ3NbdWlkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeUZvbGRlckFuZFVpZChmb2xkZXJGcm9tQ2FjaGUuZnVsbE5hbWVSYXcsIHVpZC50b1N0cmluZygpLCBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhZmxhZ3MuSXNTZWVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ISFmbGFncy5Jc0ZsYWdnZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhIWZsYWdzLklzQW5zd2VyZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhIWZsYWdzLklzRm9yd2FyZGVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ISFmbGFncy5Jc1JlYWRSZWNlaXB0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNoZWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0TWVzc2FnZVN0b3JlLmluaXRVaWROZXh0QW5kTmV3TWVzc2FnZXMoXG5cdFx0XHRcdFx0XHRcdFx0XHRmb2xkZXJGcm9tQ2FjaGUuZnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLlJlc3VsdC5VaWROZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS5SZXN1bHQuTmV3TWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGdldEZvbGRlckhhc2goZGF0YS5SZXN1bHQuRm9sZGVyKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQuSGFzaCAhPT0gaGFzaCB8fCAnJyA9PT0gaGFzaCB8fCB1bnJlYWRDb3VudENoYW5nZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZvbGRlckZyb21DYWNoZS5mdWxsTmFtZVJhdyA9PT0gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRNZXNzYWdlTGlzdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChnZXRGb2xkZXJJbmJveE5hbWUoKSA9PT0gZm9sZGVyRnJvbUNhY2hlLmZ1bGxOYW1lUmF3KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucmVjYWNoZUluYm94TWVzc2FnZUxpc3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvbGRlcixcblx0XHRcdFx0bGlzdFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYm9vdCA9IGZhbHNlXG5cdCAqL1xuXHRmb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KGJvb3QgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGZvbGRlcnMgPSBGb2xkZXJTdG9yZS5nZXROZXh0Rm9sZGVyTmFtZXMoKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGZvbGRlcnMpKSB7XG5cdFx0XHRSZW1vdGUuZm9sZGVySW5mb3JtYXRpb25NdWx0aXBseSgoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQpIHtcblx0XHRcdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuUmVzdWx0ICYmIG9EYXRhLlJlc3VsdC5MaXN0ICYmIGlzTm9uRW1wdHlBcnJheShvRGF0YS5SZXN1bHQuTGlzdCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV0YyA9IG1vbWVudE5vd1VuaXgoKTtcblx0XHRcdFx0XHRcdF8uZWFjaChvRGF0YS5SZXN1bHQuTGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGdldEZvbGRlckhhc2goaXRlbS5Gb2xkZXIpLFxuXHRcdFx0XHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoaXRlbS5Gb2xkZXIpO1xuXHRcdFx0XHRcdFx0XHRsZXQgdW5yZWFkQ291bnRDaGFuZ2UgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLmludGVydmFsID0gdXRjO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uSGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0Rm9sZGVySGFzaChpdGVtLkZvbGRlciwgaXRlbS5IYXNoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNOb3JtYWwoaXRlbS5NZXNzYWdlQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50QWxsKGl0ZW0uTWVzc2FnZUNvdW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNOb3JtYWwoaXRlbS5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocEludChmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkpICE9PSBwSW50KGl0ZW0uTWVzc2FnZVVuc2VlbkNvdW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bnJlYWRDb3VudENoYW5nZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoaXRlbS5NZXNzYWdlVW5zZWVuQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmICh1bnJlYWRDb3VudENoYW5nZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcihmb2xkZXIuZnVsbE5hbWVSYXcpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtLkhhc2ggIT09IGhhc2ggfHwgJycgPT09IGhhc2gpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb2xkZXIuZnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucmVsb2FkTWVzc2FnZUxpc3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHVucmVhZENvdW50Q2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9sZGVyLmZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkobGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvbGRlckluZm9ybWF0aW9uKGZvbGRlci5mdWxsTmFtZVJhdywgbGlzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRpZiAoYm9vdCkge1xuXHRcdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMuZm9sZGVySW5mb3JtYXRpb25NdWx0aXBseSh0cnVlKSwgMjAwMCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LCBmb2xkZXJzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge251bWJlcn0gaVNldEFjdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5PX0gbWVzc2FnZXMgPSBudWxsXG5cdCAqL1xuXHRtZXNzYWdlTGlzdEFjdGlvbihzRm9sZGVyRnVsbE5hbWVSYXcsIGlTZXRBY3Rpb24sIG1lc3NhZ2VzKSB7XG5cdFx0bGV0IGZvbGRlciA9IG51bGwsXG5cdFx0XHRhbHJlYWR5VW5yZWFkID0gMCxcblx0XHRcdHJvb3RVaWRzID0gW107XG5cblx0XHRpZiAoaXNVbmQobWVzc2FnZXMpIHx8ICFtZXNzYWdlcykge1xuXHRcdFx0bWVzc2FnZXMgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkKCk7XG5cdFx0fVxuXG5cdFx0cm9vdFVpZHMgPSBfLnVuaXEoXy5jb21wYWN0KF8ubWFwKG1lc3NhZ2VzLCAob01lc3NhZ2UpID0+IChvTWVzc2FnZSAmJiBvTWVzc2FnZS51aWQgPyBvTWVzc2FnZS51aWQgOiBudWxsKSkpKTtcblxuXHRcdGlmICgnJyAhPT0gc0ZvbGRlckZ1bGxOYW1lUmF3ICYmIDAgPCByb290VWlkcy5sZW5ndGgpIHtcblx0XHRcdHN3aXRjaCAoaVNldEFjdGlvbikge1xuXHRcdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2Vlbjpcblx0XHRcdFx0XHRfLmVhY2gocm9vdFVpZHMsIChzU3ViVWlkKSA9PiB7XG5cdFx0XHRcdFx0XHRhbHJlYWR5VW5yZWFkICs9IHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCwgaVNldEFjdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkgLSBhbHJlYWR5VW5yZWFkKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRSZW1vdGUubWVzc2FnZVNldFNlZW4obm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCByb290VWlkcywgdHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbjpcblx0XHRcdFx0XHRfLmVhY2gocm9vdFVpZHMsIChzU3ViVWlkKSA9PiB7XG5cdFx0XHRcdFx0XHRhbHJlYWR5VW5yZWFkICs9IHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCwgaVNldEFjdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkgLSBhbHJlYWR5VW5yZWFkICsgcm9vdFVpZHMubGVuZ3RoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRSZW1vdGUubWVzc2FnZVNldFNlZW4obm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCByb290VWlkcywgZmFsc2UpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCwgaVNldEFjdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRSZW1vdGUubWVzc2FnZVNldEZsYWdnZWQobm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCByb290VWlkcywgdHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0RmxhZzpcblx0XHRcdFx0XHRfLmVhY2gocm9vdFVpZHMsIChzU3ViVWlkKSA9PiB7XG5cdFx0XHRcdFx0XHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeVNldEFjdGlvbihzRm9sZGVyRnVsbE5hbWVSYXcsIHNTdWJVaWQsIGlTZXRBY3Rpb24pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0UmVtb3RlLm1lc3NhZ2VTZXRGbGFnZ2VkKG5vb3AsIHNGb2xkZXJGdWxsTmFtZVJhdywgcm9vdFVpZHMsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJlbG9hZEZsYWdzQ3VycmVudE1lc3NhZ2VMaXN0QW5kTWVzc2FnZUZyb21DYWNoZSgpO1xuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2Uudmlld1RyaWdnZXIoIU1lc3NhZ2VTdG9yZS5tZXNzYWdlLnZpZXdUcmlnZ2VyKCkpO1xuXHRcdH1cblx0fVxuXG5cdGdvb2dsZUNvbm5lY3QoKSB7XG5cdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRzb2NpYWxHb29nbGUoKSxcblx0XHRcdCdHb29nbGUnLFxuXHRcdFx0J2xlZnQ9MjAwLHRvcD0xMDAsd2lkdGg9NjUwLGhlaWdodD02MDAsbWVudWJhcj1ubyxzdGF0dXM9bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcydcblx0XHQpO1xuXHR9XG5cblx0dHdpdHRlckNvbm5lY3QoKSB7XG5cdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRzb2NpYWxUd2l0dGVyKCksXG5cdFx0XHQnVHdpdHRlcicsXG5cdFx0XHQnbGVmdD0yMDAsdG9wPTEwMCx3aWR0aD02NTAsaGVpZ2h0PTM1MCxtZW51YmFyPW5vLHN0YXR1cz1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzJ1xuXHRcdCk7XG5cdH1cblxuXHRmYWNlYm9va0Nvbm5lY3QoKSB7XG5cdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRzb2NpYWxGYWNlYm9vaygpLFxuXHRcdFx0J0ZhY2Vib29rJyxcblx0XHRcdCdsZWZ0PTIwMCx0b3A9MTAwLHdpZHRoPTY1MCxoZWlnaHQ9MzM1LG1lbnViYXI9bm8sc3RhdHVzPW5vLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz15ZXMnXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmaXJlQWxsQWN0aW9ucyA9IGZhbHNlXG5cdCAqL1xuXHRzb2NpYWxVc2VycyhmaXJlQWxsQWN0aW9ucyA9IGZhbHNlKSB7XG5cdFx0aWYgKHRydWUgPT09IGZpcmVBbGxBY3Rpb25zKSB7XG5cdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFNvY2lhbFN0b3JlLmZhY2Vib29rLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLmxvYWRpbmcodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0UmVtb3RlLnNvY2lhbFVzZXJzKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUudXNlck5hbWUoZGF0YS5SZXN1bHQuR29vZ2xlIHx8ICcnKTtcblx0XHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2sudXNlck5hbWUoZGF0YS5SZXN1bHQuRmFjZWJvb2sgfHwgJycpO1xuXHRcdFx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLnVzZXJOYW1lKGRhdGEuUmVzdWx0LlR3aXR0ZXIgfHwgJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0U29jaWFsU3RvcmUuZ29vZ2xlLnVzZXJOYW1lKCcnKTtcblx0XHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2sudXNlck5hbWUoJycpO1xuXHRcdFx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLnVzZXJOYW1lKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0U29jaWFsU3RvcmUuZ29vZ2xlLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2subG9hZGluZyhmYWxzZSk7XG5cdFx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLmxvYWRpbmcoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z29vZ2xlRGlzY29ubmVjdCgpIHtcblx0XHRTb2NpYWxTdG9yZS5nb29nbGUubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUuZ29vZ2xlRGlzY29ubmVjdCh0aGlzLnNvY2lhbFVzZXJzKTtcblx0fVxuXG5cdGZhY2Vib29rRGlzY29ubmVjdCgpIHtcblx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5mYWNlYm9va0Rpc2Nvbm5lY3QodGhpcy5zb2NpYWxVc2Vycyk7XG5cdH1cblxuXHR0d2l0dGVyRGlzY29ubmVjdCgpIHtcblx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLnR3aXR0ZXJEaXNjb25uZWN0KHRoaXMuc29jaWFsVXNlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhdXRvY29tcGxldGVDYWxsYmFja1xuXHQgKi9cblx0Z2V0QXV0b2NvbXBsZXRlKHF1ZXJ5LCBhdXRvY29tcGxldGVDYWxsYmFjaykge1xuXHRcdFJlbW90ZS5zdWdnZXN0aW9ucygocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgaXNBcnJheShkYXRhLlJlc3VsdCkpIHtcblx0XHRcdFx0YXV0b2NvbXBsZXRlQ2FsbGJhY2soXG5cdFx0XHRcdFx0Xy5jb21wYWN0KF8ubWFwKGRhdGEuUmVzdWx0LCAoaXRlbSkgPT4gKGl0ZW0gJiYgaXRlbVswXSA/IG5ldyBFbWFpbE1vZGVsKGl0ZW1bMF0sIGl0ZW1bMV0pIDogbnVsbCkpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCAhPT0gcmVzdWx0KSB7XG5cdFx0XHRcdGF1dG9jb21wbGV0ZUNhbGxiYWNrKFtdKTtcblx0XHRcdH1cblx0XHR9LCBxdWVyeSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGdWxsTmFtZUhhc2hcblx0ICogQHBhcmFtIHtib29sZWFufSBiRXhwYW5kZWRcblx0ICovXG5cdHNldEV4cGFuZGVkRm9sZGVyKHNGdWxsTmFtZUhhc2gsIGJFeHBhbmRlZCkge1xuXHRcdGxldCBhRXhwYW5kZWRMaXN0ID0gTG9jYWwuZ2V0KENsaWVudFNpZGVLZXlOYW1lLkV4cGFuZGVkRm9sZGVycyk7XG5cdFx0aWYgKCFpc0FycmF5KGFFeHBhbmRlZExpc3QpKSB7XG5cdFx0XHRhRXhwYW5kZWRMaXN0ID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGJFeHBhbmRlZCkge1xuXHRcdFx0YUV4cGFuZGVkTGlzdC5wdXNoKHNGdWxsTmFtZUhhc2gpO1xuXHRcdFx0YUV4cGFuZGVkTGlzdCA9IF8udW5pcShhRXhwYW5kZWRMaXN0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YUV4cGFuZGVkTGlzdCA9IF8ud2l0aG91dChhRXhwYW5kZWRMaXN0LCBzRnVsbE5hbWVIYXNoKTtcblx0XHR9XG5cblx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuRXhwYW5kZWRGb2xkZXJzLCBhRXhwYW5kZWRMaXN0KTtcblx0fVxuXG5cdGluaXRIb3Jpem9udGFsTGF5b3V0UmVzaXplcihzQ2xpZW50U2lkZUtleU5hbWUpIHtcblx0XHRsZXQgdG9wID0gbnVsbCxcblx0XHRcdGJvdHRvbSA9IG51bGw7XG5cblx0XHRjb25zdCBtaW5IZWlnaHQgPSAyMDAsXG5cdFx0XHRtYXhIZWlnaHQgPSA1MDAsXG5cdFx0XHRmU2V0SGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuXHRcdFx0XHRpZiAoaGVpZ2h0KSB7XG5cdFx0XHRcdFx0aWYgKHRvcCkge1xuXHRcdFx0XHRcdFx0dG9wLmF0dHIoJ3N0eWxlJywgJ2hlaWdodDonICsgaGVpZ2h0ICsgJ3B4Jyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGJvdHRvbSkge1xuXHRcdFx0XHRcdFx0Ym90dG9tLmF0dHIoJ3N0eWxlJywgJ3RvcDonICsgKDU1IC8qIHRvcCB0b29sYmFyICovICsgaGVpZ2h0KSArICdweCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVDcmVhdGVGdW5jdGlvbiA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XG5cdFx0XHRcdFx0JChldmVudC50YXJnZXQpXG5cdFx0XHRcdFx0XHQuZmluZCgnLnVpLXJlc2l6YWJsZS1oYW5kbGUnKVxuXHRcdFx0XHRcdFx0Lm9uKCdtb3VzZWRvd24nLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1yZXNpemVyJyk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm9uKCdtb3VzZXVwJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmUmVzaXplU3RhcnRGdW5jdGlvbiA9ICgpID0+IHtcblx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdH0sXG5cdFx0XHRmUmVzaXplUmVzaXplRnVuY3Rpb24gPSBfLmRlYm91bmNlKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0NTAwLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpLFxuXHRcdFx0ZlJlc2l6ZVN0b3BGdW5jdGlvbiA9IChvRXZlbnQsIG9PYmplY3QpID0+IHtcblx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0aWYgKG9PYmplY3QgJiYgb09iamVjdC5zaXplICYmIG9PYmplY3Quc2l6ZS5oZWlnaHQpIHtcblx0XHRcdFx0XHRMb2NhbC5zZXQoc0NsaWVudFNpZGVLZXlOYW1lLCBvT2JqZWN0LnNpemUuaGVpZ2h0KTtcblxuXHRcdFx0XHRcdGZTZXRIZWlnaHQob09iamVjdC5zaXplLmhlaWdodCk7XG5cblx0XHRcdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9PcHRpb25zID0ge1xuXHRcdFx0XHRoZWxwZXI6ICd1aS1yZXNpemFibGUtaGVscGVyLWgnLFxuXHRcdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCxcblx0XHRcdFx0bWF4SGVpZ2h0OiBtYXhIZWlnaHQsXG5cdFx0XHRcdGhhbmRsZXM6ICdzJyxcblx0XHRcdFx0Y3JlYXRlOiBmUmVzaXplQ3JlYXRlRnVuY3Rpb24sXG5cdFx0XHRcdHJlc2l6ZTogZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uLFxuXHRcdFx0XHRzdGFydDogZlJlc2l6ZVN0YXJ0RnVuY3Rpb24sXG5cdFx0XHRcdHN0b3A6IGZSZXNpemVTdG9wRnVuY3Rpb25cblx0XHRcdH0sXG5cdFx0XHRmRGlzYWJsZSA9IChiRGlzYWJsZSkgPT4ge1xuXHRcdFx0XHRpZiAoYkRpc2FibGUpIHtcblx0XHRcdFx0XHRpZiAodG9wICYmIHRvcC5oYXNDbGFzcygndWktcmVzaXphYmxlJykpIHtcblx0XHRcdFx0XHRcdHRvcC5yZXNpemFibGUoJ2Rlc3Ryb3knKS5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChib3R0b20pIHtcblx0XHRcdFx0XHRcdGJvdHRvbS5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgkaHRtbC5oYXNDbGFzcygncmwtYm90dG9tLXByZXZpZXctcGFuZScpKSB7XG5cdFx0XHRcdFx0dG9wID0gJCgnLmItbWVzc2FnZS1saXN0LXdyYXBwZXInKTtcblx0XHRcdFx0XHRib3R0b20gPSAkKCcuYi1tZXNzYWdlLXZpZXctd3JhcHBlcicpO1xuXG5cdFx0XHRcdFx0aWYgKCF0b3AuaGFzQ2xhc3MoJ3VpLXJlc2l6YWJsZScpKSB7XG5cdFx0XHRcdFx0XHR0b3AucmVzaXphYmxlKG9PcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBpSGVpZ2h0ID0gcEludChMb2NhbC5nZXQoc0NsaWVudFNpZGVLZXlOYW1lKSkgfHwgMzAwO1xuXHRcdFx0XHRcdGZTZXRIZWlnaHQoaUhlaWdodCA+IG1pbkhlaWdodCA/IGlIZWlnaHQgOiBtaW5IZWlnaHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZkRpc2FibGUoZmFsc2UpO1xuXG5cdFx0RXZlbnRzLnN1YignbGF5b3V0JywgKGxheW91dCkgPT4ge1xuXHRcdFx0ZkRpc2FibGUoTGF5b3V0LkJvdHRvbVByZXZpZXcgIT09IGxheW91dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpbml0VmVydGljYWxMYXlvdXRSZXNpemVyKHNDbGllbnRTaWRlS2V5TmFtZSkge1xuXHRcdGNvbnN0IGRpc2FibGVkV2lkdGggPSA2MCxcblx0XHRcdG1pbldpZHRoID0gMTU1LFxuXHRcdFx0bExlZnQgPSAkKCcjcmwtbGVmdCcpLFxuXHRcdFx0cmlnaHQgPSAkKCcjcmwtcmlnaHQnKSxcblx0XHRcdG1MZWZ0V2lkdGggPSBMb2NhbC5nZXQoc0NsaWVudFNpZGVLZXlOYW1lKSB8fCBudWxsLFxuXHRcdFx0ZlNldFdpZHRoID0gKGlXaWR0aCkgPT4ge1xuXHRcdFx0XHRpZiAoaVdpZHRoKSB7XG5cdFx0XHRcdFx0bGVmdFBhbmVsV2lkdGgoaVdpZHRoKTtcblxuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1yZXNpemVyJyk7XG5cblx0XHRcdFx0XHRsTGVmdC5jc3Moe1xuXHRcdFx0XHRcdFx0d2lkdGg6ICcnICsgaVdpZHRoICsgJ3B4J1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmlnaHQuY3NzKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICcnICsgaVdpZHRoICsgJ3B4J1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZkRpc2FibGUgPSAoYkRpc2FibGUpID0+IHtcblx0XHRcdFx0aWYgKGJEaXNhYmxlKSB7XG5cdFx0XHRcdFx0bExlZnQucmVzaXphYmxlKCdkaXNhYmxlJyk7XG5cdFx0XHRcdFx0ZlNldFdpZHRoKGRpc2FibGVkV2lkdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxMZWZ0LnJlc2l6YWJsZSgnZW5hYmxlJyk7XG5cdFx0XHRcdFx0Y29uc3Qgd2lkdGggPSBwSW50KExvY2FsLmdldChzQ2xpZW50U2lkZUtleU5hbWUpKSB8fCBtaW5XaWR0aDtcblx0XHRcdFx0XHRmU2V0V2lkdGgod2lkdGggPiBtaW5XaWR0aCA/IHdpZHRoIDogbWluV2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZlJlc2l6ZUNyZWF0ZUZ1bmN0aW9uID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC50YXJnZXQpIHtcblx0XHRcdFx0XHQkKGV2ZW50LnRhcmdldClcblx0XHRcdFx0XHRcdC5maW5kKCcudWktcmVzaXphYmxlLWhhbmRsZScpXG5cdFx0XHRcdFx0XHQub24oJ21vdXNlZG93bicsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQub24oJ21vdXNldXAnLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1yZXNpemVyJyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVSZXNpemVGdW5jdGlvbiA9IF8uZGVib3VuY2UoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQ1MDAsXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRmUmVzaXplU3RhcnRGdW5jdGlvbiA9ICgpID0+IHtcblx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdH0sXG5cdFx0XHRmUmVzaXplU3RvcEZ1bmN0aW9uID0gKGV2ZW50LCBvYmopID0+IHtcblx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0aWYgKG9iaiAmJiBvYmouc2l6ZSAmJiBvYmouc2l6ZS53aWR0aCkge1xuXHRcdFx0XHRcdExvY2FsLnNldChzQ2xpZW50U2lkZUtleU5hbWUsIG9iai5zaXplLndpZHRoKTtcblxuXHRcdFx0XHRcdGxlZnRQYW5lbFdpZHRoKG9iai5zaXplLndpZHRoKTtcblxuXHRcdFx0XHRcdHJpZ2h0LmNzcyh7XG5cdFx0XHRcdFx0XHRsZWZ0OiAnJyArIG9iai5zaXplLndpZHRoICsgJ3B4J1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0bExlZnQuY3NzKHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiAnJyxcblx0XHRcdFx0XHRcdHRvcDogJycsXG5cdFx0XHRcdFx0XHRsZWZ0OiAnJyxcblx0XHRcdFx0XHRcdGhlaWdodDogJydcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmIChudWxsICE9PSBtTGVmdFdpZHRoKSB7XG5cdFx0XHRmU2V0V2lkdGgobUxlZnRXaWR0aCA+IG1pbldpZHRoID8gbUxlZnRXaWR0aCA6IG1pbldpZHRoKTtcblx0XHR9XG5cblx0XHRsTGVmdC5yZXNpemFibGUoe1xuXHRcdFx0aGVscGVyOiAndWktcmVzaXphYmxlLWhlbHBlci13Jyxcblx0XHRcdG1pbldpZHRoOiBtaW5XaWR0aCxcblx0XHRcdG1heFdpZHRoOiBNYWdpY3MuU2l6ZTM1MHB4LFxuXHRcdFx0aGFuZGxlczogJ2UnLFxuXHRcdFx0Y3JlYXRlOiBmUmVzaXplQ3JlYXRlRnVuY3Rpb24sXG5cdFx0XHRyZXNpemU6IGZSZXNpemVSZXNpemVGdW5jdGlvbixcblx0XHRcdHN0YXJ0OiBmUmVzaXplU3RhcnRGdW5jdGlvbixcblx0XHRcdHN0b3A6IGZSZXNpemVTdG9wRnVuY3Rpb25cblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ2xlZnQtcGFuZWwub2ZmJywgKCkgPT4ge1xuXHRcdFx0ZkRpc2FibGUodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCdsZWZ0LXBhbmVsLm9uJywgKCkgPT4ge1xuXHRcdFx0ZkRpc2FibGUoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0bG9nb3V0KCkge1xuXHRcdFJlbW90ZS5sb2dvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5sb2dpbkFuZExvZ291dFJlbG9hZChcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdQYXJlbnRFbWFpbCcpICYmIDAgPCBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGFyZW50RW1haWwnKS5sZW5ndGhcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHRib290c3RhcnRUd29GYWN0b3JTY3JlZW4oKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvVHdvRmFjdG9yQ29uZmlndXJhdGlvbicpLCBbdHJ1ZV0pO1xuXHR9XG5cblx0Ym9vdHN0YXJ0V2VsY29tZVBvcHVwKHVybCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1dlbGNvbWVQYWdlJyksIFt1cmxdKTtcblx0fVxuXG5cdGJvb3RzdGFydExvZ2luU2NyZWVuKCkge1xuXHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC11c2VyLWF1dGgnKS5hZGRDbGFzcygncmwtdXNlci1uby1hdXRoJyk7XG5cblx0XHRjb25zdCBjdXN0b21Mb2dpbkxpbmsgPSBwU3RyaW5nKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdjdXN0b21Mb2dpbkxpbmsnKSk7XG5cdFx0aWYgKCFjdXN0b21Mb2dpbkxpbmspIHtcblx0XHRcdHN0YXJ0U2NyZWVucyhbTG9naW5Vc2VyU2NyZWVuXSk7XG5cblx0XHRcdHJ1bkhvb2soJ3JsLXN0YXJ0LWxvZ2luLXNjcmVlbnMnKTtcblx0XHRcdEV2ZW50cy5wdWIoJ3JsLmJvb3RzdGFydC1sb2dpbi1zY3JlZW5zJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cdFx0XHRzZXRIYXNoKHJvb3QoKSwgdHJ1ZSk7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dpbkxpbms7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRib290ZW5kKCkge1xuXHRcdGlmIChwcm9ncmVzc0pzKSB7XG5cdFx0XHRwcm9ncmVzc0pzLnNldCgxMDApLmVuZCgpO1xuXHRcdH1cblx0XHRoaWRlTG9hZGluZygpO1xuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdHN1cGVyLmJvb3RzdGFydCgpO1xuXG5cdFx0QXBwU3RvcmUucG9wdWxhdGUoKTtcblx0XHRTZXR0aW5nc1N0b3JlLnBvcHVsYXRlKCk7XG5cdFx0Tm90aWZpY2F0aW9uU3RvcmUucG9wdWxhdGUoKTtcblx0XHRBY2NvdW50U3RvcmUucG9wdWxhdGUoKTtcblx0XHRDb250YWN0U3RvcmUucG9wdWxhdGUoKTtcblxuXHRcdGxldCBjb250YWN0c1N5bmNJbnRlcnZhbCA9IHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luY0ludGVydmFsJykpO1xuXG5cdFx0Y29uc3QganNIYXNoID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2pzSGFzaCcpLFxuXHRcdFx0c3RhcnR1cFVybCA9IHBTdHJpbmcoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1N0YXJ0dXBVcmwnKSksXG5cdFx0XHRhbGxvd0dvb2dsZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpLFxuXHRcdFx0YWxsb3dGYWNlYm9vayA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0ZhY2Vib29rU29jaWFsJyksXG5cdFx0XHRhbGxvd1R3aXR0ZXIgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJyk7XG5cblx0XHRpZiAocHJvZ3Jlc3NKcykge1xuXHRcdFx0cHJvZ3Jlc3NKcy5zZXQoOTApO1xuXHRcdH1cblxuXHRcdGxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdEV2ZW50cy5wdWIoJ2xlZnQtcGFuZWwuJyArICh2YWx1ZSA/ICdvZmYnIDogJ29uJykpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zZXRXaW5kb3dUaXRsZSgnJyk7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoJykpIHtcblx0XHRcdCRodG1sLmFkZENsYXNzKCdybC11c2VyLWF1dGgnKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yKSAmJlxuXHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yRm9yY2UpICYmXG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdSZXF1aXJlVHdvRmFjdG9yJylcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmJvb3RlbmQoKTtcblx0XHRcdFx0dGhpcy5ib290c3RhcnRUd29GYWN0b3JTY3JlZW4oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0V2luZG93VGl0bGUoaTE4bignVElUTEVTL0xPQURJTkcnKSk7XG5cblx0XHRcdFx0Ly8gcmVxdWlyZS5lbnN1cmUoW10sIGZ1bmN0aW9uKCkgeyAvLyByZXF1aXJlIGNvZGUgc3BsaXR0aW5nXG5cblx0XHRcdFx0dGhpcy5mb2xkZXJzUmVsb2FkKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYm9vdGVuZCgpO1xuXG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAoJycgIT09IHN0YXJ0dXBVcmwpIHtcblx0XHRcdFx0XHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdFx0XHRcdFx0c2V0SGFzaChyb290KHN0YXJ0dXBVcmwpLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0cm91dGVPbigpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoamFzc2wgJiYgd2luZG93LmNyeXB0byAmJiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBTZXR0aW5ncy5jYXBhKENhcGEuT3BlblBHUCkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb3BlbnBncENhbGxiYWNrID0gKG9wZW5wZ3ApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRQZ3BTdG9yZS5vcGVucGdwID0gb3BlbnBncDtcblxuXHRcdFx0XHRcdFx0XHRcdGlmICh3aW5kb3cuV29ya2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRQZ3BTdG9yZS5vcGVucGdwLmluaXRXb3JrZXIoeyBwYXRoOiBvcGVuUGdwV29ya2VySnMoKSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bG9nKGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3BLZXlyaW5nID0gbmV3IG9wZW5wZ3AuS2V5cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdFBncFN0b3JlLmNhcGFPcGVuUEdQKHRydWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0RXZlbnRzLnB1Yignb3BlbnBncC5pbml0Jyk7XG5cblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbG9hZE9wZW5QZ3BLZXlzKCk7XG5cdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0aWYgKHdpbmRvdy5vcGVucGdwKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3BlbnBncENhbGxiYWNrKHdpbmRvdy5vcGVucGdwKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqYXNzbChvcGVuUGdwSnMoKSkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAod2luZG93Lm9wZW5wZ3ApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3BlbnBncENhbGxiYWNrKHdpbmRvdy5vcGVucGdwKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0UGdwU3RvcmUuY2FwYU9wZW5QR1AoZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydFNjcmVlbnMoW1xuXHRcdFx0XHRcdFx0XHRNYWlsQm94VXNlclNjcmVlbixcblx0XHRcdFx0XHRcdFx0U2V0dGluZ3MuY2FwYShDYXBhLlNldHRpbmdzKSA/IFNldHRpbmdzVXNlclNjcmVlbiA6IG51bGxcblx0XHRcdFx0XHRcdFx0Ly8gZmFsc2UgPyBBYm91dFVzZXJTY3JlZW4gOiBudWxsXG5cdFx0XHRcdFx0XHRdKTtcblxuXHRcdFx0XHRcdFx0aWYgKGFsbG93R29vZ2xlIHx8IGFsbG93RmFjZWJvb2sgfHwgYWxsb3dUd2l0dGVyKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc29jaWFsVXNlcnModHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdEV2ZW50cy5zdWIoJ2ludGVydmFsLjJtJywgKCkgPT4gdGhpcy5mb2xkZXJJbmZvcm1hdGlvbihnZXRGb2xkZXJJbmJveE5hbWUoKSkpO1xuXHRcdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuM20nLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNGID0gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChnZXRGb2xkZXJJbmJveE5hbWUoKSAhPT0gc0YpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvbGRlckluZm9ybWF0aW9uKHNGKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdEV2ZW50cy5zdWIoJ2ludGVydmFsLjJtLWFmdGVyNW0nLCAoKSA9PiB0aGlzLmZvbGRlckluZm9ybWF0aW9uTXVsdGlwbHkoKSk7XG5cdFx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4xNW0nLCAoKSA9PiB0aGlzLnF1b3RhKCkpO1xuXHRcdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMjBtJywgKCkgPT4gdGhpcy5mb2xkZXJzUmVsb2FkKCkpO1xuXG5cdFx0XHRcdFx0XHRjb250YWN0c1N5bmNJbnRlcnZhbCA9IDUgPD0gY29udGFjdHNTeW5jSW50ZXJ2YWwgPyBjb250YWN0c1N5bmNJbnRlcnZhbCA6IDIwO1xuXHRcdFx0XHRcdFx0Y29udGFjdHNTeW5jSW50ZXJ2YWwgPSAzMjAgPj0gY29udGFjdHNTeW5jSW50ZXJ2YWwgPyBjb250YWN0c1N5bmNJbnRlcnZhbCA6IDMyMDtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmNvbnRhY3RzU3luYygpLCBNYWdpY3MuVGltZTEwcyk7XG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMuZm9sZGVySW5mb3JtYXRpb25NdWx0aXBseSh0cnVlKSwgTWFnaWNzLlRpbWUycyk7XG5cblx0XHRcdFx0XHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmNvbnRhY3RzU3luYygpLCBjb250YWN0c1N5bmNJbnRlcnZhbCAqIDYwMDAwICsgNTAwMCk7XG5cblx0XHRcdFx0XHRcdHRoaXMuYWNjb3VudHNBbmRJZGVudGl0aWVzKHRydWUpO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0YgPSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGdldEZvbGRlckluYm94TmFtZSgpICE9PSBzRikge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9sZGVySW5mb3JtYXRpb24oc0YpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCAxMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLnF1b3RhKCksIDUwMDApO1xuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiBSZW1vdGUuYXBwRGVsYXlTdGFydChub29wKSwgMzUwMDApO1xuXG5cdFx0XHRcdFx0XHRFdmVudHMuc3ViKCdybC5hdXRvLWxvZ291dCcsICgpID0+IHRoaXMubG9nb3V0KCkpO1xuXG5cdFx0XHRcdFx0XHRydW5Ib29rKCdybC1zdGFydC11c2VyLXNjcmVlbnMnKTtcblx0XHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3JsLmJvb3RzdGFydC11c2VyLXNjcmVlbnMnKTtcblxuXHRcdFx0XHRcdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdXZWxjb21lUGFnZVVybCcpKSB7XG5cdFx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5ib290c3RhcnRXZWxjb21lUG9wdXAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpLCAxMDAwKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBY2NvdW50U2lnbk1lJykgJiZcblx0XHRcdFx0XHRcdFx0d2luZG93Lm5hdmlnYXRvci5yZWdpc3RlclByb3RvY29sSGFuZGxlciAmJlxuXHRcdFx0XHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5uYXZpZ2F0b3IucmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdtYWlsdG8nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAnP21haWx0byZ0bz0lcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCcnICsgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpIHx8ICdSYWluTG9vcCcpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnTWFpbFRvRW1haWwnKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWFpbFRvSGVscGVyKFNldHRpbmdzLnNldHRpbmdzR2V0KCdNYWlsVG9FbWFpbCcpLCByZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdFx0XHRcdFx0Xy5kZWZlcigoKSA9PiB0aGlzLmluaXRWZXJ0aWNhbExheW91dFJlc2l6ZXIoQ2xpZW50U2lkZUtleU5hbWUuRm9sZGVyTGlzdFNpemUpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5sb2dvdXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIH0pOyAvLyByZXF1aXJlIGNvZGUgc3BsaXR0aW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYm9vdGVuZCgpO1xuXHRcdFx0dGhpcy5ib290c3RhcnRMb2dpblNjcmVlbigpO1xuXHRcdH1cblxuXHRcdGlmIChhbGxvd0dvb2dsZSkge1xuXHRcdFx0d2luZG93WydybF8nICsganNIYXNoICsgJ19nb29nbGVfc2VydmljZSddID0gKCkgPT4ge1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFx0dGhpcy5zb2NpYWxVc2VycygpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYWxsb3dGYWNlYm9vaykge1xuXHRcdFx0d2luZG93WydybF8nICsganNIYXNoICsgJ19mYWNlYm9va19zZXJ2aWNlJ10gPSAoKSA9PiB7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLmZhY2Vib29rLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuc29jaWFsVXNlcnMoKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGFsbG93VHdpdHRlcikge1xuXHRcdFx0d2luZG93WydybF8nICsganNIYXNoICsgJ190d2l0dGVyX3NlcnZpY2UnXSA9ICgpID0+IHtcblx0XHRcdFx0U29jaWFsU3RvcmUudHdpdHRlci5sb2FkaW5nKHRydWUpO1xuXHRcdFx0XHR0aGlzLnNvY2lhbFVzZXJzKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdEV2ZW50cy5zdWIoJ2ludGVydmFsLjFtJywgKCkgPT4gbW9tZW50UmVsb2FkKCkpO1xuXG5cdFx0cnVuSG9vaygncmwtc3RhcnQtc2NyZWVucycpO1xuXHRcdEV2ZW50cy5wdWIoJ3JsLmJvb3RzdGFydC1lbmQnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXBwVXNlcigpO1xuIiwiLy8gQmFzZTY0IGVuY29kZSAvIGRlY29kZVxuLy8gaHR0cDovL3d3dy53ZWJ0b29sa2l0LmluZm8vXG5cbmNvbnN0IEJBU0VfNjRfQ0hSID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcblxuLyogZXNsaW50LWRpc2FibGUgICovXG5jb25zdCBCYXNlNjQgPSB7XG5cdC8vIHB1YmxpYyBtZXRob2QgZm9yIHVybHNhZmUgZW5jb2Rpbmdcblx0dXJsc2FmZV9lbmNvZGU6IChpbnB1dCkgPT5cblx0XHRCYXNlNjQuZW5jb2RlKGlucHV0KVxuXHRcdFx0LnJlcGxhY2UoL1srXS9nLCAnLScpXG5cdFx0XHQucmVwbGFjZSgvW1xcL10vZywgJ18nKVxuXHRcdFx0LnJlcGxhY2UoL1s9XS9nLCAnJyksXG5cblx0Ly8gcHVibGljIG1ldGhvZCBmb3IgZW5jb2Rpbmdcblx0ZW5jb2RlOiAoaW5wdXQpID0+IHtcblx0XHRsZXQgb3V0cHV0ID0gJycsXG5cdFx0XHRjaHIxLFxuXHRcdFx0Y2hyMixcblx0XHRcdGNocjMsXG5cdFx0XHRlbmMxLFxuXHRcdFx0ZW5jMixcblx0XHRcdGVuYzMsXG5cdFx0XHRlbmM0LFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpbnB1dCA9IEJhc2U2NC5fdXRmOF9lbmNvZGUoaW5wdXQpO1xuXG5cdFx0d2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcblx0XHRcdGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XG5cdFx0XHRjaHIyID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuXHRcdFx0Y2hyMyA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcblxuXHRcdFx0ZW5jMSA9IGNocjEgPj4gMjtcblx0XHRcdGVuYzIgPSAoKGNocjEgJiAzKSA8PCA0KSB8IChjaHIyID4+IDQpO1xuXHRcdFx0ZW5jMyA9ICgoY2hyMiAmIDE1KSA8PCAyKSB8IChjaHIzID4+IDYpO1xuXHRcdFx0ZW5jNCA9IGNocjMgJiA2MztcblxuXHRcdFx0aWYgKGlzTmFOKGNocjIpKSB7XG5cdFx0XHRcdGVuYzMgPSBlbmM0ID0gNjQ7XG5cdFx0XHR9IGVsc2UgaWYgKGlzTmFOKGNocjMpKSB7XG5cdFx0XHRcdGVuYzQgPSA2NDtcblx0XHRcdH1cblxuXHRcdFx0b3V0cHV0ID1cblx0XHRcdFx0b3V0cHV0ICtcblx0XHRcdFx0QkFTRV82NF9DSFIuY2hhckF0KGVuYzEpICtcblx0XHRcdFx0QkFTRV82NF9DSFIuY2hhckF0KGVuYzIpICtcblx0XHRcdFx0QkFTRV82NF9DSFIuY2hhckF0KGVuYzMpICtcblx0XHRcdFx0QkFTRV82NF9DSFIuY2hhckF0KGVuYzQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH0sXG5cblx0Ly8gcHVibGljIG1ldGhvZCBmb3IgZGVjb2Rpbmdcblx0ZGVjb2RlOiAoaW5wdXQpID0+IHtcblx0XHRsZXQgb3V0cHV0ID0gJycsXG5cdFx0XHRjaHIxLFxuXHRcdFx0Y2hyMixcblx0XHRcdGNocjMsXG5cdFx0XHRlbmMxLFxuXHRcdFx0ZW5jMixcblx0XHRcdGVuYzMsXG5cdFx0XHRlbmM0LFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1teQS1aYS16MC05XFwrXFwvXFw9XS9nLCAnJyk7XG5cblx0XHR3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xuXHRcdFx0ZW5jMSA9IEJBU0VfNjRfQ0hSLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xuXHRcdFx0ZW5jMiA9IEJBU0VfNjRfQ0hSLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xuXHRcdFx0ZW5jMyA9IEJBU0VfNjRfQ0hSLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xuXHRcdFx0ZW5jNCA9IEJBU0VfNjRfQ0hSLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xuXG5cdFx0XHRjaHIxID0gKGVuYzEgPDwgMikgfCAoZW5jMiA+PiA0KTtcblx0XHRcdGNocjIgPSAoKGVuYzIgJiAxNSkgPDwgNCkgfCAoZW5jMyA+PiAyKTtcblx0XHRcdGNocjMgPSAoKGVuYzMgJiAzKSA8PCA2KSB8IGVuYzQ7XG5cblx0XHRcdG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7XG5cblx0XHRcdGlmIChlbmMzICE9PSA2NCkge1xuXHRcdFx0XHRvdXRwdXQgPSBvdXRwdXQgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZW5jNCAhPT0gNjQpIHtcblx0XHRcdFx0b3V0cHV0ID0gb3V0cHV0ICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gQmFzZTY0Ll91dGY4X2RlY29kZShvdXRwdXQpO1xuXHR9LFxuXG5cdC8vIHByaXZhdGUgbWV0aG9kIGZvciBVVEYtOCBlbmNvZGluZ1xuXHRfdXRmOF9lbmNvZGU6IChzdHJpbmcpID0+IHtcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKTtcblxuXHRcdGxldCB1dGZ0ZXh0ID0gJycsXG5cdFx0XHRuID0gMCxcblx0XHRcdGwgPSBzdHJpbmcubGVuZ3RoLFxuXHRcdFx0YyA9IDA7XG5cblx0XHRmb3IgKDsgbiA8IGw7IG4rKykge1xuXHRcdFx0YyA9IHN0cmluZy5jaGFyQ29kZUF0KG4pO1xuXG5cdFx0XHRpZiAoYyA8IDEyOCkge1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG5cdFx0XHR9IGVsc2UgaWYgKGMgPiAxMjcgJiYgYyA8IDIwNDgpIHtcblx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDYpIHwgMTkyKTtcblx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgNjMpIHwgMTI4KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiAxMikgfCAyMjQpO1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjID4+IDYpICYgNjMpIHwgMTI4KTtcblx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgNjMpIHwgMTI4KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdXRmdGV4dDtcblx0fSxcblxuXHQvLyBwcml2YXRlIG1ldGhvZCBmb3IgVVRGLTggZGVjb2Rpbmdcblx0X3V0ZjhfZGVjb2RlOiAodXRmdGV4dCkgPT4ge1xuXHRcdGxldCBzdHJpbmcgPSAnJyxcblx0XHRcdGkgPSAwLFxuXHRcdFx0YyA9IDAsXG5cdFx0XHRjMiA9IDAsXG5cdFx0XHRjMyA9IDA7XG5cblx0XHR3aGlsZSAoaSA8IHV0ZnRleHQubGVuZ3RoKSB7XG5cdFx0XHRjID0gdXRmdGV4dC5jaGFyQ29kZUF0KGkpO1xuXG5cdFx0XHRpZiAoYyA8IDEyOCkge1xuXHRcdFx0XHRzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fSBlbHNlIGlmIChjID4gMTkxICYmIGMgPCAyMjQpIHtcblx0XHRcdFx0YzIgPSB1dGZ0ZXh0LmNoYXJDb2RlQXQoaSArIDEpO1xuXHRcdFx0XHRzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAzMSkgPDwgNikgfCAoYzIgJiA2MykpO1xuXHRcdFx0XHRpICs9IDI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjMiA9IHV0ZnRleHQuY2hhckNvZGVBdChpICsgMSk7XG5cdFx0XHRcdGMzID0gdXRmdGV4dC5jaGFyQ29kZUF0KGkgKyAyKTtcblx0XHRcdFx0c3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMTUpIDw8IDEyKSB8ICgoYzIgJiA2MykgPDwgNikgfCAoYzMgJiA2MykpO1xuXHRcdFx0XHRpICs9IDM7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGRlY29kZSA9IEJhc2U2NC5kZWNvZGU7XG5leHBvcnQgY29uc3QgZW5jb2RlID0gQmFzZTY0LmVuY29kZTtcbmV4cG9ydCBjb25zdCB1cmxzYWZlX2VuY29kZSA9IEJhc2U2NC51cmxzYWZlX2VuY29kZTtcbi8qIGVzbGludC1lbmFibGUgKi9cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc05vcm1hbCwgcEludCwgaXNVbmQsIG5vb3AgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQ2xpZW50U2lkZUtleU5hbWUsIFNlcnZlckZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgQ2FjaGUgZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBMb2NhbCBmcm9tICdTdG9yYWdlL0NsaWVudCc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IEZvbGRlck1vZGVsIH0gZnJvbSAnTW9kZWwvRm9sZGVyJztcbmltcG9ydCB7IEFic3RyYWN0QmFzaWNQcm9taXNlcyB9IGZyb20gJ1Byb21pc2VzL0Fic3RyYWN0QmFzaWMnO1xuXG5jbGFzcyBQcm9taXNlc1VzZXJQb3B1bGF0b3IgZXh0ZW5kcyBBYnN0cmFjdEJhc2ljUHJvbWlzZXMge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGdWxsTmFtZUhhc2hcblx0ICogQHBhcmFtIHtBcnJheT99IGV4cGFuZGVkRm9sZGVyc1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRm9sZGVyRXhwYW5kZWQoc0Z1bGxOYW1lSGFzaCwgZXhwYW5kZWRGb2xkZXJzKSB7XG5cdFx0cmV0dXJuIGV4cGFuZGVkRm9sZGVycyAmJiBpc0FycmF5KGV4cGFuZGVkRm9sZGVycykgJiYgLTEgIT09IF8uaW5kZXhPZihleHBhbmRlZEZvbGRlcnMsIHNGdWxsTmFtZUhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdG5vcm1hbGl6ZUZvbGRlcihzRm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHRyZXR1cm4gJycgPT09IHNGb2xkZXJGdWxsTmFtZVJhdyB8fFxuXHRcdFx0VU5VU0VEX09QVElPTl9WQUxVRSA9PT0gc0ZvbGRlckZ1bGxOYW1lUmF3IHx8XG5cdFx0XHRudWxsICE9PSBDYWNoZS5nZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdylcblx0XHRcdD8gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdFx0XHQ6ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZXNwYWNlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFGb2xkZXJzXG5cdCAqIEBwYXJhbSB7QXJyYXk/fSBleHBhbmRlZEZvbGRlcnNcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0Zm9sZGVyUmVzcG9uc2VQYXJzZVJlYyhzTmFtZXNwYWNlLCBhRm9sZGVycywgZXhwYW5kZWRGb2xkZXJzKSB7XG5cdFx0Y29uc3QgYkRpc3BsYXlTcGVjU2V0dGluZyA9IEZvbGRlclN0b3JlLmRpc3BsYXlTcGVjU2V0dGluZygpLFxuXHRcdFx0YUxpc3QgPSBbXTtcblxuXHRcdF8uZWFjaChhRm9sZGVycywgKG9Gb2xkZXIpID0+IHtcblx0XHRcdGlmIChvRm9sZGVyKSB7XG5cdFx0XHRcdGxldCBvQ2FjaGVGb2xkZXIgPSBDYWNoZS5nZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KG9Gb2xkZXIuRnVsbE5hbWVSYXcpO1xuXHRcdFx0XHRpZiAoIW9DYWNoZUZvbGRlcikge1xuXHRcdFx0XHRcdG9DYWNoZUZvbGRlciA9IEZvbGRlck1vZGVsLm5ld0luc3RhbmNlRnJvbUpzb24ob0ZvbGRlcik7XG5cdFx0XHRcdFx0aWYgKG9DYWNoZUZvbGRlcikge1xuXHRcdFx0XHRcdFx0Q2FjaGUuc2V0Rm9sZGVyVG9DYWNoZUxpc3Qob0ZvbGRlci5GdWxsTmFtZVJhdywgb0NhY2hlRm9sZGVyKTtcblx0XHRcdFx0XHRcdENhY2hlLnNldEZvbGRlckZ1bGxOYW1lUmF3KG9DYWNoZUZvbGRlci5mdWxsTmFtZUhhc2gsIG9Gb2xkZXIuRnVsbE5hbWVSYXcsIG9DYWNoZUZvbGRlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9DYWNoZUZvbGRlcikge1xuXHRcdFx0XHRcdGlmIChiRGlzcGxheVNwZWNTZXR0aW5nKSB7XG5cdFx0XHRcdFx0XHRvQ2FjaGVGb2xkZXIuY2hlY2thYmxlKCEhb0ZvbGRlci5DaGVja2FibGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvQ2FjaGVGb2xkZXIuY2hlY2thYmxlKHRydWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG9DYWNoZUZvbGRlci5jb2xsYXBzZWQoIXRoaXMuaXNGb2xkZXJFeHBhbmRlZChvQ2FjaGVGb2xkZXIuZnVsbE5hbWVIYXNoLCBleHBhbmRlZEZvbGRlcnMpKTtcblxuXHRcdFx0XHRcdGlmIChvRm9sZGVyLkV4dGVuZGVkKSB7XG5cdFx0XHRcdFx0XHRpZiAob0ZvbGRlci5FeHRlbmRlZC5IYXNoKSB7XG5cdFx0XHRcdFx0XHRcdENhY2hlLnNldEZvbGRlckhhc2gob0NhY2hlRm9sZGVyLmZ1bGxOYW1lUmF3LCBvRm9sZGVyLkV4dGVuZGVkLkhhc2gpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoaXNOb3JtYWwob0ZvbGRlci5FeHRlbmRlZC5NZXNzYWdlQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdG9DYWNoZUZvbGRlci5tZXNzYWdlQ291bnRBbGwob0ZvbGRlci5FeHRlbmRlZC5NZXNzYWdlQ291bnQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoaXNOb3JtYWwob0ZvbGRlci5FeHRlbmRlZC5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdG9DYWNoZUZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQob0ZvbGRlci5FeHRlbmRlZC5NZXNzYWdlVW5zZWVuQ291bnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9Gb2xkZXIuU3ViRm9sZGVycyAmJlxuXHRcdFx0XHRcdFx0J0NvbGxlY3Rpb24vRm9sZGVyQ29sbGVjdGlvbicgPT09IG9Gb2xkZXIuU3ViRm9sZGVyc1snQE9iamVjdCddICYmXG5cdFx0XHRcdFx0XHRvRm9sZGVyLlN1YkZvbGRlcnNbJ0BDb2xsZWN0aW9uJ10gJiZcblx0XHRcdFx0XHRcdGlzQXJyYXkob0ZvbGRlci5TdWJGb2xkZXJzWydAQ29sbGVjdGlvbiddKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b0NhY2hlRm9sZGVyLnN1YkZvbGRlcnMoXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9sZGVyUmVzcG9uc2VQYXJzZVJlYyhzTmFtZXNwYWNlLCBvRm9sZGVyLlN1YkZvbGRlcnNbJ0BDb2xsZWN0aW9uJ10sIGV4cGFuZGVkRm9sZGVycylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YUxpc3QucHVzaChvQ2FjaGVGb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYUxpc3Q7XG5cdH1cblxuXHRmb2xkZXJzTGlzdChvRGF0YSkge1xuXHRcdGlmIChcblx0XHRcdG9EYXRhICYmXG5cdFx0XHQnQ29sbGVjdGlvbi9Gb2xkZXJDb2xsZWN0aW9uJyA9PT0gb0RhdGFbJ0BPYmplY3QnXSAmJlxuXHRcdFx0b0RhdGFbJ0BDb2xsZWN0aW9uJ10gJiZcblx0XHRcdGlzQXJyYXkob0RhdGFbJ0BDb2xsZWN0aW9uJ10pXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBleHBhbmRlZEZvbGRlcnMgPSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuRXhwYW5kZWRGb2xkZXJzKSxcblx0XHRcdFx0Y250ID0gcEludChvRGF0YS5Db3VudFJlYyk7XG5cblx0XHRcdGxldCBsaW1pdCA9IHBJbnQoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2ZvbGRlclNwZWNMaW1pdCcpKTtcblx0XHRcdGxpbWl0ID0gMTAwIDwgbGltaXQgPyAxMDAgOiAxMCA+IGxpbWl0ID8gMTAgOiBsaW1pdDtcblxuXHRcdFx0Rm9sZGVyU3RvcmUuZGlzcGxheVNwZWNTZXR0aW5nKDAgPj0gY250IHx8IGxpbWl0IDwgY250KTtcblxuXHRcdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdChcblx0XHRcdFx0dGhpcy5mb2xkZXJSZXNwb25zZVBhcnNlUmVjKFxuXHRcdFx0XHRcdGlzVW5kKG9EYXRhLk5hbWVzcGFjZSkgPyAnJyA6IG9EYXRhLk5hbWVzcGFjZSxcblx0XHRcdFx0XHRvRGF0YVsnQENvbGxlY3Rpb24nXSxcblx0XHRcdFx0XHRleHBhbmRlZEZvbGRlcnNcblx0XHRcdFx0KVxuXHRcdFx0KTsgLy8gQHRvZG8gb3B0aW1pemF0aW9uIHJlcXVpcmVkXG5cdFx0fVxuXHR9XG5cblx0Zm9sZGVyc0FkZGl0aW9uYWxQYXJhbWV0ZXJzKG9EYXRhKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGEgJiZcblx0XHRcdG9EYXRhICYmXG5cdFx0XHQnQ29sbGVjdGlvbi9Gb2xkZXJDb2xsZWN0aW9uJyA9PT0gb0RhdGFbJ0BPYmplY3QnXSAmJlxuXHRcdFx0b0RhdGFbJ0BDb2xsZWN0aW9uJ10gJiZcblx0XHRcdGlzQXJyYXkob0RhdGFbJ0BDb2xsZWN0aW9uJ10pXG5cdFx0KSB7XG5cdFx0XHRpZiAoIWlzVW5kKG9EYXRhLk5hbWVzcGFjZSkpIHtcblx0XHRcdFx0Rm9sZGVyU3RvcmUubmFtZXNwYWNlID0gb0RhdGEuTmFtZXNwYWNlO1xuXHRcdFx0fVxuXG5cdFx0XHRBcHBTdG9yZS50aHJlYWRzQWxsb3dlZCghIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd1c2VJbWFwVGhyZWFkJykgJiYgb0RhdGEuSXNUaHJlYWRzU3VwcG9ydGVkICYmIHRydWUpO1xuXG5cdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0Lm9wdGltaXplZCghIW9EYXRhLk9wdGltaXplZCk7XG5cblx0XHRcdGxldCB1cGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvRGF0YS5TeXN0ZW1Gb2xkZXJzICYmXG5cdFx0XHRcdCcnID09PVxuXHRcdFx0XHRcdCcnICtcblx0XHRcdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdTZW50Rm9sZGVyJykgK1xuXHRcdFx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0RyYWZ0Rm9sZGVyJykgK1xuXHRcdFx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NwYW1Gb2xkZXInKSArXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHJhc2hGb2xkZXInKSArXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXJjaGl2ZUZvbGRlcicpICtcblx0XHRcdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdOdWxsRm9sZGVyJylcblx0XHRcdCkge1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnU2VudEZvbGRlcicsIG9EYXRhLlN5c3RlbUZvbGRlcnNbU2VydmVyRm9sZGVyVHlwZS5TRU5UXSB8fCBudWxsKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0RyYWZ0Rm9sZGVyJywgb0RhdGEuU3lzdGVtRm9sZGVyc1tTZXJ2ZXJGb2xkZXJUeXBlLkRSQUZUU10gfHwgbnVsbCk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdTcGFtRm9sZGVyJywgb0RhdGEuU3lzdGVtRm9sZGVyc1tTZXJ2ZXJGb2xkZXJUeXBlLkpVTktdIHx8IG51bGwpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnVHJhc2hGb2xkZXInLCBvRGF0YS5TeXN0ZW1Gb2xkZXJzW1NlcnZlckZvbGRlclR5cGUuVFJBU0hdIHx8IG51bGwpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnQXJjaGl2ZUZvbGRlcicsIG9EYXRhLlN5c3RlbUZvbGRlcnNbU2VydmVyRm9sZGVyVHlwZS5BTExdIHx8IG51bGwpO1xuXG5cdFx0XHRcdHVwZGF0ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdEZvbGRlclN0b3JlLnNlbnRGb2xkZXIodGhpcy5ub3JtYWxpemVGb2xkZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NlbnRGb2xkZXInKSkpO1xuXHRcdFx0Rm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIodGhpcy5ub3JtYWxpemVGb2xkZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0RyYWZ0Rm9sZGVyJykpKTtcblx0XHRcdEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIodGhpcy5ub3JtYWxpemVGb2xkZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NwYW1Gb2xkZXInKSkpO1xuXHRcdFx0Rm9sZGVyU3RvcmUudHJhc2hGb2xkZXIodGhpcy5ub3JtYWxpemVGb2xkZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RyYXNoRm9sZGVyJykpKTtcblx0XHRcdEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIodGhpcy5ub3JtYWxpemVGb2xkZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FyY2hpdmVGb2xkZXInKSkpO1xuXG5cdFx0XHRpZiAodXBkYXRlKSB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlU3lzdGVtRm9sZGVycyhub29wLCB7XG5cdFx0XHRcdFx0U2VudEZvbGRlcjogRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpLFxuXHRcdFx0XHRcdERyYWZ0Rm9sZGVyOiBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpLFxuXHRcdFx0XHRcdFNwYW1Gb2xkZXI6IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSxcblx0XHRcdFx0XHRUcmFzaEZvbGRlcjogRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSxcblx0XHRcdFx0XHRBcmNoaXZlRm9sZGVyOiBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCksXG5cdFx0XHRcdFx0TnVsbEZvbGRlcjogJ051bGxGb2xkZXInXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuRm9sZGVyc0xhc2hIYXNoLCBvRGF0YS5Gb2xkZXJzSGFzaCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQcm9taXNlc1VzZXJQb3B1bGF0b3IoKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgRmlsdGVyUnVsZXNUeXBlLCBGaWx0ZXJzQWN0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBTdHJpbmcsIGluQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgZmFrZU1kNSwgZGVsZWdhdGVSdW5PbkRlc3Ryb3ksIHdpbmRvd1Jlc2l6ZUNhbGxiYWNrIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0IH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcblxuaW1wb3J0IHsgRmlsdGVyQ29uZGl0aW9uTW9kZWwgfSBmcm9tICdNb2RlbC9GaWx0ZXJDb25kaXRpb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBGaWx0ZXJNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignRmlsdGVyTW9kZWwnKTtcblxuXHRcdHRoaXMuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmlkID0gJyc7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5jb25kaXRpb25zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmNvbmRpdGlvbnNUeXBlID0ga28ub2JzZXJ2YWJsZShGaWx0ZXJSdWxlc1R5cGUuQW55KTtcblxuXHRcdC8vIEFjdGlvbnNcblx0XHR0aGlzLmFjdGlvblZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hY3Rpb25WYWx1ZVNlY29uZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWN0aW9uVmFsdWVUaGlyZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGguZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWN0aW9uTWFya0FzUmVhZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hY3Rpb25LZWVwID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmFjdGlvbk5vU3RvcCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hY3Rpb25UeXBlID0ga28ub2JzZXJ2YWJsZShGaWx0ZXJzQWN0aW9uLk1vdmVUbyk7XG5cblx0XHR0aGlzLmFjdGlvblR5cGUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWUoJycpO1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlU2Vjb25kKCcnKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVUaGlyZCgnJyk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoKCcnKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGguZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgZkdldFJlYWxGb2xkZXJOYW1lID0gKGZvbGRlckZ1bGxOYW1lUmF3KSA9PiB7XG5cdFx0XHRjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdHJldHVybiBmb2xkZXIgPyBmb2xkZXIuZnVsbE5hbWUucmVwbGFjZSgnLicgPT09IGZvbGRlci5kZWxpbWl0ZXIgPyAvXFwuLyA6IC9bXFxcXC9dKy8sICcgLyAnKSA6IGZvbGRlckZ1bGxOYW1lUmF3O1xuXHRcdH07XG5cblx0XHR0aGlzLm5hbWVTdWIgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0XHRjb25zdCBhY3Rpb25WYWx1ZSA9IHRoaXMuYWN0aW9uVmFsdWUoKTtcblxuXHRcdFx0c3dpdGNoICh0aGlzLmFjdGlvblR5cGUoKSkge1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uTW92ZVRvOlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1NFVFRJTkdTX0ZJTFRFUlMvU1VCTkFNRV9NT1ZFX1RPJywge1xuXHRcdFx0XHRcdFx0Rk9MREVSOiBmR2V0UmVhbEZvbGRlck5hbWUoYWN0aW9uVmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Gb3J3YXJkOlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1NFVFRJTkdTX0ZJTFRFUlMvU1VCTkFNRV9GT1JXQVJEX1RPJywge1xuXHRcdFx0XHRcdFx0RU1BSUw6IGFjdGlvblZhbHVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5WYWNhdGlvbjpcblx0XHRcdFx0XHRyZXN1bHQgPSBpMThuKCdTRVRUSU5HU19GSUxURVJTL1NVQk5BTUVfVkFDQVRJT05fTUVTU0FHRScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uUmVqZWN0OlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1NFVFRJTkdTX0ZJTFRFUlMvU1VCTkFNRV9SRUpFQ1QnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLkRpc2NhcmQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX0RJU0NBUkQnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0ID8gJygnICsgcmVzdWx0ICsgJyknIDogJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFjdGlvblRlbXBsYXRlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuYWN0aW9uVHlwZSgpKSB7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Gb3J3YXJkOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdTZXR0aW5nc0ZpbHRlcnNBY3Rpb25Gb3J3YXJkJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLlZhY2F0aW9uOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdTZXR0aW5nc0ZpbHRlcnNBY3Rpb25WYWNhdGlvbic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5SZWplY3Q6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvblJlamVjdCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Ob25lOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdTZXR0aW5nc0ZpbHRlcnNBY3Rpb25Ob25lJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLkRpc2NhcmQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbkRpc2NhcmQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uTW92ZVRvOlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdTZXR0aW5nc0ZpbHRlcnNBY3Rpb25Nb3ZlVG9Gb2xkZXInO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyh0aGlzLmNvbmRpdGlvbnMuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKSk7XG5cblx0XHR0aGlzLnJlZ0Rpc3Bvc2FibGVzKFxuXHRcdFx0dGhpcy5uYW1lLnN1YnNjcmliZSgoc1ZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMubmFtZS5lcnJvcignJyA9PT0gc1ZhbHVlKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoXG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlLnN1YnNjcmliZSgoc1ZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMuYWN0aW9uVmFsdWUuZXJyb3IoJycgPT09IHNWYWx1ZSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlZ0Rpc3Bvc2FibGVzKFt0aGlzLmFjdGlvbk5vU3RvcCwgdGhpcy5hY3Rpb25UZW1wbGF0ZV0pO1xuXG5cdFx0dGhpcy5kZWxldGVBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNhbkJlRGVsZXRlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cblxuXHRnZW5lcmF0ZUlEKCkge1xuXHRcdHRoaXMuaWQgPSBmYWtlTWQ1KCk7XG5cdH1cblxuXHR2ZXJpZnkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSkge1xuXHRcdFx0dGhpcy5uYW1lLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICgwIDwgdGhpcy5jb25kaXRpb25zKCkubGVuZ3RoKSB7XG5cdFx0XHRpZiAoXy5maW5kKHRoaXMuY29uZGl0aW9ucygpLCAoY29uZCkgPT4gY29uZCAmJiAhY29uZC52ZXJpZnkoKSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgnJyA9PT0gdGhpcy5hY3Rpb25WYWx1ZSgpKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdC0xIDxcblx0XHRcdFx0aW5BcnJheSh0aGlzLmFjdGlvblR5cGUoKSwgW1xuXHRcdFx0XHRcdEZpbHRlcnNBY3Rpb24uTW92ZVRvLFxuXHRcdFx0XHRcdEZpbHRlcnNBY3Rpb24uRm9yd2FyZCxcblx0XHRcdFx0XHRGaWx0ZXJzQWN0aW9uLlJlamVjdCxcblx0XHRcdFx0XHRGaWx0ZXJzQWN0aW9uLlZhY2F0aW9uXG5cdFx0XHRcdF0pXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvcih0cnVlKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChGaWx0ZXJzQWN0aW9uLkZvcndhcmQgPT09IHRoaXMuYWN0aW9uVHlwZSgpICYmIC0xID09PSB0aGlzLmFjdGlvblZhbHVlKCkuaW5kZXhPZignQCcpKSB7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdEZpbHRlcnNBY3Rpb24uVmFjYXRpb24gPT09IHRoaXMuYWN0aW9uVHlwZSgpICYmXG5cdFx0XHQnJyAhPT0gdGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCgpICYmXG5cdFx0XHQtMSA9PT0gdGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCgpLmluZGV4T2YoJ0AnKVxuXHRcdCkge1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aC5lcnJvcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLm5hbWUuZXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYWN0aW9uVmFsdWUuZXJyb3IoZmFsc2UpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR0b0pzb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdElEOiB0aGlzLmlkLFxuXHRcdFx0RW5hYmxlZDogdGhpcy5lbmFibGVkKCkgPyAnMScgOiAnMCcsXG5cdFx0XHROYW1lOiB0aGlzLm5hbWUoKSxcblx0XHRcdENvbmRpdGlvbnNUeXBlOiB0aGlzLmNvbmRpdGlvbnNUeXBlKCksXG5cdFx0XHRDb25kaXRpb25zOiBfLm1hcCh0aGlzLmNvbmRpdGlvbnMoKSwgKGl0ZW0pID0+IGl0ZW0udG9Kc29uKCkpLFxuXG5cdFx0XHRBY3Rpb25WYWx1ZTogdGhpcy5hY3Rpb25WYWx1ZSgpLFxuXHRcdFx0QWN0aW9uVmFsdWVTZWNvbmQ6IHRoaXMuYWN0aW9uVmFsdWVTZWNvbmQoKSxcblx0XHRcdEFjdGlvblZhbHVlVGhpcmQ6IHRoaXMuYWN0aW9uVmFsdWVUaGlyZCgpLFxuXHRcdFx0QWN0aW9uVmFsdWVGb3VydGg6IHRoaXMuYWN0aW9uVmFsdWVGb3VydGgoKSxcblx0XHRcdEFjdGlvblR5cGU6IHRoaXMuYWN0aW9uVHlwZSgpLFxuXG5cdFx0XHRTdG9wOiB0aGlzLmFjdGlvbk5vU3RvcCgpID8gJzAnIDogJzEnLFxuXHRcdFx0S2VlcDogdGhpcy5hY3Rpb25LZWVwKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRNYXJrQXNSZWFkOiB0aGlzLmFjdGlvbk1hcmtBc1JlYWQoKSA/ICcxJyA6ICcwJ1xuXHRcdH07XG5cdH1cblxuXHRhZGRDb25kaXRpb24oKSB7XG5cdFx0dGhpcy5jb25kaXRpb25zLnB1c2gobmV3IEZpbHRlckNvbmRpdGlvbk1vZGVsKCkpO1xuXHR9XG5cblx0cmVtb3ZlQ29uZGl0aW9uKG9Db25kaXRpb25Ub0RlbGV0ZSkge1xuXHRcdHRoaXMuY29uZGl0aW9ucy5yZW1vdmUob0NvbmRpdGlvblRvRGVsZXRlKTtcblx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvQ29uZGl0aW9uVG9EZWxldGUpO1xuXHR9XG5cblx0c2V0UmVjaXBpZW50cygpIHtcblx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoKEFjY291bnRTdG9yZS5hY2NvdW50c0VtYWlscygpLmpvaW4oJywgJykpO1xuXHR9XG5cblx0cGFyc2UoanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0ZpbHRlcicgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5pZCA9IHBTdHJpbmcoanNvbi5JRCk7XG5cdFx0XHR0aGlzLm5hbWUocFN0cmluZyhqc29uLk5hbWUpKTtcblx0XHRcdHRoaXMuZW5hYmxlZCghIWpzb24uRW5hYmxlZCk7XG5cblx0XHRcdHRoaXMuY29uZGl0aW9uc1R5cGUocFN0cmluZyhqc29uLkNvbmRpdGlvbnNUeXBlKSk7XG5cblx0XHRcdHRoaXMuY29uZGl0aW9ucyhbXSk7XG5cblx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoanNvbi5Db25kaXRpb25zKSkge1xuXHRcdFx0XHR0aGlzLmNvbmRpdGlvbnMoXG5cdFx0XHRcdFx0Xy5jb21wYWN0KFxuXHRcdFx0XHRcdFx0Xy5tYXAoanNvbi5Db25kaXRpb25zLCAoYURhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uID0gbmV3IEZpbHRlckNvbmRpdGlvbk1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmaWx0ZXJDb25kaXRpb24gJiYgZmlsdGVyQ29uZGl0aW9uLnBhcnNlKGFEYXRhKSA/IGZpbHRlckNvbmRpdGlvbiA6IG51bGw7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hY3Rpb25UeXBlKHBTdHJpbmcoanNvbi5BY3Rpb25UeXBlKSk7XG5cblx0XHRcdHRoaXMuYWN0aW9uVmFsdWUocFN0cmluZyhqc29uLkFjdGlvblZhbHVlKSk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlU2Vjb25kKHBTdHJpbmcoanNvbi5BY3Rpb25WYWx1ZVNlY29uZCkpO1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZVRoaXJkKHBTdHJpbmcoanNvbi5BY3Rpb25WYWx1ZVRoaXJkKSk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoKHBTdHJpbmcoanNvbi5BY3Rpb25WYWx1ZUZvdXJ0aCkpO1xuXG5cdFx0XHR0aGlzLmFjdGlvbk5vU3RvcCghanNvbi5TdG9wKTtcblx0XHRcdHRoaXMuYWN0aW9uS2VlcCghIWpzb24uS2VlcCk7XG5cdFx0XHR0aGlzLmFjdGlvbk1hcmtBc1JlYWQoISFqc29uLk1hcmtBc1JlYWQpO1xuXG5cdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbG9uZVNlbGYoKSB7XG5cdFx0Y29uc3QgZmlsdGVyID0gbmV3IEZpbHRlck1vZGVsKCk7XG5cblx0XHRmaWx0ZXIuaWQgPSB0aGlzLmlkO1xuXG5cdFx0ZmlsdGVyLmVuYWJsZWQodGhpcy5lbmFibGVkKCkpO1xuXG5cdFx0ZmlsdGVyLm5hbWUodGhpcy5uYW1lKCkpO1xuXHRcdGZpbHRlci5uYW1lLmVycm9yKHRoaXMubmFtZS5lcnJvcigpKTtcblxuXHRcdGZpbHRlci5jb25kaXRpb25zVHlwZSh0aGlzLmNvbmRpdGlvbnNUeXBlKCkpO1xuXG5cdFx0ZmlsdGVyLmFjdGlvbk1hcmtBc1JlYWQodGhpcy5hY3Rpb25NYXJrQXNSZWFkKCkpO1xuXG5cdFx0ZmlsdGVyLmFjdGlvblR5cGUodGhpcy5hY3Rpb25UeXBlKCkpO1xuXG5cdFx0ZmlsdGVyLmFjdGlvblZhbHVlKHRoaXMuYWN0aW9uVmFsdWUoKSk7XG5cdFx0ZmlsdGVyLmFjdGlvblZhbHVlLmVycm9yKHRoaXMuYWN0aW9uVmFsdWUuZXJyb3IoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWVTZWNvbmQodGhpcy5hY3Rpb25WYWx1ZVNlY29uZCgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWVUaGlyZCh0aGlzLmFjdGlvblZhbHVlVGhpcmQoKSk7XG5cdFx0ZmlsdGVyLmFjdGlvblZhbHVlRm91cnRoKHRoaXMuYWN0aW9uVmFsdWVGb3VydGgoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uS2VlcCh0aGlzLmFjdGlvbktlZXAoKSk7XG5cdFx0ZmlsdGVyLmFjdGlvbk5vU3RvcCh0aGlzLmFjdGlvbk5vU3RvcCgpKTtcblxuXHRcdGZpbHRlci5jb25kaXRpb25zKF8ubWFwKHRoaXMuY29uZGl0aW9ucygpLCAoaXRlbSkgPT4gaXRlbS5jbG9uZVNlbGYoKSkpO1xuXG5cdFx0cmV0dXJuIGZpbHRlcjtcblx0fVxufVxuXG5leHBvcnQgeyBGaWx0ZXJNb2RlbCwgRmlsdGVyTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgRmlsdGVyQ29uZGl0aW9uRmllbGQsIEZpbHRlckNvbmRpdGlvblR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEFic3RyYWN0TW9kZWwgfSBmcm9tICdLbm9pbi9BYnN0cmFjdE1vZGVsJztcblxuY2xhc3MgRmlsdGVyQ29uZGl0aW9uTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ0ZpbHRlckNvbmRpdGlvbk1vZGVsJyk7XG5cblx0XHR0aGlzLmZpZWxkID0ga28ub2JzZXJ2YWJsZShGaWx0ZXJDb25kaXRpb25GaWVsZC5Gcm9tKTtcblx0XHR0aGlzLnR5cGUgPSBrby5vYnNlcnZhYmxlKEZpbHRlckNvbmRpdGlvblR5cGUuQ29udGFpbnMpO1xuXHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZhbHVlLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZhbHVlU2Vjb25kID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52YWx1ZVNlY29uZC5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy50ZW1wbGF0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCB0ZW1wbGF0ZSA9ICcnO1xuXHRcdFx0c3dpdGNoICh0aGlzLmZpZWxkKCkpIHtcblx0XHRcdFx0Y2FzZSBGaWx0ZXJDb25kaXRpb25GaWVsZC5TaXplOlxuXHRcdFx0XHRcdHRlbXBsYXRlID0gJ1NldHRpbmdzRmlsdGVyc0NvbmRpdGlvblNpemUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlckNvbmRpdGlvbkZpZWxkLkhlYWRlcjpcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9ICdTZXR0aW5nc0ZpbHRlcnNDb25kaXRpb25Nb3JlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9ICdTZXR0aW5nc0ZpbHRlcnNDb25kaXRpb25EZWZhdWx0Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5maWVsZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy52YWx1ZSgnJyk7XG5cdFx0XHR0aGlzLnZhbHVlU2Vjb25kKCcnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoW3RoaXMudGVtcGxhdGVdKTtcblx0fVxuXG5cdHZlcmlmeSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMudmFsdWUoKSkge1xuXHRcdFx0dGhpcy52YWx1ZS5lcnJvcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoRmlsdGVyQ29uZGl0aW9uRmllbGQuSGVhZGVyID09PSB0aGlzLmZpZWxkKCkgJiYgJycgPT09IHRoaXMudmFsdWVTZWNvbmQoKSkge1xuXHRcdFx0dGhpcy52YWx1ZVNlY29uZC5lcnJvcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHBhcnNlKGpzb24pIHtcblx0XHRpZiAoanNvbiAmJiBqc29uLkZpZWxkICYmIGpzb24uVHlwZSkge1xuXHRcdFx0dGhpcy5maWVsZChwU3RyaW5nKGpzb24uRmllbGQpKTtcblx0XHRcdHRoaXMudHlwZShwU3RyaW5nKGpzb24uVHlwZSkpO1xuXHRcdFx0dGhpcy52YWx1ZShwU3RyaW5nKGpzb24uVmFsdWUpKTtcblx0XHRcdHRoaXMudmFsdWVTZWNvbmQocFN0cmluZyhqc29uLlZhbHVlU2Vjb25kKSk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHRvSnNvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0RmllbGQ6IHRoaXMuZmllbGQoKSxcblx0XHRcdFR5cGU6IHRoaXMudHlwZSgpLFxuXHRcdFx0VmFsdWU6IHRoaXMudmFsdWUoKSxcblx0XHRcdFZhbHVlU2Vjb25kOiB0aGlzLnZhbHVlU2Vjb25kKClcblx0XHR9O1xuXHR9XG5cblx0Y2xvbmVTZWxmKCkge1xuXHRcdGNvbnN0IGZpbHRlckNvbmQgPSBuZXcgRmlsdGVyQ29uZGl0aW9uTW9kZWwoKTtcblxuXHRcdGZpbHRlckNvbmQuZmllbGQodGhpcy5maWVsZCgpKTtcblx0XHRmaWx0ZXJDb25kLnR5cGUodGhpcy50eXBlKCkpO1xuXHRcdGZpbHRlckNvbmQudmFsdWUodGhpcy52YWx1ZSgpKTtcblx0XHRmaWx0ZXJDb25kLnZhbHVlU2Vjb25kKHRoaXMudmFsdWVTZWNvbmQoKSk7XG5cblx0XHRyZXR1cm4gZmlsdGVyQ29uZDtcblx0fVxufVxuXG5leHBvcnQgeyBGaWx0ZXJDb25kaXRpb25Nb2RlbCwgRmlsdGVyQ29uZGl0aW9uTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cucXI7IiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0tleWJvYXJkU2hvcnRjdXRzSGVscCdcbn0pXG5jbGFzcyBLZXlib2FyZFNob3J0Y3V0c0hlbHBQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cEtleWJvYXJkU2hvcnRjdXRzSGVscDtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0a2V5KFxuXHRcdFx0J3RhYiwgc2hpZnQrdGFiLCBsZWZ0LCByaWdodCcsXG5cdFx0XHRLZXlTdGF0ZS5Qb3B1cEtleWJvYXJkU2hvcnRjdXRzSGVscCxcblx0XHRcdF8udGhyb3R0bGUoKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBoYW5kbGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgJHRhYnMgPSBkb20uZmluZCgnLm5hdi5uYXYtdGFicyA+IGxpJyksXG5cdFx0XHRcdFx0XHRpc05leHQgPSBoYW5kbGVyICYmICgndGFiJyA9PT0gaGFuZGxlci5zaG9ydGN1dCB8fCAncmlnaHQnID09PSBoYW5kbGVyLnNob3J0Y3V0KTtcblxuXHRcdFx0XHRcdGxldCBpbmRleCA9ICR0YWJzLmluZGV4KCR0YWJzLmZpbHRlcignLmFjdGl2ZScpKTtcblx0XHRcdFx0XHRpZiAoIWlzTmV4dCAmJiAwIDwgaW5kZXgpIHtcblx0XHRcdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpc05leHQgJiYgaW5kZXggPCAkdGFicy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRpbmRleCArPSAxO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGlzTmV4dCA/IDAgOiAkdGFicy5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCR0YWJzXG5cdFx0XHRcdFx0XHQuZXEoaW5kZXgpXG5cdFx0XHRcdFx0XHQuZmluZCgnYVtkYXRhLXRvZ2dsZT1cInRhYlwiXScpXG5cdFx0XHRcdFx0XHQudGFiKCdzaG93Jyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dHNIZWxwUG9wdXBWaWV3LCBLZXlib2FyZFNob3J0Y3V0c0hlbHBQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgSnVhIGZyb20gJ0p1YSc7XG5cbmltcG9ydCB7XG5cdFNhdmVTZXR0aW5nc1N0ZXAsXG5cdENvbnRhY3RQcm9wZXJ0eVR5cGUsXG5cdENvbXBvc2VUeXBlLFxuXHRDYXBhLFxuXHRNYWdpY3MsXG5cdFN0b3JhZ2VSZXN1bHRUeXBlLFxuXHROb3RpZmljYXRpb24sXG5cdEtleVN0YXRlXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7XG5cdGRlbGVnYXRlUnVuT25EZXN0cm95LFxuXHRjb21wdXRlZFBhZ2VuYXRvckhlbHBlcixcblx0aW5BcnJheSxcblx0dHJpbSxcblx0d2luZG93UmVzaXplQ2FsbGJhY2ssXG5cdGlzTm9uRW1wdHlBcnJheSxcblx0ZmFrZU1kNSxcblx0cEludCxcblx0aXNVbmRcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgQ09OVEFDVFNfUEVSX1BBR0UgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnQ29tbW9uL1NlbGVjdG9yJztcbmltcG9ydCB7IGV4cG9ydENvbnRhY3RzVmNmLCBleHBvcnRDb250YWN0c0NzdiwgdXBsb2FkQ29udGFjdHMgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaTE4biwgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5pbXBvcnQgQ29udGFjdFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0NvbnRhY3QnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgRW1haWxNb2RlbCB9IGZyb20gJ01vZGVsL0VtYWlsJztcbmltcG9ydCB7IENvbnRhY3RNb2RlbCB9IGZyb20gJ01vZGVsL0NvbnRhY3QnO1xuaW1wb3J0IHsgQ29udGFjdFByb3BlcnR5TW9kZWwgfSBmcm9tICdNb2RlbC9Db250YWN0UHJvcGVydHknO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQsIHNob3dTY3JlZW5Qb3B1cCwgaGlkZVNjcmVlblBvcHVwLCByb3V0ZU9uLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQ29udGFjdHMnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQ29udGFjdHMnXG59KVxuY2xhc3MgQ29udGFjdHNQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGNvbnN0IGZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIgPSAobGlzdCkgPT4ge1xuXHRcdFx0aWYgKGxpc3QgJiYgMCA8IGxpc3QubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMudmlld1Byb3BlcnRpZXMucmVtb3ZlQWxsKGxpc3QpO1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShsaXN0KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5iQmFja1RvQ29tcG9zZSA9IGZhbHNlO1xuXHRcdHRoaXMuc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkID0gJyc7XG5cblx0XHR0aGlzLmFsbG93Q29udGFjdHNTeW5jID0gQ29udGFjdFN0b3JlLmFsbG93Q29udGFjdHNTeW5jO1xuXHRcdHRoaXMuZW5hYmxlQ29udGFjdHNTeW5jID0gQ29udGFjdFN0b3JlLmVuYWJsZUNvbnRhY3RzU3luYztcblx0XHR0aGlzLmFsbG93RXhwb3J0ID0gIWJNb2JpbGVEZXZpY2U7XG5cblx0XHR0aGlzLnNlYXJjaCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29udGFjdHNDb3VudCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5jb250YWN0cyA9IENvbnRhY3RTdG9yZS5jb250YWN0cztcblxuXHRcdHRoaXMuY3VycmVudENvbnRhY3QgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5pbXBvcnRVcGxvYWRlckJ1dHRvbiA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLmNvbnRhY3RzUGFnZSA9IGtvLm9ic2VydmFibGUoMSk7XG5cdFx0dGhpcy5jb250YWN0c1BhZ2VDb3VudCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlQYWdlID0gd2luZG93Lk1hdGguY2VpbCh0aGlzLmNvbnRhY3RzQ291bnQoKSAvIENPTlRBQ1RTX1BFUl9QQUdFKTtcblx0XHRcdHJldHVybiAwID49IGlQYWdlID8gMSA6IGlQYWdlO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250YWN0c1BhZ2VuYXRvciA9IGtvLmNvbXB1dGVkKGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyKHRoaXMuY29udGFjdHNQYWdlLCB0aGlzLmNvbnRhY3RzUGFnZUNvdW50KSk7XG5cblx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnZpZXdDbGVhclNlYXJjaCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy52aWV3SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdSZWFkT25seSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52aWV3U2F2ZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzTmFtZXMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIoXG5cdFx0XHRcdHRoaXMudmlld1Byb3BlcnRpZXMoKSxcblx0XHRcdFx0KHByb3BlcnR5KSA9PiAtMSA8IGluQXJyYXkocHJvcGVydHkudHlwZSgpLCBbQ29udGFjdFByb3BlcnR5VHlwZS5GaXJzdE5hbWUsIENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWVdKVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllc090aGVyID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKHByb3BlcnR5KSA9PiAtMSA8IGluQXJyYXkocHJvcGVydHkudHlwZSgpLCBbQ29udGFjdFByb3BlcnR5VHlwZS5OaWNrXSkpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllcygpLCAocHJvcGVydHkpID0+IENvbnRhY3RQcm9wZXJ0eVR5cGUuRW1haWwgPT09IHByb3BlcnR5LnR5cGUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc1dlYiA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzKCksIChwcm9wZXJ0eSkgPT4gQ29udGFjdFByb3BlcnR5VHlwZS5XZWIgPT09IHByb3BlcnR5LnR5cGUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3SGFzTm9uRW1wdHlSZXF1aXJlZFByb3BlcnRpZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBuYW1lcyA9IHRoaXMudmlld1Byb3BlcnRpZXNOYW1lcygpLFxuXHRcdFx0XHRlbWFpbHMgPSB0aGlzLnZpZXdQcm9wZXJ0aWVzRW1haWxzKCksXG5cdFx0XHRcdGZGaWx0ZXIgPSAocHJvcGVydHkpID0+ICcnICE9PSB0cmltKHByb3BlcnR5LnZhbHVlKCkpO1xuXG5cdFx0XHRyZXR1cm4gISEoXy5maW5kKG5hbWVzLCBmRmlsdGVyKSB8fCBfLmZpbmQoZW1haWxzLCBmRmlsdGVyKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzUGhvbmVzID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKHByb3BlcnR5KSA9PiBDb250YWN0UHJvcGVydHlUeXBlLlBob25lID09PSBwcm9wZXJ0eS50eXBlKCkpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHNOb25FbXB0eSA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzTmFtZXMoKSwgKHByb3BlcnR5KSA9PiAnJyAhPT0gdHJpbShwcm9wZXJ0eS52YWx1ZSgpKSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgcHJvcGVydHlGb2N1c2VkID0gKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBmb2N1c2VkID0gcHJvcGVydHkuZm9jdXNlZCgpO1xuXHRcdFx0cmV0dXJuICcnID09PSB0cmltKHByb3BlcnR5LnZhbHVlKCkpICYmICFmb2N1c2VkO1xuXHRcdH07XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzRW1haWxzRW1wdHlBbmRPbkZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllc0VtYWlscygpLCBwcm9wZXJ0eUZvY3VzZWQpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNQaG9uZXNFbXB0eUFuZE9uRm9jdXNlZCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzUGhvbmVzKCksIHByb3BlcnR5Rm9jdXNlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc1dlYkVtcHR5QW5kT25Gb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllc1dlYigpLCBwcm9wZXJ0eUZvY3VzZWQpKTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNPdGhlckVtcHR5QW5kT25Gb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXNPdGhlcigpLCBwcm9wZXJ0eUZvY3VzZWQpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHNFbXB0eUFuZE9uRm9jdXNlZC5zdWJzY3JpYmUoZkZhc3RDbGVhckVtcHR5TGlzdEhlbHBlcik7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllc1Bob25lc0VtcHR5QW5kT25Gb2N1c2VkLnN1YnNjcmliZShmRmFzdENsZWFyRW1wdHlMaXN0SGVscGVyKTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViRW1wdHlBbmRPbkZvY3VzZWQuc3Vic2NyaWJlKGZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIpO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNPdGhlckVtcHR5QW5kT25Gb2N1c2VkLnN1YnNjcmliZShmRmFzdENsZWFyRW1wdHlMaXN0SGVscGVyKTtcblxuXHRcdHRoaXMudmlld1NhdmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy51c2VDaGVja2JveGVzSW5MaXN0ID0gU2V0dGluZ3NTdG9yZS51c2VDaGVja2JveGVzSW5MaXN0O1xuXG5cdFx0dGhpcy5zZWFyY2guc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY29udGFjdHMuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzLnN1YnNjcmliZSh3aW5kb3dSZXNpemVDYWxsYmFjayk7XG5cblx0XHR0aGlzLmNvbnRhY3RzQ2hlY2tlZCA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMuY29udGFjdHMoKSwgKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCgpKSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5jb250YWN0c0NoZWNrZWQoKSxcblx0XHRcdFx0c2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRDb250YWN0KCk7XG5cblx0XHRcdHJldHVybiBfLnVuaW9uKGNoZWNrZWQsIHNlbGVjdGVkID8gW3NlbGVjdGVkXSA6IFtdKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZFVpZHMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkKCksIChjb250YWN0KSA9PiBjb250YWN0LmlkQ29udGFjdClcblx0XHQpO1xuXG5cdFx0dGhpcy5zZWxlY3RvciA9IG5ldyBTZWxlY3Rvcihcblx0XHRcdHRoaXMuY29udGFjdHMsXG5cdFx0XHR0aGlzLmN1cnJlbnRDb250YWN0LFxuXHRcdFx0bnVsbCxcblx0XHRcdCcuZS1jb250YWN0LWl0ZW0gLmFjdGlvbkhhbmRsZScsXG5cdFx0XHQnLmUtY29udGFjdC1pdGVtLnNlbGVjdGVkJyxcblx0XHRcdCcuZS1jb250YWN0LWl0ZW0gLmNoZWNrYm94SXRlbScsXG5cdFx0XHQnLmUtY29udGFjdC1pdGVtLmZvY3VzZWQnXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VsZWN0b3Iub24oJ29uSXRlbVNlbGVjdCcsIChjb250YWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBvcHVsYXRlVmlld0NvbnRhY3QoY29udGFjdCA/IGNvbnRhY3QgOiBudWxsKTtcblx0XHRcdGlmICghY29udGFjdCkge1xuXHRcdFx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zZWxlY3Rvci5vbignb25JdGVtR2V0VWlkJywgKGNvbnRhY3QpID0+IChjb250YWN0ID8gY29udGFjdC5nZW5lcmF0ZVVpZCgpIDogJycpKTtcblxuXHRcdHRoaXMuYkRyb3BQYWdlQWZ0ZXJEZWxldGUgPSBmYWxzZTtcblxuXHRcdHRoaXMud2F0Y2hEaXJ0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMud2F0Y2hIYXNoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdIYXNoID0ga28uY29tcHV0ZWQoKCkgPT4gJycgKyBfLm1hcCh0aGlzLnZpZXdQcm9wZXJ0aWVzKCksIChvSXRlbSkgPT4gb0l0ZW0udmFsdWUoKSkuam9pbignJykpO1xuXG5cdFx0Ly8gdGhpcy5zYXZlQ29tbWFuZERlYm91bmNlID0gXy5kZWJvdW5jZShfLmJpbmQodGhpcy5zYXZlQ29tbWFuZCwgdGhpcyksIDEwMDApO1xuXG5cdFx0dGhpcy52aWV3SGFzaC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMud2F0Y2hIYXNoKCkgJiYgIXRoaXMudmlld1JlYWRPbmx5KCkgJiYgIXRoaXMud2F0Y2hEaXJ0eSgpKSB7XG5cdFx0XHRcdHRoaXMud2F0Y2hEaXJ0eSh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLkNvbnRhY3RMaXN0O1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRuZXdDb21tYW5kKCkge1xuXHRcdHRoaXMucG9wdWxhdGVWaWV3Q29udGFjdChudWxsKTtcblx0XHR0aGlzLmN1cnJlbnRDb250YWN0KG51bGwpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IDAgPCBzZWxmLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKS5sZW5ndGgpXG5cdGRlbGV0ZUNvbW1hbmQoKSB7XG5cdFx0dGhpcy5kZWxldGVTZWxlY3RlZENvbnRhY3RzKCk7XG5cdFx0dGhpcy5lbXB0eVNlbGVjdGlvbih0cnVlKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAwIDwgc2VsZi5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkKCkubGVuZ3RoKVxuXHRuZXdNZXNzYWdlQ29tbWFuZCgpIHtcblx0XHRpZiAoIVNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3NlcikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgYUUgPSBbXSxcblx0XHRcdHRvRW1haWxzID0gbnVsbCxcblx0XHRcdGNjRW1haWxzID0gbnVsbCxcblx0XHRcdGJjY0VtYWlscyA9IG51bGw7XG5cblx0XHRjb25zdCBhQyA9IHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCgpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYUMpKSB7XG5cdFx0XHRhRSA9IF8ubWFwKGFDLCAob0l0ZW0pID0+IHtcblx0XHRcdFx0aWYgKG9JdGVtKSB7XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IG9JdGVtLmdldE5hbWVBbmRFbWFpbEhlbHBlcigpLFxuXHRcdFx0XHRcdFx0ZW1haWwgPSBkYXRhID8gbmV3IEVtYWlsTW9kZWwoZGF0YVswXSwgZGF0YVsxXSkgOiBudWxsO1xuXG5cdFx0XHRcdFx0aWYgKGVtYWlsICYmIGVtYWlsLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbWFpbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0pO1xuXG5cdFx0XHRhRSA9IF8uY29tcGFjdChhRSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhRSkpIHtcblx0XHRcdHRoaXMuYkJhY2tUb0NvbXBvc2UgPSBmYWxzZTtcblxuXHRcdFx0aGlkZVNjcmVlblBvcHVwKENvbnRhY3RzUG9wdXBWaWV3KTtcblxuXHRcdFx0c3dpdGNoICh0aGlzLnNMYXN0Q29tcG9zZUZvY3VzZWRGaWVsZCkge1xuXHRcdFx0XHRjYXNlICdjYyc6XG5cdFx0XHRcdFx0Y2NFbWFpbHMgPSBhRTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnYmNjJzpcblx0XHRcdFx0XHRiY2NFbWFpbHMgPSBhRTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndG8nOlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRvRW1haWxzID0gYUU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkID0gJyc7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJyksIFtDb21wb3NlVHlwZS5FbXB0eSwgbnVsbCwgdG9FbWFpbHMsIGNjRW1haWxzLCBiY2NFbWFpbHNdKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRjbGVhckNvbW1hbmQoKSB7XG5cdFx0dGhpcy5zZWFyY2goJycpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHtcblx0XHRjb25zdCBiViA9IHNlbGYudmlld0hhc05vbkVtcHR5UmVxdWlyZWRQcm9wZXJ0aWVzKCksXG5cdFx0XHRiUmVhZE9ubHkgPSBzZWxmLnZpZXdSZWFkT25seSgpO1xuXHRcdHJldHVybiAhc2VsZi52aWV3U2F2aW5nKCkgJiYgYlYgJiYgIWJSZWFkT25seTtcblx0fSlcblx0c2F2ZUNvbW1hbmQoKSB7XG5cdFx0dGhpcy52aWV3U2F2aW5nKHRydWUpO1xuXHRcdHRoaXMudmlld1NhdmVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cblx0XHRjb25zdCByZXF1ZXN0VWlkID0gZmFrZU1kNSgpLFxuXHRcdFx0cHJvcGVydGllcyA9IFtdO1xuXG5cdFx0Xy5lYWNoKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKG9JdGVtKSA9PiB7XG5cdFx0XHRpZiAob0l0ZW0udHlwZSgpICYmIG9JdGVtLnR5cGUoKSAhPT0gQ29udGFjdFByb3BlcnR5VHlwZS5GdWxsTmFtZSAmJiAnJyAhPT0gdHJpbShvSXRlbS52YWx1ZSgpKSkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzLnB1c2goW29JdGVtLnR5cGUoKSwgb0l0ZW0udmFsdWUoKSwgb0l0ZW0udHlwZVN0cigpXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRSZW1vdGUuY29udGFjdFNhdmUoXG5cdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0bGV0IHJlcyA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLnZpZXdTYXZpbmcoZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmXG5cdFx0XHRcdFx0b0RhdGEgJiZcblx0XHRcdFx0XHRvRGF0YS5SZXN1bHQgJiZcblx0XHRcdFx0XHRvRGF0YS5SZXN1bHQuUmVxdWVzdFVpZCA9PT0gcmVxdWVzdFVpZCAmJlxuXHRcdFx0XHRcdDAgPCBwSW50KG9EYXRhLlJlc3VsdC5SZXN1bHRJRClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKCcnID09PSB0aGlzLnZpZXdJRCgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnZpZXdJRChwSW50KG9EYXRhLlJlc3VsdC5SZXN1bHRJRCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QoKTtcblx0XHRcdFx0XHRyZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy52aWV3U2F2ZVRyaWdnZXIocmVzID8gU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0IDogU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdCk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lMzUwbXMpO1xuXG5cdFx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0XHR0aGlzLndhdGNoRGlydHkoZmFsc2UpO1xuXG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnZpZXdTYXZlVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdFx0XHRcdH0sIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cmVxdWVzdFVpZCxcblx0XHRcdHRoaXMudmlld0lEKCksXG5cdFx0XHRwcm9wZXJ0aWVzXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5jb250YWN0cy5zeW5jaW5nKCkgJiYgIXNlbGYuY29udGFjdHMuaW1wb3J0aW5nKCkpXG5cdHN5bmNDb21tYW5kKCkge1xuXHRcdGdldEFwcCgpLmNvbnRhY3RzU3luYygocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHR3aW5kb3cuYWxlcnQoZ2V0Tm90aWZpY2F0aW9uKGRhdGEgJiYgZGF0YS5FcnJvckNvZGUgPyBkYXRhLkVycm9yQ29kZSA6IE5vdGlmaWNhdGlvbi5Db250YWN0c1N5bmNFcnJvcikpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJlbG9hZENvbnRhY3RMaXN0KHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0UHJvcGVydHlQbGFjZWhvbGRlcih0eXBlKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSBDb250YWN0UHJvcGVydHlUeXBlLkxhc3ROYW1lOlxuXHRcdFx0XHRyZXN1bHQgPSAnQ09OVEFDVFMvUExBQ0VIT0xERVJfRU5URVJfTEFTVF9OQU1FJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIENvbnRhY3RQcm9wZXJ0eVR5cGUuRmlyc3ROYW1lOlxuXHRcdFx0XHRyZXN1bHQgPSAnQ09OVEFDVFMvUExBQ0VIT0xERVJfRU5URVJfRklSU1RfTkFNRSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBDb250YWN0UHJvcGVydHlUeXBlLk5pY2s6XG5cdFx0XHRcdHJlc3VsdCA9ICdDT05UQUNUUy9QTEFDRUhPTERFUl9FTlRFUl9OSUNLX05BTUUnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkTmV3UHJvcGVydHkodHlwZSwgdHlwZVN0cikge1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMucHVzaChcblx0XHRcdG5ldyBDb250YWN0UHJvcGVydHlNb2RlbCh0eXBlLCB0eXBlU3RyIHx8ICcnLCAnJywgdHJ1ZSwgdGhpcy5nZXRQcm9wZXJ0eVBsYWNlaG9sZGVyKHR5cGUpKVxuXHRcdCk7XG5cdH1cblxuXHRhZGROZXdPckZvY3VzUHJvcGVydHkodHlwZSwgdHlwZVN0cikge1xuXHRcdGNvbnN0IGl0ZW0gPSBfLmZpbmQodGhpcy52aWV3UHJvcGVydGllcygpLCAocHJvcCkgPT4gdHlwZSA9PT0gcHJvcC50eXBlKCkpO1xuXHRcdGlmIChpdGVtKSB7XG5cdFx0XHRpdGVtLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkTmV3UHJvcGVydHkodHlwZSwgdHlwZVN0cik7XG5cdFx0fVxuXHR9XG5cblx0YWRkTmV3RW1haWwoKSB7XG5cdFx0dGhpcy5hZGROZXdQcm9wZXJ0eShDb250YWN0UHJvcGVydHlUeXBlLkVtYWlsLCAnSG9tZScpO1xuXHR9XG5cblx0YWRkTmV3UGhvbmUoKSB7XG5cdFx0dGhpcy5hZGROZXdQcm9wZXJ0eShDb250YWN0UHJvcGVydHlUeXBlLlBob25lLCAnTW9iaWxlJyk7XG5cdH1cblxuXHRhZGROZXdXZWIoKSB7XG5cdFx0dGhpcy5hZGROZXdQcm9wZXJ0eShDb250YWN0UHJvcGVydHlUeXBlLldlYik7XG5cdH1cblxuXHRhZGROZXdOaWNrbmFtZSgpIHtcblx0XHR0aGlzLmFkZE5ld09yRm9jdXNQcm9wZXJ0eShDb250YWN0UHJvcGVydHlUeXBlLk5pY2spO1xuXHR9XG5cblx0YWRkTmV3Tm90ZXMoKSB7XG5cdFx0dGhpcy5hZGROZXdPckZvY3VzUHJvcGVydHkoQ29udGFjdFByb3BlcnR5VHlwZS5Ob3RlKTtcblx0fVxuXG5cdGFkZE5ld0JpcnRoZGF5KCkge1xuXHRcdHRoaXMuYWRkTmV3T3JGb2N1c1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuQmlydGhkYXkpO1xuXHR9XG5cblx0ZXhwb3J0VmNmKCkge1xuXHRcdGdldEFwcCgpLmRvd25sb2FkKGV4cG9ydENvbnRhY3RzVmNmKCkpO1xuXHR9XG5cblx0ZXhwb3J0Q3N2KCkge1xuXHRcdGdldEFwcCgpLmRvd25sb2FkKGV4cG9ydENvbnRhY3RzQ3N2KCkpO1xuXHR9XG5cblx0aW5pdFVwbG9hZGVyKCkge1xuXHRcdGlmICh0aGlzLmltcG9ydFVwbG9hZGVyQnV0dG9uKCkpIHtcblx0XHRcdGNvbnN0IGogPSBuZXcgSnVhKHtcblx0XHRcdFx0J2FjdGlvbic6IHVwbG9hZENvbnRhY3RzKCksXG5cdFx0XHRcdCduYW1lJzogJ3VwbG9hZGVyJyxcblx0XHRcdFx0J3F1ZXVlU2l6ZSc6IDEsXG5cdFx0XHRcdCdtdWx0aXBsZVNpemVMaW1pdCc6IDEsXG5cdFx0XHRcdCdkaXNhYmxlRHJhZ0FuZERyb3AnOiB0cnVlLFxuXHRcdFx0XHQnZGlzYWJsZU11bHRpcGxlJzogdHJ1ZSxcblx0XHRcdFx0J2Rpc2FibGVEb2N1bWVudERyb3BQcmV2ZW50JzogdHJ1ZSxcblx0XHRcdFx0J2NsaWNrRWxlbWVudCc6IHRoaXMuaW1wb3J0VXBsb2FkZXJCdXR0b24oKVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChqKSB7XG5cdFx0XHRcdGoub24oJ29uU3RhcnQnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5jb250YWN0cy5pbXBvcnRpbmcodHJ1ZSk7XG5cdFx0XHRcdH0pLm9uKCdvbkNvbXBsZXRlJywgKGlkLCByZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzLmltcG9ydGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCgpO1xuXHRcdFx0XHRcdGlmICghaWQgfHwgIXJlc3VsdCB8fCAhZGF0YSB8fCAhZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHdpbmRvdy5hbGVydChpMThuKCdDT05UQUNUUy9FUlJPUl9JTVBPUlRfRklMRScpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUNoZWNrZWRPclNlbGVjdGVkQ29udGFjdHNGcm9tTGlzdCgpIHtcblx0XHRjb25zdCBrb0NvbnRhY3RzID0gdGhpcy5jb250YWN0cyxcblx0XHRcdGNvbnRhY3RzID0gdGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkKCk7XG5cblx0XHRsZXQgY3VycmVudENvbnRhY3QgPSB0aGlzLmN1cnJlbnRDb250YWN0KCksXG5cdFx0XHRjb3VudCA9IHRoaXMuY29udGFjdHMoKS5sZW5ndGg7XG5cblx0XHRpZiAoMCA8IGNvbnRhY3RzLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGNvbnRhY3RzLCAoY29udGFjdCkgPT4ge1xuXHRcdFx0XHRpZiAoY3VycmVudENvbnRhY3QgJiYgY3VycmVudENvbnRhY3QuaWRDb250YWN0ID09PSBjb250YWN0LmlkQ29udGFjdCkge1xuXHRcdFx0XHRcdGN1cnJlbnRDb250YWN0ID0gbnVsbDtcblx0XHRcdFx0XHR0aGlzLmN1cnJlbnRDb250YWN0KG51bGwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29udGFjdC5kZWxldGVkKHRydWUpO1xuXHRcdFx0XHRjb3VudCAtPSAxO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICgwID49IGNvdW50KSB7XG5cdFx0XHRcdHRoaXMuYkRyb3BQYWdlQWZ0ZXJEZWxldGUgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0Xy5lYWNoKGNvbnRhY3RzLCAoY29udGFjdCkgPT4ge1xuXHRcdFx0XHRcdGtvQ29udGFjdHMucmVtb3ZlKGNvbnRhY3QpO1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGNvbnRhY3QpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdGRlbGV0ZVNlbGVjdGVkQ29udGFjdHMoKSB7XG5cdFx0aWYgKDAgPCB0aGlzLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKS5sZW5ndGgpIHtcblx0XHRcdFJlbW90ZS5jb250YWN0c0RlbGV0ZShfLmJpbmQodGhpcy5kZWxldGVSZXNwb25zZSwgdGhpcyksIHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZFVpZHMoKSk7XG5cblx0XHRcdHRoaXMucmVtb3ZlQ2hlY2tlZE9yU2VsZWN0ZWRDb250YWN0c0Zyb21MaXN0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVzdWx0XG5cdCAqIEBwYXJhbSB7QWpheEpzb25EZWZhdWx0UmVzcG9uc2V9IG9EYXRhXG5cdCAqL1xuXHRkZWxldGVSZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChNYWdpY3MuVGltZTUwMG1zIDwgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgb0RhdGEuVGltZSA/IHBJbnQob0RhdGEuVGltZSkgOiAwKSkge1xuXHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCh0aGlzLmJEcm9wUGFnZUFmdGVyRGVsZXRlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QodGhpcy5iRHJvcFBhZ2VBZnRlckRlbGV0ZSk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRyZW1vdmVQcm9wZXJ0eShvUHJvcCkge1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMucmVtb3ZlKG9Qcm9wKTtcblx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvUHJvcCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/Q29udGFjdE1vZGVsfSBjb250YWN0XG5cdCAqL1xuXHRwb3B1bGF0ZVZpZXdDb250YWN0KGNvbnRhY3QpIHtcblx0XHRsZXQgaWQgPSAnJyxcblx0XHRcdGxhc3ROYW1lID0gJycsXG5cdFx0XHRmaXJzdE5hbWUgPSAnJztcblx0XHRjb25zdCBsaXN0ID0gW107XG5cblx0XHR0aGlzLndhdGNoSGFzaChmYWxzZSk7XG5cblx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uKGZhbHNlKTtcblx0XHR0aGlzLnZpZXdSZWFkT25seShmYWxzZSk7XG5cblx0XHRpZiAoY29udGFjdCkge1xuXHRcdFx0aWQgPSBjb250YWN0LmlkQ29udGFjdDtcblx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY29udGFjdC5wcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRfLmVhY2goY29udGFjdC5wcm9wZXJ0aWVzLCAocHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHlbMF0pIHtcblx0XHRcdFx0XHRcdGlmIChDb250YWN0UHJvcGVydHlUeXBlLkxhc3ROYW1lID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0XHRsYXN0TmFtZSA9IHByb3BlcnR5WzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSA9PT0gcHJvcGVydHlbMF0pIHtcblx0XHRcdFx0XHRcdFx0Zmlyc3ROYW1lID0gcHJvcGVydHlbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnB1c2gobmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKHByb3BlcnR5WzBdLCBwcm9wZXJ0eVsyXSB8fCAnJywgcHJvcGVydHlbMV0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnZpZXdSZWFkT25seSghIWNvbnRhY3QucmVhZE9ubHkpO1xuXHRcdH1cblxuXHRcdGxpc3QudW5zaGlmdChcblx0XHRcdG5ldyBDb250YWN0UHJvcGVydHlNb2RlbChcblx0XHRcdFx0Q29udGFjdFByb3BlcnR5VHlwZS5MYXN0TmFtZSxcblx0XHRcdFx0JycsXG5cdFx0XHRcdGxhc3ROYW1lLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0dGhpcy5nZXRQcm9wZXJ0eVBsYWNlaG9sZGVyKENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWUpXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGxpc3QudW5zaGlmdChcblx0XHRcdG5ldyBDb250YWN0UHJvcGVydHlNb2RlbChcblx0XHRcdFx0Q29udGFjdFByb3BlcnR5VHlwZS5GaXJzdE5hbWUsXG5cdFx0XHRcdCcnLFxuXHRcdFx0XHRmaXJzdE5hbWUsXG5cdFx0XHRcdCFjb250YWN0LFxuXHRcdFx0XHR0aGlzLmdldFByb3BlcnR5UGxhY2Vob2xkZXIoQ29udGFjdFByb3BlcnR5VHlwZS5GaXJzdE5hbWUpXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlld0lEKGlkKTtcblxuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KHRoaXMudmlld1Byb3BlcnRpZXMoKSk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzKFtdKTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzKGxpc3QpO1xuXG5cdFx0dGhpcy53YXRjaERpcnR5KGZhbHNlKTtcblx0XHR0aGlzLndhdGNoSGFzaCh0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBkcm9wUGFnZVBvc2l0aW9uID0gZmFsc2Vcblx0ICovXG5cdHJlbG9hZENvbnRhY3RMaXN0KGRyb3BQYWdlUG9zaXRpb24gPSBmYWxzZSkge1xuXHRcdGxldCBvZmZzZXQgPSAodGhpcy5jb250YWN0c1BhZ2UoKSAtIDEpICogQ09OVEFDVFNfUEVSX1BBR0U7XG5cblx0XHR0aGlzLmJEcm9wUGFnZUFmdGVyRGVsZXRlID0gZmFsc2U7XG5cblx0XHRpZiAoZHJvcFBhZ2VQb3NpdGlvbikge1xuXHRcdFx0dGhpcy5jb250YWN0c1BhZ2UoMSk7XG5cdFx0XHRvZmZzZXQgPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGFjdHMubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUuY29udGFjdHMoXG5cdFx0XHQocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdGxldCBjb3VudCA9IDAsXG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5MaXN0KSB7XG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShkYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdFx0bGlzdCA9IF8ubWFwKGRhdGEuUmVzdWx0Lkxpc3QsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNvbnRhY3QgPSBuZXcgQ29udGFjdE1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250YWN0LnBhcnNlKGl0ZW0pID8gY29udGFjdCA6IG51bGw7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0bGlzdCA9IF8uY29tcGFjdChsaXN0KTtcblxuXHRcdFx0XHRcdFx0Y291bnQgPSBwSW50KGRhdGEuUmVzdWx0LkNvdW50KTtcblx0XHRcdFx0XHRcdGNvdW50ID0gMCA8IGNvdW50ID8gY291bnQgOiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuY29udGFjdHNDb3VudChjb3VudCk7XG5cblx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3kodGhpcy5jb250YWN0cygpKTtcblx0XHRcdFx0dGhpcy5jb250YWN0cyhsaXN0KTtcblxuXHRcdFx0XHR0aGlzLmNvbnRhY3RzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLnZpZXdDbGVhclNlYXJjaCgnJyAhPT0gdGhpcy5zZWFyY2goKSk7XG5cdFx0XHR9LFxuXHRcdFx0b2Zmc2V0LFxuXHRcdFx0Q09OVEFDVFNfUEVSX1BBR0UsXG5cdFx0XHR0aGlzLnNlYXJjaCgpXG5cdFx0KTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0dGhpcy5vQ29udGVudFZpc2libGUgPSAkKCcuYi1saXN0LWNvbnRlbnQnLCBkb20pO1xuXHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlID0gJCgnLmNvbnRlbnQnLCB0aGlzLm9Db250ZW50VmlzaWJsZSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLmluaXQodGhpcy5vQ29udGVudFZpc2libGUsIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLCBLZXlTdGF0ZS5Db250YWN0TGlzdCk7XG5cblx0XHRrZXkoJ2RlbGV0ZScsIEtleVN0YXRlLkNvbnRhY3RMaXN0LCAoKSA9PiB7XG5cdFx0XHR0aGlzLmRlbGV0ZUNvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnYywgdycsIEtleVN0YXRlLkNvbnRhY3RMaXN0LCAoKSA9PiB7XG5cdFx0XHR0aGlzLm5ld01lc3NhZ2VDb21tYW5kKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGRvbS5vbignY2xpY2snLCAnLmUtcGFnZW5hdG9yIC5lLXBhZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRjb25zdCBwYWdlID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdHNlbGYuY29udGFjdHNQYWdlKHBJbnQocGFnZS52YWx1ZSkpO1xuXHRcdFx0XHRzZWxmLnJlbG9hZENvbnRhY3RMaXN0KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmluaXRVcGxvYWRlcigpO1xuXHR9XG5cblx0b25TaG93KGJCYWNrVG9Db21wb3NlLCBzTGFzdENvbXBvc2VGb2N1c2VkRmllbGQpIHtcblx0XHR0aGlzLmJCYWNrVG9Db21wb3NlID0gaXNVbmQoYkJhY2tUb0NvbXBvc2UpID8gZmFsc2UgOiAhIWJCYWNrVG9Db21wb3NlO1xuXHRcdHRoaXMuc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkID0gaXNVbmQoc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkKSA/ICcnIDogc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkO1xuXG5cdFx0cm91dGVPZmYoKTtcblx0XHR0aGlzLnJlbG9hZENvbnRhY3RMaXN0KHRydWUpO1xuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHJvdXRlT24oKTtcblxuXHRcdHRoaXMuY3VycmVudENvbnRhY3QobnVsbCk7XG5cdFx0dGhpcy5lbXB0eVNlbGVjdGlvbih0cnVlKTtcblx0XHR0aGlzLnNlYXJjaCgnJyk7XG5cdFx0dGhpcy5jb250YWN0c0NvdW50KDApO1xuXG5cdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3kodGhpcy5jb250YWN0cygpKTtcblx0XHR0aGlzLmNvbnRhY3RzKFtdKTtcblxuXHRcdHRoaXMuc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkID0gJyc7XG5cblx0XHRpZiAodGhpcy5iQmFja1RvQ29tcG9zZSkge1xuXHRcdFx0dGhpcy5iQmFja1RvQ29tcG9zZSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBDb250YWN0c1BvcHVwVmlldywgQ29udGFjdHNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyB0cmltLCBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIsIGZvbGRlckxpc3RPcHRpb25zQnVpbGRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuXG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Gb2xkZXJDcmVhdGUnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRm9sZGVyQ3JlYXRlJ1xufSlcbmNsYXNzIEZvbGRlckNyZWF0ZVZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZm9sZGVyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZm9sZGVyTmFtZS5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkUGFyZW50VmFsdWUgPSBrby5vYnNlcnZhYmxlKFVOVVNFRF9PUFRJT05fVkFMVUUpO1xuXG5cdFx0dGhpcy5wYXJlbnRGb2xkZXJTZWxlY3RMaXN0ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdG9wID0gW10sXG5cdFx0XHRcdGxpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJMaXN0KCksXG5cdFx0XHRcdGZSZW5hbWVDYWxsYmFjayA9IChvSXRlbSkgPT5cblx0XHRcdFx0XHRvSXRlbSA/IChvSXRlbS5pc1N5c3RlbUZvbGRlcigpID8gb0l0ZW0ubmFtZSgpICsgJyAnICsgb0l0ZW0ubWFuYWdlRm9sZGVyU3lzdGVtTmFtZSgpIDogb0l0ZW0ubmFtZSgpKSA6ICcnO1xuXG5cdFx0XHR0b3AucHVzaChbJycsICcnXSk7XG5cblx0XHRcdGxldCBmRGlzYWJsZUNhbGxiYWNrID0gbnVsbDtcblx0XHRcdGlmICgnJyAhPT0gRm9sZGVyU3RvcmUubmFtZXNwYWNlKSB7XG5cdFx0XHRcdGZEaXNhYmxlQ2FsbGJhY2sgPSAoaXRlbSkgPT4gRm9sZGVyU3RvcmUubmFtZXNwYWNlICE9PSBpdGVtLmZ1bGxOYW1lUmF3LnN1YnN0cigwLCBGb2xkZXJTdG9yZS5uYW1lc3BhY2UubGVuZ3RoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihbXSwgbGlzdCwgW10sIHRvcCwgbnVsbCwgZkRpc2FibGVDYWxsYmFjaywgbnVsbCwgZlJlbmFtZUNhbGxiYWNrKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuc2ltcGxlRm9sZGVyTmFtZVZhbGlkYXRpb24oc2VsZi5mb2xkZXJOYW1lKCkpKVxuXHRjcmVhdGVGb2xkZXJDb21tYW5kKCkge1xuXHRcdGxldCBwYXJlbnRGb2xkZXJOYW1lID0gdGhpcy5zZWxlY3RlZFBhcmVudFZhbHVlKCk7XG5cdFx0aWYgKCcnID09PSBwYXJlbnRGb2xkZXJOYW1lICYmIDEgPCBGb2xkZXJTdG9yZS5uYW1lc3BhY2UubGVuZ3RoKSB7XG5cdFx0XHRwYXJlbnRGb2xkZXJOYW1lID0gRm9sZGVyU3RvcmUubmFtZXNwYWNlLnN1YnN0cigwLCBGb2xkZXJTdG9yZS5uYW1lc3BhY2UubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXG5cdFx0Z2V0QXBwKCkuZm9sZGVyc1Byb21pc2VzQWN0aW9uSGVscGVyKFxuXHRcdFx0UHJvbWlzZXMuZm9sZGVyQ3JlYXRlKHRoaXMuZm9sZGVyTmFtZSgpLCBwYXJlbnRGb2xkZXJOYW1lLCBGb2xkZXJTdG9yZS5mb2xkZXJzQ3JlYXRpbmcpLFxuXHRcdFx0Tm90aWZpY2F0aW9uLkNhbnRDcmVhdGVGb2xkZXJcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdH1cblxuXHRzaW1wbGVGb2xkZXJOYW1lVmFsaWRhdGlvbihzTmFtZSkge1xuXHRcdHJldHVybiAvXlteXFxcXC9dKyQvZy50ZXN0KHRyaW0oc05hbWUpKTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5mb2xkZXJOYW1lKCcnKTtcblx0XHR0aGlzLnNlbGVjdGVkUGFyZW50VmFsdWUoJycpO1xuXHRcdHRoaXMuZm9sZGVyTmFtZS5mb2N1c2VkKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHRoaXMuZm9sZGVyTmFtZS5mb2N1c2VkKHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBGb2xkZXJDcmVhdGVWaWV3LCBGb2xkZXJDcmVhdGVWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgRmlsdGVyc0FjdGlvbiwgRmlsdGVyQ29uZGl0aW9uRmllbGQsIEZpbHRlckNvbmRpdGlvblR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciwgZGVsZWdhdGVSdW4gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biwgaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBGaWx0ZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9GaWx0ZXInO1xuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9GaWx0ZXInLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRmlsdGVyJ1xufSlcbmNsYXNzIEZpbHRlclBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5pc05ldyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLm1vZHVsZXMgPSBGaWx0ZXJTdG9yZS5tb2R1bGVzO1xuXG5cdFx0dGhpcy5mVHJ1ZUNhbGxiYWNrID0gbnVsbDtcblx0XHR0aGlzLmZpbHRlciA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLmFsbG93TWFya0FzUmVhZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdFx0dGhpcy5mb2xkZXJTZWxlY3RMaXN0ID0gRm9sZGVyU3RvcmUuZm9sZGVyTWVudUZvckZpbHRlcnM7XG5cdFx0dGhpcy5zZWxlY3RlZEZvbGRlclZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNlbGVjdGVkRm9sZGVyVmFsdWUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmZpbHRlcigpKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyKCkuYWN0aW9uVmFsdWUuZXJyb3IoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5maWVsZE9wdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMudHlwZU9wdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMudHlwZU9wdGlvbnNTaXplID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKF8uYmluZCh0aGlzLnBvcHVsYXRlT3B0aW9ucywgdGhpcykpO1xuXG5cdFx0dGhpcy5tb2R1bGVzLnN1YnNjcmliZSh0aGlzLnBvcHVsYXRlT3B0aW9ucywgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHNhdmVGaWx0ZXJDb21tYW5kKCkge1xuXHRcdGlmICh0aGlzLmZpbHRlcigpKSB7XG5cdFx0XHRpZiAoRmlsdGVyc0FjdGlvbi5Nb3ZlVG8gPT09IHRoaXMuZmlsdGVyKCkuYWN0aW9uVHlwZSgpKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyKCkuYWN0aW9uVmFsdWUodGhpcy5zZWxlY3RlZEZvbGRlclZhbHVlKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXRoaXMuZmlsdGVyKCkudmVyaWZ5KCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5mVHJ1ZUNhbGxiYWNrKSB7XG5cdFx0XHRcdHRoaXMuZlRydWVDYWxsYmFjayh0aGlzLmZpbHRlcigpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2Nsb3NlQ29tbWFuZCcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cG9wdWxhdGVPcHRpb25zKCkge1xuXHRcdHRoaXMuYWN0aW9uVHlwZU9wdGlvbnMoW10pO1xuXG5cdFx0Ly8gdGhpcy5hY3Rpb25UeXBlT3B0aW9ucy5wdXNoKHsnaWQnOiBGaWx0ZXJzQWN0aW9uLk5vbmUsXG5cdFx0Ly8gJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fTk9ORScpfSk7XG5cblx0XHRjb25zdCBtb2R1bGVzID0gdGhpcy5tb2R1bGVzKCk7XG5cdFx0aWYgKG1vZHVsZXMpIHtcblx0XHRcdGlmIChtb2R1bGVzLm1hcmthc3JlYWQpIHtcblx0XHRcdFx0dGhpcy5hbGxvd01hcmtBc1JlYWQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtb2R1bGVzLm1vdmV0bykge1xuXHRcdFx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdCdpZCc6IEZpbHRlcnNBY3Rpb24uTW92ZVRvLFxuXHRcdFx0XHRcdCduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfQUNUSU9OX01PVkVfVE8nKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1vZHVsZXMucmVkaXJlY3QpIHtcblx0XHRcdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHQnaWQnOiBGaWx0ZXJzQWN0aW9uLkZvcndhcmQsXG5cdFx0XHRcdFx0J25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fRk9SV0FSRF9UTycpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW9kdWxlcy5yZWplY3QpIHtcblx0XHRcdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucy5wdXNoKHsgJ2lkJzogRmlsdGVyc0FjdGlvbi5SZWplY3QsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfQUNUSU9OX1JFSkVDVCcpIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW9kdWxlcy52YWNhdGlvbikge1xuXHRcdFx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdCdpZCc6IEZpbHRlcnNBY3Rpb24uVmFjYXRpb24sXG5cdFx0XHRcdFx0J25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fVkFDQVRJT05fTUVTU0FHRScpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuYWN0aW9uVHlwZU9wdGlvbnMucHVzaCh7ICdpZCc6IEZpbHRlcnNBY3Rpb24uRGlzY2FyZCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fRElTQ0FSRCcpIH0pO1xuXG5cdFx0dGhpcy5maWVsZE9wdGlvbnMoW1xuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25GaWVsZC5Gcm9tLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0ZJRUxEX0ZST00nKSB9LFxuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25GaWVsZC5SZWNpcGllbnQsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfRklFTERfUkVDSVBJRU5UUycpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLlN1YmplY3QsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfRklFTERfU1VCSkVDVCcpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLlNpemUsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfRklFTERfU0laRScpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLkhlYWRlciwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9IRUFERVInKSB9XG5cdFx0XSk7XG5cblx0XHR0aGlzLnR5cGVPcHRpb25zKFtcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5Db250YWlucywgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9UWVBFX0NPTlRBSU5TJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5Ob3RDb250YWlucywgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9UWVBFX05PVF9DT05UQUlOUycpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvblR5cGUuRXF1YWxUbywgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9UWVBFX0VRVUFMX1RPJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5Ob3RFcXVhbFRvLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfTk9UX0VRVUFMX1RPJykgfVxuXHRcdF0pO1xuXG5cdFx0aWYgKG1vZHVsZXMgJiYgbW9kdWxlcy5yZWdleCkge1xuXHRcdFx0dGhpcy50eXBlT3B0aW9ucy5wdXNoKHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5SZWdleCwgJ25hbWUnOiAnUmVnZXgnIH0pO1xuXHRcdH1cblxuXHRcdHRoaXMudHlwZU9wdGlvbnNTaXplKFtcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5PdmVyLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfT1ZFUicpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvblR5cGUuVW5kZXIsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfVFlQRV9VTkRFUicpIH1cblx0XHRdKTtcblx0fVxuXG5cdHJlbW92ZUNvbmRpdGlvbihvQ29uZGl0aW9uVG9EZWxldGUpIHtcblx0XHRpZiAodGhpcy5maWx0ZXIoKSkge1xuXHRcdFx0dGhpcy5maWx0ZXIoKS5yZW1vdmVDb25kaXRpb24ob0NvbmRpdGlvblRvRGVsZXRlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMuaXNOZXcodHJ1ZSk7XG5cblx0XHR0aGlzLmZUcnVlQ2FsbGJhY2sgPSBudWxsO1xuXHRcdHRoaXMuZmlsdGVyKG51bGwpO1xuXHR9XG5cblx0b25TaG93KG9GaWx0ZXIsIGZUcnVlQ2FsbGJhY2ssIGJFZGl0KSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHR0aGlzLmZUcnVlQ2FsbGJhY2sgPSBmVHJ1ZUNhbGxiYWNrO1xuXHRcdHRoaXMuZmlsdGVyKG9GaWx0ZXIpO1xuXG5cdFx0aWYgKG9GaWx0ZXIpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXJWYWx1ZShvRmlsdGVyLmFjdGlvblZhbHVlKCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNOZXcoIWJFZGl0KTtcblxuXHRcdGlmICghYkVkaXQgJiYgb0ZpbHRlcikge1xuXHRcdFx0b0ZpbHRlci5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5maWx0ZXIoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5maWx0ZXIoKS5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEZpbHRlclBvcHVwVmlldywgRmlsdGVyUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBxciBmcm9tICdxcic7XG5cbmltcG9ydCB7IENhcGEsIFN0b3JhZ2VSZXN1bHRUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc1R3b0ZhY3RvckNvbmZpZ3VyYXRpb24nXG59KVxuY2xhc3MgVHdvRmFjdG9yQ29uZmlndXJhdGlvblBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5sb2NrID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNhcGFUd29GYWN0b3IgPSBTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yKTtcblxuXHRcdHRoaXMucHJvY2Vzc2luZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2xlYXJpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlY3JldGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy52aWV3VXNlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdvRmFjdG9yU3RhdHVzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnR3b0ZhY3RvclRlc3RlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy52aWV3U2VjcmV0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3QmFja3VwQ29kZXMgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdVcmxUaXRsZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1VybCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy52aWV3RW5hYmxlXyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy52aWV3RW5hYmxlID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGhpcy52aWV3RW5hYmxlXyxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dmFsdWUgPSAhIXZhbHVlO1xuXHRcdFx0XHRpZiAodmFsdWUgJiYgdGhpcy50d29GYWN0b3JUZXN0ZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMudmlld0VuYWJsZV8odmFsdWUpO1xuXHRcdFx0XHRcdFJlbW90ZS5lbmFibGVUd29GYWN0b3IoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgIT09IHJlc3VsdCB8fCAhZGF0YSB8fCAhZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RW5hYmxlXyhmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3RW5hYmxlXyh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0UmVtb3RlLmVuYWJsZVR3b0ZhY3RvcigocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdFbmFibGVfKGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMudmlld1R3b0ZhY3RvckVuYWJsZVRvb2x0aXAgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIHRoaXMudHdvRmFjdG9yVGVzdGVkKCkgfHwgdGhpcy52aWV3RW5hYmxlXygpXG5cdFx0XHRcdD8gJydcblx0XHRcdFx0OiBpMThuKCdQT1BVUFNfVFdPX0ZBQ1RPUl9DRkcvVFdPX0ZBQ1RPUl9TRUNSRVRfVEVTVF9CRUZPUkVfREVTQycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52aWV3VHdvRmFjdG9yU3RhdHVzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBpMThuKFxuXHRcdFx0XHR0aGlzLnR3b0ZhY3RvclN0YXR1cygpXG5cdFx0XHRcdFx0PyAnUE9QVVBTX1RXT19GQUNUT1JfQ0ZHL1RXT19GQUNUT1JfU0VDUkVUX0NPTkZJR1VSRURfREVTQydcblx0XHRcdFx0XHQ6ICdQT1BVUFNfVFdPX0ZBQ1RPUl9DRkcvVFdPX0ZBQ1RPUl9TRUNSRVRfTk9UX0NPTkZJR1VSRURfREVTQydcblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnR3b0ZhY3RvckFsbG93ZWRFbmFibGUgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdFbmFibGUoKSB8fCB0aGlzLnR3b0ZhY3RvclRlc3RlZCgpKTtcblxuXHRcdHRoaXMub25SZXN1bHQgPSBfLmJpbmQodGhpcy5vblJlc3VsdCwgdGhpcyk7XG5cdFx0dGhpcy5vblNob3dTZWNyZXRSZXN1bHQgPSBfLmJpbmQodGhpcy5vblNob3dTZWNyZXRSZXN1bHQsIHRoaXMpO1xuXHR9XG5cblx0c2hvd1NlY3JldCgpIHtcblx0XHR0aGlzLnNlY3JldGluZyh0cnVlKTtcblx0XHRSZW1vdGUuc2hvd1R3b0ZhY3RvclNlY3JldCh0aGlzLm9uU2hvd1NlY3JldFJlc3VsdCk7XG5cdH1cblxuXHRoaWRlU2VjcmV0KCkge1xuXHRcdHRoaXMudmlld1NlY3JldCgnJyk7XG5cdFx0dGhpcy52aWV3QmFja3VwQ29kZXMoJycpO1xuXHRcdHRoaXMudmlld1VybFRpdGxlKCcnKTtcblx0XHR0aGlzLnZpZXdVcmwoJycpO1xuXHR9XG5cblx0Y3JlYXRlVHdvRmFjdG9yKCkge1xuXHRcdHRoaXMucHJvY2Vzc2luZyh0cnVlKTtcblx0XHRSZW1vdGUuY3JlYXRlVHdvRmFjdG9yKHRoaXMub25SZXN1bHQpO1xuXHR9XG5cblx0bG9nb3V0KCkge1xuXHRcdGdldEFwcCgpLmxvZ291dCgpO1xuXHR9XG5cblx0dGVzdFR3b0ZhY3RvcigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Ud29GYWN0b3JUZXN0JyksIFt0aGlzLnR3b0ZhY3RvclRlc3RlZF0pO1xuXHR9XG5cblx0Y2xlYXJUd29GYWN0b3IoKSB7XG5cdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcygnJyk7XG5cdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdHRoaXMudmlld1VybCgnJyk7XG5cblx0XHR0aGlzLnR3b0ZhY3RvclRlc3RlZChmYWxzZSk7XG5cblx0XHR0aGlzLmNsZWFyaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jbGVhclR3b0ZhY3Rvcih0aGlzLm9uUmVzdWx0KTtcblx0fVxuXG5cdG9uU2hvdyhiTG9jaykge1xuXHRcdHRoaXMubG9jayghIWJMb2NrKTtcblxuXHRcdHRoaXMudmlld1NlY3JldCgnJyk7XG5cdFx0dGhpcy52aWV3QmFja3VwQ29kZXMoJycpO1xuXHRcdHRoaXMudmlld1VybFRpdGxlKCcnKTtcblx0XHR0aGlzLnZpZXdVcmwoJycpO1xuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdGlmICh0aGlzLmxvY2soKSkge1xuXHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdH1cblx0fVxuXG5cdGdldFFyKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQnb3RwYXV0aDovL3RvdHAvJyArXG5cdFx0XHR3aW5kb3cuZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudmlld1VzZXIoKSkgK1xuXHRcdFx0Jz9zZWNyZXQ9JyArXG5cdFx0XHR3aW5kb3cuZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudmlld1NlY3JldCgpKSArXG5cdFx0XHQnJmlzc3Vlcj0nICtcblx0XHRcdHdpbmRvdy5lbmNvZGVVUklDb21wb25lbnQoJycpXG5cdFx0KTtcblx0fVxuXG5cdG9uUmVzdWx0KHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0dGhpcy5wcm9jZXNzaW5nKGZhbHNlKTtcblx0XHR0aGlzLmNsZWFyaW5nKGZhbHNlKTtcblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy52aWV3VXNlcihwU3RyaW5nKG9EYXRhLlJlc3VsdC5Vc2VyKSk7XG5cdFx0XHR0aGlzLnZpZXdFbmFibGVfKCEhb0RhdGEuUmVzdWx0LkVuYWJsZSk7XG5cdFx0XHR0aGlzLnR3b0ZhY3RvclN0YXR1cyghIW9EYXRhLlJlc3VsdC5Jc1NldCk7XG5cdFx0XHR0aGlzLnR3b0ZhY3RvclRlc3RlZCghIW9EYXRhLlJlc3VsdC5UZXN0ZWQpO1xuXG5cdFx0XHR0aGlzLnZpZXdTZWNyZXQocFN0cmluZyhvRGF0YS5SZXN1bHQuU2VjcmV0KSk7XG5cdFx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcyhwU3RyaW5nKG9EYXRhLlJlc3VsdC5CYWNrdXBDb2RlcykucmVwbGFjZSgvW1xcc10rL2csICcgICcpKTtcblxuXHRcdFx0dGhpcy52aWV3VXJsVGl0bGUocFN0cmluZyhvRGF0YS5SZXN1bHQuVXJsVGl0bGUpKTtcblx0XHRcdHRoaXMudmlld1VybChxci50b0RhdGFVUkwoeyBsZXZlbDogJ00nLCBzaXplOiA4LCB2YWx1ZTogdGhpcy5nZXRRcigpIH0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52aWV3VXNlcignJyk7XG5cdFx0XHR0aGlzLnZpZXdFbmFibGVfKGZhbHNlKTtcblx0XHRcdHRoaXMudHdvRmFjdG9yU3RhdHVzKGZhbHNlKTtcblx0XHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkKGZhbHNlKTtcblxuXHRcdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHRcdHRoaXMudmlld0JhY2t1cENvZGVzKCcnKTtcblx0XHRcdHRoaXMudmlld1VybFRpdGxlKCcnKTtcblx0XHRcdHRoaXMudmlld1VybCgnJyk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93U2VjcmV0UmVzdWx0KHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMuc2VjcmV0aW5nKGZhbHNlKTtcblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy52aWV3U2VjcmV0KHBTdHJpbmcoZGF0YS5SZXN1bHQuU2VjcmV0KSk7XG5cdFx0XHR0aGlzLnZpZXdVcmxUaXRsZShwU3RyaW5nKGRhdGEuUmVzdWx0LlVybFRpdGxlKSk7XG5cdFx0XHR0aGlzLnZpZXdVcmwocXIudG9EYXRhVVJMKHsgbGV2ZWw6ICdNJywgc2l6ZTogNiwgdmFsdWU6IHRoaXMuZ2V0UXIoKSB9KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudmlld1NlY3JldCgnJyk7XG5cdFx0XHR0aGlzLnZpZXdVcmxUaXRsZSgnJyk7XG5cdFx0XHR0aGlzLnZpZXdVcmwoJycpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKHRoaXMuY2FwYVR3b0ZhY3Rvcikge1xuXHRcdFx0dGhpcy5wcm9jZXNzaW5nKHRydWUpO1xuXHRcdFx0UmVtb3RlLmdldFR3b0ZhY3Rvcih0aGlzLm9uUmVzdWx0KTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgVHdvRmFjdG9yQ29uZmlndXJhdGlvblBvcHVwVmlldywgVHdvRmFjdG9yQ29uZmlndXJhdGlvblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0sIGlzTm9ybWFsIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IEh0bWxFZGl0b3IgfSBmcm9tICdDb21tb24vSHRtbEVkaXRvcic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvVGVtcGxhdGUnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzVGVtcGxhdGUnXG59KVxuY2xhc3MgVGVtcGxhdGVQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWRpdG9yID0gbnVsbDtcblx0XHR0aGlzLnNpZ25hdHVyZURvbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLmlkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5hbWUuZm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYm9keSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYm9keS5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5ib2R5LmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMubmFtZS5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmJvZHkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYm9keS5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpKVxuXHRhZGRUZW1wbGF0ZUNvbW1hbmQoKSB7XG5cdFx0dGhpcy5wb3B1bGF0ZUJvZHlGcm9tRWRpdG9yKCk7XG5cblx0XHR0aGlzLm5hbWUuZXJyb3IoJycgPT09IHRyaW0odGhpcy5uYW1lKCkpKTtcblx0XHR0aGlzLmJvZHkuZXJyb3IoJycgPT09IHRyaW0odGhpcy5ib2R5KCkpIHx8ICc6SFRNTDonID09PSB0cmltKHRoaXMuYm9keSgpKSk7XG5cblx0XHRpZiAodGhpcy5uYW1lLmVycm9yKCkgfHwgdGhpcy5ib2R5LmVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cblx0XHRSZW1vdGUudGVtcGxhdGVTZXR1cChcblx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS50ZW1wbGF0ZXMoKTtcblx0XHRcdFx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuaWQoKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXHRcdFx0dGhpcy5ib2R5KClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMuaWQoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5ib2R5KCcnKTtcblx0XHR0aGlzLmJvZHkubG9hZGluZyhmYWxzZSk7XG5cdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvcignJyk7XG5cblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLnNldFBsYWluKCcnLCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cG9wdWxhdGVCb2R5RnJvbUVkaXRvcigpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuYm9keSh0aGlzLmVkaXRvci5nZXREYXRhV2l0aEh0bWxNYXJrKCkpO1xuXHRcdH1cblx0fVxuXG5cdGVkaXRvclNldEJvZHkoc0JvZHkpIHtcblx0XHRpZiAoIXRoaXMuZWRpdG9yICYmIHRoaXMuc2lnbmF0dXJlRG9tKCkpIHtcblx0XHRcdHRoaXMuZWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoXG5cdFx0XHRcdHRoaXMuc2lnbmF0dXJlRG9tKCksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBvcHVsYXRlQm9keUZyb21FZGl0b3IoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZWRpdG9yLnNldEh0bWxPclBsYWluKHNCb2R5KTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lZGl0b3Iuc2V0SHRtbE9yUGxhaW4oc0JvZHkpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdyh0ZW1wbGF0ZSkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXG5cdFx0aWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlLmlkKSB7XG5cdFx0XHR0aGlzLmlkKHRlbXBsYXRlLmlkKTtcblx0XHRcdHRoaXMubmFtZSh0ZW1wbGF0ZS5uYW1lKTtcblx0XHRcdHRoaXMuYm9keSh0ZW1wbGF0ZS5ib2R5KTtcblxuXHRcdFx0aWYgKHRlbXBsYXRlLnBvcHVsYXRlZCkge1xuXHRcdFx0XHR0aGlzLmVkaXRvclNldEJvZHkodGhpcy5ib2R5KCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ib2R5LmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuYm9keS5lcnJvcihmYWxzZSk7XG5cblx0XHRcdFx0UmVtb3RlLnRlbXBsYXRlR2V0QnlJZCgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ib2R5LmxvYWRpbmcoZmFsc2UpO1xuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmXG5cdFx0XHRcdFx0XHRkYXRhICYmXG5cdFx0XHRcdFx0XHRkYXRhLlJlc3VsdCAmJlxuXHRcdFx0XHRcdFx0J09iamVjdC9UZW1wbGF0ZScgPT09IGRhdGEuUmVzdWx0WydAT2JqZWN0J10gJiZcblx0XHRcdFx0XHRcdGlzTm9ybWFsKGRhdGEuUmVzdWx0LkJvZHkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZS5ib2R5ID0gZGF0YS5SZXN1bHQuQm9keTtcblx0XHRcdFx0XHRcdHRlbXBsYXRlLnBvcHVsYXRlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRcdHRoaXMuYm9keSh0ZW1wbGF0ZS5ib2R5KTtcblx0XHRcdFx0XHRcdHRoaXMuYm9keS5lcnJvcihmYWxzZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYm9keSgnJyk7XG5cdFx0XHRcdFx0XHR0aGlzLmJvZHkuZXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5lZGl0b3JTZXRCb2R5KHRoaXMuYm9keSgpKTtcblx0XHRcdFx0fSwgdGhpcy5pZCgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lZGl0b3JTZXRCb2R5KCcnKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5uYW1lLmZvY3VzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFRlbXBsYXRlUG9wdXBWaWV3LCBUZW1wbGF0ZVBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnRcIik7IiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxNyBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSAmJiBhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLyohIGxvemFkLmpzIC0gdjEuMTQuMCAtIDIwMTktMTAtMTlcbiogaHR0cHM6Ly9naXRodWIuY29tL0Fwb29ydlNheGVuYS9sb3phZC5qc1xuKiBDb3B5cmlnaHQgKGMpIDIwMTkgQXBvb3J2IFNheGVuYTsgTGljZW5zZWQgTUlUICovXG4hZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10fHxzZWxmKS5sb3phZD1lKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtcbi8qKlxuICAgKiBEZXRlY3QgSUUgYnJvd3NlclxuICAgKiBAY29uc3Qge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL3ZhciBkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRNb2RlLGM9e3Jvb3RNYXJnaW46XCIwcHhcIix0aHJlc2hvbGQ6MCxsb2FkOmZ1bmN0aW9uKHQpe2lmKFwicGljdHVyZVwiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO2QmJnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZXNyY1wiKSYmKGUuc3JjPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZXNyY1wiKSksdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFsdFwiKSYmKGUuYWx0PXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hbHRcIikpLHQuYXBwZW5kKGUpfWlmKFwidmlkZW9cIj09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmIXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNcIikmJnQuY2hpbGRyZW4pe2Zvcih2YXIgcj10LmNoaWxkcmVuLGE9dm9pZCAwLG89MDtvPD1yLmxlbmd0aC0xO28rKykoYT1yW29dLmdldEF0dHJpYnV0ZShcImRhdGEtc3JjXCIpKSYmKHJbb10uc3JjPWEpO3QubG9hZCgpfWlmKHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNcIikmJih0LnNyYz10LmdldEF0dHJpYnV0ZShcImRhdGEtc3JjXCIpKSx0LmdldEF0dHJpYnV0ZShcImRhdGEtc3Jjc2V0XCIpJiZ0LnNldEF0dHJpYnV0ZShcInNyY3NldFwiLHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNzZXRcIikpLHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1iYWNrZ3JvdW5kLWltYWdlXCIpKXQuc3R5bGUuYmFja2dyb3VuZEltYWdlPVwidXJsKCdcIit0LmdldEF0dHJpYnV0ZShcImRhdGEtYmFja2dyb3VuZC1pbWFnZVwiKS5zcGxpdChcIixcIikuam9pbihcIicpLHVybCgnXCIpK1wiJylcIjtlbHNlIGlmKHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1iYWNrZ3JvdW5kLWltYWdlLXNldFwiKSl7dmFyIGk9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJhY2tncm91bmQtaW1hZ2Utc2V0XCIpLnNwbGl0KFwiLFwiKSxuPWlbMF0uc3Vic3RyKDAsaVswXS5pbmRleE9mKFwiIFwiKSl8fGlbMF07Ly8gU3Vic3RyaW5nIGJlZm9yZSAuLi4gMXhcbm49LTE9PT1uLmluZGV4T2YoXCJ1cmwoXCIpP1widXJsKFwiK24rXCIpXCI6biwxPT09aS5sZW5ndGg/dC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9bjp0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsKHQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIil8fFwiXCIpK1wiYmFja2dyb3VuZC1pbWFnZTogXCIrbitcIjsgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1pbWFnZS1zZXQoXCIraStcIik7IGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChcIitpK1wiKVwiKX10LmdldEF0dHJpYnV0ZShcImRhdGEtdG9nZ2xlLWNsYXNzXCIpJiZ0LmNsYXNzTGlzdC50b2dnbGUodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZS1jbGFzc1wiKSl9LGxvYWRlZDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIGwodCl7dC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxvYWRlZFwiLCEwKX12YXIgYj1mdW5jdGlvbih0KXtyZXR1cm5cInRydWVcIj09PXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1sb2FkZWRcIil9O3JldHVybiBmdW5jdGlvbigpe3ZhciByLGEsbz0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCIubG96YWRcIix0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxlPU9iamVjdC5hc3NpZ24oe30sYyx0KSxpPWUucm9vdCxuPWUucm9vdE1hcmdpbixkPWUudGhyZXNob2xkLHU9ZS5sb2FkLHM9ZS5sb2FkZWQsZz12b2lkIDA7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyJiYoZz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKHI9dSxhPXMsZnVuY3Rpb24odCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7KDA8dC5pbnRlcnNlY3Rpb25SYXRpb3x8dC5pc0ludGVyc2VjdGluZykmJihlLnVub2JzZXJ2ZSh0LnRhcmdldCksYih0LnRhcmdldCl8fChyKHQudGFyZ2V0KSxsKHQudGFyZ2V0KSxhKHQudGFyZ2V0KSkpfSl9KSx7cm9vdDppLHJvb3RNYXJnaW46bix0aHJlc2hvbGQ6ZH0pKSx7b2JzZXJ2ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgZT0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7cmV0dXJuIHQgaW5zdGFuY2VvZiBFbGVtZW50P1t0XTp0IGluc3RhbmNlb2YgTm9kZUxpc3Q/dDplLnF1ZXJ5U2VsZWN0b3JBbGwodCl9KG8saSksZT0wO2U8dC5sZW5ndGg7ZSsrKWIodFtlXSl8fChnP2cub2JzZXJ2ZSh0W2VdKToodSh0W2VdKSxsKHRbZV0pLHModFtlXSkpKX0sdHJpZ2dlckxvYWQ6ZnVuY3Rpb24odCl7Yih0KXx8KHUodCksbCh0KSxzKHQpKX0sb2JzZXJ2ZXI6Z319fSk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5cbmNsYXNzIENvb2tpZURyaXZlciB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHNldChrZXksIGRhdGEpIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2UsXG5cdFx0XHRzdG9yYWdlUmVzdWx0ID0gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0XHRzdG9yYWdlUmVzdWx0ID0gQ29va2llcy5nZXRKU09OKENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSk7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0KHN0b3JhZ2VSZXN1bHQgfHwgKHN0b3JhZ2VSZXN1bHQgPSB7fSkpW2tleV0gPSBkYXRhO1xuXG5cdFx0dHJ5IHtcblx0XHRcdENvb2tpZXMuc2V0KENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSwgc3RvcmFnZVJlc3VsdCwge1xuXHRcdFx0XHRleHBpcmVzOiAzMFxuXHRcdFx0fSk7XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0Z2V0KGtleSkge1xuXHRcdGxldCByZXN1bHQgPSBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHN0b3JhZ2VSZXN1bHQgPSBDb29raWVzLmdldEpTT04oQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FKTtcblx0XHRcdHJlc3VsdCA9IHN0b3JhZ2VSZXN1bHQgJiYgIWlzVW5kKHN0b3JhZ2VSZXN1bHRba2V5XSkgPyBzdG9yYWdlUmVzdWx0W2tleV0gOiBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgc3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAhISh3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IuY29va2llRW5hYmxlZCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29va2llRHJpdmVyLCBDb29raWVEcml2ZXIgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaXNTdG9yYWdlU3VwcG9ydGVkIH0gZnJvbSAnU3RvcmFnZS9SYWluTG9vcCc7XG5pbXBvcnQgeyBDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuY2xhc3MgTG9jYWxTdG9yYWdlRHJpdmVyIHtcblx0cyA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zID0gd2luZG93LmxvY2FsU3RvcmFnZSB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2V0KGtleSwgZGF0YSkge1xuXHRcdGlmICghdGhpcy5zKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0bGV0IHN0b3JhZ2VSZXN1bHQgPSBudWxsO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdG9yYWdlVmFsdWUgPSB0aGlzLnMuZ2V0SXRlbShDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUpIHx8IG51bGw7XG5cdFx0XHRzdG9yYWdlUmVzdWx0ID0gbnVsbCA9PT0gc3RvcmFnZVZhbHVlID8gbnVsbCA6IHdpbmRvdy5KU09OLnBhcnNlKHN0b3JhZ2VWYWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0KHN0b3JhZ2VSZXN1bHQgfHwgKHN0b3JhZ2VSZXN1bHQgPSB7fSkpW2tleV0gPSBkYXRhO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMucy5zZXRJdGVtKENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSwgd2luZG93LkpTT04uc3RyaW5naWZ5KHN0b3JhZ2VSZXN1bHQpKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0Z2V0KGtleSkge1xuXHRcdGlmICghdGhpcy5zKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc3RvcmFnZVZhbHVlID0gdGhpcy5zLmdldEl0ZW0oQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FKSB8fCBudWxsLFxuXHRcdFx0XHRzdG9yYWdlUmVzdWx0ID0gbnVsbCA9PT0gc3RvcmFnZVZhbHVlID8gbnVsbCA6IHdpbmRvdy5KU09OLnBhcnNlKHN0b3JhZ2VWYWx1ZSk7XG5cblx0XHRcdHJldHVybiBzdG9yYWdlUmVzdWx0ICYmICFpc1VuZChzdG9yYWdlUmVzdWx0W2tleV0pID8gc3RvcmFnZVJlc3VsdFtrZXldIDogbnVsbDtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBzdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuIGlzU3RvcmFnZVN1cHBvcnRlZCgnbG9jYWxTdG9yYWdlJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlRHJpdmVyLCBMb2NhbFN0b3JhZ2VEcml2ZXIgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGb2xkZXJUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzUG9zTnVtZXJpYyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZ2V0Rm9sZGVySW5ib3hOYW1lIH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBGb2xkZXJNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignRm9sZGVyTW9kZWwnKTtcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZnVsbE5hbWUgPSAnJztcblx0XHR0aGlzLmZ1bGxOYW1lUmF3ID0gJyc7XG5cdFx0dGhpcy5mdWxsTmFtZUhhc2ggPSAnJztcblx0XHR0aGlzLmRlbGltaXRlciA9ICcnO1xuXHRcdHRoaXMubmFtZXNwYWNlID0gJyc7XG5cdFx0dGhpcy5kZWVwID0gMDtcblx0XHR0aGlzLmludGVydmFsID0gMDtcblxuXHRcdHRoaXMuc2VsZWN0YWJsZSA9IGZhbHNlO1xuXHRcdHRoaXMuZXhpc3RlbiA9IHRydWU7XG5cblx0XHR0aGlzLnR5cGUgPSBrby5vYnNlcnZhYmxlKEZvbGRlclR5cGUuVXNlcik7XG5cblx0XHR0aGlzLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlbGVjdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5lZGl0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1YlNjcmliZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuY2hlY2thYmxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdWJGb2xkZXJzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWN0aW9uQmxpbmsgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDEwMDAgfSk7XG5cblx0XHR0aGlzLm5hbWVGb3JFZGl0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRBbGwgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudFVucmVhZCA9IGtvLm9ic2VydmFibGUoMCk7XG5cblx0XHR0aGlzLmNvbGxhcHNlZFByaXZhdGUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtBamF4SnNvbkZvbGRlcn0ganNvblxuXHQgKiBAcmV0dXJucyB7P0ZvbGRlck1vZGVsfVxuXHQgKi9cblx0c3RhdGljIG5ld0luc3RhbmNlRnJvbUpzb24oanNvbikge1xuXHRcdGNvbnN0IGZvbGRlciA9IG5ldyBGb2xkZXJNb2RlbCgpO1xuXHRcdHJldHVybiBmb2xkZXIuaW5pdEJ5SnNvbihqc29uKSA/IGZvbGRlci5pbml0Q29tcHV0ZWQoKSA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0ZvbGRlck1vZGVsfVxuXHQgKi9cblx0aW5pdENvbXB1dGVkKCkge1xuXHRcdGNvbnN0IGluYm94Rm9sZGVyTmFtZSA9IGdldEZvbGRlckluYm94TmFtZSgpO1xuXG5cdFx0dGhpcy5pc0luYm94ID0ga28uY29tcHV0ZWQoKCkgPT4gRm9sZGVyVHlwZS5JbmJveCA9PT0gdGhpcy50eXBlKCkpO1xuXG5cdFx0dGhpcy5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0ISFfLmZpbmQoXG5cdFx0XHRcdFx0dGhpcy5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0KG9Gb2xkZXIpID0+IChvRm9sZGVyLnN1YlNjcmliZWQoKSB8fCBvRm9sZGVyLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCkpICYmICFvRm9sZGVyLmlzU3lzdGVtRm9sZGVyKClcblx0XHRcdFx0KVxuXHRcdCk7XG5cblx0XHR0aGlzLmNhbkJlRWRpdGVkID0ga28uY29tcHV0ZWQoKCkgPT4gRm9sZGVyVHlwZS5Vc2VyID09PSB0aGlzLnR5cGUoKSAmJiB0aGlzLmV4aXN0ZW4gJiYgdGhpcy5zZWxlY3RhYmxlKTtcblxuXHRcdHRoaXMudmlzaWJsZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlzU3ViU2NyaWJlZCA9IHRoaXMuc3ViU2NyaWJlZCgpLFxuXHRcdFx0XHRpc1N1YkZvbGRlcnMgPSB0aGlzLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCk7XG5cblx0XHRcdHJldHVybiBpc1N1YlNjcmliZWQgfHwgKGlzU3ViRm9sZGVycyAmJiAoIXRoaXMuZXhpc3RlbiB8fCAhdGhpcy5zZWxlY3RhYmxlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlzU3lzdGVtRm9sZGVyID0ga28uY29tcHV0ZWQoKCkgPT4gRm9sZGVyVHlwZS5Vc2VyICE9PSB0aGlzLnR5cGUoKSk7XG5cblx0XHR0aGlzLmhpZGRlbiA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlzU3lzdGVtID0gdGhpcy5pc1N5c3RlbUZvbGRlcigpLFxuXHRcdFx0XHRpc1N1YkZvbGRlcnMgPSB0aGlzLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCk7XG5cblx0XHRcdHJldHVybiAoaXNTeXN0ZW0gJiYgIWlzU3ViRm9sZGVycykgfHwgKCF0aGlzLnNlbGVjdGFibGUgJiYgIWlzU3ViRm9sZGVycyk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbGVjdGFibGVGb3JGb2xkZXJMaXN0ID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNTeXN0ZW1Gb2xkZXIoKSAmJiB0aGlzLnNlbGVjdGFibGUpO1xuXG5cdFx0dGhpcy5tZXNzYWdlQ291bnRBbGwgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKHtcblx0XHRcdFx0cmVhZDogdGhpcy5wcml2YXRlTWVzc2FnZUNvdW50QWxsLFxuXHRcdFx0XHR3cml0ZTogKGlWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpc1Bvc051bWVyaWMoaVZhbHVlLCB0cnVlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcml2YXRlTWVzc2FnZUNvdW50QWxsKGlWYWx1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudEFsbC52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMubWVzc2FnZUNvdW50VW5yZWFkID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudFVucmVhZCxcblx0XHRcdFx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpc1Bvc051bWVyaWModmFsdWUsIHRydWUpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRVbnJlYWQodmFsdWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRVbnJlYWQudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHR0aGlzLnByaW50YWJsZVVucmVhZENvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY291bnQgPSB0aGlzLm1lc3NhZ2VDb3VudEFsbCgpLFxuXHRcdFx0XHR1bnJlYWQgPSB0aGlzLm1lc3NhZ2VDb3VudFVucmVhZCgpLFxuXHRcdFx0XHR0eXBlID0gdGhpcy50eXBlKCk7XG5cblx0XHRcdGlmICgwIDwgY291bnQpIHtcblx0XHRcdFx0aWYgKEZvbGRlclR5cGUuRHJhZnQgPT09IHR5cGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gJycgKyBjb3VudDtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHQwIDwgdW5yZWFkICYmXG5cdFx0XHRcdFx0Rm9sZGVyVHlwZS5UcmFzaCAhPT0gdHlwZSAmJlxuXHRcdFx0XHRcdEZvbGRlclR5cGUuQXJjaGl2ZSAhPT0gdHlwZSAmJlxuXHRcdFx0XHRcdEZvbGRlclR5cGUuU2VudEl0ZW1zICE9PSB0eXBlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAnJyArIHVucmVhZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlRGVsZXRlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGJTeXN0ZW0gPSB0aGlzLmlzU3lzdGVtRm9sZGVyKCk7XG5cdFx0XHRyZXR1cm4gIWJTeXN0ZW0gJiYgMCA9PT0gdGhpcy5zdWJGb2xkZXJzKCkubGVuZ3RoICYmIGluYm94Rm9sZGVyTmFtZSAhPT0gdGhpcy5mdWxsTmFtZVJhdztcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVTdWJTY3JpYmVkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAhdGhpcy5pc1N5c3RlbUZvbGRlcigpICYmIHRoaXMuc2VsZWN0YWJsZSAmJiBpbmJveEZvbGRlck5hbWUgIT09IHRoaXMuZnVsbE5hbWVSYXdcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5CZUNoZWNrZWQgPSB0aGlzLmNhbkJlU3ViU2NyaWJlZDtcblxuXHRcdHRoaXMubG9jYWxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblxuXHRcdFx0bGV0IG5hbWUgPSB0aGlzLm5hbWUoKTtcblx0XHRcdGNvbnN0IHR5cGUgPSB0aGlzLnR5cGUoKTtcblxuXHRcdFx0aWYgKHRoaXMuaXNTeXN0ZW1Gb2xkZXIoKSkge1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuSW5ib3g6XG5cdFx0XHRcdFx0XHRuYW1lID0gaTE4bignRk9MREVSX0xJU1QvSU5CT1hfTkFNRScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlNlbnRJdGVtczpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9TRU5UX05BTUUnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5EcmFmdDpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9EUkFGVFNfTkFNRScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlNwYW06XG5cdFx0XHRcdFx0XHRuYW1lID0gaTE4bignRk9MREVSX0xJU1QvU1BBTV9OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuVHJhc2g6XG5cdFx0XHRcdFx0XHRuYW1lID0gaTE4bignRk9MREVSX0xJU1QvVFJBU0hfTkFNRScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLkFyY2hpdmU6XG5cdFx0XHRcdFx0XHRuYW1lID0gaTE4bignRk9MREVSX0xJU1QvQVJDSElWRV9OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1hbmFnZUZvbGRlclN5c3RlbU5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXG5cdFx0XHRsZXQgc3VmZml4ID0gJyc7XG5cdFx0XHRjb25zdCB0eXBlID0gdGhpcy50eXBlKCksXG5cdFx0XHRcdG5hbWUgPSB0aGlzLm5hbWUoKTtcblxuXHRcdFx0aWYgKHRoaXMuaXNTeXN0ZW1Gb2xkZXIoKSkge1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuSW5ib3g6XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9JTkJPWF9OQU1FJykgKyAnKSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU2VudEl0ZW1zOlxuXHRcdFx0XHRcdFx0c3VmZml4ID0gJygnICsgaTE4bignRk9MREVSX0xJU1QvU0VOVF9OQU1FJykgKyAnKSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuRHJhZnQ6XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9EUkFGVFNfTkFNRScpICsgJyknO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlNwYW06XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9TUEFNX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5UcmFzaDpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL1RSQVNIX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5BcmNoaXZlOlxuXHRcdFx0XHRcdFx0c3VmZml4ID0gJygnICsgaTE4bignRk9MREVSX0xJU1QvQVJDSElWRV9OQU1FJykgKyAnKSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCgnJyAhPT0gc3VmZml4ICYmICcoJyArIG5hbWUgKyAnKScgPT09IHN1ZmZpeCkgfHwgJyhpbmJveCknID09PSBzdWZmaXgudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRzdWZmaXggPSAnJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHN1ZmZpeDtcblx0XHR9KTtcblxuXHRcdHRoaXMuY29sbGFwc2VkID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogKCkgPT4gIXRoaXMuaGlkZGVuKCkgJiYgdGhpcy5jb2xsYXBzZWRQcml2YXRlKCksXG5cdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMuY29sbGFwc2VkUHJpdmF0ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmhhc1VucmVhZE1lc3NhZ2VzID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMubWVzc2FnZUNvdW50VW5yZWFkKCkgJiYgJycgIT09IHRoaXMucHJpbnRhYmxlVW5yZWFkQ291bnQoKSk7XG5cblx0XHR0aGlzLmhhc1N1YlNjcmliZWRVbnJlYWRNZXNzYWdlc1N1YmZvbGRlcnMgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdCEhXy5maW5kKFxuXHRcdFx0XHRcdHRoaXMuc3ViRm9sZGVycygpLFxuXHRcdFx0XHRcdChmb2xkZXIpID0+IGZvbGRlci5oYXNVbnJlYWRNZXNzYWdlcygpIHx8IGZvbGRlci5oYXNTdWJTY3JpYmVkVW5yZWFkTWVzc2FnZXNTdWJmb2xkZXJzKClcblx0XHRcdFx0KVxuXHRcdCk7XG5cblx0XHQvLyBzdWJzY3JpYmVcblx0XHR0aGlzLm5hbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5uYW1lRm9yRWRpdCh2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmVkaXRlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0dGhpcy5uYW1lRm9yRWRpdCh0aGlzLm5hbWUoKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VDb3VudFVucmVhZC5zdWJzY3JpYmUoKHVucmVhZCkgPT4ge1xuXHRcdFx0aWYgKEZvbGRlclR5cGUuSW5ib3ggPT09IHRoaXMudHlwZSgpKSB7XG5cdFx0XHRcdEV2ZW50cy5wdWIoJ21haWxib3guaW5ib3gtdW5yZWFkLWNvdW50JywgW3VucmVhZF0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGNvbGxhcHNlZENzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpXG5cdFx0XHQ/IHRoaXMuY29sbGFwc2VkKClcblx0XHRcdFx0PyAnaWNvbi1yaWdodC1taW5pIGUtY29sbGFwc2VkLXNpZ24nXG5cdFx0XHRcdDogJ2ljb24tZG93bi1taW5pIGUtY29sbGFwc2VkLXNpZ24nXG5cdFx0XHQ6ICdpY29uLW5vbmUgZS1jb2xsYXBzZWQtc2lnbic7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbkZvbGRlcn0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCBiUmVzdWx0ID0gZmFsc2U7XG5cdFx0Y29uc3Qgc0luYm94Rm9sZGVyTmFtZSA9IGdldEZvbGRlckluYm94TmFtZSgpO1xuXG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9Gb2xkZXInID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHRoaXMubmFtZShqc29uLk5hbWUpO1xuXHRcdFx0dGhpcy5kZWxpbWl0ZXIgPSBqc29uLkRlbGltaXRlcjtcblx0XHRcdHRoaXMuZnVsbE5hbWUgPSBqc29uLkZ1bGxOYW1lO1xuXHRcdFx0dGhpcy5mdWxsTmFtZVJhdyA9IGpzb24uRnVsbE5hbWVSYXc7XG5cdFx0XHR0aGlzLmZ1bGxOYW1lSGFzaCA9IGpzb24uRnVsbE5hbWVIYXNoO1xuXHRcdFx0dGhpcy5kZWVwID0ganNvbi5GdWxsTmFtZVJhdy5zcGxpdCh0aGlzLmRlbGltaXRlcikubGVuZ3RoIC0gMTtcblx0XHRcdHRoaXMuc2VsZWN0YWJsZSA9ICEhanNvbi5Jc1NlbGVjdGFibGU7XG5cdFx0XHR0aGlzLmV4aXN0ZW4gPSAhIWpzb24uSXNFeGlzdHM7XG5cblx0XHRcdHRoaXMuc3ViU2NyaWJlZCghIWpzb24uSXNTdWJzY3JpYmVkKTtcblx0XHRcdHRoaXMuY2hlY2thYmxlKCEhanNvbi5DaGVja2FibGUpO1xuXG5cdFx0XHR0aGlzLnR5cGUoc0luYm94Rm9sZGVyTmFtZSA9PT0gdGhpcy5mdWxsTmFtZVJhdyA/IEZvbGRlclR5cGUuSW5ib3ggOiBGb2xkZXJUeXBlLlVzZXIpO1xuXG5cdFx0XHRiUmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYlJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cHJpbnRhYmxlRnVsbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZnVsbE5hbWUuc3BsaXQodGhpcy5kZWxpbWl0ZXIpLmpvaW4oJyAvICcpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlck1vZGVsLCBGb2xkZXJNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgYWpheCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBtaWNyb3RpbWUsIGlzVW5kLCBpc05vcm1hbCwgcFN0cmluZywgcEludCwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX0FKQVhfVElNRU9VVCwgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIFBsdWdpbnMgZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IEFic3RyYWN0QmFzaWNQcm9taXNlcyB9IGZyb20gJ1Byb21pc2VzL0Fic3RyYWN0QmFzaWMnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhQcm9taXNlcyBleHRlbmRzIEFic3RyYWN0QmFzaWNQcm9taXNlcyB7XG5cdG9SZXF1ZXN0cyA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmNsZWFyKCk7XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0YWJvcnQoc0FjdGlvbiwgYkNsZWFyT25seSkge1xuXHRcdGlmICh0aGlzLm9SZXF1ZXN0c1tzQWN0aW9uXSkge1xuXHRcdFx0aWYgKCFiQ2xlYXJPbmx5ICYmIHRoaXMub1JlcXVlc3RzW3NBY3Rpb25dLmFib3J0KSB7XG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW3NBY3Rpb25dLl9fYWJvcnRlZF9fID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbc0FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbc0FjdGlvbl0gPSBudWxsO1xuXHRcdFx0ZGVsZXRlIHRoaXMub1JlcXVlc3RzW3NBY3Rpb25dO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0YWpheFJlcXVlc3QoYWN0aW9uLCBpc1Bvc3QsIHRpbWVPdXQsIHBhcmFtcywgYWRkaXRpb25hbEdldFN0cmluZywgZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHN0YXJ0ID0gbWljcm90aW1lKCk7XG5cblx0XHRcdHRpbWVPdXQgPSBpc05vcm1hbCh0aW1lT3V0KSA/IHRpbWVPdXQgOiBERUZBVUxUX0FKQVhfVElNRU9VVDtcblx0XHRcdGFkZGl0aW9uYWxHZXRTdHJpbmcgPSBpc1VuZChhZGRpdGlvbmFsR2V0U3RyaW5nKSA/ICcnIDogcFN0cmluZyhhZGRpdGlvbmFsR2V0U3RyaW5nKTtcblxuXHRcdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0XHRwYXJhbXMuWFRva2VuID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3Rva2VuJyk7XG5cdFx0XHR9XG5cblx0XHRcdFBsdWdpbnMucnVuSG9vaygnYWpheC1kZWZhdWx0LXJlcXVlc3QnLCBbYWN0aW9uLCBwYXJhbXMsIGFkZGl0aW9uYWxHZXRTdHJpbmddKTtcblxuXHRcdFx0dGhpcy5zZXRUcmlnZ2VyKGZUcmlnZ2VyLCB0cnVlKTtcblxuXHRcdFx0Y29uc3Qgb0ggPSAkLmFqYXgoe1xuXHRcdFx0XHR0eXBlOiBpc1Bvc3QgPyAnUE9TVCcgOiAnR0VUJyxcblx0XHRcdFx0dXJsOiBhamF4KGFkZGl0aW9uYWxHZXRTdHJpbmcpLFxuXHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0ZGF0YVR5cGU6ICdqc29uJyxcblx0XHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIHx8IHt9IDoge30sXG5cdFx0XHRcdHRpbWVvdXQ6IHRpbWVPdXQsXG5cdFx0XHRcdGdsb2JhbDogdHJ1ZVxuXHRcdFx0fSkuYWx3YXlzKChkYXRhLCB0ZXh0U3RhdHVzKSA9PiB7XG5cdFx0XHRcdGxldCBpc0NhY2hlZCA9IGZhbHNlLFxuXHRcdFx0XHRcdGVycm9yRGF0YSA9IG51bGw7XG5cblx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5UaW1lKSB7XG5cdFx0XHRcdFx0aXNDYWNoZWQgPSBwSW50KGRhdGEuVGltZSkgPiBtaWNyb3RpbWUoKSAtIHN0YXJ0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbihkYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBiYWNrd2FyZCBjYXBhYmlsaXR5XG5cdFx0XHRcdGxldCB0eXBlID0gJyc7XG5cdFx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3N1Y2Nlc3MnID09PSB0ZXh0U3RhdHVzICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgYWN0aW9uID09PSBkYXRhLkFjdGlvbjpcblx0XHRcdFx0XHRcdHR5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnYWJvcnQnID09PSB0ZXh0U3RhdHVzICYmICghZGF0YSB8fCAhZGF0YS5fX2Fib3J0ZWRfXyk6XG5cdFx0XHRcdFx0XHR0eXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuQWJvcnQ7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRQbHVnaW5zLnJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXNwb25zZScsIFtcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gdHlwZSA/IGRhdGEgOiBudWxsLFxuXHRcdFx0XHRcdHR5cGUsXG5cdFx0XHRcdFx0aXNDYWNoZWQsXG5cdFx0XHRcdFx0cGFyYW1zXG5cdFx0XHRcdF0pO1xuXG5cdFx0XHRcdGlmICgnc3VjY2VzcycgPT09IHRleHRTdGF0dXMpIHtcblx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBhY3Rpb24gPT09IGRhdGEuQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRkYXRhLl9fY2FjaGVkX18gPSBpc0NhY2hlZDtcblx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhICYmIGRhdGEuQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRlcnJvckRhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdFx0cmVqZWN0KGRhdGEuRXJyb3JDb2RlID8gZGF0YS5FcnJvckNvZGUgOiBOb3RpZmljYXRpb24uQWpheEZhbHNlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZXJyb3JEYXRhID0gZGF0YTtcblx0XHRcdFx0XHRcdHJlamVjdChOb3RpZmljYXRpb24uQWpheFBhcnNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoJ3RpbWVvdXQnID09PSB0ZXh0U3RhdHVzKSB7XG5cdFx0XHRcdFx0ZXJyb3JEYXRhID0gZGF0YTtcblx0XHRcdFx0XHRyZWplY3QoTm90aWZpY2F0aW9uLkFqYXhUaW1lb3V0KTtcblx0XHRcdFx0fSBlbHNlIGlmICgnYWJvcnQnID09PSB0ZXh0U3RhdHVzKSB7XG5cdFx0XHRcdFx0aWYgKCFkYXRhIHx8ICFkYXRhLl9fYWJvcnRlZF9fKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoTm90aWZpY2F0aW9uLkFqYXhBYm9ydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVycm9yRGF0YSA9IGRhdGE7XG5cdFx0XHRcdFx0cmVqZWN0KE5vdGlmaWNhdGlvbi5BamF4UGFyc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5vUmVxdWVzdHNbYWN0aW9uXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc2V0VHJpZ2dlcihmVHJpZ2dlciwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChlcnJvckRhdGEpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQtMSA8XG5cdFx0XHRcdFx0XHRpbkFycmF5KGVycm9yRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChOb3RpZmljYXRpb24uSW52YWxpZFRva2VuID09PSBlcnJvckRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZXJyb3JEYXRhLkNsZWFyQXV0aCB8fCBlcnJvckRhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5jbGVhckNsaWVudFNpZGVUb2tlbigpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiAhZXJyb3JEYXRhLkNsZWFyQXV0aCAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChvSCkge1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9SZXF1ZXN0c1thY3Rpb25dO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9IO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0UmVxdWVzdChzQWN0aW9uLCBmVHJpZ2dlciwgc0FkZGl0aW9uYWxHZXRTdHJpbmcsIGlUaW1lT3V0KSB7XG5cdFx0c0FkZGl0aW9uYWxHZXRTdHJpbmcgPSBpc1VuZChzQWRkaXRpb25hbEdldFN0cmluZykgPyAnJyA6IHBTdHJpbmcoc0FkZGl0aW9uYWxHZXRTdHJpbmcpO1xuXHRcdHNBZGRpdGlvbmFsR2V0U3RyaW5nID0gc0FjdGlvbiArICcvJyArIHNBZGRpdGlvbmFsR2V0U3RyaW5nO1xuXG5cdFx0cmV0dXJuIHRoaXMuYWpheFJlcXVlc3Qoc0FjdGlvbiwgZmFsc2UsIGlUaW1lT3V0LCBudWxsLCBzQWRkaXRpb25hbEdldFN0cmluZywgZlRyaWdnZXIpO1xuXHR9XG5cblx0cG9zdFJlcXVlc3QoYWN0aW9uLCBmVHJpZ2dlciwgcGFyYW1zLCB0aW1lT3V0KSB7XG5cdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdHBhcmFtcy5BY3Rpb24gPSBhY3Rpb247XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChhY3Rpb24sIHRydWUsIHRpbWVPdXQsIHBhcmFtcywgJycsIGZUcmlnZ2VyKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhQcm9taXNlcywgQWJzdHJhY3RBamF4UHJvbWlzZXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgY2hhbmdlIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBBY2NvdW50TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5CZURlbGV0ZSA9IHRydWVcblx0ICogQHBhcmFtIHtudW1iZXI9fSBjb3VudCA9IDBcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVtYWlsLCBjYW5CZURlbGV0ZSA9IHRydWUsIGNvdW50ID0gMCkge1xuXHRcdHN1cGVyKCdBY2NvdW50TW9kZWwnKTtcblxuXHRcdHRoaXMuZW1haWwgPSBlbWFpbDtcblxuXHRcdHRoaXMuY291bnQgPSBrby5vYnNlcnZhYmxlKGNvdW50KTtcblxuXHRcdHRoaXMuZGVsZXRlQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jYW5CZURlbGV0ZWQgPSBrby5vYnNlcnZhYmxlKCEhY2FuQmVEZWxldGUpO1xuXHRcdHRoaXMuY2FuQmVFZGl0ID0gdGhpcy5jYW5CZURlbGV0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGNoYW5nZUFjY291bnRMaW5rKCkge1xuXHRcdHJldHVybiBjaGFuZ2UodGhpcy5lbWFpbCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWNjb3VudE1vZGVsLCBBY2NvdW50TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBJZGVudGl0eU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihpZCwgZW1haWwpIHtcblx0XHRzdXBlcignSWRlbnRpdHlNb2RlbCcpO1xuXG5cdFx0dGhpcy5pZCA9IGtvLm9ic2VydmFibGUoaWQgfHwgJycpO1xuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKGVtYWlsKTtcblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucmVwbHlUbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYmNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNpZ25hdHVyZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2FuQmVEZWxldGVkID0ga28uY29tcHV0ZWQoKCkgPT4gJycgIT09IHRoaXMuaWQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZvcm1hdHRlZE5hbWUoKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHRoaXMubmFtZSgpLFxuXHRcdFx0ZW1haWwgPSB0aGlzLmVtYWlsKCk7XG5cblx0XHRyZXR1cm4gJycgIT09IG5hbWUgPyBuYW1lICsgJyAoJyArIGVtYWlsICsgJyknIDogZW1haWw7XG5cdH1cbn1cblxuZXhwb3J0IHsgSWRlbnRpdHlNb2RlbCwgSWRlbnRpdHlNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBUZW1wbGF0ZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGJvZHlcblx0ICovXG5cdGNvbnN0cnVjdG9yKGlkLCBuYW1lLCBib2R5KSB7XG5cdFx0c3VwZXIoJ1RlbXBsYXRlTW9kZWwnKTtcblxuXHRcdHRoaXMuaWQgPSBpZDtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMuYm9keSA9IGJvZHk7XG5cdFx0dGhpcy5wb3B1bGF0ZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5kZWxldGVBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHBhcnNlKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9UZW1wbGF0ZScgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5pZCA9IHBTdHJpbmcoanNvbi5JRCk7XG5cdFx0XHR0aGlzLm5hbWUgPSBwU3RyaW5nKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmJvZHkgPSBwU3RyaW5nKGpzb24uQm9keSk7XG5cdFx0XHR0aGlzLnBvcHVsYXRlZCA9ICEhanNvbi5Qb3B1bGF0ZWQ7XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuXG5leHBvcnQgeyBUZW1wbGF0ZU1vZGVsLCBUZW1wbGF0ZU1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgbG9nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcblxuY2xhc3MgT3BlblBncEtleU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaW5kZXhcblx0ICogQHBhcmFtIHtzdHJpbmd9IGd1SURcblx0ICogQHBhcmFtIHtzdHJpbmd9IElEXG5cdCAqIEBwYXJhbSB7YXJyYXl9IElEc1xuXHQgKiBAcGFyYW0ge2FycmF5fSB1c2VySURzXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGVtYWlsc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJpdmF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXJtb3Jcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRFxuXHQgKi9cblx0Y29uc3RydWN0b3IoaW5kZXgsIGd1SUQsIElELCBJRHMsIHVzZXJJRHMsIGVtYWlscywgaXNQcml2YXRlLCBhcm1vciwgdXNlcklEKSB7XG5cdFx0c3VwZXIoJ09wZW5QZ3BLZXlNb2RlbCcpO1xuXG5cdFx0dGhpcy5pbmRleCA9IGluZGV4O1xuXHRcdHRoaXMuaWQgPSBJRDtcblx0XHR0aGlzLmlkcyA9IGlzTm9uRW1wdHlBcnJheShJRHMpID8gSURzIDogW0lEXTtcblx0XHR0aGlzLmd1aWQgPSBndUlEO1xuXHRcdHRoaXMudXNlciA9ICcnO1xuXHRcdHRoaXMudXNlcnMgPSB1c2VySURzO1xuXHRcdHRoaXMuZW1haWwgPSAnJztcblx0XHR0aGlzLmVtYWlscyA9IGVtYWlscztcblx0XHR0aGlzLmFybW9yID0gYXJtb3I7XG5cdFx0dGhpcy5pc1ByaXZhdGUgPSAhIWlzUHJpdmF0ZTtcblxuXHRcdHRoaXMuc2VsZWN0VXNlcih1c2VySUQpO1xuXG5cdFx0dGhpcy5kZWxldGVBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdGdldE5hdGl2ZUtleSgpIHtcblx0XHRsZXQga2V5ID0gbnVsbDtcblx0XHR0cnkge1xuXHRcdFx0a2V5ID0gUGdwU3RvcmUub3BlbnBncC5rZXkucmVhZEFybW9yZWQodGhpcy5hcm1vcik7XG5cdFx0XHRpZiAoa2V5ICYmICFrZXkuZXJyICYmIGtleS5rZXlzICYmIGtleS5rZXlzWzBdKSB7XG5cdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bG9nKGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0TmF0aXZlS2V5cygpIHtcblx0XHRjb25zdCBrZXkgPSB0aGlzLmdldE5hdGl2ZUtleSgpO1xuXHRcdHJldHVybiBrZXkgJiYga2V5LmtleXMgPyBrZXkua2V5cyA6IG51bGw7XG5cdH1cblxuXHRzZWxlY3QocGF0dGVybiwgcHJvcGVydHkpIHtcblx0XHRpZiAodGhpc1twcm9wZXJ0eV0pIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gdGhpc1twcm9wZXJ0eV0uaW5kZXhPZihwYXR0ZXJuKTtcblx0XHRcdGlmICgtMSAhPT0gaW5kZXgpIHtcblx0XHRcdFx0dGhpcy51c2VyID0gdGhpcy51c2Vyc1tpbmRleF07XG5cdFx0XHRcdHRoaXMuZW1haWwgPSB0aGlzLmVtYWlsc1tpbmRleF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2VsZWN0VXNlcih1c2VyKSB7XG5cdFx0dGhpcy5zZWxlY3QodXNlciwgJ3VzZXJzJyk7XG5cdH1cblxuXHRzZWxlY3RFbWFpbChlbWFpbCkge1xuXHRcdHRoaXMuc2VsZWN0KGVtYWlsLCAnZW1haWxzJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgT3BlblBncEtleU1vZGVsLCBPcGVuUGdwS2V5TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmltcG9ydCB7IExvZ2luVXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvTG9naW4nO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuY2xhc3MgTG9naW5Vc2VyU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignbG9naW4nLCBbTG9naW5Vc2VyVmlld10pO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpblVzZXJTY3JlZW4sIExvZ2luVXNlclNjcmVlbiBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7XG5cdExvZ2luU2lnbk1lVHlwZSxcblx0TG9naW5TaWduTWVUeXBlQXNTdHJpbmcsXG5cdENsaWVudFNpZGVLZXlOYW1lLFxuXHRTdG9yYWdlUmVzdWx0VHlwZSxcblx0TWFnaWNzLFxuXHROb3RpZmljYXRpb25cbn0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgdHJpbSwgaW5BcnJheSwgcEludCwgY29udmVydExhbmdOYW1lLCB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyAkd2luIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgc29jaWFsRmFjZWJvb2ssIHNvY2lhbEdvb2dsZSwgc29jaWFsVHdpdHRlciB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24sIGdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZSwgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCAqIGFzIFBsdWdpbnMgZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBMYW5ndWFnZVN0b3JlIGZyb20gJ1N0b3Jlcy9MYW5ndWFnZSc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgTG9jYWwgZnJvbSAnU3RvcmFnZS9DbGllbnQnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgdmlldywgY29tbWFuZCwgVmlld1R5cGUsIHJvdXRlT2ZmLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogWydWaWV3L0FwcC9Mb2dpbicsICdWaWV3L1VzZXIvTG9naW4nXSxcblx0dHlwZTogVmlld1R5cGUuQ2VudGVyLFxuXHR0ZW1wbGF0ZUlEOiAnTG9naW4nXG59KVxuY2xhc3MgTG9naW5Vc2VyVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5oaWRlU3VibWl0QnV0dG9uID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnaGlkZVN1Ym1pdEJ1dHRvbicpO1xuXG5cdFx0dGhpcy53ZWxjb21lID0ga28ub2JzZXJ2YWJsZSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VMb2dpbldlbGNvbWVQYWdlJykpO1xuXG5cdFx0dGhpcy5lbWFpbCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNpZ25NZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiA1MDAgfSk7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZVNpZ25NZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5sb2dvSW1nID0gdHJpbShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTG9naW5Mb2dvJykpO1xuXHRcdHRoaXMubG9naW5EZXNjcmlwdGlvbiA9IHRyaW0oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xvZ2luRGVzY3JpcHRpb24nKSk7XG5cblx0XHR0aGlzLm1vYmlsZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXHRcdHRoaXMubW9iaWxlRGV2aWNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlRGV2aWNlJyk7XG5cblx0XHR0aGlzLmZvcmdvdFBhc3N3b3JkTGlua1VybCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdmb3Jnb3RQYXNzd29yZExpbmtVcmwnKTtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbkxpbmtVcmwgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgncmVnaXN0cmF0aW9uTGlua1VybCcpO1xuXG5cdFx0dGhpcy5lbWFpbEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDUwMCB9KTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDUwMCB9KTtcblxuXHRcdHRoaXMuZm9ybUhpZGRlbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtRXJyb3IgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdHRoaXMuZW1haWxFcnJvckFuaW1hdGlvbigpIHx8XG5cdFx0XHRcdHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbigpIHx8XG5cdFx0XHRcdCh0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkoKSAmJiB0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yQW5pbWF0aW9uKCkpXG5cdFx0KTtcblxuXHRcdHRoaXMuZW1haWxGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5lbWFpbC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5lbWFpbEVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUoJycpO1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3Iuc3Vic2NyaWJlKChiVikgPT4ge1xuXHRcdFx0dGhpcy5lbWFpbEVycm9yQW5pbWF0aW9uKCEhYlYpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYXNzd29yZEVycm9yLnN1YnNjcmliZSgoYlYpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbighIWJWKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3Iuc3Vic2NyaWJlKChiVikgPT4ge1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvckFuaW1hdGlvbighIWJWKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yQWRkaWRpb25hbCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5zdWJtaXRFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoJycgPT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpZGlvbmFsKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luID0gQXBwU3RvcmUuYWxsb3dMYW5ndWFnZXNPbkxvZ2luO1xuXG5cdFx0dGhpcy5sYW5nUmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGFuZ3VhZ2UgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlO1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXM7XG5cblx0XHR0aGlzLmJTZW5kTGFuZ3VhZ2UgPSBmYWxzZTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VGdWxsTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbnZlcnRMYW5nTmFtZSh0aGlzLmxhbmd1YWdlKCkpKTtcblxuXHRcdHRoaXMuc2lnbk1lVHlwZSA9IGtvLm9ic2VydmFibGUoTG9naW5TaWduTWVUeXBlLlVudXNlZCk7XG5cblx0XHR0aGlzLnNpZ25NZVR5cGUuc3Vic2NyaWJlKChpVmFsdWUpID0+IHtcblx0XHRcdHRoaXMuc2lnbk1lKExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T24gPT09IGlWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNpZ25NZVZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiBMb2dpblNpZ25NZVR5cGUuVW51c2VkICE9PSB0aGlzLnNpZ25NZVR5cGUoKSk7XG5cblx0XHR0aGlzLmZhY2Vib29rTG9naW5FbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGVMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZUdtYWlsTG9naW5FbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyTG9naW5FbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNvY2lhbExvZ2luRW5hYmxlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGJGID0gdGhpcy5mYWNlYm9va0xvZ2luRW5hYmxlZCgpLFxuXHRcdFx0XHRiRyA9IHRoaXMuZ29vZ2xlTG9naW5FbmFibGVkKCksXG5cdFx0XHRcdGJUID0gdGhpcy50d2l0dGVyTG9naW5FbmFibGVkKCk7XG5cblx0XHRcdHJldHVybiBiRiB8fCBiRyB8fCBiVDtcblx0XHR9KTtcblxuXHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWRkaXRpb25hbExvZ2luRXJyb3InKSAmJiAhdGhpcy5zdWJtaXRFcnJvcigpKSB7XG5cdFx0XHR0aGlzLnN1Ym1pdEVycm9yKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBZGRpdGlvbmFsTG9naW5FcnJvcicpKTtcblx0XHR9XG5cdH1cblxuXHR3aW5kb3dPcGVuRmVhdHVyZXMod2gpIHtcblx0XHRyZXR1cm4gYGxlZnQ9MjAwLHRvcD0xMDAsd2lkdGg9JHt3aH0saGVpZ2h0PSR7d2h9LG1lbnViYXI9bm8sc3RhdHVzPW5vLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz15ZXNgO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSAmJiBzZWxmLmZhY2Vib29rTG9naW5FbmFibGVkKCkpXG5cdGZhY2Vib29rQ29tbWFuZCgpIHtcblx0XHR3aW5kb3cub3Blbihzb2NpYWxGYWNlYm9vaygpLCAnRmFjZWJvb2snLCB0aGlzLndpbmRvd09wZW5GZWF0dXJlcyg1MDApKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkgJiYgc2VsZi5nb29nbGVMb2dpbkVuYWJsZWQoKSlcblx0Z29vZ2xlQ29tbWFuZCgpIHtcblx0XHR3aW5kb3cub3Blbihzb2NpYWxHb29nbGUoKSwgJ0dvb2dsZScsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDU1MCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSAmJiBzZWxmLmdvb2dsZUdtYWlsTG9naW5FbmFibGVkKCkpXG5cdGdvb2dsZUdtYWlsQ29tbWFuZCgpIHtcblx0XHR3aW5kb3cub3Blbihzb2NpYWxHb29nbGUodHJ1ZSksICdHb29nbGUnLCB0aGlzLndpbmRvd09wZW5GZWF0dXJlcyg1NTApKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkgJiYgc2VsZi50d2l0dGVyTG9naW5FbmFibGVkKCkpXG5cdHR3aXR0ZXJDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbFR3aXR0ZXIoKSwgJ1R3aXR0ZXInLCB0aGlzLndpbmRvd09wZW5GZWF0dXJlcyg1MDApKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdHN1Ym1pdENvbW1hbmQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKCk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IoJycgPT09IHRyaW0odGhpcy5lbWFpbCgpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpKSB7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoJycgPT09IHRyaW0odGhpcy5hZGRpdGlvbmFsQ29kZSgpKSk7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5lbWFpbEVycm9yKCkgfHxcblx0XHRcdHRoaXMucGFzc3dvcmRFcnJvcigpIHx8XG5cdFx0XHQodGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkgJiYgdGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvcigpKVxuXHRcdCkge1xuXHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRcdGNhc2UgdGhpcy5lbWFpbEVycm9yKCk6XG5cdFx0XHRcdFx0dGhpcy5lbWFpbEZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIHRoaXMucGFzc3dvcmRFcnJvcigpOlxuXHRcdFx0XHRcdHRoaXMucGFzc3dvcmRGb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkoKSAmJiB0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKCk6XG5cdFx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5mb2N1c2VkKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgcGx1Z2luUmVzdWx0Q29kZSA9IDAsXG5cdFx0XHRwbHVnaW5SZXN1bHRNZXNzYWdlID0gJyc7XG5cblx0XHRjb25zdCBmU3VibWl0UmVzdWx0ID0gKGlSZXN1bHRDb2RlLCBzUmVzdWx0TWVzc2FnZSkgPT4ge1xuXHRcdFx0cGx1Z2luUmVzdWx0Q29kZSA9IGlSZXN1bHRDb2RlIHx8IDA7XG5cdFx0XHRwbHVnaW5SZXN1bHRNZXNzYWdlID0gc1Jlc3VsdE1lc3NhZ2UgfHwgJyc7XG5cdFx0fTtcblxuXHRcdFBsdWdpbnMucnVuSG9vaygndXNlci1sb2dpbi1zdWJtaXQnLCBbZlN1Ym1pdFJlc3VsdF0pO1xuXHRcdGlmICgwIDwgcGx1Z2luUmVzdWx0Q29kZSkge1xuXHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24ocGx1Z2luUmVzdWx0Q29kZSkpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoJycgIT09IHBsdWdpblJlc3VsdE1lc3NhZ2UpIHtcblx0XHRcdHRoaXMuc3VibWl0RXJyb3IocGx1Z2luUmVzdWx0TWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXG5cdFx0Y29uc3QgZkxvZ2luUmVxdWVzdCA9IChzTG9naW5QYXNzd29yZCkgPT4ge1xuXHRcdFx0UmVtb3RlLmxvZ2luKFxuXHRcdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblx0XHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmFjdGl2YXRlJyk7XG5cblx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAnTG9naW4nID09PSBvRGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9EYXRhLlR3b0ZhY3RvckF1dGgpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlKCcnKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5hZGRpdGlvbmFsQ29kZS5mb2N1c2VkKHRydWUpLCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvRGF0YS5BZG1pbikge1xuXHRcdFx0XHRcdFx0XHRcdGdldEFwcCgpLnJlZGlyZWN0VG9BZG1pblBhbmVsKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9EYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRpZiAoLTEgPCBpbkFycmF5KG9EYXRhLkVycm9yQ29kZSwgW05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudF0pKSB7XG5cdFx0XHRcdFx0XHRcdFx0b0RhdGEuRXJyb3JDb2RlID0gTm90aWZpY2F0aW9uLkF1dGhFcnJvcjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKG9EYXRhKSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCcnID09PSB0aGlzLnN1Ym1pdEVycm9yKCkpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpZGlvbmFsKG9EYXRhLkVycm9yTWVzc2FnZUFkZGl0aW9uYWwpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lbWFpbCgpLFxuXHRcdFx0XHQnJyxcblx0XHRcdFx0c0xvZ2luUGFzc3dvcmQsXG5cdFx0XHRcdCEhdGhpcy5zaWduTWUoKSxcblx0XHRcdFx0dGhpcy5iU2VuZExhbmd1YWdlID8gdGhpcy5sYW5ndWFnZSgpIDogJycsXG5cdFx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpID8gdGhpcy5hZGRpdGlvbmFsQ29kZSgpIDogJycsXG5cdFx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpID8gISF0aGlzLmFkZGl0aW9uYWxDb2RlU2lnbk1lKCkgOiBmYWxzZVxuXHRcdFx0KTtcblxuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkxhc3RTaWduTWUsIHRoaXMuc2lnbk1lKCkgPyAnLTEtJyA6ICctMC0nKTtcblx0XHR9O1xuXG5cdFx0ZkxvZ2luUmVxdWVzdCh0aGlzLnBhc3N3b3JkKCkpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRkaXNwbGF5TWFpbkZvcm0oKSB7XG5cdFx0dGhpcy53ZWxjb21lKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHRyb3V0ZU9mZigpO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICgnJyAhPT0gdGhpcy5lbWFpbCgpICYmICcnICE9PSB0aGlzLnBhc3N3b3JkKCkpIHtcblx0XHRcdHRoaXMucGFzc3dvcmRGb2N1cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKCcnID09PSB0aGlzLmVtYWlsKCkpIHtcblx0XHRcdHRoaXMuZW1haWxGb2N1cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKCcnID09PSB0aGlzLnBhc3N3b3JkKCkpIHtcblx0XHRcdHRoaXMucGFzc3dvcmRGb2N1cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lbWFpbEZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmVtYWlsRm9jdXMoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRGb2N1cyhmYWxzZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGNvbnN0IHNpZ25NZUxvY2FsID0gTG9jYWwuZ2V0KENsaWVudFNpZGVLZXlOYW1lLkxhc3RTaWduTWUpLFxuXHRcdFx0c2lnbk1lID0gKFNldHRpbmdzLnNldHRpbmdzR2V0KCdTaWduTWUnKSB8fCAndW51c2VkJykudG9Mb3dlckNhc2UoKSxcblx0XHRcdGpzSGFzaCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdqc0hhc2gnKSxcblx0XHRcdGZTb2NpYWwgPSAoaUVycm9yQ29kZSkgPT4ge1xuXHRcdFx0XHRpRXJyb3JDb2RlID0gcEludChpRXJyb3JDb2RlKTtcblx0XHRcdFx0aWYgKDAgPT09IGlFcnJvckNvZGUpIHtcblx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cdFx0XHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGlFcnJvckNvZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHRoaXMuZmFjZWJvb2tMb2dpbkVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dGYWNlYm9va1NvY2lhbCcpKTtcblx0XHR0aGlzLnR3aXR0ZXJMb2dpbkVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMuZ29vZ2xlTG9naW5FbmFibGVkKFxuXHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGgnKVxuXHRcdCk7XG5cdFx0dGhpcy5nb29nbGVHbWFpbExvZ2luRW5hYmxlZChcblx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykgJiYgISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoR21haWwnKVxuXHRcdCk7XG5cblx0XHRzd2l0Y2ggKHNpZ25NZSkge1xuXHRcdFx0Y2FzZSBMb2dpblNpZ25NZVR5cGVBc1N0cmluZy5EZWZhdWx0T2ZmOlxuXHRcdFx0Y2FzZSBMb2dpblNpZ25NZVR5cGVBc1N0cmluZy5EZWZhdWx0T246XG5cdFx0XHRcdHRoaXMuc2lnbk1lVHlwZShcblx0XHRcdFx0XHRMb2dpblNpZ25NZVR5cGVBc1N0cmluZy5EZWZhdWx0T24gPT09IHNpZ25NZSA/IExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T24gOiBMb2dpblNpZ25NZVR5cGUuRGVmYXVsdE9mZlxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHN3aXRjaCAoc2lnbk1lTG9jYWwpIHtcblx0XHRcdFx0XHRjYXNlICctMS0nOlxuXHRcdFx0XHRcdFx0dGhpcy5zaWduTWVUeXBlKExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T24pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnLTAtJzpcblx0XHRcdFx0XHRcdHRoaXMuc2lnbk1lVHlwZShMb2dpblNpZ25NZVR5cGUuRGVmYXVsdE9mZik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgTG9naW5TaWduTWVUeXBlQXNTdHJpbmcuVW51c2VkOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5zaWduTWVUeXBlKExvZ2luU2lnbk1lVHlwZS5VbnVzZWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHR0aGlzLmVtYWlsKEFwcFN0b3JlLmRldkVtYWlsKTtcblx0XHR0aGlzLnBhc3N3b3JkKEFwcFN0b3JlLmRldlBhc3N3b3JkKTtcblxuXHRcdGlmICh0aGlzLmdvb2dsZUxvZ2luRW5hYmxlZCgpIHx8IHRoaXMuZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQoKSkge1xuXHRcdFx0d2luZG93WydybF8nICsganNIYXNoICsgJ19nb29nbGVfbG9naW5fc2VydmljZSddID0gZlNvY2lhbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mYWNlYm9va0xvZ2luRW5hYmxlZCgpKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2ZhY2Vib29rX2xvZ2luX3NlcnZpY2UnXSA9IGZTb2NpYWw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHdpdHRlckxvZ2luRW5hYmxlZCgpKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX3R3aXR0ZXJfbG9naW5fc2VydmljZSddID0gZlNvY2lhbDtcblx0XHR9XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdExhbmd1YWdlU3RvcmUubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aGlzLmxhbmdSZXF1ZXN0KHRydWUpO1xuXG5cdFx0XHRcdHRyYW5zbGF0b3JSZWxvYWQoZmFsc2UsIHZhbHVlKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMubGFuZ1JlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5iU2VuZExhbmd1YWdlID0gdHJ1ZTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMubGFuZ1JlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UodHJ1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCkge1xuXHRcdHRoaXMuc3VibWl0Q29tbWFuZCgpO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2UoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyksIFt0aGlzLmxhbmd1YWdlLCB0aGlzLmxhbmd1YWdlcygpLCBMYW5ndWFnZVN0b3JlLnVzZXJMYW5ndWFnZSgpXSk7XG5cdH1cblxuXHRzZWxlY3RMYW5ndWFnZU9uVGFiKGJTaGlmdCkge1xuXHRcdGlmICghYlNoaWZ0KSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5lbWFpbEZvY3VzKHRydWUpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luVXNlclZpZXcsIExvZ2luVXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5cbmltcG9ydCB7IEZvY3VzZWQsIENhcGEsIENsaWVudFNpZGVLZXlOYW1lLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgJGh0bWwsIGxlZnRQYW5lbERpc2FibGVkLCBsZWZ0UGFuZWxUeXBlLCBtb3ZlQWN0aW9uLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgZGVjb2RlVVJJLCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0LCBnZXRGb2xkZXJGdWxsTmFtZVJhdywgZ2V0Rm9sZGVySW5ib3hOYW1lIH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCB7IFN5c3RlbURyb3BEb3duTWFpbEJveFVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL01haWxCb3gvU3lzdGVtRHJvcERvd24nO1xuaW1wb3J0IHsgRm9sZGVyTGlzdE1haWxCb3hVc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9NYWlsQm94L0ZvbGRlckxpc3QnO1xuaW1wb3J0IHsgTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvTWFpbEJveC9NZXNzYWdlTGlzdCc7XG5pbXBvcnQgeyBNZXNzYWdlVmlld01haWxCb3hVc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VWaWV3JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHdhcm1VcFNjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNjcmVlbiB9IGZyb20gJ0tub2luL0Fic3RyYWN0U2NyZWVuJztcblxuY2xhc3MgTWFpbEJveFVzZXJTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdtYWlsYm94JywgW1xuXHRcdFx0U3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcsXG5cdFx0XHRGb2xkZXJMaXN0TWFpbEJveFVzZXJWaWV3LFxuXHRcdFx0TWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXcsXG5cdFx0XHRNZXNzYWdlVmlld01haWxCb3hVc2VyVmlld1xuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0dXBkYXRlV2luZG93VGl0bGUoKSB7XG5cdFx0bGV0IGZvbGRlcnNJbmJveFVucmVhZENvdW50ID0gRm9sZGVyU3RvcmUuZm9sZGVyc0luYm94VW5yZWFkQ291bnQoKTtcblx0XHRjb25zdCBlbWFpbCA9IEFjY291bnRTdG9yZS5lbWFpbCgpO1xuXG5cdFx0aWYgKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsaXN0UGVybWFuZW50RmlsdGVyZWQnKSkge1xuXHRcdFx0Zm9sZGVyc0luYm94VW5yZWFkQ291bnQgPSAwO1xuXHRcdH1cblxuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKFxuXHRcdFx0KCcnID09PSBlbWFpbFxuXHRcdFx0XHQ/ICcnXG5cdFx0XHRcdDogJycgKyAoMCA8IGZvbGRlcnNJbmJveFVucmVhZENvdW50ID8gJygnICsgZm9sZGVyc0luYm94VW5yZWFkQ291bnQgKyAnKSAnIDogJyAnKSArIGVtYWlsICsgJyAtICcpICtcblx0XHRcdFx0aTE4bignVElUTEVTL01BSUxCT1gnKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblNob3coKSB7XG5cdFx0dGhpcy51cGRhdGVXaW5kb3dUaXRsZSgpO1xuXG5cdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTm9uZSk7XG5cdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXG5cdFx0aWYgKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKSkge1xuXHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFTZXR0aW5ncy5jYXBhKENhcGEuRm9sZGVycykpIHtcblx0XHRcdGxlZnRQYW5lbFR5cGUoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSB8fCBTZXR0aW5ncy5jYXBhKENhcGEuQ29udGFjdHMpID8gJ3Nob3J0JyA6ICdub25lJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxlZnRQYW5lbFR5cGUoJycpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVySGFzaFxuXHQgKiBAcGFyYW0ge251bWJlcn0gcGFnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0b25Sb3V0ZShmb2xkZXJIYXNoLCBwYWdlLCBzZWFyY2gpIHtcblx0XHRsZXQgdGhyZWFkVWlkID0gZm9sZGVySGFzaC5yZXBsYWNlKC9eKC4rKX4oW1xcZF0rKSQvLCAnJDInKTtcblx0XHRjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGdldEZvbGRlckZ1bGxOYW1lUmF3KGZvbGRlckhhc2gucmVwbGFjZSgvfihbXFxkXSspJC8sICcnKSkpO1xuXG5cdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0aWYgKGZvbGRlckhhc2ggPT09IHRocmVhZFVpZCkge1xuXHRcdFx0XHR0aHJlYWRVaWQgPSAnJztcblx0XHRcdH1cblxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlcihmb2xkZXIpO1xuXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlKHBhZ2UpO1xuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKHNlYXJjaCk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RUaHJlYWRVaWQodGhyZWFkVWlkKTtcblxuXHRcdFx0Z2V0QXBwKCkucmVsb2FkTWVzc2FnZUxpc3QoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblN0YXJ0KCkge1xuXHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3Quc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblxuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdC5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlLnN1YnNjcmliZSh3aW5kb3dSZXNpemVDYWxsYmFjayk7XG5cblx0XHRfLmRlbGF5KCgpID0+IFNldHRpbmdzU3RvcmUubGF5b3V0LnZhbHVlSGFzTXV0YXRlZCgpLCBNYWdpY3MuVGltZTUwbXMpO1xuXHRcdF8uZGVsYXkoKCkgPT4gd2FybVVwU2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJykpLCBNYWdpY3MuVGltZTUwMG1zKTtcblxuXHRcdEV2ZW50cy5zdWIoJ21haWxib3guaW5ib3gtdW5yZWFkLWNvdW50JywgKGNvdW50KSA9PiB7XG5cdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJzSW5ib3hVbnJlYWRDb3VudChjb3VudCk7XG5cblx0XHRcdGNvbnN0IGVtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCk7XG5cdFx0XHRfLmVhY2goQWNjb3VudFN0b3JlLmFjY291bnRzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIGVtYWlsID09PSBpdGVtLmVtYWlsKSB7XG5cdFx0XHRcdFx0aXRlbS5jb3VudChjb3VudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZVdpbmRvd1RpdGxlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvbkJ1aWxkKCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSAmJiAhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpKSB7XG5cdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0Z2V0QXBwKCkuaW5pdEhvcml6b250YWxMYXlvdXRSZXNpemVyKENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VMaXN0U2l6ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQkaHRtbC5vbignY2xpY2snLCAnI3JsLXJpZ2h0JywgKCkgPT4ge1xuXHRcdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0cm91dGVzKCkge1xuXHRcdGNvbnN0IGluYm94Rm9sZGVyTmFtZSA9IGdldEZvbGRlckluYm94TmFtZSgpLFxuXHRcdFx0Zk5vcm1TID0gKHJlcXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0dmFsc1swXSA9IHBTdHJpbmcodmFsc1swXSk7XG5cdFx0XHRcdHZhbHNbMV0gPSBwSW50KHZhbHNbMV0pO1xuXHRcdFx0XHR2YWxzWzFdID0gMCA+PSB2YWxzWzFdID8gMSA6IHZhbHNbMV07XG5cdFx0XHRcdHZhbHNbMl0gPSBwU3RyaW5nKHZhbHNbMl0pO1xuXG5cdFx0XHRcdGlmICgnJyA9PT0gcmVxdWVzdCkge1xuXHRcdFx0XHRcdHZhbHNbMF0gPSBpbmJveEZvbGRlck5hbWU7XG5cdFx0XHRcdFx0dmFsc1sxXSA9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW2RlY29kZVVSSSh2YWxzWzBdKSwgdmFsc1sxXSwgZGVjb2RlVVJJKHZhbHNbMl0pXTtcblx0XHRcdH0sXG5cdFx0XHRmTm9ybUQgPSAocmVxdWVzdCwgdmFscykgPT4ge1xuXHRcdFx0XHR2YWxzWzBdID0gcFN0cmluZyh2YWxzWzBdKTtcblx0XHRcdFx0dmFsc1sxXSA9IHBTdHJpbmcodmFsc1sxXSk7XG5cblx0XHRcdFx0aWYgKCcnID09PSByZXF1ZXN0KSB7XG5cdFx0XHRcdFx0dmFsc1swXSA9IGluYm94Rm9sZGVyTmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbZGVjb2RlVVJJKHZhbHNbMF0pLCAxLCBkZWNvZGVVUkkodmFsc1sxXSldO1xuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbL14oW2EtekEtWjAtOX5dKylcXC9wKFsxLTldWzAtOV0qKVxcLyguKylcXC8/JC8sIHsgJ25vcm1hbGl6ZV8nOiBmTm9ybVMgfV0sXG5cdFx0XHRbL14oW2EtekEtWjAtOX5dKylcXC9wKFsxLTldWzAtOV0qKSQvLCB7ICdub3JtYWxpemVfJzogZk5vcm1TIH1dLFxuXHRcdFx0Wy9eKFthLXpBLVowLTl+XSspXFwvKC4rKVxcLz8kLywgeyAnbm9ybWFsaXplXyc6IGZOb3JtRCB9XSxcblx0XHRcdFsvXihbXi9dKikkLywgeyAnbm9ybWFsaXplXyc6IGZOb3JtUyB9XVxuXHRcdF07XG5cdH1cbn1cblxuZXhwb3J0IHsgTWFpbEJveFVzZXJTY3JlZW4sIE1haWxCb3hVc2VyU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHZpZXcsIFZpZXdUeXBlIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL0Fic3RyYWN0U3lzdGVtRHJvcERvd24nO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L1VzZXIvTWFpbEJveC9TeXN0ZW1Ecm9wRG93bicsXG5cdHR5cGU6IFZpZXdUeXBlLlJpZ2h0LFxuXHR0ZW1wbGF0ZUlEOiAnU3lzdGVtRHJvcERvd24nXG59KVxuY2xhc3MgU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcge31cblxuZXhwb3J0IHsgU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcsIFN5c3RlbURyb3BEb3duTWFpbEJveFVzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgdHJpbSwgaXNOb3JtYWwsIGlzQXJyYXksIHdpbmRvd1Jlc2l6ZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBDYXBhLCBGb2N1c2VkLCBMYXlvdXQsIEtleVN0YXRlLCBFdmVudEtleUNvZGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkaHRtbCwgbGVmdFBhbmVsRGlzYWJsZWQsIG1vdmVBY3Rpb24gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBtYWlsQm94LCBzZXR0aW5ncyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBzZXRGb2xkZXJIYXNoIH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUsIHNob3dTY3JlZW5Qb3B1cCwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL01haWxCb3gvRm9sZGVyTGlzdCcsXG5cdHR5cGU6IFZpZXdUeXBlLkxlZnQsXG5cdHRlbXBsYXRlSUQ6ICdNYWlsRm9sZGVyTGlzdCdcbn0pXG5jbGFzcyBGb2xkZXJMaXN0TWFpbEJveFVzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9Db250ZW50VmlzaWJsZSA9IG51bGw7XG5cdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUgPSBudWxsO1xuXG5cdFx0dGhpcy5jb21wb3NlSW5FZGl0ID0gQXBwU3RvcmUuY29tcG9zZUluRWRpdDtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3QgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3Q7XG5cdFx0dGhpcy5mb2xkZXJMaXN0ID0gRm9sZGVyU3RvcmUuZm9sZGVyTGlzdDtcblx0XHR0aGlzLmZvbGRlckxpc3RTeXN0ZW0gPSBGb2xkZXJTdG9yZS5mb2xkZXJMaXN0U3lzdGVtO1xuXHRcdHRoaXMuZm9sZGVyc0NoYW5naW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc0NoYW5naW5nO1xuXG5cdFx0dGhpcy5tb3ZlQWN0aW9uID0gbW92ZUFjdGlvbjtcblxuXHRcdHRoaXMuZm9sZGVyc0xpc3RXaXRoU2luZ2xlSW5ib3hSb290Rm9sZGVyID0gRm9sZGVyU3RvcmUuZm9sZGVyc0xpc3RXaXRoU2luZ2xlSW5ib3hSb290Rm9sZGVyO1xuXG5cdFx0dGhpcy5sZWZ0UGFuZWxEaXNhYmxlZCA9IGxlZnRQYW5lbERpc2FibGVkO1xuXG5cdFx0dGhpcy5pRHJvcE92ZXJUaW1lciA9IDA7XG5cblx0XHR0aGlzLmFsbG93Q29tcG9zZXIgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3Nlcik7XG5cdFx0dGhpcy5hbGxvd0NvbnRhY3RzID0gISFBcHBTdG9yZS5jb250YWN0c0lzQWxsb3dlZCgpO1xuXHRcdHRoaXMuYWxsb3dGb2xkZXJzID0gISFTZXR0aW5ncy5jYXBhKENhcGEuRm9sZGVycyk7XG5cblx0XHR0aGlzLmZvbGRlckxpc3RGb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT4gRm9jdXNlZC5Gb2xkZXJMaXN0ID09PSBBcHBTdG9yZS5mb2N1c2VkU3RhdGUoKSk7XG5cblx0XHR0aGlzLmlzSW5ib3hTdGFycmVkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCkgJiZcblx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlcigpLmlzSW5ib3goKSAmJlxuXHRcdFx0XHQtMSA8IHRyaW0oTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCkpLmluZGV4T2YoJ2lzOmZsYWdnZWQnKVxuXHRcdCk7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdHRoaXMub0NvbnRlbnRWaXNpYmxlID0gJCgnLmItY29udGVudCcsIGRvbSk7XG5cdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUgPSAkKCcuY29udGVudCcsIHRoaXMub0NvbnRlbnRWaXNpYmxlKTtcblxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzLFxuXHRcdFx0aXNNb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyksXG5cdFx0XHRmU2VsZWN0Rm9sZGVyID0gKGVsLCBldmVudCwgc3RhcnJlZCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpc01vdmUgPSBtb3ZlQWN0aW9uKCk7XG5cdFx0XHRcdGlmIChpc01vYmlsZSkge1xuXHRcdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRpZiAoc3RhcnJlZCkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZm9sZGVyID0ga28uZGF0YUZvcihlbCk7XG5cdFx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0XHRpZiAoaXNNb3ZlKSB7XG5cdFx0XHRcdFx0XHRtb3ZlQWN0aW9uKGZhbHNlKTtcblx0XHRcdFx0XHRcdGdldEFwcCgpLm1vdmVNZXNzYWdlc1RvRm9sZGVyKFxuXHRcdFx0XHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzKCksXG5cdFx0XHRcdFx0XHRcdGZvbGRlci5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChMYXlvdXQuTm9QcmV2aWV3ID09PSBTZXR0aW5nc1N0b3JlLmxheW91dCgpKSB7XG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlKG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoZm9sZGVyLmZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSkge1xuXHRcdFx0XHRcdFx0XHRzZXRGb2xkZXJIYXNoKGZvbGRlci5mdWxsTmFtZVJhdywgJycpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoc3RhcnJlZCkge1xuXHRcdFx0XHRcdFx0XHRzZXRIYXNoKG1haWxCb3goZm9sZGVyLmZ1bGxOYW1lSGFzaCwgMSwgJ2lzOmZsYWdnZWQnKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZXRIYXNoKG1haWxCb3goZm9sZGVyLmZ1bGxOYW1lSGFzaCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluayAuZS1jb2xsYXBzZWQtc2lnbicsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IGZvbGRlciA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChmb2xkZXIgJiYgZXZlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsYXBzZWQgPSBmb2xkZXIuY29sbGFwc2VkKCk7XG5cdFx0XHRcdFx0Z2V0QXBwKCkuc2V0RXhwYW5kZWRGb2xkZXIoZm9sZGVyLmZ1bGxOYW1lSGFzaCwgY29sbGFwc2VkKTtcblxuXHRcdFx0XHRcdGZvbGRlci5jb2xsYXBzZWQoIWNvbGxhcHNlZCk7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbmsuc2VsZWN0YWJsZSAuaW5ib3gtc3Rhci1pY29uJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0ZlNlbGVjdEZvbGRlcih0aGlzLCBldmVudCwgIXNlbGYuaXNJbmJveFN0YXJyZWQoKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluay5zZWxlY3RhYmxlJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0ZlNlbGVjdEZvbGRlcih0aGlzLCBldmVudCwgZmFsc2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSk7XG5cblx0XHRrZXkoJ3VwLCBkb3duJywgS2V5U3RhdGUuRm9sZGVyTGlzdCwgKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0XHRjb25zdCBrZXlDb2RlID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0ID8gRXZlbnRLZXlDb2RlLlVwIDogRXZlbnRLZXlDb2RlLkRvd24sXG5cdFx0XHRcdCRpdGVtcyA9ICQoJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rOm5vdCguaGlkZGVuKTp2aXNpYmxlJywgZG9tKTtcblxuXHRcdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdFx0bGV0IGluZGV4ID0gJGl0ZW1zLmluZGV4KCRpdGVtcy5maWx0ZXIoJy5mb2N1c2VkJykpO1xuXHRcdFx0XHRpZiAoLTEgPCBpbmRleCkge1xuXHRcdFx0XHRcdCRpdGVtcy5lcShpbmRleCkucmVtb3ZlQ2xhc3MoJ2ZvY3VzZWQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChFdmVudEtleUNvZGUuVXAgPT09IGtleUNvZGUgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdFx0aW5kZXggLT0gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuRG93biA9PT0ga2V5Q29kZSAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0aW5kZXggKz0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCRpdGVtcy5lcShpbmRleCkuYWRkQ2xhc3MoJ2ZvY3VzZWQnKTtcblx0XHRcdFx0c2VsZi5zY3JvbGxUb0ZvY3VzZWQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlbnRlcicsIEtleVN0YXRlLkZvbGRlckxpc3QsICgpID0+IHtcblx0XHRcdGNvbnN0ICRpdGVtcyA9ICQoJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rOm5vdCguaGlkZGVuKS5mb2N1c2VkJywgZG9tKTtcblx0XHRcdGlmICgkaXRlbXMubGVuZ3RoICYmICRpdGVtc1swXSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHRcdCRpdGVtcy5jbGljaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ3NwYWNlJywgS2V5U3RhdGUuRm9sZGVyTGlzdCwgKCkgPT4ge1xuXHRcdFx0Y29uc3QgJGl0ZW1zID0gJCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbms6bm90KC5oaWRkZW4pLmZvY3VzZWQnLCBkb20pO1xuXHRcdFx0aWYgKCRpdGVtcy5sZW5ndGggJiYgJGl0ZW1zWzBdKSB7XG5cdFx0XHRcdGNvbnN0IGZvbGRlciA9IGtvLmRhdGFGb3IoJGl0ZW1zWzBdKTtcblx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxhcHNlZCA9IGZvbGRlci5jb2xsYXBzZWQoKTtcblx0XHRcdFx0XHRnZXRBcHAoKS5zZXRFeHBhbmRlZEZvbGRlcihmb2xkZXIuZnVsbE5hbWVIYXNoLCBjb2xsYXBzZWQpO1xuXHRcdFx0XHRcdGZvbGRlci5jb2xsYXBzZWQoIWNvbGxhcHNlZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MsIHRhYiwgc2hpZnQrdGFiLCByaWdodCcsIEtleVN0YXRlLkZvbGRlckxpc3QsICgpID0+IHtcblx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdCQoJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rLmZvY3VzZWQnLCBkb20pLnJlbW92ZUNsYXNzKCdmb2N1c2VkJyk7XG5cdFx0XHRpZiAoRm9jdXNlZC5Gb2xkZXJMaXN0ID09PSB2YWx1ZSkge1xuXHRcdFx0XHQkKCcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluay5zZWxlY3RlZCcsIGRvbSkuYWRkQ2xhc3MoJ2ZvY3VzZWQnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG1lc3NhZ2VzRHJvcE92ZXIoZm9sZGVyKSB7XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlEcm9wT3ZlclRpbWVyKTtcblx0XHRpZiAoZm9sZGVyICYmIGZvbGRlci5jb2xsYXBzZWQoKSkge1xuXHRcdFx0dGhpcy5pRHJvcE92ZXJUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0Zm9sZGVyLmNvbGxhcHNlZChmYWxzZSk7XG5cdFx0XHRcdGdldEFwcCgpLnNldEV4cGFuZGVkRm9sZGVyKGZvbGRlci5mdWxsTmFtZUhhc2gsIHRydWUpO1xuXHRcdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdG1lc3NhZ2VzRHJvcE91dCgpIHtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaURyb3BPdmVyVGltZXIpO1xuXHR9XG5cblx0c2Nyb2xsVG9Gb2N1c2VkKCkge1xuXHRcdGlmICghdGhpcy5vQ29udGVudFZpc2libGUgfHwgIXRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gMjAsXG5cdFx0XHRmb2N1c2VkID0gJCgnLmUtaXRlbSAuZS1saW5rLmZvY3VzZWQnLCB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSksXG5cdFx0XHRwb3MgPSBmb2N1c2VkLnBvc2l0aW9uKCksXG5cdFx0XHR2aXNpYmxlSGVpZ2h0ID0gdGhpcy5vQ29udGVudFZpc2libGUuaGVpZ2h0KCksXG5cdFx0XHRmb2N1c2VkSGVpZ2h0ID0gZm9jdXNlZC5vdXRlckhlaWdodCgpO1xuXG5cdFx0aWYgKHBvcyAmJiAoMCA+IHBvcy50b3AgfHwgcG9zLnRvcCArIGZvY3VzZWRIZWlnaHQgPiB2aXNpYmxlSGVpZ2h0KSkge1xuXHRcdFx0aWYgKDAgPiBwb3MudG9wKSB7XG5cdFx0XHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcCh0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoKSArIHBvcy50b3AgLSBvZmZzZXQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKFxuXHRcdFx0XHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcCgpICsgcG9zLnRvcCAtIHZpc2libGVIZWlnaHQgKyBmb2N1c2VkSGVpZ2h0ICsgb2Zmc2V0XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0ZvbGRlck1vZGVsfSB0b0ZvbGRlclxuXHQgKiBAcGFyYW0ge3toZWxwZXI6alF1ZXJ5fX0gdWlcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRtZXNzYWdlc0Ryb3AodG9Gb2xkZXIsIHVpKSB7XG5cdFx0aWYgKHRvRm9sZGVyICYmIHVpICYmIHVpLmhlbHBlcikge1xuXHRcdFx0Y29uc3QgZnJvbUZvbGRlckZ1bGxOYW1lUmF3ID0gdWkuaGVscGVyLmRhdGEoJ3JsLWZvbGRlcicpLFxuXHRcdFx0XHRjb3B5ID0gJGh0bWwuaGFzQ2xhc3MoJ3JsLWN0cmwta2V5LXByZXNzZWQnKSxcblx0XHRcdFx0dWlkcyA9IHVpLmhlbHBlci5kYXRhKCdybC11aWRzJyk7XG5cblx0XHRcdGlmIChpc05vcm1hbChmcm9tRm9sZGVyRnVsbE5hbWVSYXcpICYmICcnICE9PSBmcm9tRm9sZGVyRnVsbE5hbWVSYXcgJiYgaXNBcnJheSh1aWRzKSkge1xuXHRcdFx0XHRnZXRBcHAoKS5tb3ZlTWVzc2FnZXNUb0ZvbGRlcihmcm9tRm9sZGVyRnVsbE5hbWVSYXcsIHVpZHMsIHRvRm9sZGVyLmZ1bGxOYW1lUmF3LCBjb3B5KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb21wb3NlQ2xpY2soKSB7XG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3NlcikpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlRm9sZGVyKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlckNyZWF0ZScpKTtcblx0fVxuXG5cdGNvbmZpZ3VyZUZvbGRlcnMoKSB7XG5cdFx0c2V0SGFzaChzZXR0aW5ncygnZm9sZGVycycpKTtcblx0fVxuXG5cdGNvbnRhY3RzQ2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuYWxsb3dDb250YWN0cykge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29udGFjdHMnKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlckxpc3RNYWlsQm94VXNlclZpZXcsIEZvbGRlckxpc3RNYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBDb250YWN0UHJvcGVydHlUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0sIGlzTm9uRW1wdHlBcnJheSwgaXNOb3JtYWwsIHBJbnQsIHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZW1wdHlDb250YWN0UGljIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBDb250YWN0TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ0NvbnRhY3RNb2RlbCcpO1xuXG5cdFx0dGhpcy5pZENvbnRhY3QgPSAwO1xuXHRcdHRoaXMuZGlzcGxheSA9ICcnO1xuXHRcdHRoaXMucHJvcGVydGllcyA9IFtdO1xuXHRcdHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcblxuXHRcdHRoaXMuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNoZWNrZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRlbGV0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl8bnVsbH1cblx0ICovXG5cdGdldE5hbWVBbmRFbWFpbEhlbHBlcigpIHtcblx0XHRsZXQgbmFtZSA9ICcnLFxuXHRcdFx0ZW1haWwgPSAnJztcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkodGhpcy5wcm9wZXJ0aWVzKSkge1xuXHRcdFx0Xy5lYWNoKHRoaXMucHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdGlmIChDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSA9PT0gcHJvcGVydHlbMF0pIHtcblx0XHRcdFx0XHRcdG5hbWUgPSB0cmltKHByb3BlcnR5WzFdICsgJyAnICsgbmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChDb250YWN0UHJvcGVydHlUeXBlLkxhc3ROYW1lID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHRyaW0obmFtZSArICcgJyArIHByb3BlcnR5WzFdKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCcnID09PSBlbWFpbCAmJiBDb250YWN0UHJvcGVydHlUeXBlLkVtYWlsID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0ZW1haWwgPSBwcm9wZXJ0eVsxXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAnJyA9PT0gZW1haWwgPyBudWxsIDogW2VtYWlsLCBuYW1lXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb0l0ZW1cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwYXJzZShqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvQ29udGFjdCcgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5pZENvbnRhY3QgPSBwSW50KGpzb24uSWRDb250YWN0KTtcblx0XHRcdHRoaXMuZGlzcGxheSA9IHBTdHJpbmcoanNvbi5EaXNwbGF5KTtcblx0XHRcdHRoaXMucmVhZE9ubHkgPSAhIWpzb24uUmVhZE9ubHk7XG5cblx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoanNvbi5Qcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRfLmVhY2goanNvbi5Qcm9wZXJ0aWVzLCAocHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuVHlwZSAmJiBpc05vcm1hbChwcm9wZXJ0eS5WYWx1ZSkgJiYgaXNOb3JtYWwocHJvcGVydHkuVHlwZVN0cikpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJvcGVydGllcy5wdXNoKFtwSW50KHByb3BlcnR5LlR5cGUpLCBwU3RyaW5nKHByb3BlcnR5LlZhbHVlKSwgcFN0cmluZyhwcm9wZXJ0eS5UeXBlU3RyKV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0c3JjQXR0cigpIHtcblx0XHRyZXR1cm4gZW1wdHlDb250YWN0UGljKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdlbmVyYXRlVWlkKCkge1xuXHRcdHJldHVybiBwU3RyaW5nKHRoaXMuaWRDb250YWN0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHN0cmluZ1xuXHQgKi9cblx0bGluZUFzQ3NzKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdGlmICh0aGlzLmRlbGV0ZWQoKSkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2RlbGV0ZWQnKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWQoKSkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ3NlbGVjdGVkJyk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNoZWNrZWQoKSkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2NoZWNrZWQnKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZm9jdXNlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnZm9jdXNlZCcpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQuam9pbignICcpO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RNb2RlbCwgQ29udGFjdE1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IEp1YSBmcm9tICdKdWEnO1xuaW1wb3J0IGlmdmlzaWJsZSBmcm9tICdpZnZpc2libGUnO1xuXG5pbXBvcnQge1xuXHRDYXBhLFxuXHRMYXlvdXQsXG5cdEZvY3VzZWQsXG5cdENvbXBvc2VUeXBlLFxuXHRGb2xkZXJUeXBlLFxuXHRNYWdpY3MsXG5cdE1lc3NhZ2VTZXRBY3Rpb24sXG5cdEtleVN0YXRlLFxuXHRTdG9yYWdlUmVzdWx0VHlwZVxufSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5cbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UsIHBvcHVwVmlzaWJpbGl0eSwgbGVmdFBhbmVsRGlzYWJsZWQsIG1vdmVBY3Rpb24gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IG5vb3AsIG5vb3BGYWxzZSwgY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIsIGRyYWdnYWJsZVBsYWNlLCBmcmllbmRseVNpemUsIGluQXJyYXksIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgbWFpbEJveCwgYXBwZW5kIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSAnQ29tbW9uL1NlbGVjdG9yJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgaTE4biwgaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7XG5cdGdldEZvbGRlckZyb21DYWNoZUxpc3QsXG5cdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIsXG5cdGhhc1JlcXVlc3RlZE1lc3NhZ2UsXG5cdGFkZFJlcXVlc3RlZE1lc3NhZ2Vcbn0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgUXVvdGFTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9RdW90YSc7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCBzaG93U2NyZWVuUG9wdXAsIHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbmNvbnN0IGNhbkJlTW92ZWRIZWxwZXIgPSAoc2VsZikgPT4gc2VsZi5jYW5CZU1vdmVkKCk7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VMaXN0Jyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdNYWlsTWVzc2FnZUxpc3QnXG59KVxuY2xhc3MgTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc0xhc3RVaWQgPSBudWxsO1xuXHRcdHRoaXMuYlByZWZldGNoID0gZmFsc2U7XG5cdFx0dGhpcy5lbXB0eVN1YmplY3RWYWx1ZSA9ICcnO1xuXG5cdFx0dGhpcy5pR29Ub1VwVXBPckRvd25Eb3duVGltZW91dCA9IDA7XG5cblx0XHR0aGlzLm1vYmlsZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0gQXBwU3RvcmUubmV3TW92ZVRvRm9sZGVyO1xuXG5cdFx0dGhpcy5hbGxvd1JlbG9hZCA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLlJlbG9hZCk7XG5cdFx0dGhpcy5hbGxvd1NlYXJjaCA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLlNlYXJjaCk7XG5cdFx0dGhpcy5hbGxvd1NlYXJjaEFkdiA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLlNlYXJjaEFkdik7XG5cdFx0dGhpcy5hbGxvd0NvbXBvc2VyID0gISFTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpO1xuXHRcdHRoaXMuYWxsb3dNZXNzYWdlTGlzdEFjdGlvbnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5NZXNzYWdlTGlzdEFjdGlvbnMpO1xuXHRcdHRoaXMuYWxsb3dEYW5nZXJvdXNBY3Rpb25zID0gISFTZXR0aW5ncy5jYXBhKENhcGEuRGFuZ2Vyb3VzQWN0aW9ucyk7XG5cdFx0dGhpcy5hbGxvd0ZvbGRlcnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKTtcblxuXHRcdHRoaXMucG9wdXBWaXNpYmlsaXR5ID0gcG9wdXBWaXNpYmlsaXR5O1xuXG5cdFx0dGhpcy5tZXNzYWdlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2U7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdDtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RGlzYWJsZUF1dG9TZWxlY3QgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3REaXNhYmxlQXV0b1NlbGVjdDtcblxuXHRcdHRoaXMuZm9sZGVyTGlzdCA9IEZvbGRlclN0b3JlLmZvbGRlckxpc3Q7XG5cblx0XHR0aGlzLmNvbXBvc2VJbkVkaXQgPSBBcHBTdG9yZS5jb21wb3NlSW5FZGl0O1xuXHRcdHRoaXMubGVmdFBhbmVsRGlzYWJsZWQgPSBsZWZ0UGFuZWxEaXNhYmxlZDtcblxuXHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQgPSBNZXNzYWdlU3RvcmUuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQ7XG5cdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkID0gTWVzc2FnZVN0b3JlLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQ7XG5cdFx0dGhpcy5pc01lc3NhZ2VTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5pc01lc3NhZ2VTZWxlY3RlZDtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RUaHJlYWRVaWQ7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVycm9yID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0RXJyb3I7XG5cdFx0dGhpcy5mb2xkZXJNZW51Rm9yTW92ZSA9IEZvbGRlclN0b3JlLmZvbGRlck1lbnVGb3JNb3ZlO1xuXG5cdFx0dGhpcy51c2VDaGVja2JveGVzSW5MaXN0ID0gU2V0dGluZ3NTdG9yZS51c2VDaGVja2JveGVzSW5MaXN0O1xuXG5cdFx0dGhpcy5tYWluTWVzc2FnZUxpc3RTZWFyY2ggPSBNZXNzYWdlU3RvcmUubWFpbk1lc3NhZ2VMaXN0U2VhcmNoO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFbmRGb2xkZXI7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZDtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZDtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZDtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZUZvckFuaW1hdGlvbiA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlRm9yQW5pbWF0aW9uO1xuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0dGhpcy5lbXB0eVN1YmplY3RWYWx1ZSA9IGkxOG4oJ01FU1NBR0VfTElTVC9FTVBUWV9TVUJKRUNUX1RFWFQnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMudXNlclF1b3RhID0gUXVvdGFTdG9yZS5xdW90YTtcblx0XHR0aGlzLnVzZXJVc2FnZVNpemUgPSBRdW90YVN0b3JlLnVzYWdlO1xuXHRcdHRoaXMudXNlclVzYWdlUHJvYyA9IFF1b3RhU3RvcmUucGVyY2VudGFnZTtcblxuXHRcdHRoaXMubW92ZURyb3Bkb3duVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubW9yZURyb3Bkb3duVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0Ly8gYXBwZW5kIGRyYWcgYW5kIGRyb3Bcblx0XHR0aGlzLmRyYWdPdmVyID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgJ3Rocm90dGxlJzogMSB9KTtcblx0XHR0aGlzLmRyYWdPdmVyRW50ZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxIH0pO1xuXHRcdHRoaXMuZHJhZ092ZXJBcmVhID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLmRyYWdPdmVyQm9keUFyZWEgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdEl0ZW1UZW1wbGF0ZSA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHR0aGlzLm1vYmlsZSB8fCBMYXlvdXQuU2lkZVByZXZpZXcgPT09IFNldHRpbmdzU3RvcmUubGF5b3V0KClcblx0XHRcdFx0PyAnTWFpbE1lc3NhZ2VMaXN0SXRlbSdcblx0XHRcdFx0OiAnTWFpbE1lc3NhZ2VMaXN0SXRlbU5vUHJldmlld1BhbmUnXG5cdFx0KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2hEZXNjID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFbmRTZWFyY2goKTtcblx0XHRcdHJldHVybiAnJyA9PT0gdmFsdWUgPyAnJyA6IGkxOG4oJ01FU1NBR0VfTElTVC9TRUFSQ0hfUkVTVUxUX0ZPUicsIHsgJ1NFQVJDSCc6IHZhbHVlIH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2VuYXRvciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0Y29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIoTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZSwgTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZUNvdW50KVxuXHRcdCk7XG5cblx0XHR0aGlzLmNoZWNrQWxsID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogKCkgPT4gMCA8IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWQoKS5sZW5ndGgsXG5cdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHZhbHVlID0gISF2YWx1ZTtcblx0XHRcdFx0Xy5lYWNoKE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdCgpLCAobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2UuY2hlY2tlZCh2YWx1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbnB1dE1lc3NhZ2VMaXN0U2VhcmNoRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc0xhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuXHRcdHRoaXMuaW5wdXRQcm94eU1lc3NhZ2VMaXN0U2VhcmNoID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGhpcy5tYWluTWVzc2FnZUxpc3RTZWFyY2gsXG5cdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMuc0xhc3RTZWFyY2hWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc0luY29tcGxldGVDaGVja2VkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdCgpLmxlbmd0aCxcblx0XHRcdFx0YyA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWQoKS5sZW5ndGg7XG5cdFx0XHRyZXR1cm4gMCA8IG0gJiYgMCA8IGMgJiYgbSA+IGM7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmhhc01lc3NhZ2VzID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMubWVzc2FnZUxpc3QoKS5sZW5ndGgpO1xuXG5cdFx0dGhpcy5oYXNDaGVja2VkT3JTZWxlY3RlZExpbmVzID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpLmxlbmd0aCk7XG5cblx0XHR0aGlzLmlzU3BhbUZvbGRlciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpID09PSB0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKCkgJiYgJycgIT09IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmlzU3BhbURpc2FibGVkID0ga28uY29tcHV0ZWQoKCkgPT4gVU5VU0VEX09QVElPTl9WQUxVRSA9PT0gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpKTtcblxuXHRcdHRoaXMuaXNUcmFzaEZvbGRlciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICYmICcnICE9PSBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNEcmFmdEZvbGRlciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICYmICcnICE9PSBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNTZW50Rm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCkgPT09IHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIoKSAmJiAnJyAhPT0gRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNBcmNoaXZlRm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkgPT09IHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIoKSAmJiAnJyAhPT0gRm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNBcmNoaXZlRGlzYWJsZWQgPSBrby5jb21wdXRlZCgoKSA9PiBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkpO1xuXG5cdFx0dGhpcy5pc0FyY2hpdmVWaXNpYmxlID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAhdGhpcy5pc0FyY2hpdmVGb2xkZXIoKSAmJiAhdGhpcy5pc0FyY2hpdmVEaXNhYmxlZCgpICYmICF0aGlzLmlzRHJhZnRGb2xkZXIoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmlzU3BhbVZpc2libGUgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICF0aGlzLmlzU3BhbUZvbGRlcigpICYmICF0aGlzLmlzU3BhbURpc2FibGVkKCkgJiYgIXRoaXMuaXNEcmFmdEZvbGRlcigpICYmICF0aGlzLmlzU2VudEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNVblNwYW1WaXNpYmxlID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiB0aGlzLmlzU3BhbUZvbGRlcigpICYmICF0aGlzLmlzU3BhbURpc2FibGVkKCkgJiYgIXRoaXMuaXNEcmFmdEZvbGRlcigpICYmICF0aGlzLmlzU2VudEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMubW9iaWxlQ2hlY2tlZFN0YXRlU2hvdyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSAwIDwgdGhpcy5tZXNzYWdlTGlzdENoZWNrZWQoKS5sZW5ndGg7XG5cdFx0XHRyZXR1cm4gdGhpcy5tb2JpbGUgPyBjaGVja2VkIDogdHJ1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMubW9iaWxlQ2hlY2tlZFN0YXRlSGlkZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSAwIDwgdGhpcy5tZXNzYWdlTGlzdENoZWNrZWQoKS5sZW5ndGg7XG5cdFx0XHRyZXR1cm4gdGhpcy5tb2JpbGUgPyAhY2hlY2tlZCA6IHRydWU7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0Rm9jdXNlZCA9IGtvLmNvbXB1dGVkKCgpID0+IEZvY3VzZWQuTWVzc2FnZUxpc3QgPT09IEFwcFN0b3JlLmZvY3VzZWRTdGF0ZSgpKTtcblxuXHRcdHRoaXMuY2FuQmVNb3ZlZCA9IHRoaXMuaGFzQ2hlY2tlZE9yU2VsZWN0ZWRMaW5lcztcblxuXHRcdHRoaXMucXVvdGFUb29sdGlwID0gXy5iaW5kKHRoaXMucXVvdGFUb29sdGlwLCB0aGlzKTtcblxuXHRcdHRoaXMuc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IoXG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LFxuXHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCxcblx0XHRcdHRoaXMuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZCxcblx0XHRcdCcubWVzc2FnZUxpc3RJdGVtIC5hY3Rpb25IYW5kbGUnLFxuXHRcdFx0Jy5tZXNzYWdlTGlzdEl0ZW0uc2VsZWN0ZWQnLFxuXHRcdFx0Jy5tZXNzYWdlTGlzdEl0ZW0gLmNoZWNrYm94TWVzc2FnZScsXG5cdFx0XHQnLm1lc3NhZ2VMaXN0SXRlbS5mb2N1c2VkJ1xuXHRcdCk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvbkl0ZW1TZWxlY3QnLCAobWVzc2FnZSkgPT4ge1xuXHRcdFx0TWVzc2FnZVN0b3JlLnNlbGVjdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvbkl0ZW1HZXRVaWQnLCAobWVzc2FnZSkgPT4gKG1lc3NhZ2UgPyBtZXNzYWdlLmdlbmVyYXRlVWlkKCkgOiAnJykpO1xuXG5cdFx0dGhpcy5zZWxlY3Rvci5vbignb25BdXRvU2VsZWN0JywgKCkgPT4gdGhpcy51c2VBdXRvU2VsZWN0KCkpO1xuXG5cdFx0dGhpcy5zZWxlY3Rvci5vbignb25VcFVwT3JEb3duRG93bicsICh2KSA9PiB7XG5cdFx0XHR0aGlzLmdvVG9VcFVwT3JEb3duRG93bih2KTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ21haWxib3gubWVzc2FnZS1saXN0LnNlbGVjdG9yLmdvLWRvd24nLCAoc2VsZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnNlbGVjdG9yLmdvRG93bihzZWxlY3QpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5tZXNzYWdlLWxpc3Quc2VsZWN0b3IuZ28tdXAnLCAoc2VsZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnNlbGVjdG9yLmdvVXAoc2VsZWN0KTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ21haWxib3gubWVzc2FnZS5zaG93JywgKHNGb2xkZXIsIHNVaWQpID0+IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBfLmZpbmQoXG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QoKSxcblx0XHRcdFx0KGl0ZW0pID0+IGl0ZW0gJiYgc0ZvbGRlciA9PT0gaXRlbS5mb2xkZXJGdWxsTmFtZVJhdyAmJiBzVWlkID09PSBpdGVtLnVpZFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKCdJTkJPWCcgPT09IHNGb2xkZXIpIHtcblx0XHRcdFx0c2V0SGFzaChtYWlsQm94KHNGb2xkZXIsIDEpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci5zZWxlY3RNZXNzYWdlSXRlbShtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgnSU5CT1gnICE9PSBzRm9sZGVyKSB7XG5cdFx0XHRcdFx0c2V0SGFzaChtYWlsQm94KHNGb2xkZXIsIDEpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5zZWxlY3RNZXNzYWdlQnlGb2xkZXJBbmRVaWQoc0ZvbGRlciwgc1VpZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFbmRIYXNoLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNlbGVjdG9yLnNjcm9sbFRvVG9wKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGNsZWFyQ29tbWFuZCgpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkRhbmdlcm91c0FjdGlvbnMpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Gb2xkZXJDbGVhcicpLCBbRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlcigpXSk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRyZWxvYWRDb21tYW5kKCkge1xuXHRcdGlmICghTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGVGb3JBbmltYXRpb24oKSAmJiB0aGlzLmFsbG93UmVsb2FkKSB7XG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdChmYWxzZSwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0bXVsdHlGb3J3YXJkQ29tbWFuZCgpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpLCBbXG5cdFx0XHRcdENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQsXG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKClcblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKGNhbkJlTW92ZWRIZWxwZXIpXG5cdGRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCgpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkRhbmdlcm91c0FjdGlvbnMpKSB7XG5cdFx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRcdEZvbGRlclR5cGUuVHJhc2gsXG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0ZGVsZXRlQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLlRyYXNoLFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0YXJjaGl2ZUNvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKFxuXHRcdFx0Rm9sZGVyVHlwZS5BcmNoaXZlLFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0c3BhbUNvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKFxuXHRcdFx0Rm9sZGVyVHlwZS5TcGFtLFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0bm90U3BhbUNvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKFxuXHRcdFx0Rm9sZGVyVHlwZS5Ob3RTcGFtLFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0bW92ZUNvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0bW92ZU5ld0NvbW1hbmQodm0sIGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMubmV3TW92ZVRvRm9sZGVyKCkgJiYgdGhpcy5tb2JpbGVDaGVja2VkU3RhdGVTaG93KCkpIHtcblx0XHRcdGlmICh2bSAmJiBldmVudCAmJiBldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG1vdmVBY3Rpb24oKSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuRm9sZGVyTGlzdCk7XG5cdFx0XHRcdG1vdmVBY3Rpb24odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGlkZUxlZnQoaXRlbSwgZXZlbnQpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdH1cblxuXHRzaG93TGVmdChpdGVtLCBldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdH1cblxuXHRjb21wb3NlQ2xpY2soKSB7XG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3NlcikpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSk7XG5cdFx0fVxuXHR9XG5cblx0Z29Ub1VwVXBPckRvd25Eb3duKHVwKSB7XG5cdFx0aWYgKDAgPCB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pR29Ub1VwVXBPckRvd25Eb3duVGltZW91dCk7XG5cdFx0dGhpcy5pR29Ub1VwVXBPckRvd25Eb3duVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGxldCBwcmV2ID0gbnVsbCxcblx0XHRcdFx0bmV4dCA9IG51bGwsXG5cdFx0XHRcdHRlbXAgPSBudWxsLFxuXHRcdFx0XHRjdXJyZW50ID0gbnVsbDtcblxuXHRcdFx0Xy5maW5kKHRoaXMubWVzc2FnZUxpc3RQYWdlbmF0b3IoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoY3VycmVudCkge1xuXHRcdFx0XHRcdFx0bmV4dCA9IGl0ZW07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGl0ZW0uY3VycmVudCkge1xuXHRcdFx0XHRcdFx0Y3VycmVudCA9IGl0ZW07XG5cdFx0XHRcdFx0XHRwcmV2ID0gdGVtcDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobmV4dCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGVtcCA9IGl0ZW07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKExheW91dC5Ob1ByZXZpZXcgPT09IFNldHRpbmdzU3RvcmUubGF5b3V0KCkgJiYgIXRoaXMubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0b3IuaUZvY3VzZWROZXh0SGVscGVyID0gdXAgPyAtMSA6IDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbGVjdG9yLmlTZWxlY3ROZXh0SGVscGVyID0gdXAgPyAtMSA6IDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh1cCA/IHByZXYgOiBuZXh0KSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0b3IudW5zZWxlY3QoKTtcblx0XHRcdFx0dGhpcy5nb3RvUGFnZSh1cCA/IHByZXYgOiBuZXh0KTtcblx0XHRcdH1cblx0XHR9LCBNYWdpY3MuVGltZTM1MG1zKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dXNlQXV0b1NlbGVjdCgpIHtcblx0XHRpZiAodGhpcy5tZXNzYWdlTGlzdERpc2FibGVBdXRvU2VsZWN0KCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoL2lzOnVuc2Vlbi8udGVzdCh0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCgpKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBMYXlvdXQuTm9QcmV2aWV3ICE9PSBTZXR0aW5nc1N0b3JlLmxheW91dCgpO1xuXHR9XG5cblx0c2VhcmNoRW50ZXJBY3Rpb24oKSB7XG5cdFx0dGhpcy5tYWluTWVzc2FnZUxpc3RTZWFyY2godGhpcy5zTGFzdFNlYXJjaFZhbHVlKTtcblx0XHR0aGlzLmlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyhmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHByaW50YWJsZU1lc3NhZ2VDb3VudEZvckRlbGV0aW9uKCkge1xuXHRcdGNvbnN0IGNudCA9IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKS5sZW5ndGg7XG5cdFx0cmV0dXJuIDEgPCBjbnQgPyAnICgnICsgKDEwMCA+IGNudCA/IGNudCA6ICc5OSsnKSArICcpJyA6ICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcblx0fVxuXG5cdGNhbmNlbFNlYXJjaCgpIHtcblx0XHR0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCgnJyk7XG5cdFx0dGhpcy5pbnB1dE1lc3NhZ2VMaXN0U2VhcmNoRm9jdXMoZmFsc2UpO1xuXHR9XG5cblx0Y2FuY2VsVGhyZWFkVWlkKCkge1xuXHRcdHNldEhhc2goXG5cdFx0XHRtYWlsQm94KFxuXHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoKCksXG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2VCZWZvcmVUaHJlYWQoKSxcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKClcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVG9Gb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJDb3B5XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0bW92ZVNlbGVjdGVkTWVzc2FnZXNUb0ZvbGRlcihzVG9Gb2xkZXJGdWxsTmFtZVJhdywgYkNvcHkpIHtcblx0XHRpZiAodGhpcy5jYW5CZU1vdmVkKCkpIHtcblx0XHRcdGdldEFwcCgpLm1vdmVNZXNzYWdlc1RvRm9sZGVyKFxuXHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzKCksXG5cdFx0XHRcdHNUb0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRiQ29weVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRkcmFnQW5kRHJvbkhlbHBlcihvTWVzc2FnZUxpc3RJdGVtKSB7XG5cdFx0aWYgKG9NZXNzYWdlTGlzdEl0ZW0pIHtcblx0XHRcdG9NZXNzYWdlTGlzdEl0ZW0uY2hlY2tlZCh0cnVlKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbCA9IGRyYWdnYWJsZVBsYWNlKCksXG5cdFx0XHR1cGRhdGVVaWRzSW5mbyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgdWlkcyA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpO1xuXHRcdFx0XHRlbC5kYXRhKCdybC11aWRzJywgdWlkcyk7XG5cdFx0XHRcdGVsLmZpbmQoJy50ZXh0JykudGV4dCgnJyArIHVpZHMubGVuZ3RoKTtcblx0XHRcdH07XG5cblx0XHRlbC5kYXRhKCdybC1mb2xkZXInLCBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSk7XG5cblx0XHR1cGRhdGVVaWRzSW5mbygpO1xuXHRcdF8uZGVmZXIodXBkYXRlVWlkc0luZm8pO1xuXG5cdFx0cmV0dXJuIGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlTZXRBY3Rpb25cblx0ICogQHBhcmFtIHtBcnJheT19IGFNZXNzYWdlcyA9IG51bGxcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBpU2V0QWN0aW9uLCBhTWVzc2FnZXMpIHtcblx0XHRnZXRBcHAoKS5tZXNzYWdlTGlzdEFjdGlvbihzRm9sZGVyRnVsbE5hbWVSYXcsIGlTZXRBY3Rpb24sIGFNZXNzYWdlcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge251bWJlcn0gaVNldEFjdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RocmVhZFVpZCA9ICcnXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0c2V0QWN0aW9uRm9yQWxsKHNGb2xkZXJGdWxsTmFtZVJhdywgaVNldEFjdGlvbiwgc1RocmVhZFVpZCA9ICcnKSB7XG5cdFx0aWYgKCcnICE9PSBzRm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHRcdGxldCBjbnQgPSAwO1xuXHRcdFx0Y29uc3QgdWlkcyA9IFtdO1xuXG5cdFx0XHRsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChzRm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRzd2l0Y2ggKGlTZXRBY3Rpb24pIHtcblx0XHRcdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2Vlbjpcblx0XHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0Xy5lYWNoKE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdCgpLCAobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXNzYWdlLnVuc2VlbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbnQgKz0gMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLnVuc2VlbihmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0dWlkcy5wdXNoKG1lc3NhZ2UudWlkKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHNUaHJlYWRVaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIGNudCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKDAgPiBmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoMCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoMCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2VlblRvQWxsKG5vb3AsIHNGb2xkZXJGdWxsTmFtZVJhdywgdHJ1ZSwgc1RocmVhZFVpZCA/IHVpZHMgOiBudWxsKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5VbnNldFNlZW46XG5cdFx0XHRcdFx0XHRmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRcdF8uZWFjaChNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKSwgKG1lc3NhZ2UpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIW1lc3NhZ2UudW5zZWVuKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNudCArPSAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UudW5zZWVuKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdHVpZHMucHVzaChtZXNzYWdlLnVpZCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChzVGhyZWFkVWlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkgKyBjbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChmb2xkZXIubWVzc2FnZUNvdW50QWxsKCkgPCBmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoZm9sZGVyLm1lc3NhZ2VDb3VudEFsbCgpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChmb2xkZXIubWVzc2FnZUNvdW50QWxsKCkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcihzRm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRSZW1vdGUubWVzc2FnZVNldFNlZW5Ub0FsbChub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGZhbHNlLCBzVGhyZWFkVWlkID8gdWlkcyA6IG51bGwpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bGlzdFNldFNlZW4oKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2Vlbixcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKClcblx0XHQpO1xuXHR9XG5cblx0bGlzdFNldEFsbFNlZW4oKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb25Gb3JBbGwoXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2Vlbixcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQoKVxuXHRcdCk7XG5cdH1cblxuXHRsaXN0VW5zZXRTZWVuKCkge1xuXHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbixcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKClcblx0XHQpO1xuXHR9XG5cblx0bGlzdFNldEZsYWdzKCkge1xuXHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpXG5cdFx0KTtcblx0fVxuXG5cdGxpc3RVbnNldEZsYWdzKCkge1xuXHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRNZXNzYWdlU2V0QWN0aW9uLlVuc2V0RmxhZyxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKClcblx0XHQpO1xuXHR9XG5cblx0ZmxhZ01lc3NhZ2VzKGN1cnJlbnRNZXNzYWdlKSB7XG5cdFx0Y29uc3QgY2hlY2tlZCA9IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpO1xuXHRcdGlmIChjdXJyZW50TWVzc2FnZSkge1xuXHRcdFx0Y29uc3QgY2hlY2tlZFVpZHMgPSBfLm1hcChjaGVja2VkLCAobWVzc2FnZSkgPT4gbWVzc2FnZS51aWQpO1xuXHRcdFx0aWYgKDAgPCBjaGVja2VkVWlkcy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGN1cnJlbnRNZXNzYWdlLnVpZCwgY2hlY2tlZFVpZHMpKSB7XG5cdFx0XHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0XHRcdGN1cnJlbnRNZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdGN1cnJlbnRNZXNzYWdlLmZsYWdnZWQoKSA/IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnIDogTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0XHRcdGN1cnJlbnRNZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdGN1cnJlbnRNZXNzYWdlLmZsYWdnZWQoKSA/IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnIDogTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnLFxuXHRcdFx0XHRcdFtjdXJyZW50TWVzc2FnZV1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmbGFnTWVzc2FnZXNGYXN0KGJGbGFnKSB7XG5cdFx0Y29uc3QgY2hlY2tlZCA9IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpO1xuXHRcdGlmICgwIDwgY2hlY2tlZC5sZW5ndGgpIHtcblx0XHRcdGlmIChpc1VuZChiRmxhZykpIHtcblx0XHRcdFx0Y29uc3QgZmxhZ2dlZCA9IF8uZmlsdGVyKGNoZWNrZWQsIChtZXNzYWdlKSA9PiBtZXNzYWdlLmZsYWdnZWQoKSk7XG5cdFx0XHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0XHRcdGNoZWNrZWRbMF0uZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0Y2hlY2tlZC5sZW5ndGggPT09IGZsYWdnZWQubGVuZ3RoID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0Y2hlY2tlZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y2hlY2tlZFswXS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHQhYkZsYWcgPyBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0RmxhZyA6IE1lc3NhZ2VTZXRBY3Rpb24uU2V0RmxhZyxcblx0XHRcdFx0XHRjaGVja2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2Vlbk1lc3NhZ2VzRmFzdChzZWVuKSB7XG5cdFx0Y29uc3QgY2hlY2tlZCA9IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpO1xuXHRcdGlmICgwIDwgY2hlY2tlZC5sZW5ndGgpIHtcblx0XHRcdGlmIChpc1VuZChzZWVuKSkge1xuXHRcdFx0XHRjb25zdCB1bnNlZW4gPSBfLmZpbHRlcihjaGVja2VkLCAobWVzc2FnZSkgPT4gbWVzc2FnZS51bnNlZW4oKSk7XG5cdFx0XHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0XHRcdGNoZWNrZWRbMF0uZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0MCA8IHVuc2Vlbi5sZW5ndGggPyBNZXNzYWdlU2V0QWN0aW9uLlNldFNlZW4gOiBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbixcblx0XHRcdFx0XHRjaGVja2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEFjdGlvbihcblx0XHRcdFx0XHRjaGVja2VkWzBdLmZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdHNlZW4gPyBNZXNzYWdlU2V0QWN0aW9uLlNldFNlZW4gOiBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbixcblx0XHRcdFx0XHRjaGVja2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z290b1BhZ2UocGFnZSkge1xuXHRcdGlmIChwYWdlKSB7XG5cdFx0XHRzZXRIYXNoKFxuXHRcdFx0XHRtYWlsQm94KFxuXHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0XHRwYWdlLnZhbHVlLFxuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFNlYXJjaCgpLFxuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFRocmVhZFVpZCgpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Z290b1RocmVhZChtZXNzYWdlKSB7XG5cdFx0aWYgKG1lc3NhZ2UgJiYgMCA8IG1lc3NhZ2UudGhyZWFkc0xlbigpKSB7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlQmVmb3JlVGhyZWFkKE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UoKSk7XG5cblx0XHRcdHNldEhhc2gobWFpbEJveChGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoKCksIDEsIE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFNlYXJjaCgpLCBtZXNzYWdlLnVpZCkpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyTGlzdElzVmlzaWJsZSgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0JycgPT09IHRoaXMubWVzc2FnZUxpc3RTZWFyY2hEZXNjKCkgJiZcblx0XHRcdCcnID09PSB0aGlzLm1lc3NhZ2VMaXN0RXJyb3IoKSAmJlxuXHRcdFx0JycgPT09IHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQoKSAmJlxuXHRcdFx0MCA8IHRoaXMubWVzc2FnZUxpc3QoKS5sZW5ndGggJiZcblx0XHRcdCh0aGlzLmlzU3BhbUZvbGRlcigpIHx8IHRoaXMuaXNUcmFzaEZvbGRlcigpKVxuXHRcdCk7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0dGhpcy5vQ29udGVudFZpc2libGUgPSAkKCcuYi1jb250ZW50JywgZG9tKTtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9ICQoJy5jb250ZW50JywgdGhpcy5vQ29udGVudFZpc2libGUpO1xuXG5cdFx0dGhpcy5zZWxlY3Rvci5pbml0KHRoaXMub0NvbnRlbnRWaXNpYmxlLCB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSwgS2V5U3RhdGUuTWVzc2FnZUxpc3QpO1xuXG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcubWVzc2FnZUxpc3QgLmItbWVzc2FnZS1saXN0LXdyYXBwZXInLCAoKSA9PiB7XG5cdFx0XHRcdGlmIChGb2N1c2VkLk1lc3NhZ2VWaWV3ID09PSBBcHBTdG9yZS5mb2N1c2VkU3RhdGUoKSkge1xuXHRcdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmUtcGFnZW5hdG9yIC5lLXBhZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0c2VsZi5nb3RvUGFnZShrby5kYXRhRm9yKHRoaXMpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5tZXNzYWdlTGlzdCAuY2hlY2tib3hDa2Vja0FsbCcsICgpID0+IHtcblx0XHRcdFx0dGhpcy5jaGVja0FsbCghdGhpcy5jaGVja0FsbCgpKTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5tZXNzYWdlTGlzdCAubWVzc2FnZUxpc3RJdGVtIC5mbGFnUGFyZW50JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdHNlbGYuZmxhZ01lc3NhZ2VzKGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5tZXNzYWdlTGlzdEl0ZW0gLnRocmVhZHMtbGVuJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdHNlbGYuZ290b1RocmVhZChrby5kYXRhRm9yKHRoaXMpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdH0pXG5cdFx0XHQub24oJ2RibGNsaWNrJywgJy5tZXNzYWdlTGlzdCAubWVzc2FnZUxpc3RJdGVtIC5hY3Rpb25IYW5kbGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0c2VsZi5nb3RvVGhyZWFkKGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmluaXRVcGxvYWRlckZvckFwcGVuZCgpO1xuXHRcdHRoaXMuaW5pdFNob3J0Y3V0cygpO1xuXG5cdFx0aWYgKCFiTW9iaWxlRGV2aWNlICYmIGlmdmlzaWJsZSAmJiBTZXR0aW5ncy5jYXBhKENhcGEuUHJlZmV0Y2gpKSB7XG5cdFx0XHRpZnZpc2libGUuc2V0SWRsZUR1cmF0aW9uKE1hZ2ljcy5pZnZpc2libGVJZGxlMTBzKTtcblxuXHRcdFx0aWZ2aXNpYmxlLmlkbGUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnByZWZldGNoTmV4dFRpY2soKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGluaXRTaG9ydGN1dHMoKSB7XG5cdFx0a2V5KCdlbnRlcicsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tZXNzYWdlKCkgJiYgdGhpcy51c2VBdXRvU2VsZWN0KCkpIHtcblx0XHRcdFx0RXZlbnRzLnB1YignbWFpbGJveC5tZXNzYWdlLXZpZXcudG9nZ2xlLWZ1bGwtc2NyZWVuJyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VMaXN0QWN0aW9ucykpIHtcblx0XHRcdC8vIGFyY2hpdmUgKHppcClcblx0XHRcdGtleSgneicsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYXJjaGl2ZUNvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIGRlbGV0ZVxuXHRcdFx0a2V5KCdkZWxldGUsIHNoaWZ0K2RlbGV0ZSwgc2hpZnQrMycsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50KSB7XG5cdFx0XHRcdFx0aWYgKDAgPCBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCgpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aWYgKGhhbmRsZXIgJiYgJ3NoaWZ0K2RlbGV0ZScgPT09IGhhbmRsZXIuc2hvcnRjdXQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWxldGVXaXRob3V0TW92ZUNvbW1hbmQoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVsZXRlQ29tbWFuZCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5SZWxvYWQpKSB7XG5cdFx0XHQvLyBjaGVjayBtYWlsXG5cdFx0XHRrZXkoJ2N0cmwrciwgY29tbWFuZCtyJywgW0tleVN0YXRlLkZvbGRlckxpc3QsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWxvYWRDb21tYW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIGNoZWNrIGFsbFxuXHRcdGtleSgnY3RybCthLCBjb21tYW5kK2EnLCBLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgKCkgPT4ge1xuXHRcdFx0dGhpcy5jaGVja0FsbCghKHRoaXMuY2hlY2tBbGwoKSAmJiAhdGhpcy5pc0luY29tcGxldGVDaGVja2VkKCkpKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHQvLyB3cml0ZS9jb21wb3NlIChvcGVuIGNvbXBvc2UgcG9wdXApXG5cdFx0XHRrZXkoJ3csYycsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKSkge1xuXHRcdFx0Ly8gaW1wb3J0YW50IC0gc3Rhci9mbGFnIG1lc3NhZ2VzXG5cdFx0XHRrZXkoJ2knLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmZsYWdNZXNzYWdlc0Zhc3QoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0a2V5KCd0JywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0XSwgKCkgPT4ge1xuXHRcdFx0bGV0IG1lc3NhZ2UgPSB0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkKCk7XG5cdFx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdFx0bWVzc2FnZSA9IHRoaXMuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWVzc2FnZSAmJiAwIDwgbWVzc2FnZS50aHJlYWRzTGVuKCkpIHtcblx0XHRcdFx0dGhpcy5nb3RvVGhyZWFkKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VMaXN0QWN0aW9ucykpIHtcblx0XHRcdC8vIG1vdmVcblx0XHRcdGtleSgnbScsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLm5ld01vdmVUb0ZvbGRlcigpKSB7XG5cdFx0XHRcdFx0dGhpcy5tb3ZlTmV3Q29tbWFuZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMubW92ZURyb3Bkb3duVHJpZ2dlcih0cnVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKSkge1xuXHRcdFx0Ly8gcmVhZFxuXHRcdFx0a2V5KCdxJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0dGhpcy5zZWVuTWVzc2FnZXNGYXN0KHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gdW5yZWFkXG5cdFx0XHRrZXkoJ3UnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNlZW5NZXNzYWdlc0Zhc3QoZmFsc2UpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0a2V5KCdzaGlmdCtmJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0dGhpcy5tdWx0eUZvcndhcmRDb21tYW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoKSkge1xuXHRcdFx0Ly8gc2VhcmNoIGlucHV0IGZvY3VzXG5cdFx0XHRrZXkoJy8nLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyh0cnVlKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY2FuY2VsIHNlYXJjaFxuXHRcdGtleSgnZXNjJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsICgpID0+IHtcblx0XHRcdGlmICgnJyAhPT0gdGhpcy5tZXNzYWdlTGlzdFNlYXJjaERlc2MoKSkge1xuXHRcdFx0XHR0aGlzLmNhbmNlbFNlYXJjaCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCcnICE9PSB0aGlzLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkKCkpIHtcblx0XHRcdFx0dGhpcy5jYW5jZWxUaHJlYWRVaWQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIGNoYW5nZSBmb2N1c2VkIHN0YXRlXG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgbGVmdCwgcmlnaHQnLCBLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgaGFuZGxlciAmJiAoJ3NoaWZ0K3RhYicgPT09IGhhbmRsZXIuc2hvcnRjdXQgfHwgJ2xlZnQnID09PSBoYW5kbGVyLnNob3J0Y3V0KSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5Gb2xkZXJMaXN0KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZVZpZXcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2N0cmwrbGVmdCwgY29tbWFuZCtsZWZ0JywgS2V5U3RhdGUuTWVzc2FnZVZpZXcsIG5vb3BGYWxzZSk7XG5cdFx0a2V5KCdjdHJsK3JpZ2h0LCBjb21tYW5kK3JpZ2h0JywgS2V5U3RhdGUuTWVzc2FnZVZpZXcsIG5vb3BGYWxzZSk7XG5cdH1cblxuXHRwcmVmZXRjaE5leHRUaWNrKCkge1xuXHRcdGlmIChpZnZpc2libGUgJiYgIXRoaXMuYlByZWZldGNoICYmICFpZnZpc2libGUubm93KCkgJiYgdGhpcy52aWV3TW9kZWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBfLmZpbmQoXG5cdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QoKSxcblx0XHRcdFx0KGl0ZW0pID0+IGl0ZW0gJiYgIWhhc1JlcXVlc3RlZE1lc3NhZ2UoaXRlbS5mb2xkZXJGdWxsTmFtZVJhdywgaXRlbS51aWQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0dGhpcy5iUHJlZmV0Y2ggPSB0cnVlO1xuXG5cdFx0XHRcdGFkZFJlcXVlc3RlZE1lc3NhZ2UobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgbWVzc2FnZS51aWQpO1xuXG5cdFx0XHRcdFJlbW90ZS5tZXNzYWdlKFxuXHRcdFx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5leHQgPSAhIShTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCk7XG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5iUHJlZmV0Y2ggPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYgKG5leHQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByZWZldGNoTmV4dFRpY2soKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdG1lc3NhZ2UudWlkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YWR2YW5jZWRTZWFyY2hDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlNlYXJjaEFkdikpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FkdmFuY2VkU2VhcmNoJyksIFt0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCgpXSk7XG5cdFx0fVxuXHR9XG5cblx0cXVvdGFUb29sdGlwKCkge1xuXHRcdHJldHVybiBpMThuKCdNRVNTQUdFX0xJU1QvUVVPVEFfU0laRScsIHtcblx0XHRcdCdTSVpFJzogZnJpZW5kbHlTaXplKHRoaXMudXNlclVzYWdlU2l6ZSgpKSxcblx0XHRcdCdQUk9DJzogdGhpcy51c2VyVXNhZ2VQcm9jKCksXG5cdFx0XHQnTElNSVQnOiBmcmllbmRseVNpemUodGhpcy51c2VyUXVvdGEoKSlcblx0XHR9KTtcblx0fVxuXG5cdGluaXRVcGxvYWRlckZvckFwcGVuZCgpIHtcblx0XHRpZiAoIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0FwcGVuZE1lc3NhZ2UnKSB8fCAhdGhpcy5kcmFnT3ZlckFyZWEoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9KdWEgPSBuZXcgSnVhKHtcblx0XHRcdGFjdGlvbjogYXBwZW5kKCksXG5cdFx0XHRuYW1lOiAnQXBwZW5kRmlsZScsXG5cdFx0XHRxdWV1ZVNpemU6IDEsXG5cdFx0XHRtdWx0aXBsZVNpemVMaW1pdDogMSxcblx0XHRcdGhpZGRlbjoge1xuXHRcdFx0XHRGb2xkZXI6ICgpID0+IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpXG5cdFx0XHR9LFxuXHRcdFx0ZHJhZ0FuZERyb3BFbGVtZW50OiB0aGlzLmRyYWdPdmVyQXJlYSgpLFxuXHRcdFx0ZHJhZ0FuZERyb3BCb2R5RWxlbWVudDogdGhpcy5kcmFnT3ZlckJvZHlBcmVhKClcblx0XHR9KTtcblxuXHRcdHRoaXMuZHJhZ092ZXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0b3Iuc2Nyb2xsVG9Ub3AoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdG9KdWFcblx0XHRcdC5vbignb25EcmFnRW50ZXInLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXJFbnRlcih0cnVlKTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ29uRHJhZ0xlYXZlJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmRyYWdPdmVyRW50ZXIoZmFsc2UpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25Cb2R5RHJhZ0VudGVyJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmRyYWdPdmVyKHRydWUpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25Cb2R5RHJhZ0xlYXZlJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmRyYWdPdmVyKGZhbHNlKTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ29uU2VsZWN0JywgKHNVaWQsIG9EYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChzVWlkICYmIG9EYXRhICYmICdtZXNzYWdlL3JmYzgyMicgPT09IG9EYXRhLlR5cGUpIHtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKHRydWUpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25Db21wbGV0ZScsICgpID0+IHtcblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkTWVzc2FnZUxpc3QodHJ1ZSwgdHJ1ZSk7XG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiAhIW9KdWE7XG5cdH1cbn1cblxuZXhwb3J0IHsgTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXcsIE1lc3NhZ2VMaXN0TWFpbEJveFVzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQywgVU5VU0VEX09QVElPTl9WQUxVRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuXG5pbXBvcnQge1xuXHRDYXBhLFxuXHRDb21wb3NlVHlwZSxcblx0Q2xpZW50U2lkZUtleU5hbWUsXG5cdEtleVN0YXRlLFxuXHRGb2xkZXJUeXBlLFxuXHRGb2N1c2VkLFxuXHRMYXlvdXQsXG5cdE1hZ2ljcyxcblx0TWVzc2FnZVNldEFjdGlvblxufSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyAkaHRtbCwgbGVmdFBhbmVsRGlzYWJsZWQsIGtleVNjb3BlUmVhbCwgdXNlS2V5Ym9hcmRTaG9ydGN1dHMsIG1vdmVBY3Rpb24gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7XG5cdGluQXJyYXksXG5cdGlzQXJyYXksXG5cdGlzTm9uRW1wdHlBcnJheSxcblx0dHJpbSxcblx0bm9vcCxcblx0d2luZG93UmVzaXplLFxuXHR3aW5kb3dSZXNpemVDYWxsYmFjayxcblx0aW5Gb2N1cyxcblx0cmVtb3ZlU2VsZWN0aW9uLFxuXHRyZW1vdmVJbkZvY3VzLFxuXHRtYWlsVG9IZWxwZXIsXG5cdGlzVHJhbnNwYXJlbnRcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IEF1ZGlvIGZyb20gJ0NvbW1vbi9BdWRpbyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5cbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBhdHRhY2htZW50RG93bmxvYWQgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBnZXRVc2VyUGljLCBzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCAqIGFzIExvY2FsIGZyb20gJ1N0b3JhZ2UvQ2xpZW50JztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuaW1wb3J0IFByb21pc2VzIGZyb20gJ1Byb21pc2VzL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyB2aWV3LCBjb21tYW5kLCBWaWV3VHlwZSwgc2hvd1NjcmVlblBvcHVwLCBjcmVhdGVDb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L1VzZXIvTWFpbEJveC9NZXNzYWdlVmlldycsXG5cdHR5cGU6IFZpZXdUeXBlLlJpZ2h0LFxuXHR0ZW1wbGF0ZUlEOiAnTWFpbE1lc3NhZ2VWaWV3J1xufSlcbmNsYXNzIE1lc3NhZ2VWaWV3TWFpbEJveFVzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRsZXQgbGFzdEVtYWlsID0gJyc7XG5cblx0XHRjb25zdCBjcmVhdGVDb21tYW5kUmVwbHlIZWxwZXIgPSAodHlwZSkgPT5cblx0XHRcdGNyZWF0ZUNvbW1hbmQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbih0eXBlKTtcblx0XHRcdFx0dGhpcy5yZXBseU9yZm9yd2FyZCh0eXBlKTtcblx0XHRcdH0sIHRoaXMuY2FuQmVSZXBsaWVkT3JGb3J3YXJkZWQpO1xuXG5cdFx0Y29uc3QgY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlciA9IChmb2xkZXJUeXBlLCB1c2VGb2xkZXIpID0+XG5cdFx0XHRjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXHRcdFx0XHRpZiAobWVzc2FnZSAmJiB0aGlzLmFsbG93TWVzc2FnZUxpc3RBY3Rpb25zKSB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdFx0XHRcdGdldEFwcCgpLmRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcihmb2xkZXJUeXBlLCBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBbbWVzc2FnZS51aWRdLCB1c2VGb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzLm1lc3NhZ2VWaXNpYmlsaXR5KTtcblxuXHRcdHRoaXMub0RvbSA9IG51bGw7XG5cdFx0dGhpcy5vSGVhZGVyRG9tID0gbnVsbDtcblx0XHR0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20gPSBudWxsO1xuXG5cdFx0dGhpcy5ib2R5QmFja2dyb3VuZENvbG9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnBzd3AgPSBudWxsO1xuXG5cdFx0dGhpcy5tb3ZlQWN0aW9uID0gbW92ZUFjdGlvbjtcblxuXHRcdHRoaXMuYWxsb3dDb21wb3NlciA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKTtcblx0XHR0aGlzLmFsbG93TWVzc2FnZUFjdGlvbnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5NZXNzYWdlQWN0aW9ucyk7XG5cdFx0dGhpcy5hbGxvd01lc3NhZ2VMaXN0QWN0aW9ucyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VMaXN0QWN0aW9ucyk7XG5cblx0XHR0aGlzLmxvZ29JbWcgPSB0cmltKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTG9nb01lc3NhZ2UnKSk7XG5cdFx0dGhpcy5sb2dvSWZyYW1lID0gdHJpbShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlcklmcmFtZU1lc3NhZ2UnKSk7XG5cblx0XHR0aGlzLm1vYmlsZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0FjdGlvbnMgPSBBcHBTdG9yZS5hdHRhY2htZW50c0FjdGlvbnM7XG5cblx0XHR0aGlzLm1lc3NhZ2UgPSBNZXNzYWdlU3RvcmUubWVzc2FnZTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWQ7XG5cdFx0dGhpcy5oYXNDaGVja2VkTWVzc2FnZXMgPSBNZXNzYWdlU3RvcmUuaGFzQ2hlY2tlZE1lc3NhZ2VzO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHM7XG5cdFx0dGhpcy5tZXNzYWdlTG9hZGluZ1Rocm90dGxlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGU7XG5cdFx0dGhpcy5tZXNzYWdlc0JvZGllc0RvbSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlc0JvZGllc0RvbTtcblx0XHR0aGlzLnVzZVRocmVhZHMgPSBTZXR0aW5nc1N0b3JlLnVzZVRocmVhZHM7XG5cdFx0dGhpcy5yZXBseVNhbWVGb2xkZXIgPSBTZXR0aW5nc1N0b3JlLnJlcGx5U2FtZUZvbGRlcjtcblx0XHR0aGlzLmxheW91dCA9IFNldHRpbmdzU3RvcmUubGF5b3V0O1xuXHRcdHRoaXMudXNlUHJldmlld1BhbmUgPSBTZXR0aW5nc1N0b3JlLnVzZVByZXZpZXdQYW5lO1xuXHRcdHRoaXMuaXNNZXNzYWdlU2VsZWN0ZWQgPSBNZXNzYWdlU3RvcmUuaXNNZXNzYWdlU2VsZWN0ZWQ7XG5cdFx0dGhpcy5tZXNzYWdlQWN0aXZlRG9tID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VBY3RpdmVEb207XG5cdFx0dGhpcy5tZXNzYWdlRXJyb3IgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUVycm9yO1xuXG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlRnVsbFNjcmVlbk1vZGU7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0T2ZUaHJlYWRzTG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMSB9KTtcblx0XHR0aGlzLmhpZ2hsaWdodFVuc2VsZWN0ZWRBdHRhY2htZW50cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwMCB9KTtcblxuXHRcdHRoaXMuc2hvd0F0dGFjaG1uZXRDb250cm9scyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzU3RhdGUgPSAodikgPT4ge1xuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMsICEhdik7XG5cdFx0fTtcblxuXHRcdHRoaXMuYWxsb3dBdHRhY2htbmV0Q29udHJvbHMgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IDAgPCB0aGlzLmF0dGFjaG1lbnRzQWN0aW9ucygpLmxlbmd0aCAmJiBTZXR0aW5ncy5jYXBhKENhcGEuQXR0YWNobWVudHNBY3Rpb25zKVxuXHRcdCk7XG5cblx0XHR0aGlzLmRvd25sb2FkQXNaaXBBbGxvd2VkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAtMSA8IGluQXJyYXkoJ3ppcCcsIHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKCkpICYmIHRoaXMuYWxsb3dBdHRhY2htbmV0Q29udHJvbHMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmRvd25sb2FkQXNaaXBMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kb3dubG9hZEFzWmlwRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDcwMDAgfSk7XG5cblx0XHR0aGlzLnNhdmVUb093bkNsb3VkQWxsb3dlZCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gLTEgPCBpbkFycmF5KCdvd25jbG91ZCcsIHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKCkpICYmIHRoaXMuYWxsb3dBdHRhY2htbmV0Q29udHJvbHMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNhdmVUb093bkNsb3VkTG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAwIH0pO1xuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNzAwMCB9KTtcblxuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRTdWNjZXNzLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0dGhpcy5zYXZlVG9Pd25DbG91ZEVycm9yKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRFcnJvci5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRTdWNjZXNzKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveEFsbG93ZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IC0xIDwgaW5BcnJheSgnZHJvcGJveCcsIHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKCkpICYmIHRoaXMuYWxsb3dBdHRhY2htbmV0Q29udHJvbHMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwMCB9KTtcblx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNzAwMCB9KTtcblxuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveFN1Y2Nlc3Muc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvci5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveFN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0aWYgKHRoaXMubWVzc2FnZSgpKSB7XG5cdFx0XHRcdF8uZWFjaCh0aGlzLm1lc3NhZ2UoKS5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmNoZWNrZWQoISF2KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYXN0UmVwbHlBY3Rpb25fID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5sYXN0UmVwbHlBY3Rpb24gPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0aGlzLmxhc3RSZXBseUFjdGlvbl8sXG5cdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uXyhcblx0XHRcdFx0XHQtMSA9PT0gaW5BcnJheSh2YWx1ZSwgW0NvbXBvc2VUeXBlLlJlcGx5LCBDb21wb3NlVHlwZS5SZXBseUFsbCwgQ29tcG9zZVR5cGUuRm9yd2FyZF0pXG5cdFx0XHRcdFx0XHQ/IENvbXBvc2VUeXBlLlJlcGx5XG5cdFx0XHRcdFx0XHQ6IHZhbHVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbihMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFJlcGx5QWN0aW9uKSB8fCBDb21wb3NlVHlwZS5SZXBseSk7XG5cblx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbl8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkxhc3RSZXBseUFjdGlvbiwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaG93RnVsbEluZm8gPSBrby5vYnNlcnZhYmxlKCcxJyA9PT0gTG9jYWwuZ2V0KENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VIZWFkZXJGdWxsSW5mbykpO1xuXG5cdFx0dGhpcy5tb3JlRHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5tZXNzYWdlRG9tRm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHRcdHRoaXMubWVzc2FnZVZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5tZXNzYWdlTG9hZGluZ1Rocm90dGxlKCkgJiYgISF0aGlzLm1lc3NhZ2UoKSk7XG5cblx0XHR0aGlzLm1lc3NhZ2Uuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdFx0TWVzc2FnZVN0b3JlLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkKG51bGwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYW5CZVJlcGxpZWRPckZvcndhcmRlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHYgPSB0aGlzLm1lc3NhZ2VWaXNpYmlsaXR5KCk7XG5cdFx0XHRyZXR1cm4gIXRoaXMuaXNEcmFmdEZvbGRlcigpICYmIHY7XG5cdFx0fSk7XG5cblx0XHQvLyBjb21tYW5kc1xuXHRcdHRoaXMucmVwbHlDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLlJlcGx5KTtcblx0XHR0aGlzLnJlcGx5QWxsQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlcihDb21wb3NlVHlwZS5SZXBseUFsbCk7XG5cdFx0dGhpcy5mb3J3YXJkQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlcihDb21wb3NlVHlwZS5Gb3J3YXJkKTtcblx0XHR0aGlzLmZvcndhcmRBc0F0dGFjaG1lbnRDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQpO1xuXHRcdHRoaXMuZWRpdEFzTmV3Q29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlcihDb21wb3NlVHlwZS5FZGl0QXNOZXcpO1xuXG5cdFx0dGhpcy5kZWxldGVDb21tYW5kID0gY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlcihGb2xkZXJUeXBlLlRyYXNoLCB0cnVlKTtcblx0XHR0aGlzLmRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRBY3Rpb25IZWxwZXIoRm9sZGVyVHlwZS5UcmFzaCwgZmFsc2UpO1xuXHRcdHRoaXMuYXJjaGl2ZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyKEZvbGRlclR5cGUuQXJjaGl2ZSwgdHJ1ZSk7XG5cdFx0dGhpcy5zcGFtQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRBY3Rpb25IZWxwZXIoRm9sZGVyVHlwZS5TcGFtLCB0cnVlKTtcblx0XHR0aGlzLm5vdFNwYW1Db21tYW5kID0gY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlcihGb2xkZXJUeXBlLk5vdFNwYW0sIHRydWUpO1xuXG5cdFx0dGhpcy5kcm9wYm94RW5hYmxlZCA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdC8vIHZpZXdlclxuXG5cdFx0dGhpcy52aWV3Qm9keVRvcFZhbHVlID0ga28ub2JzZXJ2YWJsZSgwKTtcblxuXHRcdHRoaXMudmlld0ZvbGRlciA9ICcnO1xuXHRcdHRoaXMudmlld1VpZCA9ICcnO1xuXHRcdHRoaXMudmlld0hhc2ggPSAnJztcblx0XHR0aGlzLnZpZXdTdWJqZWN0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3RnJvbVNob3J0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3RnJvbURraW1EYXRhID0ga28ub2JzZXJ2YWJsZShbJ25vbmUnLCAnJ10pO1xuXHRcdHRoaXMudmlld1RvU2hvcnQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdGcm9tID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VG8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdDYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0JjYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1JlcGx5VG8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdUaW1lU3RhbXAgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMudmlld1NpemUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdMaW5lQXNDc3MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdWaWV3TGluayA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1Vuc3Vic2NyaWJlTGluayA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0Rvd25sb2FkTGluayA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1VzZXJQaWMgPSBrby5vYnNlcnZhYmxlKERBVEFfSU1BR0VfVVNFUl9ET1RfUElDKTtcblx0XHR0aGlzLnZpZXdVc2VyUGljVmlzaWJsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudmlld0lzSW1wb3J0YW50ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy52aWV3SXNGbGFnZ2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdGcm9tRGtpbVZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAnbm9uZScgIT09IHRoaXMudmlld0Zyb21Ea2ltRGF0YSgpWzBdKTtcblxuXHRcdHRoaXMudmlld0Zyb21Ea2ltU3RhdHVzSWNvbkNsYXNzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0c3dpdGNoICh0aGlzLnZpZXdGcm9tRGtpbURhdGEoKVswXSkge1xuXHRcdFx0XHRjYXNlICdub25lJzpcblx0XHRcdFx0XHRyZXR1cm4gJ2ljb24tbm9uZSBpY29uY29sb3ItZGlzcGxheS1ub25lJztcblx0XHRcdFx0Y2FzZSAncGFzcyc6XG5cdFx0XHRcdFx0cmV0dXJuICdpY29uLW9rIGljb25jb2xvci1ncmVlbic7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuICdpY29uLXdhcm5pbmctYWx0IGljb25jb2xvci1yZWQnO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52aWV3RnJvbURraW1TdGF0dXNUaXRsZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHN0YXR1cyA9IHRoaXMudmlld0Zyb21Ea2ltRGF0YSgpO1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShzdGF0dXMpKSB7XG5cdFx0XHRcdGlmIChzdGF0dXNbMF0gJiYgc3RhdHVzWzFdKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXR1c1sxXTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdGF0dXNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJ0RLSU06ICcgKyBzdGF0dXNbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlQWN0aXZlRG9tLnN1YnNjcmliZSgoZG9tKSA9PiB7XG5cdFx0XHR0aGlzLmJvZHlCYWNrZ3JvdW5kQ29sb3IoZG9tID8gdGhpcy5kZXRlY3REb21CYWNrZ3JvdW5kQ29sb3IoZG9tKSA6ICcnKTtcblx0XHR9LCB0aGlzKTtcblxuXHRcdHRoaXMubWVzc2FnZS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcblx0XHRcdHRoaXMubWVzc2FnZUFjdGl2ZURvbShudWxsKTtcblxuXHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzKGZhbHNlKTtcblx0XHRcdFx0aWYgKExvY2FsLmdldChDbGllbnRTaWRlS2V5TmFtZS5NZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzKSkge1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzKHRydWUpO1xuXHRcdFx0XHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy52aWV3SGFzaCAhPT0gbWVzc2FnZS5oYXNoKSB7XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxNZXNzYWdlVG9Ub3AoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMudmlld0ZvbGRlciA9IG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdFx0XHRcdHRoaXMudmlld1VpZCA9IG1lc3NhZ2UudWlkO1xuXHRcdFx0XHR0aGlzLnZpZXdIYXNoID0gbWVzc2FnZS5oYXNoO1xuXHRcdFx0XHR0aGlzLnZpZXdTdWJqZWN0KG1lc3NhZ2Uuc3ViamVjdCgpKTtcblx0XHRcdFx0dGhpcy52aWV3RnJvbVNob3J0KG1lc3NhZ2UuZnJvbVRvTGluZSh0cnVlLCB0cnVlKSk7XG5cdFx0XHRcdHRoaXMudmlld0Zyb21Ea2ltRGF0YShtZXNzYWdlLmZyb21Ea2ltRGF0YSgpKTtcblx0XHRcdFx0dGhpcy52aWV3VG9TaG9ydChtZXNzYWdlLnRvVG9MaW5lKHRydWUsIHRydWUpKTtcblx0XHRcdFx0dGhpcy52aWV3RnJvbShtZXNzYWdlLmZyb21Ub0xpbmUoZmFsc2UpKTtcblx0XHRcdFx0dGhpcy52aWV3VG8obWVzc2FnZS50b1RvTGluZShmYWxzZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdDYyhtZXNzYWdlLmNjVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld0JjYyhtZXNzYWdlLmJjY1RvTGluZShmYWxzZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdSZXBseVRvKG1lc3NhZ2UucmVwbHlUb1RvTGluZShmYWxzZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdUaW1lU3RhbXAobWVzc2FnZS5kYXRlVGltZVN0YW1wSW5VVEMoKSk7XG5cdFx0XHRcdHRoaXMudmlld1NpemUobWVzc2FnZS5mcmllbmRseVNpemUoKSk7XG5cdFx0XHRcdHRoaXMudmlld0xpbmVBc0NzcyhtZXNzYWdlLmxpbmVBc0NzcygpKTtcblx0XHRcdFx0dGhpcy52aWV3Vmlld0xpbmsobWVzc2FnZS52aWV3TGluaygpKTtcblx0XHRcdFx0dGhpcy52aWV3VW5zdWJzY3JpYmVMaW5rKG1lc3NhZ2UuZ2V0Rmlyc3RVbnN1YnNyaWJlTGluaygpKTtcblx0XHRcdFx0dGhpcy52aWV3RG93bmxvYWRMaW5rKG1lc3NhZ2UuZG93bmxvYWRMaW5rKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdJc0ltcG9ydGFudChtZXNzYWdlLmlzSW1wb3J0YW50KCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdJc0ZsYWdnZWQobWVzc2FnZS5mbGFnZ2VkKCkpO1xuXG5cdFx0XHRcdGxhc3RFbWFpbCA9IG1lc3NhZ2UuZnJvbUFzU2luZ2xlRW1haWwoKTtcblx0XHRcdFx0Z2V0VXNlclBpYyhsYXN0RW1haWwsIChwaWMsIGVtYWlsKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHBpYyAhPT0gdGhpcy52aWV3VXNlclBpYygpICYmIGxhc3RFbWFpbCA9PT0gZW1haWwpIHtcblx0XHRcdFx0XHRcdHRoaXMudmlld1VzZXJQaWNWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMudmlld1VzZXJQaWMoREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMpO1xuXHRcdFx0XHRcdFx0aWYgKCcnICE9PSBwaWMpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpY1Zpc2libGUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudmlld1VzZXJQaWMocGljKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52aWV3Rm9sZGVyID0gJyc7XG5cdFx0XHRcdHRoaXMudmlld1VpZCA9ICcnO1xuXHRcdFx0XHR0aGlzLnZpZXdIYXNoID0gJyc7XG5cblx0XHRcdFx0dGhpcy5zY3JvbGxNZXNzYWdlVG9Ub3AoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZS52aWV3VHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0dGhpcy52aWV3SXNGbGFnZ2VkKG1lc3NhZ2UuZmxhZ2dlZCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudmlld0lzRmxhZ2dlZChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZ1bGxTY3JlZW5Nb2RlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tZXNzYWdlLWZ1bGxzY3JlZW4nLCB2YWx1ZSk7XG5cdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxvYWRpbmdUaHJvdHRsZS5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXG5cdFx0dGhpcy5tZXNzYWdlRm9jdXNlZCA9IGtvLmNvbXB1dGVkKCgpID0+IEZvY3VzZWQuTWVzc2FnZVZpZXcgPT09IEFwcFN0b3JlLmZvY3VzZWRTdGF0ZSgpKTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RBbmRNZXNzYWdlVmlld0xvYWRpbmcgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlKCkgfHwgTWVzc2FnZVN0b3JlLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUoKVxuXHRcdCk7XG5cblx0XHRFdmVudHMuc3ViKCdtYWlsYm94Lm1lc3NhZ2Utdmlldy50b2dnbGUtZnVsbC1zY3JlZW4nLCAoKSA9PiB7XG5cdFx0XHR0aGlzLnRvZ2dsZUZ1bGxTY3JlZW4oKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYXR0YWNobWVudFByZXZpZXcgPSBfLmJpbmQodGhpcy5hdHRhY2htZW50UHJldmlldywgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGNsb3NlTWVzc2FnZUNvbW1hbmQoKSB7XG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5tZXNzYWdlVmlzaWJpbGl0eSgpKVxuXHRtZXNzYWdlVmlzaWJpbGl0eUNvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYubWVzc2FnZVZpc2liaWxpdHkoKSlcblx0bWVzc2FnZUVkaXRDb21tYW5kKCkge1xuXHRcdHRoaXMuZWRpdE1lc3NhZ2UoKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5tZXNzYWdlTGlzdEFuZE1lc3NhZ2VWaWV3TG9hZGluZygpKVxuXHRnb1VwQ29tbWFuZCgpIHtcblx0XHRFdmVudHMucHViKCdtYWlsYm94Lm1lc3NhZ2UtbGlzdC5zZWxlY3Rvci5nby11cCcsIFtMYXlvdXQuTm9QcmV2aWV3ID09PSB0aGlzLmxheW91dCgpID8gISF0aGlzLm1lc3NhZ2UoKSA6IHRydWVdKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5tZXNzYWdlTGlzdEFuZE1lc3NhZ2VWaWV3TG9hZGluZygpKVxuXHRnb0Rvd25Db21tYW5kKCkge1xuXHRcdEV2ZW50cy5wdWIoJ21haWxib3gubWVzc2FnZS1saXN0LnNlbGVjdG9yLmdvLWRvd24nLCBbTGF5b3V0Lk5vUHJldmlldyA9PT0gdGhpcy5sYXlvdXQoKSA/ICEhdGhpcy5tZXNzYWdlKCkgOiB0cnVlXSk7XG5cdH1cblxuXHRkZXRlY3REb21CYWNrZ3JvdW5kQ29sb3IoZG9tKSB7XG5cdFx0bGV0IGxpbWl0ID0gNSxcblx0XHRcdHJlc3VsdCA9ICcnO1xuXG5cdFx0Y29uc3QgZkZpbmREb20gPSBmdW5jdGlvbihpbnB1dERvbSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZHJlbiA9IGlucHV0RG9tID8gaW5wdXREb20uY2hpbGRyZW4oKSA6IG51bGw7XG5cdFx0XHRcdHJldHVybiBjaGlsZHJlbiAmJiAxID09PSBjaGlsZHJlbi5sZW5ndGggJiYgY2hpbGRyZW4uaXMoJ3RhYmxlLGRpdixjZW50ZXInKSA/IGNoaWxkcmVuIDogbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRmRmluZENvbG9yID0gZnVuY3Rpb24oaW5wdXREb20pIHtcblx0XHRcdFx0bGV0IGNvbG9yID0gJyc7XG5cdFx0XHRcdGlmIChpbnB1dERvbSkge1xuXHRcdFx0XHRcdGNvbG9yID0gaW5wdXREb20uY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJykgfHwgJyc7XG5cdFx0XHRcdFx0aWYgKCFpbnB1dERvbS5pcygndGFibGUnKSkge1xuXHRcdFx0XHRcdFx0Y29sb3IgPSBpc1RyYW5zcGFyZW50KGNvbG9yKSA/ICcnIDogY29sb3I7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNvbG9yO1xuXHRcdFx0fTtcblxuXHRcdGlmIChkb20gJiYgMSA9PT0gZG9tLmxlbmd0aCkge1xuXHRcdFx0bGV0IGFDID0gZG9tO1xuXHRcdFx0d2hpbGUgKCcnID09PSByZXN1bHQpIHtcblx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0aWYgKDAgPj0gbGltaXQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFDID0gZkZpbmREb20oYUMpO1xuXHRcdFx0XHRpZiAoYUMpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBmRmluZENvbG9yKGFDKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQgPSBpc1RyYW5zcGFyZW50KHJlc3VsdCkgPyAnJyA6IHJlc3VsdDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZnVsbFNjcmVlbigpIHtcblx0XHR0aGlzLmZ1bGxTY3JlZW5Nb2RlKHRydWUpO1xuXHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHR9XG5cblx0dW5GdWxsU2NyZWVuKCkge1xuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUoZmFsc2UpO1xuXHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHR9XG5cblx0dG9nZ2xlRnVsbFNjcmVlbigpIHtcblx0XHRyZW1vdmVTZWxlY3Rpb24oKTtcblxuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUoIXRoaXMuZnVsbFNjcmVlbk1vZGUoKSk7XG5cdFx0d2luZG93UmVzaXplKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUeXBlXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVwbHlPcmZvcndhcmQoc1R5cGUpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpLCBbc1R5cGUsIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCldKTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0hlYWRlckhlaWdodCgpIHtcblx0XHRpZiAodGhpcy5vSGVhZGVyRG9tKSB7XG5cdFx0XHR0aGlzLnZpZXdCb2R5VG9wVmFsdWUoXG5cdFx0XHRcdHRoaXMubWVzc2FnZSgpXG5cdFx0XHRcdFx0PyB0aGlzLm9IZWFkZXJEb20uaGVpZ2h0KCkgK1xuXHRcdFx0XHRcdCAgTWFnaWNzLlNpemUyMHB4IC8qIHBhZGRpbmctKHRvcC9ib3R0b20pOiAyMHB4ICovICtcblx0XHRcdFx0XHRcdFx0TWFnaWNzLlNpemUxcHggLyogYm9yZGVkLWJvdHRvbTogMXB4ICovXG5cdFx0XHRcdFx0OiAwXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vICBkaXNwbGF5TWFpbFRvUG9wdXAoc01haWxUb1VybCkge1xuXHQvL1x0XHRzTWFpbFRvVXJsID0gc01haWxUb1VybC5yZXBsYWNlKC9cXD8uKyQvLCAnJyk7XG5cdC8vXG5cdC8vXHRcdHZhclxuXHQvL1x0XHRcdHNSZXN1bHQgPSAnJyxcblx0Ly9cdFx0XHRhVG8gPSBbXSxcblx0Ly9cdFx0XHRFbWFpbE1vZGVsID0gcmVxdWlyZSgnTW9kZWwvRW1haWwnKS5kZWZhdWx0LFxuXHQvL1x0XHRcdGZQYXJzZUVtYWlsTGluZSA9IGZ1bmN0aW9uKHNMaW5lKSB7XG5cdC8vXHRcdFx0XHRyZXR1cm4gc0xpbmUgPyBfLmNvbXBhY3QoXy5tYXAoW3dpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoc0xpbmUpXSwgZnVuY3Rpb24oc0l0ZW0pIHtcblx0Ly9cdFx0XHRcdFx0XHR2YXIgb0VtYWlsTW9kZWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXHQvL1x0XHRcdFx0XHRcdG9FbWFpbE1vZGVsLnBhcnNlKHNJdGVtKTtcblx0Ly9cdFx0XHRcdFx0XHRyZXR1cm4gJycgIT09IG9FbWFpbE1vZGVsLmVtYWlsID8gb0VtYWlsTW9kZWwgOiBudWxsO1xuXHQvL1x0XHRcdFx0XHR9KSkgOiBudWxsO1xuXHQvL1x0XHRcdH1cblx0Ly9cdFx0O1xuXHQvL1xuXHQvL1x0XHRhVG8gPSBmUGFyc2VFbWFpbExpbmUoc01haWxUb1VybCk7XG5cdC8vXHRcdHNSZXN1bHQgPSBhVG8gJiYgYVRvWzBdID8gYVRvWzBdLmVtYWlsIDogJyc7XG5cdC8vXG5cdC8vXHRcdHJldHVybiBzUmVzdWx0O1xuXHQvL1x0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb0F0dGFjaG1lbnRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRhdHRhY2htZW50UHJldmlldyhhdHRhY2htZW50KSB7XG5cdFx0aWYgKGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC5pc0ltYWdlKCkgJiYgIWF0dGFjaG1lbnQuaXNMaW5rZWQgJiYgdGhpcy5tZXNzYWdlKCkgJiYgdGhpcy5tZXNzYWdlKCkuYXR0YWNobWVudHMoKSkge1xuXHRcdFx0bGV0IGluZGV4ID0gMCxcblx0XHRcdFx0bGlzdEluZGV4ID0gMDtcblxuXHRcdFx0Y29uc3QgZGl2ID0gJCgnPGRpdj4nKSxcblx0XHRcdFx0ZHluYW1pY0VscyA9IF8uY29tcGFjdChcblx0XHRcdFx0XHRfLm1hcCh0aGlzLm1lc3NhZ2UoKS5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0gJiYgIWl0ZW0uaXNMaW5rZWQgJiYgaXRlbS5pc0ltYWdlKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0gPT09IGF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IGxpc3RJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGxpc3RJbmRleCArPSAxO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3JjOiBpdGVtLmxpbmtQcmV2aWV3KCksXG5cdFx0XHRcdFx0XHRcdFx0dGh1bWI6IGl0ZW0ubGlua1RodW1ibmFpbCgpLFxuXHRcdFx0XHRcdFx0XHRcdHN1Ykh0bWw6IGl0ZW0uZmlsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0ZG93bmxvYWRVcmw6IGl0ZW0ubGlua1ByZXZpZXcoKVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRpZiAoMCA8IGR5bmFtaWNFbHMubGVuZ3RoKSB7XG5cdFx0XHRcdGRpdi5vbignb25CZWZvcmVPcGVuLmxnJywgKCkgPT4ge1xuXHRcdFx0XHRcdHVzZUtleWJvYXJkU2hvcnRjdXRzKGZhbHNlKTtcblx0XHRcdFx0XHRyZW1vdmVJbkZvY3VzKHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRkaXYub24oJ29uQ2xvc2VBZnRlci5sZycsICgpID0+IHtcblx0XHRcdFx0XHR1c2VLZXlib2FyZFNob3J0Y3V0cyh0cnVlKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZGl2LmxpZ2h0R2FsbGVyeSh7XG5cdFx0XHRcdFx0ZHluYW1pYzogdHJ1ZSxcblx0XHRcdFx0XHRsb2FkWW91dHViZVRodW1ibmFpbDogZmFsc2UsXG5cdFx0XHRcdFx0bG9hZFZpbWVvVGh1bWJuYWlsOiBmYWxzZSxcblx0XHRcdFx0XHR0aHVtYldpZHRoOiA4MCxcblx0XHRcdFx0XHR0aHVtYkNvbnRIZWlnaHQ6IDk1LFxuXHRcdFx0XHRcdHNob3dUaHVtYkJ5RGVmYXVsdDogZmFsc2UsXG5cdFx0XHRcdFx0bW9kZTogJ2xnLWxvbGxpcG9wJywgLy8gJ2xnLXNsaWRlJyxcblx0XHRcdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHRcdFx0ZHluYW1pY0VsOiBkeW5hbWljRWxzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzLFxuXHRcdFx0ZkNoZWNrSGVhZGVySGVpZ2h0ID0gXy5iaW5kKHRoaXMuY2hlY2tIZWFkZXJIZWlnaHQsIHRoaXMpO1xuXG5cdFx0dGhpcy5vRG9tID0gZG9tO1xuXG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgJiYgdGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZVZpZXcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzLnN1YnNjcmliZShmQ2hlY2tIZWFkZXJIZWlnaHQpO1xuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUuc3Vic2NyaWJlKGZDaGVja0hlYWRlckhlaWdodCk7XG5cdFx0dGhpcy5zaG93RnVsbEluZm8uc3Vic2NyaWJlKGZDaGVja0hlYWRlckhlaWdodCk7XG5cdFx0dGhpcy5tZXNzYWdlLnN1YnNjcmliZShmQ2hlY2tIZWFkZXJIZWlnaHQpO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KGZDaGVja0hlYWRlckhlaWdodCwgMSk7XG5cdFx0XHRcdF8uZGVsYXkoZkNoZWNrSGVhZGVySGVpZ2h0LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHRcdFx0Xy5kZWxheShmQ2hlY2tIZWFkZXJIZWlnaHQsIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MG1zKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNob3dGdWxsSW5mby5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdHdpbmRvd1Jlc2l6ZShNYWdpY3MuVGltZTIwMG1zKTtcblx0XHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5NZXNzYWdlSGVhZGVyRnVsbEluZm8sIHZhbHVlID8gJzEnIDogJzAnKTtcblx0XHR9KTtcblxuXHRcdFNvY2lhbFN0b3JlLmFwcGVuZERyb3Bib3goKTtcblxuXHRcdHRoaXMub0hlYWRlckRvbSA9ICQoJy5tZXNzYWdlSXRlbUhlYWRlcicsIGRvbSk7XG5cdFx0dGhpcy5vSGVhZGVyRG9tID0gdGhpcy5vSGVhZGVyRG9tWzBdID8gdGhpcy5vSGVhZGVyRG9tIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLm1vYmlsZSkge1xuXHRcdFx0ZG9tLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkb21cblx0XHRcdC5vbignY2xpY2snLCAnYScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdC8vIHNldHVwIG1haXRvIHByb3RvY29sXG5cdFx0XHRcdHJldHVybiAhKFxuXHRcdFx0XHRcdCEhZXZlbnQgJiZcblx0XHRcdFx0XHRNYWdpY3MuRXZlbnRXaGljaE1vdXNlTWlkZGxlICE9PSBldmVudC53aGljaCAmJlxuXHRcdFx0XHRcdG1haWxUb0hlbHBlcihcblx0XHRcdFx0XHRcdCQodGhpcykuYXR0cignaHJlZicpLFxuXHRcdFx0XHRcdFx0U2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSA/IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpIDogbnVsbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5hdHRhY2htZW50c1BsYWNlIC5hdHRhY2htZW50SWNvblBhcmVudCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5hdHRhY2htZW50c1BsYWNlIC5zaG93UHJlcGxheScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAmJiBBdWRpby5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXVkaW8uc3VwcG9ydGVkTXAzICYmIGF0dGFjaG1lbnQuaXNNcDMoKTpcblx0XHRcdFx0XHRcdFx0QXVkaW8ucGxheU1wMyhhdHRhY2htZW50LmxpbmtEb3dubG9hZCgpLCBhdHRhY2htZW50LmZpbGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIEF1ZGlvLnN1cHBvcnRlZE9nZyAmJiBhdHRhY2htZW50LmlzT2dnKCk6XG5cdFx0XHRcdFx0XHRcdEF1ZGlvLnBsYXlPZ2coYXR0YWNobWVudC5saW5rRG93bmxvYWQoKSwgYXR0YWNobWVudC5maWxlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBBdWRpby5zdXBwb3J0ZWRXYXYgJiYgYXR0YWNobWVudC5pc1dhdigpOlxuXHRcdFx0XHRcdFx0XHRBdWRpby5wbGF5V2F2KGF0dGFjaG1lbnQubGlua0Rvd25sb2FkKCksIGF0dGFjaG1lbnQuZmlsZU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5hdHRhY2htZW50c1BsYWNlIC5hdHRhY2htZW50SXRlbSAuYXR0YWNobWVudE5hbWVQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQuZG93bmxvYWQpIHtcblx0XHRcdFx0XHRnZXRBcHAoKS5kb3dubG9hZChhdHRhY2htZW50LmxpbmtEb3dubG9hZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLm1lc3NhZ2VJdGVtSGVhZGVyIC5zdWJqZWN0UGFyZW50IC5mbGFnUGFyZW50JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBzZWxmLm1lc3NhZ2UoKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0XHRnZXRBcHAoKS5tZXNzYWdlTGlzdEFjdGlvbihcblx0XHRcdFx0XHRcdG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmZsYWdnZWQoKSA/IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnIDogTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnLFxuXHRcdFx0XHRcdFx0W21lc3NhZ2VdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLnRocmVhZC1saXN0IC5mbGFnUGFyZW50JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmZvbGRlciAmJiBtZXNzYWdlLnVpZCkge1xuXHRcdFx0XHRcdGdldEFwcCgpLm1lc3NhZ2VMaXN0QWN0aW9uKFxuXHRcdFx0XHRcdFx0bWVzc2FnZS5mb2xkZXIsXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmZsYWdnZWQoKSA/IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnIDogTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnLFxuXHRcdFx0XHRcdFx0W21lc3NhZ2VdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYudGhyZWFkc0Ryb3Bkb3duVHJpZ2dlcih0cnVlKTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoRm9jdXNlZC5NZXNzYWdlVmlldyAhPT0gdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zY3JvbGxNZXNzYWdlVG9Ub3AoKTtcblx0XHRcdFx0dGhpcy5zY3JvbGxNZXNzYWdlVG9MZWZ0KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRrZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlRG9tRm9jdXNlZChLZXlTdGF0ZS5NZXNzYWdlVmlldyA9PT0gdmFsdWUgJiYgIWluRm9jdXMoKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20gPSBkb20uZmluZCgnLm1lc3NhZ2VJdGVtIC5jb250ZW50Jyk7XG5cdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tID1cblx0XHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSAmJiB0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb21bMF0gPyB0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20gOiBudWxsO1xuXG5cdFx0dGhpcy5pbml0U2hvcnRjdXRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRlc2NTaG9ydGN1dHMoKSB7XG5cdFx0aWYgKHRoaXMudmlld01vZGVsVmlzaWJpbGl0eSgpICYmIHRoaXMubWVzc2FnZSgpKSB7XG5cdFx0XHRpZiAodGhpcy5mdWxsU2NyZWVuTW9kZSgpKSB7XG5cdFx0XHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUoZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChMYXlvdXQuTm9QcmV2aWV3ICE9PSB0aGlzLmxheW91dCgpKSB7XG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKExheW91dC5Ob1ByZXZpZXcgPT09IHRoaXMubGF5b3V0KCkpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpbml0U2hvcnRjdXRzKCkge1xuXHRcdC8vIGV4aXQgZnVsbHNjcmVlbiwgYmFja1xuXHRcdGtleSgnZXNjLCBiYWNrc3BhY2UnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgXy5iaW5kKHRoaXMuZXNjU2hvcnRjdXRzLCB0aGlzKSk7XG5cblx0XHQvLyBmdWxsc2NyZWVuXG5cdFx0a2V5KCdlbnRlcicsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCAoKSA9PiB7XG5cdFx0XHR0aGlzLnRvZ2dsZUZ1bGxTY3JlZW4oKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIHJlcGx5XG5cdFx0a2V5KCdyJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMucmVwbHlDb21tYW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHQvLyByZXBsYUFsbFxuXHRcdGtleSgnYScsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRpZiAoTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHR0aGlzLnJlcGx5QWxsQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0Ly8gZm9yd2FyZFxuXHRcdGtleSgnZicsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRpZiAoTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHR0aGlzLmZvcndhcmRDb21tYW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHQvLyBtZXNzYWdlIGluZm9ybWF0aW9uXG5cdFx0a2V5KCdjdHJsK2ksIGNvbW1hbmQraScsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRpZiAoTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHR0aGlzLnNob3dGdWxsSW5mbyghdGhpcy5zaG93RnVsbEluZm8oKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHQvLyB0b2dnbGUgbWVzc2FnZSBibG9ja3F1b3Rlc1xuXHRcdGtleSgnYicsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRpZiAoTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpLmJvZHkpIHtcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UoKVxuXHRcdFx0XHRcdC5ib2R5LmZpbmQoJy5ybEJsb2NrcXVvdGVTd2l0Y2hlcicpXG5cdFx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2N0cmwrdXAsIGNvbW1hbmQrdXAsIGN0cmwrbGVmdCwgY29tbWFuZCtsZWZ0JywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdHRoaXMuZ29VcENvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnY3RybCtkb3duLCBjb21tYW5kK2Rvd24sIGN0cmwrcmlnaHQsIGNvbW1hbmQrcmlnaHQnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0dGhpcy5nb0Rvd25Db21tYW5kKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHQvLyBwcmludFxuXHRcdGtleSgnY3RybCtwLCBjb21tYW5kK3AnLCBbS2V5U3RhdGUuTWVzc2FnZVZpZXcsIEtleVN0YXRlLk1lc3NhZ2VMaXN0XSwgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMubWVzc2FnZSgpLnByaW50TWVzc2FnZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHQvLyBkZWxldGVcblx0XHRrZXkoJ2RlbGV0ZSwgc2hpZnQrZGVsZXRlJywgS2V5U3RhdGUuTWVzc2FnZVZpZXcsIChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdFx0aWYgKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChoYW5kbGVyICYmICdzaGlmdCtkZWxldGUnID09PSBoYW5kbGVyLnNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0dGhpcy5kZWxldGVXaXRob3V0TW92ZUNvbW1hbmQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmRlbGV0ZUNvbW1hbmQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHQvLyBjaGFuZ2UgZm9jdXNlZCBzdGF0ZVxuXHRcdGtleSgndGFiLCBzaGlmdCt0YWIsIGxlZnQnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuZnVsbFNjcmVlbk1vZGUoKSAmJiB0aGlzLm1lc3NhZ2UoKSAmJiBMYXlvdXQuTm9QcmV2aWV3ICE9PSB0aGlzLmxheW91dCgpKSB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBoYW5kbGVyICYmICdsZWZ0JyA9PT0gaGFuZGxlci5zaG9ydGN1dCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20gJiYgMCA8IHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbS5zY3JvbGxMZWZ0KCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHRoaXMubWVzc2FnZSgpICYmXG5cdFx0XHRcdExheW91dC5Ob1ByZXZpZXcgPT09IHRoaXMubGF5b3V0KCkgJiZcblx0XHRcdFx0ZXZlbnQgJiZcblx0XHRcdFx0aGFuZGxlciAmJlxuXHRcdFx0XHQnbGVmdCcgPT09IGhhbmRsZXIuc2hvcnRjdXRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNEcmFmdEZvbGRlcigpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpID09PSBNZXNzYWdlU3RvcmUubWVzc2FnZSgpLmZvbGRlckZ1bGxOYW1lUmF3O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNTZW50Rm9sZGVyKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLnNlbnRGb2xkZXIoKSA9PT0gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKS5mb2xkZXJGdWxsTmFtZVJhdztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzU3BhbUZvbGRlcigpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkgPT09IE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1NwYW1EaXNhYmxlZCgpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkgPT09IFVOVVNFRF9PUFRJT05fVkFMVUU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0FyY2hpdmVGb2xkZXIoKSB7XG5cdFx0cmV0dXJuIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkgJiYgRm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcigpID09PSBNZXNzYWdlU3RvcmUubWVzc2FnZSgpLmZvbGRlckZ1bGxOYW1lUmF3O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNBcmNoaXZlRGlzYWJsZWQoKSB7XG5cdFx0cmV0dXJuIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkgJiYgRm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcigpID09PSBVTlVTRURfT1BUSU9OX1ZBTFVFO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNEcmFmdE9yU2VudEZvbGRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgfHwgdGhpcy5pc1NlbnRGb2xkZXIoKTtcblx0fVxuXG5cdGNvbXBvc2VDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHR9XG5cdH1cblxuXHRlZGl0TWVzc2FnZSgpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSAmJiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJyksIFtDb21wb3NlVHlwZS5EcmFmdCwgTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKV0pO1xuXHRcdH1cblx0fVxuXG5cdHNjcm9sbE1lc3NhZ2VUb1RvcCgpIHtcblx0XHRpZiAodGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tKSB7XG5cdFx0XHRpZiAoTWFnaWNzLlNpemU1MHB4IDwgdGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbFRvcCgpKSB7XG5cdFx0XHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbS5zY3JvbGxUb3AoTWFnaWNzLlNpemU1MHB4KS5hbmltYXRlKHsgJ3Njcm9sbFRvcCc6IDAgfSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20uc2Nyb2xsVG9wKDApO1xuXHRcdFx0fVxuXG5cdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHR9XG5cdH1cblxuXHRzY3JvbGxNZXNzYWdlVG9MZWZ0KCkge1xuXHRcdGlmICh0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20pIHtcblx0XHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbS5zY3JvbGxMZWZ0KDApO1xuXHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0QXR0YWNobWVudHNIYXNoZXMoKSB7XG5cdFx0Y29uc3QgYXR0cyA9IHRoaXMubWVzc2FnZSgpID8gdGhpcy5tZXNzYWdlKCkuYXR0YWNobWVudHMoKSA6IFtdO1xuXHRcdHJldHVybiBfLmNvbXBhY3QoXy5tYXAoYXR0cywgKGl0ZW0pID0+IChpdGVtICYmICFpdGVtLmlzTGlua2VkICYmIGl0ZW0uY2hlY2tlZCgpID8gaXRlbS5kb3dubG9hZCA6ICcnKSkpO1xuXHR9XG5cblx0ZG93bmxvYWRBc1ppcCgpIHtcblx0XHRjb25zdCBoYXNoZXMgPSB0aGlzLmdldEF0dGFjaG1lbnRzSGFzaGVzKCk7XG5cdFx0aWYgKDAgPCBoYXNoZXMubGVuZ3RoKSB7XG5cdFx0XHRQcm9taXNlcy5hdHRhY2htZW50c0FjdGlvbnMoJ1ppcCcsIGhhc2hlcywgdGhpcy5kb3dubG9hZEFzWmlwTG9hZGluZylcblx0XHRcdFx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdGlmIChyZXN1bHQgJiYgcmVzdWx0LlJlc3VsdCAmJiByZXN1bHQuUmVzdWx0LkZpbGVzICYmIHJlc3VsdC5SZXN1bHQuRmlsZXNbMF0gJiYgcmVzdWx0LlJlc3VsdC5GaWxlc1swXS5IYXNoKSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5kb3dubG9hZChhdHRhY2htZW50RG93bmxvYWQocmVzdWx0LlJlc3VsdC5GaWxlc1swXS5IYXNoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZG93bmxvYWRBc1ppcEVycm9yKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmRvd25sb2FkQXNaaXBFcnJvcih0cnVlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNhdmVUb093bkNsb3VkKCkge1xuXHRcdGNvbnN0IGhhc2hlcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNIYXNoZXMoKTtcblx0XHRpZiAoMCA8IGhhc2hlcy5sZW5ndGgpIHtcblx0XHRcdFByb21pc2VzLmF0dGFjaG1lbnRzQWN0aW9ucygnT3duQ2xvdWQnLCBoYXNoZXMsIHRoaXMuc2F2ZVRvT3duQ2xvdWRMb2FkaW5nKVxuXHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiByZXN1bHQuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVUb093bkNsb3VkU3VjY2Vzcyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Pd25DbG91ZEVycm9yKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnNhdmVUb093bkNsb3VkRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmhpZ2hsaWdodFVuc2VsZWN0ZWRBdHRhY2htZW50cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRzYXZlVG9Ecm9wYm94KCkge1xuXHRcdGNvbnN0IGZpbGVzID0gW10sXG5cdFx0XHRoYXNoZXMgPSB0aGlzLmdldEF0dGFjaG1lbnRzSGFzaGVzKCk7XG5cblx0XHRpZiAoMCA8IGhhc2hlcy5sZW5ndGgpIHtcblx0XHRcdGlmICh3aW5kb3cuRHJvcGJveCkge1xuXHRcdFx0XHRQcm9taXNlcy5hdHRhY2htZW50c0FjdGlvbnMoJ0Ryb3Bib3gnLCBoYXNoZXMsIHRoaXMuc2F2ZVRvRHJvcGJveExvYWRpbmcpXG5cdFx0XHRcdFx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiByZXN1bHQuUmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQuVXJsICYmIHJlc3VsdC5SZXN1bHQuU2hvcnRMaWZlICYmIHJlc3VsdC5SZXN1bHQuRmlsZXMpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHdpbmRvdy5Ecm9wYm94ICYmIGlzQXJyYXkocmVzdWx0LlJlc3VsdC5GaWxlcykpIHtcblx0XHRcdFx0XHRcdFx0XHRfLmVhY2gocmVzdWx0LlJlc3VsdC5GaWxlcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cmw6IHJlc3VsdC5SZXN1bHQuVXJsICsgYXR0YWNobWVudERvd25sb2FkKGl0ZW0uSGFzaCwgcmVzdWx0LlJlc3VsdC5TaG9ydExpZmUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWxlbmFtZTogaXRlbS5GaWxlTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuRHJvcGJveC5zYXZlKHtcblx0XHRcdFx0XHRcdFx0XHRcdGZpbGVzOiBmaWxlcyxcblx0XHRcdFx0XHRcdFx0XHRcdHByb2dyZXNzOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveExvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2VzcyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FuY2VsOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveFN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvcihmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveExvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2Vzcyh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94RXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveExvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yKHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94RXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01lc3NhZ2VNb2RlbH0gb01lc3NhZ2Vcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzaG93SW1hZ2VzKG1lc3NhZ2UpIHtcblx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLnNob3dFeHRlcm5hbEltYWdlcykge1xuXHRcdFx0bWVzc2FnZS5zaG93RXh0ZXJuYWxJbWFnZXModHJ1ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jaGVja0hlYWRlckhlaWdodCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRwcmludGFibGVDaGVja2VkTWVzc2FnZUNvdW50KCkge1xuXHRcdGNvbnN0IGNudCA9IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKS5sZW5ndGg7XG5cdFx0cmV0dXJuIDAgPCBjbnQgPyAoMTAwID4gY250ID8gY250IDogJzk5KycpIDogJyc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBvTWVzc2FnZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHJlYWRSZWNlaXB0KG9NZXNzYWdlKSB7XG5cdFx0aWYgKG9NZXNzYWdlICYmICcnICE9PSBvTWVzc2FnZS5yZWFkUmVjZWlwdCgpKSB7XG5cdFx0XHRSZW1vdGUuc2VuZFJlYWRSZWNlaXB0TWVzc2FnZShcblx0XHRcdFx0bm9vcCxcblx0XHRcdFx0b01lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdG9NZXNzYWdlLnVpZCxcblx0XHRcdFx0b01lc3NhZ2UucmVhZFJlY2VpcHQoKSxcblx0XHRcdFx0aTE4bignUkVBRF9SRUNFSVBUL1NVQkpFQ1QnLCB7ICdTVUJKRUNUJzogb01lc3NhZ2Uuc3ViamVjdCgpIH0pLFxuXHRcdFx0XHRpMThuKCdSRUFEX1JFQ0VJUFQvQk9EWScsIHsgJ1JFQUQtUkVDRUlQVCc6IEFjY291bnRTdG9yZS5lbWFpbCgpIH0pXG5cdFx0XHQpO1xuXG5cdFx0XHRvTWVzc2FnZS5pc1JlYWRSZWNlaXB0KHRydWUpO1xuXG5cdFx0XHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGUob01lc3NhZ2UpO1xuXG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoZWNrSGVhZGVySGVpZ2h0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTWVzc2FnZVZpZXdNYWlsQm94VXNlclZpZXcsIE1lc3NhZ2VWaWV3TWFpbEJveFVzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IENhcGEsIEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGtleVNjb3BlLCBsZWZ0UGFuZWxUeXBlLCBsZWZ0UGFuZWxEaXNhYmxlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHJ1blNldHRpbmdzVmlld01vZGVsSG9va3MgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IGFkZFNldHRpbmdzVmlld01vZGVsIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0Fic3RyYWN0U2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBHZW5lcmFsVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9HZW5lcmFsJztcbmltcG9ydCB7IENvbnRhY3RzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9Db250YWN0cyc7XG5pbXBvcnQgeyBBY2NvdW50c1VzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvQWNjb3VudHMnO1xuaW1wb3J0IHsgRmlsdGVyc1VzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvRmlsdGVycyc7XG5pbXBvcnQgeyBTZWN1cml0eVVzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvU2VjdXJpdHknO1xuaW1wb3J0IHsgU29jaWFsVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9Tb2NpYWwnO1xuaW1wb3J0IHsgQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL0NoYW5nZVBhc3N3b3JkJztcbmltcG9ydCB7IFRlbXBsYXRlc1VzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvVGVtcGxhdGVzJztcbmltcG9ydCB7IEZvbGRlcnNVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL0ZvbGRlcnMnO1xuaW1wb3J0IHsgVGhlbWVzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9UaGVtZXMnO1xuaW1wb3J0IHsgT3BlblBncFVzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvT3BlblBncCc7XG5cbmltcG9ydCB7IFN5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9TZXR0aW5ncy9TeXN0ZW1Ecm9wRG93bic7XG5pbXBvcnQgeyBNZW51U2V0dGluZ3NVc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9TZXR0aW5ncy9NZW51JztcbmltcG9ydCB7IFBhbmVTZXR0aW5nc1VzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL1NldHRpbmdzL1BhbmUnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuY2xhc3MgU2V0dGluZ3NVc2VyU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFtTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXcsIE1lbnVTZXR0aW5nc1VzZXJWaWV3LCBQYW5lU2V0dGluZ3NVc2VyVmlld10pO1xuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc1NldHRpbmdzVGl0bGUgPSBpMThuKCdUSVRMRVMvU0VUVElOR1MnKTtcblx0XHRcdH0sXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0U2V0dGluZ3NUaXRsZSgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFja1xuXHQgKi9cblx0c2V0dXBTZXR0aW5ncyhmQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKCFTZXR0aW5ncy5jYXBhKENhcGEuU2V0dGluZ3MpKSB7XG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoR2VuZXJhbFVzZXJTZXR0aW5ncywgJ1NldHRpbmdzR2VuZXJhbCcsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfR0VORVJBTF9OQU1FJywgJ2dlbmVyYWwnLCB0cnVlKTtcblxuXHRcdGlmIChBcHBTdG9yZS5jb250YWN0c0lzQWxsb3dlZCgpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChDb250YWN0c1VzZXJTZXR0aW5ncywgJ1NldHRpbmdzQ29udGFjdHMnLCAnU0VUVElOR1NfTEFCRUxTL0xBQkVMX0NPTlRBQ1RTX05BTUUnLCAnY29udGFjdHMnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cykgfHwgU2V0dGluZ3MuY2FwYShDYXBhLklkZW50aXRpZXMpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChcblx0XHRcdFx0QWNjb3VudHNVc2VyU2V0dGluZ3MsXG5cdFx0XHRcdCdTZXR0aW5nc0FjY291bnRzJyxcblx0XHRcdFx0U2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cylcblx0XHRcdFx0XHQ/ICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfQUNDT1VOVFNfTkFNRSdcblx0XHRcdFx0XHQ6ICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfSURFTlRJVElFU19OQU1FJyxcblx0XHRcdFx0J2FjY291bnRzJ1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlNpZXZlKSkge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRmlsdGVyc1VzZXJTZXR0aW5ncywgJ1NldHRpbmdzRmlsdGVycycsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfRklMVEVSU19OQU1FJywgJ2ZpbHRlcnMnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkF1dG9Mb2dvdXQpIHx8IFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZWN1cml0eVVzZXJTZXR0aW5ncywgJ1NldHRpbmdzU2VjdXJpdHknLCAnU0VUVElOR1NfTEFCRUxTL0xBQkVMX1NFQ1VSSVRZX05BTUUnLCAnc2VjdXJpdHknKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRBY2NvdW50U3RvcmUuaXNSb290QWNjb3VudCgpICYmXG5cdFx0XHQoKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmIFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGgnKSkgfHxcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSB8fFxuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpXG5cdFx0KSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChTb2NpYWxVc2VyU2V0dGluZ3MsICdTZXR0aW5nc1NvY2lhbCcsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfU09DSUFMX05BTUUnLCAnc29jaWFsJyk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdDaGFuZ2VQYXNzd29yZElzQWxsb3dlZCcpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChcblx0XHRcdFx0Q2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3MsXG5cdFx0XHRcdCdTZXR0aW5nc0NoYW5nZVBhc3N3b3JkJyxcblx0XHRcdFx0J1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9DSEFOR0VfUEFTU1dPUkRfTkFNRScsXG5cdFx0XHRcdCdjaGFuZ2UtcGFzc3dvcmQnXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuVGVtcGxhdGVzKSkge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRcdFRlbXBsYXRlc1VzZXJTZXR0aW5ncyxcblx0XHRcdFx0J1NldHRpbmdzVGVtcGxhdGVzJyxcblx0XHRcdFx0J1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9URU1QTEFURVNfTkFNRScsXG5cdFx0XHRcdCd0ZW1wbGF0ZXMnXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuRm9sZGVycykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKEZvbGRlcnNVc2VyU2V0dGluZ3MsICdTZXR0aW5nc0ZvbGRlcnMnLCAnU0VUVElOR1NfTEFCRUxTL0xBQkVMX0ZPTERFUlNfTkFNRScsICdmb2xkZXJzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5UaGVtZXMpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChUaGVtZXNVc2VyU2V0dGluZ3MsICdTZXR0aW5nc1RoZW1lcycsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfVEhFTUVTX05BTUUnLCAndGhlbWVzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5PcGVuUEdQKSkge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoT3BlblBncFVzZXJTZXR0aW5ncywgJ1NldHRpbmdzT3BlblBHUCcsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfT1BFTl9QR1BfTkFNRScsICdvcGVucGdwJyk7XG5cdFx0fVxuXG5cdFx0cnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhmYWxzZSk7XG5cblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2soKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnNldFNldHRpbmdzVGl0bGUoKTtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5TZXR0aW5ncyk7XG5cdFx0bGVmdFBhbmVsVHlwZSgnJyk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpKSB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRzZXRTZXR0aW5nc1RpdGxlKCkge1xuXHRcdGNvbnN0IHNFbWFpbCA9IEFjY291bnRTdG9yZS5lbWFpbCgpO1xuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKCgnJyA9PT0gc0VtYWlsID8gJycgOiBzRW1haWwgKyAnIC0gJykgKyB0aGlzLnNTZXR0aW5nc1RpdGxlKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZXR0aW5nc1VzZXJTY3JlZW4sIFNldHRpbmdzVXNlclNjcmVlbiBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYkFuaW1hdGlvblN1cHBvcnRlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgTWFnaWNzLCBFZGl0b3JEZWZhdWx0VHlwZSwgTGF5b3V0IH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIGNvbnZlcnRMYW5nTmFtZSwgaXNBcnJheSwgdGltZU91dEFjdGlvbiwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IGkxOG4sIHRyaWdnZXIgYXMgdHJhbnNsYXRvclRyaWdnZXIsIHJlbG9hZCBhcyB0cmFuc2xhdG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBJZGVudGl0eVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0lkZW50aXR5JztcbmltcG9ydCBOb3RpZmljYXRpb25TdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Ob3RpZmljYXRpb24nO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuY2xhc3MgR2VuZXJhbFVzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2UgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlO1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXM7XG5cdFx0dGhpcy5tZXNzYWdlc1BlclBhZ2UgPSBTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZTtcblx0XHR0aGlzLm1lc3NhZ2VzUGVyUGFnZUFycmF5ID0gTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTO1xuXG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZSA9IFNldHRpbmdzU3RvcmUuZWRpdG9yRGVmYXVsdFR5cGU7XG5cdFx0dGhpcy5sYXlvdXQgPSBTZXR0aW5nc1N0b3JlLmxheW91dDtcblx0XHR0aGlzLnVzZVByZXZpZXdQYW5lID0gU2V0dGluZ3NTdG9yZS51c2VQcmV2aWV3UGFuZTtcblxuXHRcdHRoaXMuc291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZCA9IE5vdGlmaWNhdGlvblN0b3JlLnNvdW5kTm90aWZpY2F0aW9uSXNTdXBwb3J0ZWQ7XG5cdFx0dGhpcy5lbmFibGVTb3VuZE5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblN0b3JlLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uO1xuXG5cdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uU3RvcmUuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbjtcblx0XHR0aGlzLmlzRGVza3RvcE5vdGlmaWNhdGlvblN1cHBvcnRlZCA9IE5vdGlmaWNhdGlvblN0b3JlLmlzRGVza3RvcE5vdGlmaWNhdGlvblN1cHBvcnRlZDtcblx0XHR0aGlzLmlzRGVza3RvcE5vdGlmaWNhdGlvbkRlbmllZCA9IE5vdGlmaWNhdGlvblN0b3JlLmlzRGVza3RvcE5vdGlmaWNhdGlvbkRlbmllZDtcblxuXHRcdHRoaXMuc2hvd0ltYWdlcyA9IFNldHRpbmdzU3RvcmUuc2hvd0ltYWdlcztcblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QgPSBTZXR0aW5nc1N0b3JlLnVzZUNoZWNrYm94ZXNJbkxpc3Q7XG5cdFx0dGhpcy50aHJlYWRzQWxsb3dlZCA9IEFwcFN0b3JlLnRocmVhZHNBbGxvd2VkO1xuXHRcdHRoaXMudXNlVGhyZWFkcyA9IFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcztcblx0XHR0aGlzLnJlcGx5U2FtZUZvbGRlciA9IFNldHRpbmdzU3RvcmUucmVwbHlTYW1lRm9sZGVyO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzID0gQXBwU3RvcmUuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2UoKSkpO1xuXHRcdHRoaXMubGFuZ3VhZ2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXG5cdFx0dGhpcy5tcHBUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZWRpdG9yRGVmYXVsdFR5cGVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMubGF5b3V0VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuaXNBbmltYXRpb25TdXBwb3J0ZWQgPSBiQW5pbWF0aW9uU3VwcG9ydGVkO1xuXG5cdFx0dGhpcy5pZGVudGl0aWVzID0gSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzO1xuXG5cdFx0dGhpcy5pZGVudGl0eU1haW4gPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5pZGVudGl0aWVzKCk7XG5cdFx0XHRyZXR1cm4gaXNBcnJheShsaXN0KSA/IF8uZmluZChsaXN0LCAoaXRlbSkgPT4gaXRlbSAmJiAnJyA9PT0gaXRlbS5pZCgpKSA6IG51bGw7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlkZW50aXR5TWFpbkRlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBpZGVudGl0eSA9IHRoaXMuaWRlbnRpdHlNYWluKCk7XG5cdFx0XHRyZXR1cm4gaWRlbnRpdHkgPyBpZGVudGl0eS5mb3JtYXR0ZWROYW1lKCkgOiAnLS0tJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZWRpdG9yRGVmYXVsdFR5cGVzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHsgJ2lkJzogRWRpdG9yRGVmYXVsdFR5cGUuSHRtbCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0VESVRPUl9IVE1MJykgfSxcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbiwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0VESVRPUl9QTEFJTicpIH0sXG5cdFx0XHRcdHsgJ2lkJzogRWRpdG9yRGVmYXVsdFR5cGUuSHRtbEZvcmNlZCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0VESVRPUl9IVE1MX0ZPUkNFRCcpIH0sXG5cdFx0XHRcdHsgJ2lkJzogRWRpdG9yRGVmYXVsdFR5cGUuUGxhaW5Gb3JjZWQsICduYW1lJzogaTE4bignU0VUVElOR1NfR0VORVJBTC9MQUJFTF9FRElUT1JfUExBSU5fRk9SQ0VEJykgfVxuXHRcdFx0XTtcblx0XHR9KTtcblxuXHRcdHRoaXMubGF5b3V0VHlwZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyAnaWQnOiBMYXlvdXQuTm9QcmV2aWV3LCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfTEFZT1VUX05PX1NQTElUJykgfSxcblx0XHRcdFx0eyAnaWQnOiBMYXlvdXQuU2lkZVByZXZpZXcsICduYW1lJzogaTE4bignU0VUVElOR1NfR0VORVJBTC9MQUJFTF9MQVlPVVRfVkVSVElDQUxfU1BMSVQnKSB9LFxuXHRcdFx0XHR7ICdpZCc6IExheW91dC5Cb3R0b21QcmV2aWV3LCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfTEFZT1VUX0hPUklaT05UQUxfU1BMSVQnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXHR9XG5cblx0ZWRpdE1haW5JZGVudGl0eSgpIHtcblx0XHRjb25zdCBpZGVudGl0eSA9IHRoaXMuaWRlbnRpdHlNYWluKCk7XG5cdFx0aWYgKGlkZW50aXR5KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9JZGVudGl0eScpLCBbaWRlbnRpdHldKTtcblx0XHR9XG5cdH1cblxuXHR0ZXN0U291bmROb3RpZmljYXRpb24oKSB7XG5cdFx0Tm90aWZpY2F0aW9uU3RvcmUucGxheVNvdW5kTm90aWZpY2F0aW9uKHRydWUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYwID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5lZGl0b3JEZWZhdWx0VHlwZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubXBwVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYyID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5sYXlvdXRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZlJlbG9hZExhbmd1YWdlSGVscGVyID0gKHNhdmVTZXR0aW5nc1N0ZXApID0+ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlcihzYXZlU2V0dGluZ3NTdGVwKTtcblx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMubGFuZ3VhZ2VUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSksIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHR0aGlzLmxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblx0XHRcdFx0dHJhbnNsYXRvclJlbG9hZChmYWxzZSwgdmFsdWUpXG5cdFx0XHRcdFx0LnRoZW4oZlJlbG9hZExhbmd1YWdlSGVscGVyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCksIGZSZWxvYWRMYW5ndWFnZUhlbHBlcihTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KSlcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J0xhbmd1YWdlJzogdmFsdWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ0VkaXRvckRlZmF1bHRUeXBlJywgbnVsbCwgZjApKTtcblx0XHRcdHRoaXMubWVzc2FnZXNQZXJQYWdlLnN1YnNjcmliZShSZW1vdGUuc2F2ZVNldHRpbmdzSGVscGVyKCdNUFAnLCBudWxsLCBmMSkpO1xuXHRcdFx0dGhpcy5zaG93SW1hZ2VzLnN1YnNjcmliZShSZW1vdGUuc2F2ZVNldHRpbmdzSGVscGVyKCdTaG93SW1hZ2VzJywgYm9vbFRvQWpheCkpO1xuXG5cdFx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3Quc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ1VzZUNoZWNrYm94ZXNJbkxpc3QnLCBib29sVG9BamF4KSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRpbWVPdXRBY3Rpb24oXG5cdFx0XHRcdFx0J1NhdmVEZXNrdG9wTm90aWZpY2F0aW9ucycsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0UmVtb3RlLnNhdmVTZXR0aW5ncyhudWxsLCB7XG5cdFx0XHRcdFx0XHRcdCdEZXNrdG9wTm90aWZpY2F0aW9ucyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdE1hZ2ljcy5UaW1lM3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGltZU91dEFjdGlvbihcblx0XHRcdFx0XHQnU2F2ZVNvdW5kTm90aWZpY2F0aW9uJyxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J1NvdW5kTm90aWZpY2F0aW9uJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0TWFnaWNzLlRpbWUzc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucmVwbHlTYW1lRm9sZGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGltZU91dEFjdGlvbihcblx0XHRcdFx0XHQnU2F2ZVJlcGx5U2FtZUZvbGRlcicsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0UmVtb3RlLnNhdmVTZXR0aW5ncyhudWxsLCB7XG5cdFx0XHRcdFx0XHRcdCdSZXBseVNhbWVGb2xkZXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRNYWdpY3MuVGltZTNzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51c2VUaHJlYWRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KFtdKTtcblx0XHRcdFx0UmVtb3RlLnNhdmVTZXR0aW5ncyhudWxsLCB7XG5cdFx0XHRcdFx0J1VzZVRocmVhZHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxheW91dC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdChbXSk7XG5cdFx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MoZjIsIHtcblx0XHRcdFx0XHQnTGF5b3V0JzogdmFsdWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuZW5hYmxlRGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0xhbmd1YWdlcycpLCBbdGhpcy5sYW5ndWFnZSwgdGhpcy5sYW5ndWFnZXMoKSwgTGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2UoKV0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEdlbmVyYWxVc2VyU2V0dGluZ3MsIEdlbmVyYWxVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBDb250YWN0U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQ29udGFjdCc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBDb250YWN0c1VzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY29udGFjdHNBdXRvc2F2ZSA9IEFwcFN0b3JlLmNvbnRhY3RzQXV0b3NhdmU7XG5cblx0XHR0aGlzLmFsbG93Q29udGFjdHNTeW5jID0gQ29udGFjdFN0b3JlLmFsbG93Q29udGFjdHNTeW5jO1xuXHRcdHRoaXMuZW5hYmxlQ29udGFjdHNTeW5jID0gQ29udGFjdFN0b3JlLmVuYWJsZUNvbnRhY3RzU3luYztcblx0XHR0aGlzLmNvbnRhY3RzU3luY1VybCA9IENvbnRhY3RTdG9yZS5jb250YWN0c1N5bmNVcmw7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzU3luY1VzZXI7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNQYXNzID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzU3luY1Bhc3M7XG5cblx0XHR0aGlzLnNhdmVUcmlnZ2VyID0ga29cblx0XHRcdC5jb21wdXRlZCgoKSA9PlxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMoKSA/ICcxJyA6ICcwJyxcblx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzU3luY1VybCgpLFxuXHRcdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jVXNlcigpLFxuXHRcdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jUGFzcygpXG5cdFx0XHRcdF0uam9pbignfCcpXG5cdFx0XHQpXG5cdFx0XHQuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lNTAwbXMgfSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdHRoaXMuY29udGFjdHNBdXRvc2F2ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0J0NvbnRhY3RzQXV0b3NhdmUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVUcmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUNvbnRhY3RzU3luY0RhdGEoXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHRoaXMuZW5hYmxlQ29udGFjdHNTeW5jKCksXG5cdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jVXJsKCksXG5cdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jVXNlcigpLFxuXHRcdFx0XHR0aGlzLmNvbnRhY3RzU3luY1Bhc3MoKVxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBDb250YWN0c1VzZXJTZXR0aW5ncywgQ29udGFjdHNVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBDYXBhLCBTdG9yYWdlUmVzdWx0VHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyByb290IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgY2FwYSB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuaW1wb3J0IElkZW50aXR5U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvSWRlbnRpdHknO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCwgcm91dGVPZmYsIHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIEFjY291bnRzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5hbGxvd0FkZGl0aW9uYWxBY2NvdW50ID0gY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cyk7XG5cdFx0dGhpcy5hbGxvd0lkZW50aXRpZXMgPSBjYXBhKENhcGEuSWRlbnRpdGllcyk7XG5cblx0XHR0aGlzLmFjY291bnRzID0gQWNjb3VudFN0b3JlLmFjY291bnRzO1xuXHRcdHRoaXMuaWRlbnRpdGllcyA9IElkZW50aXR5U3RvcmUuaWRlbnRpdGllcztcblxuXHRcdHRoaXMuYWNjb3VudEZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblx0XHR0aGlzLmlkZW50aXR5Rm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXHR9XG5cblx0c2Nyb2xsYWJsZU9wdGlvbnMod3JhcHBlcikge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoYW5kbGU6ICcuZHJhZy1oYW5kbGUnLFxuXHRcdFx0Y29udGFpbm1lbnQ6IHdyYXBwZXIgfHwgJ3BhcmVudCcsXG5cdFx0XHRheGlzOiAneSdcblx0XHR9O1xuXHR9XG5cblx0YWRkTmV3QWNjb3VudCgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9BY2NvdW50JykpO1xuXHR9XG5cblx0ZWRpdEFjY291bnQoYWNjb3VudCkge1xuXHRcdGlmIChhY2NvdW50ICYmIGFjY291bnQuY2FuQmVFZGl0KCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FjY291bnQnKSwgW2FjY291bnRdKTtcblx0XHR9XG5cdH1cblxuXHRhZGROZXdJZGVudGl0eSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9JZGVudGl0eScpKTtcblx0fVxuXG5cdGVkaXRJZGVudGl0eShpZGVudGl0eSkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0lkZW50aXR5JyksIFtpZGVudGl0eV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWNjb3VudE1vZGVsfSBhY2NvdW50VG9SZW1vdmVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRkZWxldGVBY2NvdW50KGFjY291bnRUb1JlbW92ZSkge1xuXHRcdGlmIChhY2NvdW50VG9SZW1vdmUgJiYgYWNjb3VudFRvUmVtb3ZlLmRlbGV0ZUFjY2VzcygpKSB7XG5cdFx0XHR0aGlzLmFjY291bnRGb3JEZWxldGlvbihudWxsKTtcblx0XHRcdGlmIChhY2NvdW50VG9SZW1vdmUpIHtcblx0XHRcdFx0dGhpcy5hY2NvdW50cy5yZW1vdmUoKGFjY291bnQpID0+IGFjY291bnRUb1JlbW92ZSA9PT0gYWNjb3VudCk7XG5cblx0XHRcdFx0UmVtb3RlLmFjY291bnREZWxldGUoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlbG9hZCkge1xuXHRcdFx0XHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdFx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdFx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdFx0XHRcdF8uZGVmZXIoKCkgPT4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Z2V0QXBwKCkuYWNjb3VudHNBbmRJZGVudGl0aWVzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBhY2NvdW50VG9SZW1vdmUuZW1haWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0lkZW50aXR5TW9kZWx9IGlkZW50aXR5VG9SZW1vdmVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRkZWxldGVJZGVudGl0eShpZGVudGl0eVRvUmVtb3ZlKSB7XG5cdFx0aWYgKGlkZW50aXR5VG9SZW1vdmUgJiYgaWRlbnRpdHlUb1JlbW92ZS5kZWxldGVBY2Nlc3MoKSkge1xuXHRcdFx0dGhpcy5pZGVudGl0eUZvckRlbGV0aW9uKG51bGwpO1xuXG5cdFx0XHRpZiAoaWRlbnRpdHlUb1JlbW92ZSkge1xuXHRcdFx0XHRJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMucmVtb3ZlKChvSWRlbnRpdHkpID0+IGlkZW50aXR5VG9SZW1vdmUgPT09IG9JZGVudGl0eSk7XG5cblx0XHRcdFx0UmVtb3RlLmlkZW50aXR5RGVsZXRlKCgpID0+IHtcblx0XHRcdFx0XHRnZXRBcHAoKS5hY2NvdW50c0FuZElkZW50aXRpZXMoKTtcblx0XHRcdFx0fSwgaWRlbnRpdHlUb1JlbW92ZS5pZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YWNjb3VudHNBbmRJZGVudGl0aWVzQWZ0ZXJNb3ZlKCkge1xuXHRcdFJlbW90ZS5hY2NvdW50c0FuZElkZW50aXRpZXNTb3J0T3JkZXIobnVsbCwgQWNjb3VudFN0b3JlLmFjY291bnRzRW1haWxzLnBlZWsoKSwgSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzSURTLnBlZWsoKSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdG9Eb21cblx0XHRcdC5vbignY2xpY2snLCAnLmFjY291bnRzLWxpc3QgLmFjY291bnQtaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgYWNjb3VudCA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChhY2NvdW50KSB7XG5cdFx0XHRcdFx0c2VsZi5lZGl0QWNjb3VudChhY2NvdW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmlkZW50aXRpZXMtbGlzdCAuaWRlbnRpdHktaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgaWRlbnRpdHkgPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdFx0XHRzZWxmLmVkaXRJZGVudGl0eShpZGVudGl0eSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFjY291bnRzVXNlclNldHRpbmdzLCBBY2NvdW50c1VzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHdpbmRvd1Jlc2l6ZUNhbGxiYWNrLCBpc0FycmF5LCB0cmltLCBkZWxlZ2F0ZVJ1bk9uRGVzdHJveSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IEZpbHRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZpbHRlcic7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBGaWx0ZXJNb2RlbCB9IGZyb20gJ01vZGVsL0ZpbHRlcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgRmlsdGVyc1VzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubW9kdWxlcyA9IEZpbHRlclN0b3JlLm1vZHVsZXM7XG5cdFx0dGhpcy5maWx0ZXJzID0gRmlsdGVyU3RvcmUuZmlsdGVycztcblxuXHRcdHRoaXMuaW5pdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zZXJ2ZXJFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VydmVyRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5oYXZlQ2hhbmdlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zYXZlRXJyb3JUZXh0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmZpbHRlcnMuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblxuXHRcdHRoaXMuc2VydmVyRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNlcnZlckVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHR0aGlzLmZpbHRlclJhdyA9IEZpbHRlclN0b3JlLnJhdztcblx0XHR0aGlzLmZpbHRlclJhdy5jYXBhID0gRmlsdGVyU3RvcmUuY2FwYTtcblx0XHR0aGlzLmZpbHRlclJhdy5hY3RpdmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZpbHRlclJhdy5hbGxvdyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVyUmF3LmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZpbHRlckZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMuZmlsdGVycy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5oYXZlQ2hhbmdlcyh0cnVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZmlsdGVyUmF3LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5oYXZlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zYXZlRXJyb3JUZXh0KCcnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5oYXZlQ2hhbmdlcyh0cnVlKTtcblx0XHRcdHRoaXMuZmlsdGVyUmF3LmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmhhdmVDaGFuZ2VzKCkpXG5cdHNhdmVDaGFuZ2VzQ29tbWFuZCgpIHtcblx0XHRpZiAoIXRoaXMuZmlsdGVycy5zYXZpbmcoKSkge1xuXHRcdFx0aWYgKHRoaXMuZmlsdGVyUmF3LmFjdGl2ZSgpICYmICcnID09PSB0cmltKHRoaXMuZmlsdGVyUmF3KCkpKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmVycm9yKHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZmlsdGVycy5zYXZpbmcodHJ1ZSk7XG5cdFx0XHR0aGlzLnNhdmVFcnJvclRleHQoJycpO1xuXG5cdFx0XHRSZW1vdGUuZmlsdGVyc1NhdmUoXG5cdFx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpbHRlcnMuc2F2aW5nKGZhbHNlKTtcblxuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0dGhpcy5oYXZlQ2hhbmdlcyhmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUxpc3QoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZUVycm9yVGV4dChkYXRhLkVycm9yTWVzc2FnZUFkZGl0aW9uYWwgfHwgZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZUVycm9yVGV4dChnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5maWx0ZXJzKCksXG5cdFx0XHRcdHRoaXMuZmlsdGVyUmF3KCksXG5cdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZSgpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2Nyb2xsYWJsZU9wdGlvbnMod3JhcHBlcikge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoYW5kbGU6ICcuZHJhZy1oYW5kbGUnLFxuXHRcdFx0Y29udGFpbm1lbnQ6IHdyYXBwZXIgfHwgJ3BhcmVudCcsXG5cdFx0XHRheGlzOiAneSdcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlTGlzdCgpIHtcblx0XHRpZiAoIXRoaXMuZmlsdGVycy5sb2FkaW5nKCkpIHtcblx0XHRcdHRoaXMuZmlsdGVycy5sb2FkaW5nKHRydWUpO1xuXG5cdFx0XHRSZW1vdGUuZmlsdGVyc0dldCgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdHRoaXMuZmlsdGVycy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0dGhpcy5zZXJ2ZXJFcnJvcihmYWxzZSk7XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGlzQXJyYXkoZGF0YS5SZXN1bHQuRmlsdGVycykpIHtcblx0XHRcdFx0XHR0aGlzLmluaXRlZCh0cnVlKTtcblx0XHRcdFx0XHR0aGlzLnNlcnZlckVycm9yKGZhbHNlKTtcblxuXHRcdFx0XHRcdHRoaXMuZmlsdGVycyhcblx0XHRcdFx0XHRcdF8uY29tcGFjdChcblx0XHRcdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQuRmlsdGVycywgKGFJdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVyID0gbmV3IEZpbHRlck1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpbHRlciAmJiBmaWx0ZXIucGFyc2UoYUl0ZW0pID8gZmlsdGVyIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5tb2R1bGVzKGRhdGEuUmVzdWx0Lk1vZHVsZXMgPyBkYXRhLlJlc3VsdC5Nb2R1bGVzIDoge30pO1xuXG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJSYXcoZGF0YS5SZXN1bHQuUmF3IHx8ICcnKTtcblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdy5jYXBhKGlzQXJyYXkoZGF0YS5SZXN1bHQuQ2FwYSkgPyBkYXRhLlJlc3VsdC5DYXBhLmpvaW4oJyAnKSA6ICcnKTtcblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdy5hY3RpdmUoISFkYXRhLlJlc3VsdC5SYXdJc0FjdGl2ZSk7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuYWxsb3coISFkYXRhLlJlc3VsdC5SYXdJc0FsbG93KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmZpbHRlcnMoW10pO1xuXHRcdFx0XHRcdHRoaXMubW9kdWxlcyh7fSk7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJSYXcoJycpO1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmNhcGEoe30pO1xuXG5cdFx0XHRcdFx0dGhpcy5zZXJ2ZXJFcnJvcih0cnVlKTtcblx0XHRcdFx0XHR0aGlzLnNlcnZlckVycm9yRGVzYyhcblx0XHRcdFx0XHRcdGRhdGEgJiYgZGF0YS5FcnJvckNvZGUgPyBnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpIDogZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5oYXZlQ2hhbmdlcyhmYWxzZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRkZWxldGVGaWx0ZXIoZmlsdGVyKSB7XG5cdFx0dGhpcy5maWx0ZXJzLnJlbW92ZShmaWx0ZXIpO1xuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGZpbHRlcik7XG5cdH1cblxuXHRhZGRGaWx0ZXIoKSB7XG5cdFx0Y29uc3QgZmlsdGVyID0gbmV3IEZpbHRlck1vZGVsKCk7XG5cblx0XHRmaWx0ZXIuZ2VuZXJhdGVJRCgpO1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZpbHRlcicpLCBbXG5cdFx0XHRmaWx0ZXIsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG5cdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZShmYWxzZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2Vcblx0XHRdKTtcblx0fVxuXG5cdGVkaXRGaWx0ZXIoZmlsdGVyKSB7XG5cdFx0Y29uc3QgY2xvbmVkRmlsdGVyID0gZmlsdGVyLmNsb25lU2VsZigpO1xuXG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRmlsdGVyJyksIFtcblx0XHRcdGNsb25lZEZpbHRlcixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVycygpLFxuXHRcdFx0XHRcdGluZGV4ID0gZmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG5cblx0XHRcdFx0aWYgKC0xIDwgaW5kZXggJiYgZmlsdGVyc1tpbmRleF0pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShmaWx0ZXJzW2luZGV4XSk7XG5cdFx0XHRcdFx0ZmlsdGVyc1tpbmRleF0gPSBjbG9uZWRGaWx0ZXI7XG5cblx0XHRcdFx0XHR0aGlzLmZpbHRlcnMoZmlsdGVycyk7XG5cdFx0XHRcdFx0dGhpcy5oYXZlQ2hhbmdlcyh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHRdKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbS5vbignY2xpY2snLCAnLmZpbHRlci1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdGNvbnN0IGZpbHRlciA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdHNlbGYuZWRpdEZpbHRlcihmaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMudXBkYXRlTGlzdCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZpbHRlcnNVc2VyU2V0dGluZ3MsIEZpbHRlcnNVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBwSW50LCBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBDYXBhLCBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4sIHRyaWdnZXIgYXMgdHJhbnNsYXRvclRyaWdnZXIgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IGNhcGEgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgU2V0dGluc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuY2xhc3MgU2VjdXJpdHlVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNhcGFBdXRvTG9nb3V0ID0gY2FwYShDYXBhLkF1dG9Mb2dvdXQpO1xuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvciA9IGNhcGEoQ2FwYS5Ud29GYWN0b3IpO1xuXG5cdFx0dGhpcy5hdXRvTG9nb3V0ID0gU2V0dGluc1N0b3JlLmF1dG9Mb2dvdXQ7XG5cdFx0dGhpcy5hdXRvTG9nb3V0LnRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLmF1dG9Mb2dvdXRPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHsgJ2lkJzogMCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fTkVWRVJfT1BUSU9OX05BTUUnKSB9LFxuXHRcdFx0XHR7ICdpZCc6IDUsICduYW1lJzogaTE4bignU0VUVElOR1NfU0VDVVJJVFkvQVVUT0xPR0lOX01JTlVURVNfT1BUSU9OX05BTUUnLCB7ICdNSU5VVEVTJzogNSB9KSB9LFxuXHRcdFx0XHR7ICdpZCc6IDEwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9NSU5VVEVTX09QVElPTl9OQU1FJywgeyAnTUlOVVRFUyc6IDEwIH0pIH0sXG5cdFx0XHRcdHsgJ2lkJzogMzAsICduYW1lJzogaTE4bignU0VUVElOR1NfU0VDVVJJVFkvQVVUT0xPR0lOX01JTlVURVNfT1BUSU9OX05BTUUnLCB7ICdNSU5VVEVTJzogMzAgfSkgfSxcblx0XHRcdFx0eyAnaWQnOiA2MCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fTUlOVVRFU19PUFRJT05fTkFNRScsIHsgJ01JTlVURVMnOiA2MCB9KSB9LFxuXHRcdFx0XHR7ICdpZCc6IDYwICogMiwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fSE9VUlNfT1BUSU9OX05BTUUnLCB7ICdIT1VSUyc6IDIgfSkgfSxcblx0XHRcdFx0eyAnaWQnOiA2MCAqIDUsICduYW1lJzogaTE4bignU0VUVElOR1NfU0VDVVJJVFkvQVVUT0xPR0lOX0hPVVJTX09QVElPTl9OQU1FJywgeyAnSE9VUlMnOiA1IH0pIH0sXG5cdFx0XHRcdHsgJ2lkJzogNjAgKiAxMCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fSE9VUlNfT1BUSU9OX05BTUUnLCB7ICdIT1VSUyc6IDEwIH0pIH1cblx0XHRcdF07XG5cdFx0fSk7XG5cdH1cblxuXHRjb25maWd1cmVUd29GYWN0b3IoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvVHdvRmFjdG9yQ29uZmlndXJhdGlvbicpKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKHRoaXMuY2FwYUF1dG9Mb2dvdXQpIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBmMCA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuYXV0b0xvZ291dC50cmlnZ2VyLCB0aGlzKTtcblxuXHRcdFx0XHR0aGlzLmF1dG9Mb2dvdXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ0F1dG9Mb2dvdXQnLCBwSW50LCBmMCkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IFNlY3VyaXR5VXNlclNldHRpbmdzLCBTZWN1cml0eVVzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBTb2NpYWxVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5lbmFibGVkO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGg7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoR21haWw7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVEcml2ZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmRyaXZlO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLnByZXZpZXc7XG5cblx0XHR0aGlzLmdvb2dsZUFjdGlvbnMgPSBTb2NpYWxTdG9yZS5nb29nbGUubG9hZGluZztcblx0XHR0aGlzLmdvb2dsZUxvZ2dpbmVkID0gU29jaWFsU3RvcmUuZ29vZ2xlLmxvZ2dpbmVkO1xuXHRcdHRoaXMuZ29vZ2xlVXNlck5hbWUgPSBTb2NpYWxTdG9yZS5nb29nbGUudXNlck5hbWU7XG5cblx0XHR0aGlzLmZhY2Vib29rRW5hYmxlID0gU29jaWFsU3RvcmUuZmFjZWJvb2suZW5hYmxlZDtcblxuXHRcdHRoaXMuZmFjZWJvb2tBY3Rpb25zID0gU29jaWFsU3RvcmUuZmFjZWJvb2subG9hZGluZztcblx0XHR0aGlzLmZhY2Vib29rTG9nZ2luZWQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5sb2dnaW5lZDtcblx0XHR0aGlzLmZhY2Vib29rVXNlck5hbWUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay51c2VyTmFtZTtcblxuXHRcdHRoaXMudHdpdHRlckVuYWJsZSA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuZW5hYmxlZDtcblxuXHRcdHRoaXMudHdpdHRlckFjdGlvbnMgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmxvYWRpbmc7XG5cdFx0dGhpcy50d2l0dGVyTG9nZ2luZWQgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmxvZ2dpbmVkO1xuXHRcdHRoaXMudHdpdHRlclVzZXJOYW1lID0gU29jaWFsU3RvcmUudHdpdHRlci51c2VyTmFtZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5nb29nbGVMb2dnaW5lZCgpICYmICFzZWxmLmdvb2dsZUFjdGlvbnMoKSlcblx0Y29ubmVjdEdvb2dsZUNvbW1hbmQoKSB7XG5cdFx0aWYgKCF0aGlzLmdvb2dsZUxvZ2dpbmVkKCkpIHtcblx0XHRcdGdldEFwcCgpLmdvb2dsZUNvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGRpc2Nvbm5lY3RHb29nbGVDb21tYW5kKCkge1xuXHRcdGdldEFwcCgpLmdvb2dsZURpc2Nvbm5lY3QoKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5mYWNlYm9va0xvZ2dpbmVkKCkgJiYgIXNlbGYuZmFjZWJvb2tBY3Rpb25zKCkpXG5cdGNvbm5lY3RGYWNlYm9va0NvbW1hbmQoKSB7XG5cdFx0aWYgKCF0aGlzLmZhY2Vib29rTG9nZ2luZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkuZmFjZWJvb2tDb25uZWN0KCk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRkaXNjb25uZWN0RmFjZWJvb2tDb21tYW5kKCkge1xuXHRcdGdldEFwcCgpLmZhY2Vib29rRGlzY29ubmVjdCgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnR3aXR0ZXJMb2dnaW5lZCgpICYmICFzZWxmLnR3aXR0ZXJBY3Rpb25zKCkpXG5cdGNvbm5lY3RUd2l0dGVyQ29tbWFuZCgpIHtcblx0XHRpZiAoIXRoaXMudHdpdHRlckxvZ2dpbmVkKCkpIHtcblx0XHRcdGdldEFwcCgpLnR3aXR0ZXJDb25uZWN0KCk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRkaXNjb25uZWN0VHdpdHRlckNvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkudHdpdHRlckRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBTb2NpYWxVc2VyU2V0dGluZ3MsIFNvY2lhbFVzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcbmltcG9ydCB7IGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIENoYW5nZVBhc3N3b3JkVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jaGFuZ2VQcm9jZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmVycm9yRGVzY3JpcHRpb24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2ggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlU3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubmV3UGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5ld1Bhc3N3b3JkMiA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm5ld1Bhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubmV3UGFzc3dvcmQyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMub25DaGFuZ2VQYXNzd29yZFJlc3BvbnNlID0gXy5iaW5kKHRoaXMub25DaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKFxuXHRcdChzZWxmKSA9PlxuXHRcdFx0IXNlbGYuY2hhbmdlUHJvY2VzcygpICYmICcnICE9PSBzZWxmLmN1cnJlbnRQYXNzd29yZCgpICYmICcnICE9PSBzZWxmLm5ld1Bhc3N3b3JkKCkgJiYgJycgIT09IHNlbGYubmV3UGFzc3dvcmQyKClcblx0KVxuXHRzYXZlTmV3UGFzc3dvcmRDb21tYW5kKCkge1xuXHRcdGlmICh0aGlzLm5ld1Bhc3N3b3JkKCkgIT09IHRoaXMubmV3UGFzc3dvcmQyKCkpIHtcblx0XHRcdHRoaXMucGFzc3dvcmRNaXNtYXRjaCh0cnVlKTtcblx0XHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbihpMThuKCdTRVRUSU5HU19DSEFOR0VfUEFTU1dPUkQvRVJST1JfUEFTU1dPUkRfTUlTTUFUQ0gnKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2hhbmdlUHJvY2Vzcyh0cnVlKTtcblxuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMucGFzc3dvcmRNaXNtYXRjaChmYWxzZSk7XG5cdFx0XHR0aGlzLmVycm9yRGVzY3JpcHRpb24oJycpO1xuXG5cdFx0XHRSZW1vdGUuY2hhbmdlUGFzc3dvcmQodGhpcy5vbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIHRoaXMuY3VycmVudFBhc3N3b3JkKCksIHRoaXMubmV3UGFzc3dvcmQoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHRoaXMuY2hhbmdlUHJvY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQoJycpO1xuXHRcdHRoaXMubmV3UGFzc3dvcmQoJycpO1xuXHRcdHRoaXMubmV3UGFzc3dvcmQyKCcnKTtcblx0XHR0aGlzLmVycm9yRGVzY3JpcHRpb24oJycpO1xuXHRcdHRoaXMucGFzc3dvcmRNaXNtYXRjaChmYWxzZSk7XG5cdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuZXJyb3IoZmFsc2UpO1xuXHR9XG5cblx0b25DaGFuZ2VQYXNzd29yZFJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMuY2hhbmdlUHJvY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHR0aGlzLmVycm9yRGVzY3JpcHRpb24oJycpO1xuXHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yKGZhbHNlKTtcblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQoJycpO1xuXHRcdFx0dGhpcy5uZXdQYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLm5ld1Bhc3N3b3JkMignJyk7XG5cblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVTdWNjZXNzKHRydWUpO1xuXHRcdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuZXJyb3IoZmFsc2UpO1xuXG5cdFx0XHRnZXRBcHAoKS5zZXRDbGllbnRTaWRlVG9rZW4oZGF0YS5SZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZGF0YSAmJiBOb3RpZmljYXRpb24uQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0ID09PSBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvcih0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZUVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5lcnJvckRlc2NyaXB0aW9uKGdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZShkYXRhLCBOb3RpZmljYXRpb24uQ291bGROb3RTYXZlTmV3UGFzc3dvcmQpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3MsIENoYW5nZVBhc3N3b3JkVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBUZW1wbGF0ZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1RlbXBsYXRlJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIFRlbXBsYXRlc1VzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGVtcGxhdGVzID0gVGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXM7XG5cblx0XHR0aGlzLnByb2Nlc3NUZXh0ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzLmxvYWRpbmcoKSA/IGkxOG4oJ1NFVFRJTkdTX1RFTVBMRVRTL0xPQURJTkdfUFJPQ0VTUycpIDogJydcblx0XHQpO1xuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+ICgnJyA9PT0gdGhpcy5wcm9jZXNzVGV4dCgpID8gJ2hpZGRlbicgOiAndmlzaWJsZScpKTtcblxuXHRcdHRoaXMudGVtcGxhdGVGb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cdH1cblxuXHRzY3JvbGxhYmxlT3B0aW9ucyhzV3JhcHBlcikge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoYW5kbGU6ICcuZHJhZy1oYW5kbGUnLFxuXHRcdFx0Y29udGFpbm1lbnQ6IHNXcmFwcGVyIHx8ICdwYXJlbnQnLFxuXHRcdFx0YXhpczogJ3knXG5cdFx0fTtcblx0fVxuXG5cdGFkZE5ld1RlbXBsYXRlKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1RlbXBsYXRlJykpO1xuXHR9XG5cblx0ZWRpdFRlbXBsYXRlKG9UZW1wbGF0ZUl0ZW0pIHtcblx0XHRpZiAob1RlbXBsYXRlSXRlbSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvVGVtcGxhdGUnKSwgW29UZW1wbGF0ZUl0ZW1dKTtcblx0XHR9XG5cdH1cblxuXHRkZWxldGVUZW1wbGF0ZSh0ZW1wbGF0ZVRvUmVtb3ZlKSB7XG5cdFx0aWYgKHRlbXBsYXRlVG9SZW1vdmUgJiYgdGVtcGxhdGVUb1JlbW92ZS5kZWxldGVBY2Nlc3MoKSkge1xuXHRcdFx0dGhpcy50ZW1wbGF0ZUZvckRlbGV0aW9uKG51bGwpO1xuXG5cdFx0XHRpZiAodGVtcGxhdGVUb1JlbW92ZSkge1xuXHRcdFx0XHR0aGlzLnRlbXBsYXRlcy5yZW1vdmUoKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZVRvUmVtb3ZlID09PSB0ZW1wbGF0ZSk7XG5cblx0XHRcdFx0UmVtb3RlLnRlbXBsYXRlRGVsZXRlKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlbG9hZFRlbXBsYXRlcygpO1xuXHRcdFx0XHR9LCB0ZW1wbGF0ZVRvUmVtb3ZlLmlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZWxvYWRUZW1wbGF0ZXMoKSB7XG5cdFx0Z2V0QXBwKCkudGVtcGxhdGVzKCk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdG9Eb20ub24oJ2NsaWNrJywgJy50ZW1wbGF0ZXMtbGlzdCAudGVtcGxhdGUtaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRpZiAodGVtcGxhdGUpIHtcblx0XHRcdFx0c2VsZi5lZGl0VGVtcGxhdGUodGVtcGxhdGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZWxvYWRUZW1wbGF0ZXMoKTtcblx0fVxufVxuXG5leHBvcnQgeyBUZW1wbGF0ZXNVc2VyU2V0dGluZ3MsIFRlbXBsYXRlc1VzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBDbGllbnRTaWRlS2V5TmFtZSwgTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24sIGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IHJlbW92ZUZvbGRlckZyb21DYWNoZUxpc3QgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgeyBhcHBTZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgTG9jYWwgZnJvbSAnU3RvcmFnZS9DbGllbnQnO1xuXG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0IFByb21pc2VzIGZyb20gJ1Byb21pc2VzL1VzZXIvQWpheCc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBGb2xkZXJzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kaXNwbGF5U3BlY1NldHRpbmcgPSBGb2xkZXJTdG9yZS5kaXNwbGF5U3BlY1NldHRpbmc7XG5cdFx0dGhpcy5mb2xkZXJMaXN0ID0gRm9sZGVyU3RvcmUuZm9sZGVyTGlzdDtcblxuXHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAgPSBrby5vYnNlcnZhYmxlKCcnKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUxMDBtcyB9KTtcblxuXHRcdHRoaXMubG9hZGluZyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGxvYWRpbmcgPSBGb2xkZXJTdG9yZS5mb2xkZXJzTG9hZGluZygpLFxuXHRcdFx0XHRjcmVhdGluZyA9IEZvbGRlclN0b3JlLmZvbGRlcnNDcmVhdGluZygpLFxuXHRcdFx0XHRkZWxldGluZyA9IEZvbGRlclN0b3JlLmZvbGRlcnNEZWxldGluZygpLFxuXHRcdFx0XHRyZW5hbWluZyA9IEZvbGRlclN0b3JlLmZvbGRlcnNSZW5hbWluZygpO1xuXG5cdFx0XHRyZXR1cm4gbG9hZGluZyB8fCBjcmVhdGluZyB8fCBkZWxldGluZyB8fCByZW5hbWluZztcblx0XHR9KTtcblxuXHRcdHRoaXMuZm9sZGVyRm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXG5cdFx0dGhpcy5mb2xkZXJGb3JFZGl0ID0ga28ub2JzZXJ2YWJsZShudWxsKS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdlZGl0ZWQnXSB9KTtcblxuXHRcdHRoaXMudXNlSW1hcFN1YnNjcmliZSA9ICEhYXBwU2V0dGluZ3NHZXQoJ3VzZUltYXBTdWJzY3JpYmUnKTtcblx0fVxuXG5cdGZvbGRlckVkaXRPbkVudGVyKGZvbGRlcikge1xuXHRcdGNvbnN0IG5hbWVUb0VkaXQgPSBmb2xkZXIgPyB0cmltKGZvbGRlci5uYW1lRm9yRWRpdCgpKSA6ICcnO1xuXG5cdFx0aWYgKCcnICE9PSBuYW1lVG9FZGl0ICYmIGZvbGRlci5uYW1lKCkgIT09IG5hbWVUb0VkaXQpIHtcblx0XHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsICcnKTtcblxuXHRcdFx0Z2V0QXBwKCkuZm9sZGVyc1Byb21pc2VzQWN0aW9uSGVscGVyKFxuXHRcdFx0XHRQcm9taXNlcy5mb2xkZXJSZW5hbWUoZm9sZGVyLmZ1bGxOYW1lUmF3LCBuYW1lVG9FZGl0LCBGb2xkZXJTdG9yZS5mb2xkZXJzUmVuYW1pbmcpLFxuXHRcdFx0XHROb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlclxuXHRcdFx0KTtcblxuXHRcdFx0cmVtb3ZlRm9sZGVyRnJvbUNhY2hlTGlzdChmb2xkZXIuZnVsbE5hbWVSYXcpO1xuXG5cdFx0XHRmb2xkZXIubmFtZShuYW1lVG9FZGl0KTtcblx0XHR9XG5cblx0XHRmb2xkZXIuZWRpdGVkKGZhbHNlKTtcblx0fVxuXG5cdGZvbGRlckVkaXRPbkVzYyhmb2xkZXIpIHtcblx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRmb2xkZXIuZWRpdGVkKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdC5lcnJvcignJyk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRvRG9tXG5cdFx0XHQub24oJ21vdXNlb3ZlcicsICcuZGVsZXRlLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoaTE4bignU0VUVElOR1NfRk9MREVSUy9IRUxQX0RFTEVURV9GT0xERVInKSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdtb3VzZW92ZXInLCAnLnN1YnNjcmliZS1mb2xkZXItcGFyZW50JywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3RIZWxwKGkxOG4oJ1NFVFRJTkdTX0ZPTERFUlMvSEVMUF9TSE9XX0hJREVfRk9MREVSJykpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignbW91c2VvdmVyJywgJy5jaGVjay1mb2xkZXItcGFyZW50JywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3RIZWxwKGkxOG4oJ1NFVFRJTkdTX0ZPTERFUlMvSEVMUF9DSEVDS19GT1JfTkVXX01FU1NBR0VTJykpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignbW91c2VvdXQnLCAnLnN1YnNjcmliZS1mb2xkZXItcGFyZW50LCAuY2hlY2stZm9sZGVyLXBhcmVudCwgLmRlbGV0ZS1mb2xkZXItcGFyZW50JywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3RIZWxwKCcnKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlRm9sZGVyKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlckNyZWF0ZScpKTtcblx0fVxuXG5cdHN5c3RlbUZvbGRlcigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Gb2xkZXJTeXN0ZW0nKSk7XG5cdH1cblxuXHRkZWxldGVGb2xkZXIoZm9sZGVyVG9SZW1vdmUpIHtcblx0XHRpZiAoXG5cdFx0XHRmb2xkZXJUb1JlbW92ZSAmJlxuXHRcdFx0Zm9sZGVyVG9SZW1vdmUuY2FuQmVEZWxldGVkKCkgJiZcblx0XHRcdGZvbGRlclRvUmVtb3ZlLmRlbGV0ZUFjY2VzcygpICYmXG5cdFx0XHQwID09PSBmb2xkZXJUb1JlbW92ZS5wcml2YXRlTWVzc2FnZUNvdW50QWxsKClcblx0XHQpIHtcblx0XHRcdHRoaXMuZm9sZGVyRm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmIChmb2xkZXJUb1JlbW92ZSkge1xuXHRcdFx0XHRjb25zdCBmUmVtb3ZlRm9sZGVyID0gZnVuY3Rpb24oZm9sZGVyKSB7XG5cdFx0XHRcdFx0aWYgKGZvbGRlclRvUmVtb3ZlID09PSBmb2xkZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb2xkZXIuc3ViRm9sZGVycy5yZW1vdmUoZlJlbW92ZUZvbGRlcik7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsICcnKTtcblxuXHRcdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0LnJlbW92ZShmUmVtb3ZlRm9sZGVyKTtcblxuXHRcdFx0XHRnZXRBcHAoKS5mb2xkZXJzUHJvbWlzZXNBY3Rpb25IZWxwZXIoXG5cdFx0XHRcdFx0UHJvbWlzZXMuZm9sZGVyRGVsZXRlKGZvbGRlclRvUmVtb3ZlLmZ1bGxOYW1lUmF3LCBGb2xkZXJTdG9yZS5mb2xkZXJzRGVsZXRpbmcpLFxuXHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlRm9sZGVyXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmVtb3ZlRm9sZGVyRnJvbUNhY2hlTGlzdChmb2xkZXJUb1JlbW92ZS5mdWxsTmFtZVJhdyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICgwIDwgZm9sZGVyVG9SZW1vdmUucHJpdmF0ZU1lc3NhZ2VDb3VudEFsbCgpKSB7XG5cdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0LmVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0c3Vic2NyaWJlRm9sZGVyKGZvbGRlcikge1xuXHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsICcnKTtcblx0XHRSZW1vdGUuZm9sZGVyU2V0U3Vic2NyaWJlKG5vb3AsIGZvbGRlci5mdWxsTmFtZVJhdywgdHJ1ZSk7XG5cdFx0Zm9sZGVyLnN1YlNjcmliZWQodHJ1ZSk7XG5cdH1cblxuXHR1blN1YnNjcmliZUZvbGRlcihmb2xkZXIpIHtcblx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuRm9sZGVyc0xhc2hIYXNoLCAnJyk7XG5cdFx0UmVtb3RlLmZvbGRlclNldFN1YnNjcmliZShub29wLCBmb2xkZXIuZnVsbE5hbWVSYXcsIGZhbHNlKTtcblx0XHRmb2xkZXIuc3ViU2NyaWJlZChmYWxzZSk7XG5cdH1cblxuXHRjaGVja2FibGVUcnVlRm9sZGVyKGZvbGRlcikge1xuXHRcdFJlbW90ZS5mb2xkZXJTZXRDaGVja2FibGUobm9vcCwgZm9sZGVyLmZ1bGxOYW1lUmF3LCB0cnVlKTtcblx0XHRmb2xkZXIuY2hlY2thYmxlKHRydWUpO1xuXHR9XG5cblx0Y2hlY2thYmxlRmFsc2VGb2xkZXIoZm9sZGVyKSB7XG5cdFx0UmVtb3RlLmZvbGRlclNldENoZWNrYWJsZShub29wLCBmb2xkZXIuZnVsbE5hbWVSYXcsIGZhbHNlKTtcblx0XHRmb2xkZXIuY2hlY2thYmxlKGZhbHNlKTtcblx0fVxufVxuXG5leHBvcnQgeyBGb2xkZXJzVXNlclNldHRpbmdzLCBGb2xkZXJzVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgSnVhIGZyb20gJ0p1YSc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIFVwbG9hZEVycm9yQ29kZSwgQ2FwYSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGNoYW5nZVRoZW1lLCBjb252ZXJ0VGhlbWVOYW1lIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHVzZXJCYWNrZ3JvdW5kLCB0aGVtZVByZXZpZXdMaW5rLCB1cGxvYWRCYWNrZ3JvdW5kIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IGNhcGEgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IFRoZW1lU3RvcmUgZnJvbSAnU3RvcmVzL1RoZW1lJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuY2xhc3MgVGhlbWVzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50aGVtZSA9IFRoZW1lU3RvcmUudGhlbWU7XG5cdFx0dGhpcy50aGVtZXMgPSBUaGVtZVN0b3JlLnRoZW1lcztcblx0XHR0aGlzLnRoZW1lc09iamVjdHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5iYWNrZ3JvdW5kID0ge307XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLm5hbWUgPSBUaGVtZVN0b3JlLnRoZW1lQmFja2dyb3VuZE5hbWU7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLmhhc2ggPSBUaGVtZVN0b3JlLnRoZW1lQmFja2dyb3VuZEhhc2g7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLnVwbG9hZGVyQnV0dG9uID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLmJhY2tncm91bmQubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYmFja2dyb3VuZC5lcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jYXBhVXNlckJhY2tncm91bmQgPSBrby5vYnNlcnZhYmxlKGNhcGEoQ2FwYS5Vc2VyQmFja2dyb3VuZCkpO1xuXG5cdFx0dGhpcy50aGVtZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMTAwbXMgfSk7XG5cblx0XHR0aGlzLmlUaW1lciA9IDA7XG5cdFx0dGhpcy5vVGhlbWVBamF4UmVxdWVzdCA9IG51bGw7XG5cblx0XHR0aGlzLnRoZW1lLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdF8uZWFjaCh0aGlzLnRoZW1lc09iamVjdHMoKSwgKHRoZW1lKSA9PiB7XG5cdFx0XHRcdHRoZW1lLnNlbGVjdGVkKHZhbHVlID09PSB0aGVtZS5uYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjaGFuZ2VUaGVtZSh2YWx1ZSwgdGhpcy50aGVtZVRyaWdnZXIpO1xuXG5cdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0J1RoZW1lJzogdmFsdWVcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5iYWNrZ3JvdW5kLmhhc2guc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3QgJGJnID0gJCgnI3JsLWJnJyk7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdGlmICgkYmcuZGF0YSgnYmFja3N0cmV0Y2gnKSkge1xuXHRcdFx0XHRcdCRiZy5iYWNrc3RyZXRjaCgnZGVzdHJveScpLmF0dHIoJ3N0eWxlJywgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkYmdcblx0XHRcdFx0XHQuYXR0cignc3R5bGUnLCAnYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50OycpXG5cdFx0XHRcdFx0LmJhY2tzdHJldGNoKHVzZXJCYWNrZ3JvdW5kKHZhbHVlKSwge1xuXHRcdFx0XHRcdFx0ZmFkZTogTWFnaWNzLlRpbWUxcyxcblx0XHRcdFx0XHRcdGNlbnRlcmVkWDogdHJ1ZSxcblx0XHRcdFx0XHRcdGNlbnRlcmVkWTogdHJ1ZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMudGhlbWUoKTtcblxuXHRcdHRoaXMudGhlbWVzT2JqZWN0cyhcblx0XHRcdF8ubWFwKHRoaXMudGhlbWVzKCksICh0aGVtZSkgPT4gKHtcblx0XHRcdFx0bmFtZTogdGhlbWUsXG5cdFx0XHRcdG5hbWVEaXNwbGF5OiBjb252ZXJ0VGhlbWVOYW1lKHRoZW1lKSxcblx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUodGhlbWUgPT09IGN1cnJlbnRUaGVtZSksXG5cdFx0XHRcdHRoZW1lUHJldmlld1NyYzogdGhlbWVQcmV2aWV3TGluayh0aGVtZSlcblx0XHRcdH0pKVxuXHRcdCk7XG5cblx0XHR0aGlzLmluaXRVcGxvYWRlcigpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuYmFja2dyb3VuZC5lcnJvcignJyk7XG5cdH1cblxuXHRjbGVhckJhY2tncm91bmQoKSB7XG5cdFx0aWYgKHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kKCkpIHtcblx0XHRcdFJlbW90ZS5jbGVhclVzZXJCYWNrZ3JvdW5kKCgpID0+IHtcblx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLm5hbWUoJycpO1xuXHRcdFx0XHR0aGlzLmJhY2tncm91bmQuaGFzaCgnJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRpbml0VXBsb2FkZXIoKSB7XG5cdFx0aWYgKHRoaXMuYmFja2dyb3VuZC51cGxvYWRlckJ1dHRvbigpICYmIHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kKCkpIHtcblx0XHRcdGNvbnN0IG9KdWEgPSBuZXcgSnVhKHtcblx0XHRcdFx0J2FjdGlvbic6IHVwbG9hZEJhY2tncm91bmQoKSxcblx0XHRcdFx0J25hbWUnOiAndXBsb2FkZXInLFxuXHRcdFx0XHQncXVldWVTaXplJzogMSxcblx0XHRcdFx0J211bHRpcGxlU2l6ZUxpbWl0JzogMSxcblx0XHRcdFx0J2Rpc2FibGVEcmFnQW5kRHJvcCc6IHRydWUsXG5cdFx0XHRcdCdkaXNhYmxlTXVsdGlwbGUnOiB0cnVlLFxuXHRcdFx0XHQnY2xpY2tFbGVtZW50JzogdGhpcy5iYWNrZ3JvdW5kLnVwbG9hZGVyQnV0dG9uKClcblx0XHRcdH0pO1xuXG5cdFx0XHRvSnVhXG5cdFx0XHRcdC5vbignb25TdGFydCcsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmJhY2tncm91bmQubG9hZGluZyh0cnVlKTtcblx0XHRcdFx0XHR0aGlzLmJhY2tncm91bmQuZXJyb3IoJycpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oJ29uQ29tcGxldGUnLCAoaWQsIHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5sb2FkaW5nKGZhbHNlKTtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHQgJiYgaWQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5OYW1lICYmIGRhdGEuUmVzdWx0Lkhhc2gpIHtcblx0XHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5uYW1lKGRhdGEuUmVzdWx0Lk5hbWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmhhc2goZGF0YS5SZXN1bHQuSGFzaCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5uYW1lKCcnKTtcblx0XHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5oYXNoKCcnKTtcblxuXHRcdFx0XHRcdFx0bGV0IGVycm9yTXNnID0gJyc7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVJc1Rvb0JpZzpcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yTXNnID0gaTE4bignU0VUVElOR1NfVEhFTUVTL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvck1zZyA9IGkxOG4oJ1NFVFRJTkdTX1RIRU1FUy9FUlJPUl9GSUxFX1RZUEVfRVJST1InKTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoIWVycm9yTXNnICYmIGRhdGEuRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yTXNnID0gZGF0YS5FcnJvck1lc3NhZ2U7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5lcnJvcihlcnJvck1zZyB8fCBpMThuKCdTRVRUSU5HU19USEVNRVMvRVJST1JfVU5LTk9XTicpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IFRoZW1lc1VzZXJTZXR0aW5ncywgVGhlbWVzVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW5PbkRlc3Ryb3ksIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJJc0h0dHBzIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgT3BlblBncFVzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMub3BlbnBncGtleXMgPSBQZ3BTdG9yZS5vcGVucGdwa2V5cztcblx0XHR0aGlzLm9wZW5wZ3BrZXlzUHVibGljID0gUGdwU3RvcmUub3BlbnBncGtleXNQdWJsaWM7XG5cdFx0dGhpcy5vcGVucGdwa2V5c1ByaXZhdGUgPSBQZ3BTdG9yZS5vcGVucGdwa2V5c1ByaXZhdGU7XG5cblx0XHR0aGlzLm9wZW5QZ3BLZXlGb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cblx0XHR0aGlzLmFsbG93RHJhZnRBdXRvc2F2ZSA9IFNldHRpbmdzU3RvcmUuYWxsb3dEcmFmdEF1dG9zYXZlO1xuXG5cdFx0dGhpcy5pc0h0dHBzID0gYklzSHR0cHM7XG5cdH1cblxuXHRhZGRPcGVuUGdwS2V5KCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FkZE9wZW5QZ3BLZXknKSk7XG5cdH1cblxuXHRnZW5lcmF0ZU9wZW5QZ3BLZXkoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTmV3T3BlblBncEtleScpKTtcblx0fVxuXG5cdHZpZXdPcGVuUGdwS2V5KG9wZW5QZ3BLZXkpIHtcblx0XHRpZiAob3BlblBncEtleSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvVmlld09wZW5QZ3BLZXknKSwgW29wZW5QZ3BLZXldKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPcGVuUGdwS2V5TW9kZWx9IG9wZW5QZ3BLZXlUb1JlbW92ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGRlbGV0ZU9wZW5QZ3BLZXkob3BlblBncEtleVRvUmVtb3ZlKSB7XG5cdFx0aWYgKG9wZW5QZ3BLZXlUb1JlbW92ZSAmJiBvcGVuUGdwS2V5VG9SZW1vdmUuZGVsZXRlQWNjZXNzKCkpIHtcblx0XHRcdHRoaXMub3BlblBncEtleUZvckRlbGV0aW9uKG51bGwpO1xuXG5cdFx0XHRpZiAob3BlblBncEtleVRvUmVtb3ZlICYmIFBncFN0b3JlLm9wZW5wZ3BLZXlyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IGZpbmRlZEl0ZW0gPSBfLmZpbmQoUGdwU3RvcmUub3BlbnBncGtleXMoKSwgKGtleSkgPT4gb3BlblBncEtleVRvUmVtb3ZlID09PSBrZXkpO1xuXHRcdFx0XHRpZiAoZmluZGVkSXRlbSkge1xuXHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3BrZXlzLnJlbW92ZShmaW5kZWRJdGVtKTtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShmaW5kZWRJdGVtKTtcblxuXHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3BLZXlyaW5nW2ZpbmRlZEl0ZW0uaXNQcml2YXRlID8gJ3ByaXZhdGVLZXlzJyA6ICdwdWJsaWNLZXlzJ10ucmVtb3ZlRm9ySWQoZmluZGVkSXRlbS5ndWlkKTtcblxuXHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3BLZXlyaW5nLnN0b3JlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRPcGVuUGdwS2V5cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFsbG93RHJhZnRBdXRvc2F2ZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignQWxsb3dEcmFmdEF1dG9zYXZlJywgYm9vbFRvQWpheCkpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgT3BlblBncFVzZXJTZXR0aW5ncywgT3BlblBncFVzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9BYnN0cmFjdFN5c3RlbURyb3BEb3duJztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL1NldHRpbmdzL1N5c3RlbURyb3BEb3duJyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdTeXN0ZW1Ecm9wRG93bidcbn0pXG5jbGFzcyBTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcge31cblxuZXhwb3J0IHsgU3lzdGVtRHJvcERvd25TZXR0aW5nc1VzZXJWaWV3LCBTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgc2V0dGluZ3MsIGluYm94IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGdldEZvbGRlckluYm94TmFtZSB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0SGFzaCwgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9TZXR0aW5ncy9NZW51Jyxcblx0dHlwZTogVmlld1R5cGUuTGVmdCxcblx0dGVtcGxhdGVJRDogJ1NldHRpbmdzTWVudSdcbn0pXG5jbGFzcyBNZW51U2V0dGluZ3NVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHNjcmVlblxuXHQgKi9cblx0Y29uc3RydWN0b3Ioc2NyZWVuKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubGVmdFBhbmVsRGlzYWJsZWQgPSBsZWZ0UGFuZWxEaXNhYmxlZDtcblxuXHRcdHRoaXMubW9iaWxlID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXG5cdFx0dGhpcy5tZW51ID0gc2NyZWVuLm1lbnU7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGlmICh0aGlzLm1vYmlsZSkge1xuXHRcdFx0ZG9tLm9uKCdjbGljaycsICcuYi1zZXR0aW5ncy1tZW51IC5lLWl0ZW0uc2VsZWN0YWJsZScsICgpID0+IHtcblx0XHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRrZXkoJ3VwLCBkb3duJywgS2V5U3RhdGUuU2V0dGluZ3MsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyKCQoJy5iLXNldHRpbmdzLW1lbnUgLmUtaXRlbScsIGRvbSkpKTtcblx0fVxuXG5cdGxpbmsocm91dGUpIHtcblx0XHRyZXR1cm4gc2V0dGluZ3Mocm91dGUpO1xuXHR9XG5cblx0YmFja1RvTWFpbEJveENsaWNrKCkge1xuXHRcdHNldEhhc2goaW5ib3goZ2V0Rm9sZGVySW5ib3hOYW1lKCkpKTtcblx0fVxufVxuXG5leHBvcnQgeyBNZW51U2V0dGluZ3NVc2VyVmlldywgTWVudVNldHRpbmdzVXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaW5ib3ggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgZ2V0Rm9sZGVySW5ib3hOYW1lIH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcbmltcG9ydCB7IGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUsIHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9TZXR0aW5ncy9QYW5lJyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdTZXR0aW5nc1BhbmUnXG59KVxuY2xhc3MgUGFuZVNldHRpbmdzVXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubW9iaWxlID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXG5cdFx0dGhpcy5sZWZ0UGFuZWxEaXNhYmxlZCA9IGxlZnRQYW5lbERpc2FibGVkO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlKG51bGwpO1xuXHR9XG5cblx0aGlkZUxlZnQoaXRlbSwgZXZlbnQpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdH1cblxuXHRzaG93TGVmdChpdGVtLCBldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGlmICh0aGlzLm1vYmlsZSkge1xuXHRcdFx0ZG9tLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRiYWNrVG9NYWlsQm94Q2xpY2soKSB7XG5cdFx0c2V0SGFzaChpbmJveChnZXRGb2xkZXJJbmJveE5hbWUoKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFBhbmVTZXR0aW5nc1VzZXJWaWV3LCBQYW5lU2V0dGluZ3NVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XG5pbXBvcnQgQXBwIGZyb20gJ0FwcC9Vc2VyJztcblxuYm9vdHN0cmFwKEFwcCk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBzb3J0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IHNvcnQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc29ydDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdGVzdC5zb3J0O1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG5hdGl2ZVNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogbmF0aXZlU29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5cbmltcG9ydCB7IHBTdHJpbmcsIGxvZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL01lc3NhZ2VPcGVuUGdwJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc01lc3NhZ2VPcGVuUGdwJ1xufSlcbmNsYXNzIE1lc3NhZ2VPcGVuUGdwUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm5vdGlmaWNhdGlvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEtleSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5wcml2YXRlS2V5cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZC5mb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYnV0dG9uRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBudWxsO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cE1lc3NhZ2VPcGVuUEdQO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSlcblx0ZG9Db21tYW5kKCkge1xuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0bGV0IHByaXZhdGVLZXkgPSBudWxsO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodGhpcy5yZXN1bHRDYWxsYmFjayAmJiB0aGlzLnNlbGVjdGVkS2V5KCkpIHtcblx0XHRcdFx0XHRjb25zdCBwcml2YXRlS2V5cyA9IHRoaXMuc2VsZWN0ZWRLZXkoKS5nZXROYXRpdmVLZXlzKCk7XG5cdFx0XHRcdFx0cHJpdmF0ZUtleSA9IHByaXZhdGVLZXlzICYmIHByaXZhdGVLZXlzWzBdID8gcHJpdmF0ZUtleXNbMF0gOiBudWxsO1xuXG5cdFx0XHRcdFx0aWYgKHByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcHJpdmF0ZUtleS5kZWNyeXB0KHBTdHJpbmcodGhpcy5wYXNzd29yZCgpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2coJ0Vycm9yOiBQcml2YXRlIGtleSBjYW5ub3QgYmUgZGVjcnlwdGVkJyk7XG5cdFx0XHRcdFx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0bG9nKGUpO1xuXHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5ID0gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bG9nKCdFcnJvcjogUHJpdmF0ZSBrZXkgY2Fubm90IGJlIGZvdW5kJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGxvZyhlKTtcblx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cblx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdFx0dGhpcy5yZXN1bHRDYWxsYmFjayhwcml2YXRlS2V5KTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5ub3RpZmljYXRpb24oJycpO1xuXG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZC5mb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5idXR0b25Gb2N1cyhmYWxzZSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkS2V5KGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IG51bGw7XG5cdFx0dGhpcy5wcml2YXRlS2V5cyhbXSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRrZXkoJ3RhYixzaGlmdCt0YWInLCBLZXlTdGF0ZS5Qb3B1cE1lc3NhZ2VPcGVuUEdQLCAoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLnBhc3N3b3JkLmZvY3VzKCk6XG5cdFx0XHRcdFx0dGhpcy5idXR0b25Gb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmJ1dHRvbkZvY3VzKCk6XG5cdFx0XHRcdFx0dGhpcy5wYXNzd29yZC5mb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdG9Eb20ub24oJ2NsaWNrJywgJy5rZXktbGlzdF9faXRlbScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblxuXHRcdFx0b0RvbVxuXHRcdFx0XHQuZmluZCgnLmtleS1saXN0X19pdGVtIC5rZXktbGlzdF9faXRlbV9fcmFkaW8nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ2ljb24tcmFkaW8tdW5jaGVja2VkJylcblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdpY29uLXJhZGlvLWNoZWNrZWQnKTtcblxuXHRcdFx0JCh0aGlzKVxuXHRcdFx0XHQuZmluZCgnLmtleS1saXN0X19pdGVtX19yYWRpbycpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdC5yZW1vdmVDbGFzcygnaWNvbi1yYWRpby11bmNoZWNrZWQnKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ2ljb24tcmFkaW8tY2hlY2tlZCcpO1xuXG5cdFx0XHRzZWxmLnNlbGVjdGVkS2V5KGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRzZWxmLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25IaWRlV2l0aERlbGF5KCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdHRoaXMucGFzc3dvcmQuZm9jdXModHJ1ZSk7XG5cdFx0Ly9cdFx0dGhpcy5idXR0b25Gb2N1cyh0cnVlKTtcblx0fVxuXG5cdG9uU2hvdyhmQ2FsbGJhY2ssIHByaXZhdGVLZXlzKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHR0aGlzLnJlc3VsdENhbGxiYWNrID0gZkNhbGxiYWNrO1xuXHRcdHRoaXMucHJpdmF0ZUtleXMocHJpdmF0ZUtleXMpO1xuXG5cdFx0aWYgKHRoaXMudmlld01vZGVsRG9tKSB7XG5cdFx0XHR0aGlzLnZpZXdNb2RlbERvbVxuXHRcdFx0XHQuZmluZCgnLmtleS1saXN0X19pdGVtJylcblx0XHRcdFx0LmZpcnN0KClcblx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IE1lc3NhZ2VPcGVuUGdwUG9wdXBWaWV3LCBNZXNzYWdlT3BlblBncFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBrZXlzID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5rZXlzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgfHwgRE9NSXRlcmFibGVzLmhhc093blByb3BlcnR5KGNsYXNzb2YoaXQpKSA/IGtleXMgOiBvd247XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5rZXlzO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IGluQXJyYXksIHBTdHJpbmcsIGxvZywgaXNVbmQsIHRyaW0sIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IE1hZ2ljcywgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5cbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5jb25zdCBLRVlfTkFNRV9TVUJTVFIgPSAtODtcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQ29tcG9zZU9wZW5QZ3AnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQ29tcG9zZU9wZW5QZ3AnXG59KVxuY2xhc3MgQ29tcG9zZU9wZW5QZ3BQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucHVibGljS2V5c09wdGlvbnNDYXB0aW9uID0gaTE4bignUEdQX05PVElGSUNBVElPTlMvQUREX0FfUFVCTElDS19LRVknKTtcblx0XHR0aGlzLnByaXZhdGVLZXlzT3B0aW9uc0NhcHRpb24gPSBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9TRUxFQ1RfQV9QUklWQVRFX0tFWScpO1xuXG5cdFx0dGhpcy5ub3RpZmljYXRpb24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2lnbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZW5jcnlwdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQuZm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJ1dHRvbkZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRleHQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNlbGVjdGVkUHJpdmF0ZUtleSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5zZWxlY3RlZFB1YmxpY0tleSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLnNpZ25LZXkgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuZW5jcnlwdEtleXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5lbmNyeXB0S2V5c1ZpZXcgPSBrby5jb21wdXRlZCgoKSA9PiBfLmNvbXBhY3QoXy5tYXAodGhpcy5lbmNyeXB0S2V5cygpLCAob0tleSkgPT4gKG9LZXkgPyBvS2V5LmtleSA6IG51bGwpKSkpO1xuXG5cdFx0dGhpcy5wcml2YXRlS2V5c09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBvcHRzID0gXy5tYXAoUGdwU3RvcmUub3BlbnBncGtleXNQcml2YXRlKCksIChvS2V5LCBpSW5kZXgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc2lnbktleSgpICYmIHRoaXMuc2lnbktleSgpLmtleS5pZCA9PT0gb0tleS5pZCkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfLm1hcChvS2V5LnVzZXJzLCAodXNlcikgPT4gKHtcblx0XHRcdFx0XHQnaWQnOiBvS2V5Lmd1aWQsXG5cdFx0XHRcdFx0J25hbWUnOiAnKCcgKyBvS2V5LmlkLnN1YnN0cihLRVlfTkFNRV9TVUJTVFIpLnRvVXBwZXJDYXNlKCkgKyAnKSAnICsgdXNlcixcblx0XHRcdFx0XHQna2V5Jzogb0tleSxcblx0XHRcdFx0XHQnY2xhc3MnOiBpSW5kZXggJSAyID8gJ29kZCcgOiAnZXZlbidcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBfLmNvbXBhY3QoXy5mbGF0dGVuKG9wdHMsIHRydWUpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucHVibGljS2V5c09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBvcHRzID0gXy5tYXAoUGdwU3RvcmUub3BlbnBncGtleXNQdWJsaWMoKSwgKG9LZXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlmICgtMSA8IGluQXJyYXkob0tleSwgdGhpcy5lbmNyeXB0S2V5c1ZpZXcoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gXy5tYXAob0tleS51c2VycywgKHVzZXIpID0+ICh7XG5cdFx0XHRcdFx0J2lkJzogb0tleS5ndWlkLFxuXHRcdFx0XHRcdCduYW1lJzogJygnICsgb0tleS5pZC5zdWJzdHIoS0VZX05BTUVfU1VCU1RSKS50b1VwcGVyQ2FzZSgpICsgJykgJyArIHVzZXIsXG5cdFx0XHRcdFx0J2tleSc6IG9LZXksXG5cdFx0XHRcdFx0J2NsYXNzJzogaW5kZXggJSAyID8gJ29kZCcgOiAnZXZlbidcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gXy5jb21wYWN0KF8uZmxhdHRlbihvcHRzLCB0cnVlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBudWxsO1xuXG5cdFx0dGhpcy5zZWxlY3RlZFByaXZhdGVLZXkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0Q29tbWFuZCgpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbW1hbmQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRQdWJsaWNLZXkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuUG9wdXBDb21wb3NlT3BlblBHUDtcblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXG5cdFx0dGhpcy5hZGRPcHRpb25DbGFzcyA9IChkb21PcHRpb24sIGl0ZW0pID0+IHtcblx0XHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyKGRvbU9wdGlvbiwgaXRlbSk7XG5cblx0XHRcdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmNsYXNzKSAmJiBkb21PcHRpb24pIHtcblx0XHRcdFx0JChkb21PcHRpb24pLmFkZENsYXNzKGl0ZW0uY2xhc3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmRlbGV0ZVB1YmxpY2tLZXkgPSBfLmJpbmQodGhpcy5kZWxldGVQdWJsaWNrS2V5LCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkgJiYgKHNlbGYuc2lnbigpIHx8IHNlbGYuZW5jcnlwdCgpKSlcblx0ZG9Db21tYW5kKCkge1xuXHRcdGxldCByZXN1bHQgPSB0cnVlLFxuXHRcdFx0cHJpdmF0ZUtleSA9IG51bGwsXG5cdFx0XHRhUHVibGljS2V5cyA9IFtdO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXG5cdFx0aWYgKHJlc3VsdCAmJiB0aGlzLnNpZ24oKSkge1xuXHRcdFx0aWYgKCF0aGlzLnNpZ25LZXkoKSkge1xuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QUklWQVRFX0tFWV9GT1VORCcpKTtcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLnNpZ25LZXkoKS5rZXkpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oXG5cdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvTk9fUFJJVkFURV9LRVlfRk9VTkRfRk9SJywge1xuXHRcdFx0XHRcdFx0J0VNQUlMJzogdGhpcy5zaWduS2V5KCkuZW1haWxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdGNvbnN0IHByaXZhdGVLZXlzID0gdGhpcy5zaWduS2V5KCkua2V5LmdldE5hdGl2ZUtleXMoKTtcblx0XHRcdFx0cHJpdmF0ZUtleSA9IHByaXZhdGVLZXlzWzBdIHx8IG51bGw7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAocHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdFx0cHJpdmF0ZUtleS5kZWNyeXB0KHBTdHJpbmcodGhpcy5wYXNzd29yZCgpKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QUklWQVRFX0tFWV9GT1VORCcpKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXN1bHQgJiYgdGhpcy5lbmNyeXB0KCkpIHtcblx0XHRcdGlmICgwID09PSB0aGlzLmVuY3J5cHRLZXlzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL05PX1BVQkxJQ19LRVlTX0ZPVU5EJykpO1xuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5lbmNyeXB0S2V5cygpKSB7XG5cdFx0XHRcdGFQdWJsaWNLZXlzID0gW107XG5cblx0XHRcdFx0Xy5lYWNoKHRoaXMuZW5jcnlwdEtleXMoKSwgKG9LZXkpID0+IHtcblx0XHRcdFx0XHRpZiAob0tleSAmJiBvS2V5LmtleSkge1xuXHRcdFx0XHRcdFx0YVB1YmxpY0tleXMgPSBhUHVibGljS2V5cy5jb25jYXQoXy5jb21wYWN0KF8uZmxhdHRlbihvS2V5LmtleS5nZXROYXRpdmVLZXlzKCkpKSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvS2V5ICYmIG9LZXkuZW1haWwpIHtcblx0XHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QVUJMSUNfS0VZU19GT1VORF9GT1InLCB7XG5cdFx0XHRcdFx0XHRcdFx0J0VNQUlMJzogb0tleS5lbWFpbFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAocmVzdWx0ICYmICgwID09PSBhUHVibGljS2V5cy5sZW5ndGggfHwgdGhpcy5lbmNyeXB0S2V5cygpLmxlbmd0aCAhPT0gYVB1YmxpY0tleXMubGVuZ3RoKSkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAmJiB0aGlzLnJlc3VsdENhbGxiYWNrKSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0bGV0IHBncFByb21pc2UgPSBudWxsO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHByaXZhdGVLZXkgJiYgMCA9PT0gYVB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRwZ3BQcm9taXNlID0gUGdwU3RvcmUub3BlbnBncC5zaWduKHtcblx0XHRcdFx0XHRcdFx0ZGF0YTogdGhpcy50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdHByaXZhdGVLZXlzOiBbcHJpdmF0ZUtleV1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocHJpdmF0ZUtleSAmJiAwIDwgYVB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRwZ3BQcm9taXNlID0gUGdwU3RvcmUub3BlbnBncC5lbmNyeXB0KHtcblx0XHRcdFx0XHRcdFx0ZGF0YTogdGhpcy50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdHB1YmxpY0tleXM6IGFQdWJsaWNLZXlzLFxuXHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5czogW3ByaXZhdGVLZXldXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFwcml2YXRlS2V5ICYmIDAgPCBhUHVibGljS2V5cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHBncFByb21pc2UgPSBQZ3BTdG9yZS5vcGVucGdwLmVuY3J5cHQoe1xuXHRcdFx0XHRcdFx0XHRkYXRhOiB0aGlzLnRleHQoKSxcblx0XHRcdFx0XHRcdFx0cHVibGljS2V5czogYVB1YmxpY0tleXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGxvZyhlKTtcblxuXHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvUEdQX0VSUk9SJywge1xuXHRcdFx0XHRcdFx0XHQnRVJST1InOiAnJyArIGVcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwZ3BQcm9taXNlKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHBncFByb21pc2Vcblx0XHRcdFx0XHRcdFx0LnRoZW4oKG1EYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXN1bHRDYWxsYmFjayhtRGF0YS5kYXRhKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9QR1BfRVJST1InLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdFUlJPUic6ICcnICsgZVxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvUEdQX0VSUk9SJywge1xuXHRcdFx0XHRcdFx0XHRcdCdFUlJPUic6ICcnICsgZVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRzZWxlY3RDb21tYW5kKCkge1xuXHRcdGNvbnN0IGtleUlkID0gdGhpcy5zZWxlY3RlZFByaXZhdGVLZXkoKSxcblx0XHRcdG9wdGlvbiA9IGtleUlkID8gXy5maW5kKHRoaXMucHJpdmF0ZUtleXNPcHRpb25zKCksIChpdGVtKSA9PiBpdGVtICYmIGtleUlkID09PSBpdGVtLmlkKSA6IG51bGw7XG5cblx0XHRpZiAob3B0aW9uKSB7XG5cdFx0XHR0aGlzLnNpZ25LZXkoe1xuXHRcdFx0XHQnZW1wdHknOiAhb3B0aW9uLmtleSxcblx0XHRcdFx0J3NlbGVjdGVkJzoga28ub2JzZXJ2YWJsZSghIW9wdGlvbi5rZXkpLFxuXHRcdFx0XHQndXNlcnMnOiBvcHRpb24ua2V5LnVzZXJzLFxuXHRcdFx0XHQnaGFzaCc6IG9wdGlvbi5rZXkuaWQuc3Vic3RyKEtFWV9OQU1FX1NVQlNUUikudG9VcHBlckNhc2UoKSxcblx0XHRcdFx0J2tleSc6IG9wdGlvbi5rZXlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKClcblx0YWRkQ29tbWFuZCgpIHtcblx0XHRjb25zdCBrZXlJZCA9IHRoaXMuc2VsZWN0ZWRQdWJsaWNLZXkoKSxcblx0XHRcdGtleXMgPSB0aGlzLmVuY3J5cHRLZXlzKCksXG5cdFx0XHRvcHRpb24gPSBrZXlJZCA/IF8uZmluZCh0aGlzLnB1YmxpY0tleXNPcHRpb25zKCksIChpdGVtKSA9PiBpdGVtICYmIGtleUlkID09PSBpdGVtLmlkKSA6IG51bGw7XG5cblx0XHRpZiAob3B0aW9uKSB7XG5cdFx0XHRrZXlzLnB1c2goe1xuXHRcdFx0XHQnZW1wdHknOiAhb3B0aW9uLmtleSxcblx0XHRcdFx0J3NlbGVjdGVkJzoga28ub2JzZXJ2YWJsZSghIW9wdGlvbi5rZXkpLFxuXHRcdFx0XHQncmVtb3ZhYmxlJzoga28ub2JzZXJ2YWJsZSghdGhpcy5zaWduKCkgfHwgIXRoaXMuc2lnbktleSgpIHx8IHRoaXMuc2lnbktleSgpLmtleS5pZCAhPT0gb3B0aW9uLmtleS5pZCksXG5cdFx0XHRcdCd1c2Vycyc6IG9wdGlvbi5rZXkudXNlcnMsXG5cdFx0XHRcdCdoYXNoJzogb3B0aW9uLmtleS5pZC5zdWJzdHIoS0VZX05BTUVfU1VCU1RSKS50b1VwcGVyQ2FzZSgpLFxuXHRcdFx0XHQna2V5Jzogb3B0aW9uLmtleVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZW5jcnlwdEtleXMoa2V5cyk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHR1cGRhdGVDb21tYW5kKCkge1xuXHRcdF8uZWFjaCh0aGlzLmVuY3J5cHRLZXlzKCksIChvS2V5KSA9PiB7XG5cdFx0XHRvS2V5LnJlbW92YWJsZSghdGhpcy5zaWduKCkgfHwgIXRoaXMuc2lnbktleSgpIHx8IHRoaXMuc2lnbktleSgpLmtleS5pZCAhPT0gb0tleS5rZXkuaWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlUHVibGlja0tleShwdWJsaWNLZXkpIHtcblx0XHR0aGlzLmVuY3J5cHRLZXlzLnJlbW92ZShwdWJsaWNLZXkpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLm5vdGlmaWNhdGlvbignJyk7XG5cblx0XHR0aGlzLnNpZ24oZmFsc2UpO1xuXHRcdHRoaXMuZW5jcnlwdChmYWxzZSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKGZhbHNlKTtcblx0XHR0aGlzLmJ1dHRvbkZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuc2lnbktleShudWxsKTtcblx0XHR0aGlzLmVuY3J5cHRLZXlzKFtdKTtcblx0XHR0aGlzLnRleHQoJycpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IG51bGw7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgndGFiLHNoaWZ0K3RhYicsIEtleVN0YXRlLlBvcHVwQ29tcG9zZU9wZW5QR1AsICgpID0+IHtcblx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRjYXNlIHRoaXMucGFzc3dvcmQuZm9jdXMoKTpcblx0XHRcdFx0XHR0aGlzLmJ1dHRvbkZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIHRoaXMuYnV0dG9uRm9jdXMoKTpcblx0XHRcdFx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkhpZGVXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuc2lnbigpKSB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJ1dHRvbkZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdyhmQ2FsbGJhY2ssIHNUZXh0LCBpZGVudGl0eSwgc1RvLCBzQ2MsIHNCY2MpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdGxldCByZWMgPSBbXSxcblx0XHRcdGVtYWlsTGluZSA9ICcnO1xuXG5cdFx0Y29uc3QgZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IGZDYWxsYmFjaztcblxuXHRcdGlmICgnJyAhPT0gc1RvKSB7XG5cdFx0XHRyZWMucHVzaChzVG8pO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gc0NjKSB7XG5cdFx0XHRyZWMucHVzaChzQ2MpO1xuXHRcdH1cblxuXHRcdGlmICgnJyAhPT0gc0JjYykge1xuXHRcdFx0cmVjLnB1c2goc0JjYyk7XG5cdFx0fVxuXG5cdFx0cmVjID0gcmVjLmpvaW4oJywgJykuc3BsaXQoJywnKTtcblx0XHRyZWMgPSBfLmNvbXBhY3QoXG5cdFx0XHRfLm1hcChyZWMsICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRlbWFpbC5jbGVhcigpO1xuXHRcdFx0XHRlbWFpbC5wYXJzZSh0cmltKHZhbHVlKSk7XG5cdFx0XHRcdHJldHVybiAnJyA9PT0gZW1haWwuZW1haWwgPyBmYWxzZSA6IGVtYWlsLmVtYWlsO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0aWYgKGlkZW50aXR5ICYmIGlkZW50aXR5LmVtYWlsKCkpIHtcblx0XHRcdGVtYWlsTGluZSA9IGlkZW50aXR5LmVtYWlsKCk7XG5cdFx0XHRyZWMudW5zaGlmdChlbWFpbExpbmUpO1xuXG5cdFx0XHRjb25zdCBrZXlzID0gUGdwU3RvcmUuZmluZEFsbFByaXZhdGVLZXlzQnlFbWFpbE5vdE5hdGl2ZShlbWFpbExpbmUpO1xuXHRcdFx0aWYgKGtleXMgJiYga2V5c1swXSkge1xuXHRcdFx0XHR0aGlzLnNpZ25LZXkoe1xuXHRcdFx0XHRcdCd1c2Vycyc6IGtleXNbMF0udXNlcnMgfHwgW2VtYWlsTGluZV0sXG5cdFx0XHRcdFx0J2hhc2gnOiBrZXlzWzBdLmlkLnN1YnN0cihLRVlfTkFNRV9TVUJTVFIpLnRvVXBwZXJDYXNlKCksXG5cdFx0XHRcdFx0J2tleSc6IGtleXNbMF1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2lnbktleSgpKSB7XG5cdFx0XHR0aGlzLnNpZ24odHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlYyAmJiAwIDwgcmVjLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5lbmNyeXB0S2V5cyhcblx0XHRcdFx0Xy51bmlxKFxuXHRcdFx0XHRcdF8uY29tcGFjdChcblx0XHRcdFx0XHRcdF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdFx0Xy5tYXAocmVjLCAocmVjRW1haWwpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBrZXlzID0gUGdwU3RvcmUuZmluZEFsbFB1YmxpY0tleXNCeUVtYWlsTm90TmF0aXZlKHJlY0VtYWlsKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5c1xuXHRcdFx0XHRcdFx0XHRcdFx0PyBfLm1hcChrZXlzLCAocHVibGljS2V5KSA9PiAoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdlbXB0eSc6ICFwdWJsaWNLZXksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdGVkJzoga28ub2JzZXJ2YWJsZSghIXB1YmxpY0tleSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbW92YWJsZSc6IGtvLm9ic2VydmFibGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5zaWduKCkgfHwgIXRoaXMuc2lnbktleSgpIHx8IHRoaXMuc2lnbktleSgpLmtleS5pZCAhPT0gcHVibGljS2V5LmlkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndXNlcnMnOiBwdWJsaWNLZXkgPyBwdWJsaWNLZXkudXNlcnMgfHwgW3JlY0VtYWlsXSA6IFtyZWNFbWFpbF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2hhc2gnOiBwdWJsaWNLZXkgPyBwdWJsaWNLZXkuaWQuc3Vic3RyKEtFWV9OQU1FX1NVQlNUUikudG9VcHBlckNhc2UoKSA6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdrZXknOiBwdWJsaWNLZXlcblx0XHRcdFx0XHRcdFx0XHRcdCAgfSkpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IFtdO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0KGVuY3J5cHRLZXkpID0+IGVuY3J5cHRLZXkuaGFzaFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoMCA8IHRoaXMuZW5jcnlwdEtleXMoKS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5lbmNyeXB0KHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudGV4dChzVGV4dCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29tcG9zZU9wZW5QZ3BQb3B1cFZpZXcsIENvbXBvc2VPcGVuUGdwUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biwgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgc2V0Rm9sZGVySGFzaCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCBNZXNzYWdlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTWVzc2FnZSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRm9sZGVyQ2xlYXInLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRm9sZGVyQ2xlYXInXG59KVxuY2xhc3MgRm9sZGVyQ2xlYXJQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuY2xlYXJpbmdQcm9jZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jbGVhcmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lRm9yQ2xlYXIgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyKCk7XG5cdFx0XHRyZXR1cm4gZm9sZGVyID8gZm9sZGVyLnByaW50YWJsZUZ1bGxOYW1lKCkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZm9sZGVyTmFtZUZvckNsZWFyID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcigpO1xuXHRcdFx0cmV0dXJuIGZvbGRlciA/IGZvbGRlci5sb2NhbE5hbWUoKSA6ICcnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kYW5nZXJEZXNjSHRtbCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRpMThuKCdQT1BVUFNfQ0xFQVJfRk9MREVSL0RBTkdFUl9ERVNDX0hUTUxfMScsIHsgJ0ZPTERFUic6IHRoaXMuZm9sZGVyTmFtZUZvckNsZWFyKCkgfSlcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHtcblx0XHRjb25zdCBmb2xkZXIgPSBzZWxmLnNlbGVjdGVkRm9sZGVyKCksXG5cdFx0XHRpc0NsZWFyaW5nID0gc2VsZi5jbGVhcmluZ1Byb2Nlc3MoKTtcblxuXHRcdHJldHVybiAhaXNDbGVhcmluZyAmJiBudWxsICE9PSBmb2xkZXI7XG5cdH0pXG5cdGNsZWFyQ29tbWFuZCgpIHtcblx0XHRjb25zdCBmb2xkZXJUb0NsZWFyID0gdGhpcy5zZWxlY3RlZEZvbGRlcigpO1xuXHRcdGlmIChmb2xkZXJUb0NsZWFyKSB7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZShudWxsKTtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdChbXSk7XG5cblx0XHRcdHRoaXMuY2xlYXJpbmdQcm9jZXNzKHRydWUpO1xuXG5cdFx0XHRmb2xkZXJUb0NsZWFyLm1lc3NhZ2VDb3VudEFsbCgwKTtcblx0XHRcdGZvbGRlclRvQ2xlYXIubWVzc2FnZUNvdW50VW5yZWFkKDApO1xuXG5cdFx0XHRzZXRGb2xkZXJIYXNoKGZvbGRlclRvQ2xlYXIuZnVsbE5hbWVSYXcsICcnKTtcblxuXHRcdFx0UmVtb3RlLmZvbGRlckNsZWFyKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5jbGVhcmluZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCh0cnVlKTtcblx0XHRcdFx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhcmluZ0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFyaW5nRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIGZvbGRlclRvQ2xlYXIuZnVsbE5hbWVSYXcpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5jbGVhcmluZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXIobnVsbCk7XG5cdH1cblxuXHRvblNob3coZm9sZGVyKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0dGhpcy5zZWxlY3RlZEZvbGRlcihmb2xkZXIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBGb2xkZXJDbGVhclBvcHVwVmlldywgRm9sZGVyQ2xlYXJQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyB0cmltIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4sIHRyaWdnZXIgYXMgdHJhbnNsYXRvclRyaWdnZXIgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIgfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuXG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQWR2YW5jZWRTZWFyY2gnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQWR2YW5jZWRTZWFyY2gnXG59KVxuY2xhc3MgQWR2YW5jZWRTZWFyY2hQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZnJvbUZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZyb20gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zdWJqZWN0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXh0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IGtvLm9ic2VydmFibGUoLTEpO1xuXG5cdFx0dGhpcy5oYXNBdHRhY2htZW50ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdGFycmVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51bnNlZW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7IGlkOiAtMSwgbmFtZTogaTE4bignU0VBUkNIL0xBQkVMX0FEVl9EQVRFX0FMTCcpIH0sXG5cdFx0XHRcdHsgaWQ6IDMsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV8zX0RBWVMnKSB9LFxuXHRcdFx0XHR7IGlkOiA3LCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfN19EQVlTJykgfSxcblx0XHRcdFx0eyBpZDogMzAsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV9NT05USCcpIH0sXG5cdFx0XHRcdHsgaWQ6IDkwLCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfM19NT05USFMnKSB9LFxuXHRcdFx0XHR7IGlkOiAxODAsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV82X01PTlRIUycpIH0sXG5cdFx0XHRcdHsgaWQ6IDM2NSwgbmFtZTogaTE4bignU0VBUkNIL0xBQkVMX0FEVl9EQVRFX1lFQVInKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRzZWFyY2hDb21tYW5kKCkge1xuXHRcdGNvbnN0IHNlYXJjaCA9IHRoaXMuYnVpbGRTZWFyY2hTdHJpbmcoKTtcblx0XHRpZiAoJycgIT09IHNlYXJjaCkge1xuXHRcdFx0TWVzc2FnZVN0b3JlLm1haW5NZXNzYWdlTGlzdFNlYXJjaChzZWFyY2gpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHR9XG5cblx0cGFyc2VTZWFyY2hTdHJpbmdWYWx1ZShzZWFyY2gpIHtcblx0XHRjb25zdCBwYXJ0cyA9IChzZWFyY2ggfHwgJycpLnNwbGl0KC9bXFxzXSsvZyk7XG5cdFx0Xy5lYWNoKHBhcnRzLCAocGFydCkgPT4ge1xuXHRcdFx0c3dpdGNoIChwYXJ0KSB7XG5cdFx0XHRcdGNhc2UgJ2hhczphdHRhY2htZW50Jzpcblx0XHRcdFx0XHR0aGlzLmhhc0F0dGFjaG1lbnQodHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2lzOnVuc2VlbixmbGFnZ2VkJzpcblx0XHRcdFx0XHR0aGlzLnN0YXJyZWQodHJ1ZSk7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAnaXM6dW5zZWVuJzpcblx0XHRcdFx0XHR0aGlzLnVuc2Vlbih0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hTdHJpbmdWYWx1ZSh2YWx1ZSkge1xuXHRcdGlmICgtMSA8IHZhbHVlLmluZGV4T2YoJyAnKSkge1xuXHRcdFx0dmFsdWUgPSAnXCInICsgdmFsdWUgKyAnXCInO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRidWlsZFNlYXJjaFN0cmluZygpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXSxcblx0XHRcdGZyb21fID0gdHJpbSh0aGlzLmZyb20oKSksXG5cdFx0XHR0byA9IHRyaW0odGhpcy50bygpKSxcblx0XHRcdHN1YmplY3QgPSB0cmltKHRoaXMuc3ViamVjdCgpKSxcblx0XHRcdHRleHQgPSB0cmltKHRoaXMudGV4dCgpKSxcblx0XHRcdGlzUGFydCA9IFtdLFxuXHRcdFx0aGFzUGFydCA9IFtdO1xuXG5cdFx0aWYgKGZyb21fICYmICcnICE9PSBmcm9tXykge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2Zyb206JyArIHRoaXMuYnVpbGRTZWFyY2hTdHJpbmdWYWx1ZShmcm9tXykpO1xuXHRcdH1cblxuXHRcdGlmICh0byAmJiAnJyAhPT0gdG8pIHtcblx0XHRcdHJlc3VsdC5wdXNoKCd0bzonICsgdGhpcy5idWlsZFNlYXJjaFN0cmluZ1ZhbHVlKHRvKSk7XG5cdFx0fVxuXG5cdFx0aWYgKHN1YmplY3QgJiYgJycgIT09IHN1YmplY3QpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdzdWJqZWN0OicgKyB0aGlzLmJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmhhc0F0dGFjaG1lbnQoKSkge1xuXHRcdFx0aGFzUGFydC5wdXNoKCdhdHRhY2htZW50Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudW5zZWVuKCkpIHtcblx0XHRcdGlzUGFydC5wdXNoKCd1bnNlZW4nKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdGFycmVkKCkpIHtcblx0XHRcdGlzUGFydC5wdXNoKCdmbGFnZ2VkJyk7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPCBoYXNQYXJ0Lmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2hhczonICsgaGFzUGFydC5qb2luKCcsJykpO1xuXHRcdH1cblxuXHRcdGlmICgwIDwgaXNQYXJ0Lmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0LnB1c2goJ2lzOicgKyBpc1BhcnQuam9pbignLCcpKTtcblx0XHR9XG5cblx0XHRpZiAoLTEgPCB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlKCkpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdkYXRlOicgKyBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIodGhpcy5zZWxlY3RlZERhdGVWYWx1ZSgpKSArICcvJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHQgJiYgJycgIT09IHRleHQpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCd0ZXh0OicgKyB0aGlzLmJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUodGV4dCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cmltKHJlc3VsdC5qb2luKCcgJykpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmZyb20oJycpO1xuXHRcdHRoaXMudG8oJycpO1xuXHRcdHRoaXMuc3ViamVjdCgnJyk7XG5cdFx0dGhpcy50ZXh0KCcnKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUoLTEpO1xuXHRcdHRoaXMuaGFzQXR0YWNobWVudChmYWxzZSk7XG5cdFx0dGhpcy5zdGFycmVkKGZhbHNlKTtcblx0XHR0aGlzLnVuc2VlbihmYWxzZSk7XG5cblx0XHR0aGlzLmZyb21Gb2N1cyh0cnVlKTtcblx0fVxuXG5cdG9uU2hvdyhzZWFyY2gpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0XHR0aGlzLnBhcnNlU2VhcmNoU3RyaW5nVmFsdWUoc2VhcmNoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmZyb21Gb2N1cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBBZHZhbmNlZFNlYXJjaFBvcHVwVmlldywgQWR2YW5jZWRTZWFyY2hQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1R3b0ZhY3RvclRlc3QnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzVHdvRmFjdG9yVGVzdCdcbn0pXG5jbGFzcyBUd29GYWN0b3JUZXN0UG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmNvZGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvZGUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29kZS5zdGF0dXMgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5rb1Rlc3RlZFRyaWdnZXIgPSBudWxsO1xuXG5cdFx0dGhpcy50ZXN0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gJycgIT09IHNlbGYuY29kZSgpICYmICFzZWxmLnRlc3RpbmcoKSlcblx0dGVzdENvZGVDb21tYW5kKCkge1xuXHRcdHRoaXMudGVzdGluZyh0cnVlKTtcblx0XHRSZW1vdGUudGVzdFR3b0ZhY3RvcigocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdFx0dGhpcy5jb2RlLnN0YXR1cyhTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiAhIWRhdGEuUmVzdWx0KTtcblxuXHRcdFx0aWYgKHRoaXMua29UZXN0ZWRUcmlnZ2VyICYmIHRoaXMuY29kZS5zdGF0dXMoKSkge1xuXHRcdFx0XHR0aGlzLmtvVGVzdGVkVHJpZ2dlcih0cnVlKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLmNvZGUoKSk7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMuY29kZSgnJyk7XG5cdFx0dGhpcy5jb2RlLmZvY3VzZWQoZmFsc2UpO1xuXHRcdHRoaXMuY29kZS5zdGF0dXMobnVsbCk7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblxuXHRcdHRoaXMua29UZXN0ZWRUcmlnZ2VyID0gbnVsbDtcblx0fVxuXG5cdG9uU2hvdyhrb1Rlc3RlZFRyaWdnZXIpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMua29UZXN0ZWRUcmlnZ2VyID0ga29UZXN0ZWRUcmlnZ2VyO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5jb2RlLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IFR3b0ZhY3RvclRlc3RQb3B1cFZpZXcsIFR3b0ZhY3RvclRlc3RQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IHRyaW0sIGRlbGVnYXRlUnVuLCBsb2cgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9BZGRPcGVuUGdwS2V5Jyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0FkZE9wZW5QZ3BLZXknXG59KVxuY2xhc3MgQWRkT3BlblBncEtleVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5rZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmtleS5mb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMua2V5LmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmtleS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5rZXkuZXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKCcnKTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0YWRkT3BlblBncEtleUNvbW1hbmQoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cblx0XHRjb25zdCByZWcgPSAvWy1dezMsNn1CRUdJTltcXHNdUEdQW1xcc10oUFJJVkFURXxQVUJMSUMpW1xcc11LRVlbXFxzXUJMT0NLWy1dezMsNn1bXFxzXFxTXSs/Wy1dezMsNn1FTkRbXFxzXVBHUFtcXHNdKFBSSVZBVEV8UFVCTElDKVtcXHNdS0VZW1xcc11CTE9DS1stXXszLDZ9L2dpLFxuXHRcdFx0b3BlbnBncEtleXJpbmcgPSBQZ3BTdG9yZS5vcGVucGdwS2V5cmluZztcblxuXHRcdGxldCBrZXlUcmltbWVkID0gdHJpbSh0aGlzLmtleSgpKTtcblxuXHRcdGlmICgvW1xcbl0vLnRlc3Qoa2V5VHJpbW1lZCkpIHtcblx0XHRcdGtleVRyaW1tZWQgPSBrZXlUcmltbWVkLnJlcGxhY2UoL1tcXHJdKy9nLCAnJykucmVwbGFjZSgvW1xcbl17Mix9L2csICdcXG5cXG4nKTtcblx0XHR9XG5cblx0XHR0aGlzLmtleS5lcnJvcignJyA9PT0ga2V5VHJpbW1lZCk7XG5cdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKCcnKTtcblxuXHRcdGlmICghb3BlbnBncEtleXJpbmcgfHwgdGhpcy5rZXkuZXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBtYXRjaCA9IG51bGwsXG5cdFx0XHRjb3VudCA9IDMwLFxuXHRcdFx0ZG9uZSA9IGZhbHNlO1xuXG5cdFx0ZG8ge1xuXHRcdFx0bWF0Y2ggPSByZWcuZXhlYyhrZXlUcmltbWVkKTtcblx0XHRcdGlmIChtYXRjaCAmJiAwIDwgY291bnQpIHtcblx0XHRcdFx0aWYgKG1hdGNoWzBdICYmIG1hdGNoWzFdICYmIG1hdGNoWzJdICYmIG1hdGNoWzFdID09PSBtYXRjaFsyXSkge1xuXHRcdFx0XHRcdGxldCBlcnIgPSBudWxsO1xuXHRcdFx0XHRcdGlmICgnUFJJVkFURScgPT09IG1hdGNoWzFdKSB7XG5cdFx0XHRcdFx0XHRlcnIgPSBvcGVucGdwS2V5cmluZy5wcml2YXRlS2V5cy5pbXBvcnRLZXkobWF0Y2hbMF0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoJ1BVQkxJQycgPT09IG1hdGNoWzFdKSB7XG5cdFx0XHRcdFx0XHRlcnIgPSBvcGVucGdwS2V5cmluZy5wdWJsaWNLZXlzLmltcG9ydEtleShtYXRjaFswXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdFx0dGhpcy5rZXkuZXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmtleS5lcnJvck1lc3NhZ2UoZXJyICYmIGVyclswXSA/ICcnICsgZXJyWzBdIDogJycpO1xuXHRcdFx0XHRcdFx0bG9nKGVycik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y291bnQgLT0gMTtcblx0XHRcdFx0ZG9uZSA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9uZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSB3aGlsZSAoIWRvbmUpO1xuXG5cdFx0b3BlbnBncEtleXJpbmcuc3RvcmUoKTtcblxuXHRcdGdldEFwcCgpLnJlbG9hZE9wZW5QZ3BLZXlzKCk7XG5cblx0XHRpZiAodGhpcy5rZXkuZXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMua2V5KCcnKTtcblx0XHR0aGlzLmtleS5lcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKCcnKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmtleS5mb2N1cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBBZGRPcGVuUGdwS2V5UG9wdXBWaWV3LCBBZGRPcGVuUGdwS2V5UG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0sIGxvZywgZGVsZWdhdGVSdW4sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgUGdwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvUGdwJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9OZXdPcGVuUGdwS2V5Jyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc05ld09wZW5QZ3BLZXknXG59KVxuY2xhc3MgTmV3T3BlblBncEtleVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lbWFpbCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZW1haWwuZm9jdXMgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmVtYWlsLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5rZXlCaXRMZW5ndGggPSBrby5vYnNlcnZhYmxlKE1hZ2ljcy5CaXRMZW5ndGgyMDQ4KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZW1haWwuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuZW1haWwuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRnZW5lcmF0ZU9wZW5QZ3BLZXlDb21tYW5kKCkge1xuXHRcdGNvbnN0IHVzZXJJZCA9IHt9LFxuXHRcdFx0b3BlbnBncEtleXJpbmcgPSBQZ3BTdG9yZS5vcGVucGdwS2V5cmluZztcblxuXHRcdHRoaXMuZW1haWwuZXJyb3IoJycgPT09IHRyaW0odGhpcy5lbWFpbCgpKSk7XG5cdFx0aWYgKCFvcGVucGdwS2V5cmluZyB8fCB0aGlzLmVtYWlsLmVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR1c2VySWQuZW1haWwgPSB0aGlzLmVtYWlsKCk7XG5cdFx0aWYgKCcnICE9PSB0aGlzLm5hbWUoKSkge1xuXHRcdFx0dXNlcklkLm5hbWUgPSB0aGlzLm5hbWUoKTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvcignJyk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3Bcblx0XHRcdFx0XHQuZ2VuZXJhdGVLZXkoe1xuXHRcdFx0XHRcdFx0dXNlcklkczogW3VzZXJJZF0sXG5cdFx0XHRcdFx0XHRudW1CaXRzOiBwSW50KHRoaXMua2V5Qml0TGVuZ3RoKCkpLFxuXHRcdFx0XHRcdFx0cGFzc3BocmFzZTogdHJpbSh0aGlzLnBhc3N3b3JkKCkpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbigoa2V5UGFpcikgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGtleVBhaXIgJiYga2V5UGFpci5wcml2YXRlS2V5QXJtb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRvcGVucGdwS2V5cmluZy5wcml2YXRlS2V5cy5pbXBvcnRLZXkoa2V5UGFpci5wcml2YXRlS2V5QXJtb3JlZCk7XG5cdFx0XHRcdFx0XHRcdG9wZW5wZ3BLZXlyaW5nLnB1YmxpY0tleXMuaW1wb3J0S2V5KGtleVBhaXIucHVibGljS2V5QXJtb3JlZCk7XG5cblx0XHRcdFx0XHRcdFx0b3BlbnBncEtleXJpbmcuc3RvcmUoKTtcblxuXHRcdFx0XHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRPcGVuUGdwS2V5cygpO1xuXHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2FuY2VsQ29tbWFuZCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zaG93RXJyb3IoZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdHRoaXMuc2hvd0Vycm9yKGUpO1xuXHRcdFx0fVxuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRzaG93RXJyb3IoZSkge1xuXHRcdGxvZyhlKTtcblx0XHRpZiAoZSAmJiBlLm1lc3NhZ2UpIHtcblx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cblx0XHR0aGlzLmVtYWlsKCcnKTtcblx0XHR0aGlzLmVtYWlsLmVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmtleUJpdExlbmd0aChNYWdpY3MuQml0TGVuZ3RoMjA0OCk7XG5cblx0XHR0aGlzLnN1Ym1pdEVycm9yKCcnKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmVtYWlsLmZvY3VzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE5ld09wZW5QZ3BLZXlQb3B1cFZpZXcsIE5ld09wZW5QZ3BLZXlQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2VsZWN0RWxlbWVudCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9WaWV3T3BlblBncEtleScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNWaWV3T3BlblBncEtleSdcbn0pXG5jbGFzcyBWaWV3T3BlblBncEtleVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5rZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmtleURvbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cFZpZXdPcGVuUEdQO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmtleSgnJyk7XG5cdH1cblxuXHRzZWxlY3RLZXkoKSB7XG5cdFx0Y29uc3QgZWwgPSB0aGlzLmtleURvbSgpO1xuXHRcdGlmIChlbCkge1xuXHRcdFx0c2VsZWN0RWxlbWVudChlbCk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9wZW5QZ3BLZXkpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdGlmIChvcGVuUGdwS2V5KSB7XG5cdFx0XHR0aGlzLmtleShvcGVuUGdwS2V5LmFybW9yKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgnY3RybCthLCBjb21tYW5kK2EnLCBLZXlTdGF0ZS5Qb3B1cFZpZXdPcGVuUEdQLCAoKSA9PiB7XG5cdFx0XHR0aGlzLnNlbGVjdEtleSgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IFZpZXdPcGVuUGdwS2V5UG9wdXBWaWV3LCBWaWV3T3BlblBncEtleVBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1dlbGNvbWVQYWdlJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc1dlbGNvbWVQYWdlJ1xufSlcbmNsYXNzIFdlbGNvbWVQYWdlUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLndlbGNvbWVQYWdlVVJMID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNsb3NlRm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLndlbGNvbWVQYWdlVVJMKCcnKTtcblx0XHR0aGlzLmNsb3NlRm9jdXNlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNVcmxcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblNob3coc1VybCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXG5cdFx0dGhpcy53ZWxjb21lUGFnZVVSTChzVXJsKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmNsb3NlRm9jdXNlZCh0cnVlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHRQcm9taXNlcy53ZWxjb21lQ2xvc2UoKTtcblx0fVxufVxuXG5leHBvcnQgeyBXZWxjb21lUGFnZVBvcHVwVmlldywgV2VsY29tZVBhZ2VQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== diff --git a/app/rainloop/v/1.15.0/static/js/boot.js b/app/rainloop/v/1.15.0/static/js/boot.js new file mode 100644 index 00000000..feb6c7d0 --- /dev/null +++ b/app/rainloop/v/1.15.0/static/js/boot.js @@ -0,0 +1,8421 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "rainloop/v/0.0.0/static/js/"; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 496); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */, +/* 1 */, +/* 2 */, +/* 3 */, +/* 4 */ +/*!*************************!*\ + !*** external "window" ***! + \*************************/ +/*! no static exports found */ +/*! exports used: default */ +/***/ (function(module, exports) { + +module.exports = window; + +/***/ }), +/* 5 */, +/* 6 */, +/* 7 */, +/* 8 */, +/* 9 */, +/* 10 */, +/* 11 */, +/* 12 */, +/* 13 */, +/* 14 */, +/* 15 */, +/* 16 */, +/* 17 */, +/* 18 */, +/* 19 */, +/* 20 */, +/* 21 */, +/* 22 */, +/* 23 */, +/* 24 */, +/* 25 */, +/* 26 */, +/* 27 */ +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/global.js ***! + \**************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + Function('return this')(); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) + +/***/ }), +/* 28 */, +/* 29 */, +/* 30 */, +/* 31 */, +/* 32 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/well-known-symbol.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var shared = __webpack_require__(/*! ../internals/shared */ 128); +var has = __webpack_require__(/*! ../internals/has */ 42); +var uid = __webpack_require__(/*! ../internals/uid */ 129); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 185); + +var WellKnownSymbolsStore = shared('wks'); +var Symbol = global.Symbol; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), +/* 33 */, +/* 34 */, +/* 35 */, +/* 36 */ +/*!*************************************************!*\ + !*** ./node_modules/core-js/internals/fails.js ***! + \*************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), +/* 37 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/an-object.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ../internals/is-object */ 44); + +module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } return it; +}; + + +/***/ }), +/* 38 */, +/* 39 */, +/* 40 */, +/* 41 */, +/* 42 */ +/*!***********************************************!*\ + !*** ./node_modules/core-js/internals/has.js ***! + \***********************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 43 */, +/* 44 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-object.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), +/* 45 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 50); +var exec = __webpack_require__(/*! ../internals/regexp-exec */ 110); + +$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { + exec: exec +}); + + +/***/ }), +/* 46 */, +/* 47 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/descriptors.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(/*! ../internals/fails */ 36); + +// Thank's IE8 for his funny defineProperty +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + + +/***/ }), +/* 48 */ +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! + \**************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 49 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/classof-raw.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 50 */ +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/export.js ***! + \**************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 181); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } +}; + + +/***/ }), +/* 51 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.function.name.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; + +var FunctionPrototype = Function.prototype; +var FunctionPrototypeToString = FunctionPrototype.toString; +var nameRE = /^\s*function ([^ (]*)/; +var NAME = 'name'; + +// Function instances `.name` property +// https://tc39.github.io/ecma262/#sec-function-instances-name +if (DESCRIPTORS && !(NAME in FunctionPrototype)) { + defineProperty(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return FunctionPrototypeToString.call(this).match(nameRE)[1]; + } catch (error) { + return ''; + } + } + }); +} + + +/***/ }), +/* 52 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-define-property.js ***! + \******************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); + +var nativeDefineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.github.io/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), +/* 53 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/redefine.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); +var has = __webpack_require__(/*! ../internals/has */ 42); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); + +var getInternalState = InternalStateModule.get; +var enforceInternalState = InternalStateModule.enforce; +var TEMPLATE = String(String).split('String'); + +(module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + if (typeof value == 'function') { + if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); + enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); + } + if (O === global) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, 'toString', function toString() { + return typeof this == 'function' && getInternalState(this).source || inspectSource(this); +}); + + +/***/ }), +/* 54 */, +/* 55 */, +/* 56 */ +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/require-object-coercible.js ***! + \********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +// `RequireObjectCoercible` abstract operation +// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), +/* 57 */ +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.replace.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 135); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var toObject = __webpack_require__(/*! ../internals/to-object */ 120); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); + +var max = Math.max; +var min = Math.min; +var floor = Math.floor; +var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; +var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; + +var maybeToString = function (it) { + return it === undefined ? it : String(it); +}; + +// @@replace logic +fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE; + var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0; + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + + return [ + // `String.prototype.replace` method + // https://tc39.github.io/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = searchValue == undefined ? undefined : searchValue[REPLACE]; + return replacer !== undefined + ? replacer.call(searchValue, O, replaceValue) + : nativeReplace.call(String(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace + function (regexp, replaceValue) { + if ( + (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) || + (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1) + ) { + var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); + if (res.done) return res.value; + } + + var rx = anObject(regexp); + var S = String(this); + + var functionalReplace = typeof replaceValue === 'function'; + if (!functionalReplace) replaceValue = String(replaceValue); + + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = regExpExec(rx, S); + if (result === null) break; + + results.push(result); + if (!global) break; + + var matchStr = String(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + + var matched = String(result[0]); + var position = max(min(toInteger(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = String(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + S.slice(nextSourcePosition); + } + ]; + + // https://tc39.github.io/ecma262/#sec-getsubstitution + function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return nativeReplace.call(replacement, symbols, function (match, ch) { + var capture; + switch (ch.charAt(0)) { + case '$': return '$'; + case '&': return matched; + case '`': return str.slice(0, position); + case "'": return str.slice(tailPos); + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + } +}); + + +/***/ }), +/* 58 */, +/* 59 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/get-built-in.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(/*! ../internals/path */ 150); +var global = __webpack_require__(/*! ../internals/global */ 27); + +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; +}; + + +/***/ }), +/* 60 */, +/* 61 */, +/* 62 */, +/* 63 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.to-string.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 186); + +// `Object.prototype.toString` method +// https://tc39.github.io/ecma262/#sec-object.prototype.tostring +if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, { unsafe: true }); +} + + +/***/ }), +/* 64 */, +/* 65 */, +/* 66 */, +/* 67 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/a-function.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } return it; +}; + + +/***/ }), +/* 68 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/web.timers.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(/*! ../internals/export */ 50); +var global = __webpack_require__(/*! ../internals/global */ 27); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); + +var slice = [].slice; +var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check + +var wrap = function (scheduler) { + return function (handler, timeout /* , ...arguments */) { + var boundArgs = arguments.length > 2; + var args = boundArgs ? slice.call(arguments, 2) : undefined; + return scheduler(boundArgs ? function () { + // eslint-disable-next-line no-new-func + (typeof handler == 'function' ? handler : Function(handler)).apply(this, args); + } : handler, timeout); + }; +}; + +// ie9- setTimeout & setInterval additional parameters fix +// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers +$({ global: true, bind: true, forced: MSIE }, { + // `setTimeout` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout + setTimeout: wrap(global.setTimeout), + // `setInterval` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval + setInterval: wrap(global.setInterval) +}); + + +/***/ }), +/* 69 */, +/* 70 */, +/* 71 */, +/* 72 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/to-indexed-object.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), +/* 73 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-length.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.github.io/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), +/* 74 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/iterators.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), +/* 75 */, +/* 76 */, +/* 77 */, +/* 78 */, +/* 79 */, +/* 80 */ +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/is-pure.js ***! + \***************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = false; + + +/***/ }), +/* 81 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/to-integer.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var ceil = Math.ceil; +var floor = Math.floor; + +// `ToInteger` abstract operation +// https://tc39.github.io/ecma262/#sec-tointeger +module.exports = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); +}; + + +/***/ }), +/* 82 */, +/* 83 */, +/* 84 */, +/* 85 */, +/* 86 */, +/* 87 */, +/* 88 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/internal-state.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 180); +var global = __webpack_require__(/*! ../internals/global */ 27); +var isObject = __webpack_require__(/*! ../internals/is-object */ 44); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); +var objectHas = __webpack_require__(/*! ../internals/has */ 42); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); + +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), +/* 89 */, +/* 90 */, +/* 91 */ +/*!******************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! + \******************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 167); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); +var has = __webpack_require__(/*! ../internals/has */ 42); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); + +var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); +}; + + +/***/ }), +/* 92 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! + \**********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 93 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/set-global.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); + +module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } return value; +}; + + +/***/ }), +/* 94 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/inspect-source.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(/*! ../internals/shared-store */ 127); + +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), +/* 95 */ +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! + \*****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), +/* 96 */, +/* 97 */, +/* 98 */, +/* 99 */ +/*!************************************!*\ + !*** external "window.progressJs" ***! + \************************************/ +/*! no static exports found */ +/*! exports used: default */ +/***/ (function(module, exports) { + +module.exports = window.progressJs; + +/***/ }), +/* 100 */, +/* 101 */, +/* 102 */ +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/document-create-element.js ***! + \*******************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var isObject = __webpack_require__(/*! ../internals/is-object */ 44); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), +/* 103 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/hidden-keys.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), +/* 104 */ +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/function-bind-context.js ***! + \*****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); + +// optional / simple context binding +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: return function () { + return fn.call(that); + }; + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 105 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/engine-user-agent.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); + +module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + +/***/ }), +/* 106 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/new-promise-capability.js ***! + \******************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); +}; + +// 25.4.1.5 NewPromiseCapability(C) +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + + +/***/ }), +/* 107 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/shared-key.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(/*! ../internals/shared */ 128); +var uid = __webpack_require__(/*! ../internals/uid */ 129); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), +/* 108 */ +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! + \*********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), +/* 109 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; +var has = __webpack_require__(/*! ../internals/has */ 42); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC) { + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + + +/***/ }), +/* 110 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-exec.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 173); +var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 236); + +var nativeExec = RegExp.prototype.exec; +// This always refers to the native implementation, because the +// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, +// which loads this file before patching the method. +var nativeReplace = String.prototype.replace; + +var patchedExec = nativeExec; + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; +})(); + +var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; + +if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = String(str).slice(re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; +} + +module.exports = patchedExec; + + +/***/ }), +/* 111 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var flags = __webpack_require__(/*! ../internals/regexp-flags */ 173); + +var TO_STRING = 'toString'; +var RegExpPrototype = RegExp.prototype; +var nativeToString = RegExpPrototype[TO_STRING]; + +var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); +// FF44- RegExp#toString has a wrong name +var INCORRECT_NAME = nativeToString.name != TO_STRING; + +// `RegExp.prototype.toString` method +// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring +if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); +} + + +/***/ }), +/* 112 */, +/* 113 */ +/*!*****************************!*\ + !*** ./dev/Common/Jassl.js ***! + \*****************************/ +/*! exports provided: jassl */ +/*! exports used: jassl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); + + + // let rainloopCaches = window.caches && window.caches.open ? window.caches : null; + +/** + * @param {src} src + * @param {boolean} async = false + * @returns {Promise} + */ + +function jassl(src, async) { + if (async === void 0) { + async = false; + } + + if (!window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise || !window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise.all) { + throw new Error('Promises are not available your environment.'); + } + + if (!src) { + throw new Error('src should not be empty.'); + } + + return new window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise(function (resolve, reject) { + var element = window__WEBPACK_IMPORTED_MODULE_2___default.a.document.createElement('script'); + + element.onload = function () { + resolve(src); + }; + + element.onerror = function () { + reject(new Error(src)); + }; + + element.async = true === async; + element.src = src; + window__WEBPACK_IMPORTED_MODULE_2___default.a.document.body.appendChild(element); + }) + /* .then((s) => { + const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null; + if (found && found[1]) + { + rainloopCaches.open('rainloop-offline-' + found[1]).then( + (cache) => cache.add(s) + ).catch(() => { + rainloopCaches = null; + }); + } + return s; + })*/ + ; +} + +/***/ }), +/* 114 */, +/* 115 */, +/* 116 */, +/* 117 */, +/* 118 */, +/* 119 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/indexed-object.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); + +var split = ''.split; + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split.call(it, '') : Object(it); +} : Object; + + +/***/ }), +/* 120 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-object.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); + +// `ToObject` abstract operation +// https://tc39.github.io/ecma262/#sec-toobject +module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); +}; + + +/***/ }), +/* 121 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js/modules/es.promise.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 50); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); +var global = __webpack_require__(/*! ../internals/global */ 27); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 171); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 189); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 190); +var isObject = __webpack_require__(/*! ../internals/is-object */ 44); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 191); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); +var iterate = __webpack_require__(/*! ../internals/iterate */ 143); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 195); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 144); +var task = __webpack_require__(/*! ../internals/task */ 133).set; +var microtask = __webpack_require__(/*! ../internals/microtask */ 196); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 172); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 197); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 106); +var perform = __webpack_require__(/*! ../internals/perform */ 145); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 153); + +var SPECIES = wellKnownSymbol('species'); +var PROMISE = 'Promise'; +var getInternalState = InternalStateModule.get; +var setInternalState = InternalStateModule.set; +var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); +var PromiseConstructor = NativePromise; +var TypeError = global.TypeError; +var document = global.document; +var process = global.process; +var $fetch = getBuiltIn('fetch'); +var newPromiseCapability = newPromiseCapabilityModule.f; +var newGenericPromiseCapability = newPromiseCapability; +var IS_NODE = classof(process) == 'process'; +var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +var FORCED = isForced(PROMISE, function () { + var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (V8_VERSION === 66) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true; + } + // We need Promise#finally in the pure version for preventing prototype pollution + if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; + // Detect correctness of subclassing with @@species support + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + return !(promise.then(function () { /* empty */ }) instanceof FakePromise); +}); + +var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); +}); + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; +}; + +var notify = function (promise, state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(promise, state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (handler = global['on' + name]) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (promise, state) { + task.call(global, function () { + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (promise, state) { + task.call(global, function () { + if (IS_NODE) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind = function (fn, promise, state, unwrap) { + return function (value) { + fn(promise, state, value, unwrap); + }; +}; + +var internalReject = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(promise, state, true); +}; + +var internalResolve = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (promise === value) throw TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + then.call(value, + bind(internalResolve, promise, wrapper, state), + bind(internalReject, promise, wrapper, state) + ); + } catch (error) { + internalReject(promise, wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(promise, state, false); + } + } catch (error) { + internalReject(promise, { done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromiseConstructor, PROMISE); + aFunction(executor); + Internal.call(this); + var state = getInternalState(this); + try { + executor(bind(internalResolve, this, state), bind(internalReject, this, state)); + } catch (error) { + internalReject(this, state, error); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromiseConstructor.prototype, { + // `Promise.prototype.then` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) notify(this, state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, promise, state); + this.reject = bind(internalReject, promise, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && typeof NativePromise == 'function') { + nativeThen = NativePromise.prototype.then; + + // wrap native Promise#then for native async functions + redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // wrap fetch result + if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { + // eslint-disable-next-line no-unused-vars + fetch: function fetch(input /* , init */) { + return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); + } + }); + } +} + +$({ global: true, wrap: true, forced: FORCED }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false, true); +setSpecies(PROMISE); + +PromiseWrapper = getBuiltIn(PROMISE); + +// statics +$({ target: PROMISE, stat: true, forced: FORCED }, { + // `Promise.reject` method + // https://tc39.github.io/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + capability.reject.call(undefined, r); + return capability.promise; + } +}); + +$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { + // `Promise.resolve` method + // https://tc39.github.io/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); + } +}); + +$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { + // `Promise.all` method + // https://tc39.github.io/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.github.io/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction(C.resolve); + iterate(iterable, function (promise) { + $promiseResolve.call(C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), +/* 122 */, +/* 123 */, +/* 124 */ +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || new Function("return this")(); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 125 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/to-primitive.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ../internals/is-object */ 44); + +// `ToPrimitive` abstract operation +// https://tc39.github.io/ecma262/#sec-toprimitive +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), +/* 126 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); + +// Thank's IE8 for his funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + + +/***/ }), +/* 127 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/shared-store.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; + + +/***/ }), +/* 128 */ +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/shared.js ***! + \**************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); +var store = __webpack_require__(/*! ../internals/shared-store */ 127); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.6.4', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), +/* 129 */ +/*!***********************************************!*\ + !*** ./node_modules/core-js/internals/uid.js ***! + \***********************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var id = 0; +var postfix = Math.random(); + +module.exports = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); +}; + + +/***/ }), +/* 130 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-forced.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(/*! ../internals/fails */ 36); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : typeof detection == 'function' ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), +/* 131 */ +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/native-symbol.js ***! + \*********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(/*! ../internals/fails */ 36); + +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); +}); + + +/***/ }), +/* 132 */ +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/classof.js ***! + \***************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 49); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; +}; + + +/***/ }), +/* 133 */ +/*!************************************************!*\ + !*** ./node_modules/core-js/internals/task.js ***! + \************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var html = __webpack_require__(/*! ../internals/html */ 142); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); + +var location = global.location; +var set = global.setImmediate; +var clear = global.clearImmediate; +var process = global.process; +var MessageChannel = global.MessageChannel; +var Dispatch = global.Dispatch; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var defer, channel, port; + +var run = function (id) { + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var listener = function (event) { + run(event.data); +}; + +var post = function (id) { + // old engines have not location.origin + global.postMessage(id + '', location.protocol + '//' + location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (classof(process) == 'process') { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post)) { + defer = post; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +module.exports = { + set: set, + clear: clear +}; + + +/***/ }), +/* 134 */ +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/engine-is-ios.js ***! + \*********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); + +module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); + + +/***/ }), +/* 135 */ +/*!******************************************************************************!*\ + !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! + \******************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// TODO: Remove from `core-js@4` since it's moved to entry points +__webpack_require__(/*! ../modules/es.regexp.exec */ 45); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); +var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); + +var SPECIES = wellKnownSymbol('species'); + +var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + // #replace needs built-in support for named groups. + // #match works fine because it just return the exec results, even if it has + // a "grops" property. + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + return ''.replace(re, '$
') !== '7'; +}); + +// IE <= 11 replaces $0 with the whole match, as if it was $& +// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 +var REPLACE_KEEPS_$0 = (function () { + return 'a'.replace(/./, '$0') === '$0'; +})(); + +var REPLACE = wellKnownSymbol('replace'); +// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string +var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE]) { + return /./[REPLACE]('a', '$0') === ''; + } + return false; +})(); + +// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec +// Weex JS has frozen built-in prototypes, so use try / catch wrapper +var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; +}); + +module.exports = function (KEY, length, exec, sham) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { execCalled = true; return null; }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !( + REPLACE_SUPPORTS_NAMED_GROUPS && + REPLACE_KEEPS_$0 && + !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + )) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + }, { + REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, + REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + }); + var stringMethod = methods[0]; + var regexMethod = methods[1]; + + redefine(String.prototype, KEY, stringMethod); + redefine(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return regexMethod.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return regexMethod.call(string, this); } + ); + } + + if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); +}; + + +/***/ }), +/* 136 */ +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! + \****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(/*! ./classof-raw */ 49); +var regexpExec = __webpack_require__(/*! ./regexp-exec */ 110); + +// `RegExpExec` abstract operation +// https://tc39.github.io/ecma262/#sec-regexpexec +module.exports = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + + if (classof(R) !== 'RegExp') { + throw TypeError('RegExp#exec called on incompatible receiver'); + } + + return regexpExec.call(R, S); +}; + + + +/***/ }), +/* 137 */, +/* 138 */, +/* 139 */, +/* 140 */, +/* 141 */ +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/object-keys-internal.js ***! + \****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(/*! ../internals/has */ 42); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ 168).indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; +}; + + +/***/ }), +/* 142 */ +/*!************************************************!*\ + !*** ./node_modules/core-js/internals/html.js ***! + \************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), +/* 143 */ +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/iterate.js ***! + \***************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 192); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 193); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 194); + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { + var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = toLength(iterable.length); length > index; index++) { + result = AS_ENTRIES + ? boundFunction(anObject(step = iterable[index])[0], step[1]) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } return new Result(false); + } + iterator = iterFn.call(iterable); + } + + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); + if (typeof result == 'object' && result && result instanceof Result) return result; + } return new Result(false); +}; + +iterate.stop = function (result) { + return new Result(true, result); +}; + + +/***/ }), +/* 144 */ +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/species-constructor.js ***! + \***************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.github.io/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); +}; + + +/***/ }), +/* 145 */ +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/perform.js ***! + \***************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + + +/***/ }), +/* 146 */, +/* 147 */, +/* 148 */ +/*!*********************************!*\ + !*** ./dev/Storage/RainLoop.js ***! + \*********************************/ +/*! exports provided: isStorageSupported, getHash, setHash, clearHash, checkTimestamp */ +/*! exports used: checkTimestamp, clearHash, getHash, isStorageSupported, setHash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isStorageSupported; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return setHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return clearHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return checkTimestamp; }); +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__); + + + + + +var STORAGE_KEY = '__rlA'; +var TIME_KEY = '__rlT'; +/** + * @param {string} storageName + * @returns {boolean} + */ + +function isStorageSupported(storageName) { + var storageIsAvailable = false; + + try { + // at: window[storageName] firefox throws SecurityError: The operation is insecure. when in iframe + storageIsAvailable = storageName in window__WEBPACK_IMPORTED_MODULE_4___default.a && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName] && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName].setItem; + } catch (e) {} // eslint-disable-line no-empty + + + if (storageIsAvailable) { + var s = window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName], + key = 'testLocalStorage_' + window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.random(); + + try { + s.setItem(key, key); + + if (key === s.getItem(key)) { + s.removeItem(key); + return true; + } + } catch (e) {} // eslint-disable-line no-empty + + } + + return false; +} +var SESS_STORAGE = isStorageSupported('sessionStorage') ? window__WEBPACK_IMPORTED_MODULE_4___default.a.sessionStorage || null : null; +var WIN_STORAGE = window__WEBPACK_IMPORTED_MODULE_4___default.a.top || window__WEBPACK_IMPORTED_MODULE_4___default.a || null; + +var __get = function __get(key) { + var result = null; + + if (SESS_STORAGE) { + result = SESS_STORAGE.getItem(key) || null; + } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) { + var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; + result = data ? data[key] || null : null; + } + + return result; +}; + +var __set = function __set(key, value) { + if (SESS_STORAGE) { + SESS_STORAGE.setItem(key, value); + } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) { + var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; + data = data || {}; + data[key] = value; + WIN_STORAGE.name = window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.stringify(data); + } +}; + +var timestamp = function timestamp() { + return window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_4___default.a.Date().getTime() / 1000); +}; + +var setTimestamp = function setTimestamp() { + return __set(TIME_KEY, timestamp()); +}; + +var getTimestamp = function getTimestamp() { + var time = __get(TIME_KEY, 0); + + return time ? window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(time, 10) || 0 : 0; +}; +/** + * @returns {string} + */ + + +function getHash() { + return __get(STORAGE_KEY); +} +/** + * @returns {void} + */ + +function setHash() { + var key = 'AuthAccountHash', + appData = window__WEBPACK_IMPORTED_MODULE_4___default.a.__rlah_data(); + + __set(STORAGE_KEY, appData && appData[key] ? appData[key] : ''); + + setTimestamp(); +} +/** + * @returns {void} + */ + +function clearHash() { + __set(STORAGE_KEY, ''); + + setTimestamp(); +} +/** + * @returns {boolean} + */ + +function checkTimestamp() { + if (timestamp() > getTimestamp() + 1000 * 60 * 60) { + // 60m + clearHash(); + return true; + } + + return false; +} // init section + +window__WEBPACK_IMPORTED_MODULE_4___default.a.setInterval(setTimestamp, 1000 * 60); // 1m + +/***/ }), +/* 149 */, +/* 150 */ +/*!************************************************!*\ + !*** ./node_modules/core-js/internals/path.js ***! + \************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); + +module.exports = global; + + +/***/ }), +/* 151 */, +/* 152 */, +/* 153 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/engine-v8-version.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); + +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; +} else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } +} + +module.exports = version && +version; + + +/***/ }), +/* 154 */ +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/advance-string-index.js ***! + \****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 187).charAt; + +// `AdvanceStringIndex` abstract operation +// https://tc39.github.io/ecma262/#sec-advancestringindex +module.exports = function (S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); +}; + + +/***/ }), +/* 155 */, +/* 156 */, +/* 157 */, +/* 158 */, +/* 159 */, +/* 160 */, +/* 161 */, +/* 162 */, +/* 163 */, +/* 164 */, +/* 165 */, +/* 166 */, +/* 167 */ +/*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! + \*************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var nativePropertyIsEnumerable = {}.propertyIsEnumerable; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : nativePropertyIsEnumerable; + + +/***/ }), +/* 168 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/array-includes.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); +var toLength = __webpack_require__(/*! ../internals/to-length */ 73); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 184); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), +/* 169 */ +/*!***************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! + \***************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), +/* 170 */, +/* 171 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! + \**********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); + +module.exports = global.Promise; + + +/***/ }), +/* 172 */ +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/promise-resolve.js ***! + \***********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var isObject = __webpack_require__(/*! ../internals/is-object */ 44); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 106); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + + +/***/ }), +/* 173 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-flags.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); + +// `RegExp.prototype.flags` getter implementation +// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags +module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; +}; + + +/***/ }), +/* 174 */, +/* 175 */, +/* 176 */, +/* 177 */, +/* 178 */, +/* 179 */, +/* 180 */ +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/native-weak-map.js ***! + \***********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); + +var WeakMap = global.WeakMap; + +module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + + +/***/ }), +/* 181 */ +/*!***********************************************************************!*\ + !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! + \***********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(/*! ../internals/has */ 42); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 182); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); + +module.exports = function (target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } +}; + + +/***/ }), +/* 182 */ +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/own-keys.js ***! + \****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 183); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 169); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; +}; + + +/***/ }), +/* 183 */ +/*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! + \*************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 141); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertynames +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + + +/***/ }), +/* 184 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/to-absolute-index.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), +/* 185 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); + +module.exports = NATIVE_SYMBOL + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), +/* 186 */ +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/object-to-string.js ***! + \************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); +var classof = __webpack_require__(/*! ../internals/classof */ 132); + +// `Object.prototype.toString` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), +/* 187 */ +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/string-multibyte.js ***! + \************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); + +// `String.prototype.{ codePointAt, at }` methods implementation +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), +/* 188 */, +/* 189 */ +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/redefine-all.js ***! + \********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); + +module.exports = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; +}; + + +/***/ }), +/* 190 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/set-species.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), +/* 191 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/an-instance.js ***! + \*******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); + } return it; +}; + + +/***/ }), +/* 192 */ +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! + \********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), +/* 193 */ +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/get-iterator-method.js ***! + \***************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(/*! ../internals/classof */ 132); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + + +/***/ }), +/* 194 */ +/*!****************************************************************************!*\ + !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! + \****************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } +}; + + +/***/ }), +/* 195 */ +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! + \**************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), +/* 196 */ +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/microtask.js ***! + \*****************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; +var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var macrotask = __webpack_require__(/*! ../internals/task */ 133).set; +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); + +var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; +var process = global.process; +var Promise = global.Promise; +var IS_NODE = classof(process) == 'process'; +// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` +var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); +var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + +var flush, head, last, notify, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify(); + else last = undefined; + throw error; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + } else if (MutationObserver && !IS_IOS) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + then = promise.then; + notify = function () { + then.call(promise, flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } +} + +module.exports = queueMicrotask || function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; +}; + + +/***/ }), +/* 197 */ +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/host-report-errors.js ***! + \**************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); + +module.exports = function (a, b) { + var console = global.console; + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } +}; + + +/***/ }), +/* 198 */, +/* 199 */, +/* 200 */, +/* 201 */, +/* 202 */, +/* 203 */, +/* 204 */, +/* 205 */, +/* 206 */, +/* 207 */, +/* 208 */, +/* 209 */, +/* 210 */, +/* 211 */, +/* 212 */, +/* 213 */, +/* 214 */, +/* 215 */, +/* 216 */, +/* 217 */, +/* 218 */, +/* 219 */, +/* 220 */, +/* 221 */, +/* 222 */, +/* 223 */, +/* 224 */, +/* 225 */, +/* 226 */, +/* 227 */, +/* 228 */, +/* 229 */, +/* 230 */, +/* 231 */, +/* 232 */, +/* 233 */, +/* 234 */, +/* 235 */ +/*!*****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js ***! + \*****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(/*! ./_fails */ 286)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 236 */ +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***! + \*****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var fails = __webpack_require__(/*! ./fails */ 36); + +// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, +// so we use an intermediate function. +function RE(s, f) { + return RegExp(s, f); +} + +exports.UNSUPPORTED_Y = fails(function () { + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + var re = RE('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; +}); + +exports.BROKEN_CARET = fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = RE('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; +}); + + +/***/ }), +/* 237 */, +/* 238 */, +/* 239 */, +/* 240 */, +/* 241 */, +/* 242 */, +/* 243 */, +/* 244 */, +/* 245 */, +/* 246 */, +/* 247 */, +/* 248 */, +/* 249 */, +/* 250 */, +/* 251 */, +/* 252 */, +/* 253 */, +/* 254 */, +/* 255 */, +/* 256 */, +/* 257 */, +/* 258 */, +/* 259 */, +/* 260 */, +/* 261 */, +/* 262 */, +/* 263 */, +/* 264 */, +/* 265 */, +/* 266 */, +/* 267 */, +/* 268 */, +/* 269 */, +/* 270 */, +/* 271 */, +/* 272 */, +/* 273 */, +/* 274 */, +/* 275 */, +/* 276 */ +/*!**********************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js ***! + \**********************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var core = module.exports = { version: '2.6.12' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + + +/***/ }), +/* 277 */, +/* 278 */, +/* 279 */, +/* 280 */, +/* 281 */, +/* 282 */, +/* 283 */, +/* 284 */, +/* 285 */ +/*!***************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js ***! + \***************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), +/* 286 */ +/*!***********************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js ***! + \***********************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + + +/***/ }), +/* 287 */, +/* 288 */, +/* 289 */, +/* 290 */, +/* 291 */, +/* 292 */, +/* 293 */, +/* 294 */, +/* 295 */, +/* 296 */, +/* 297 */, +/* 298 */, +/* 299 */, +/* 300 */, +/* 301 */, +/* 302 */, +/* 303 */, +/* 304 */, +/* 305 */, +/* 306 */, +/* 307 */, +/* 308 */, +/* 309 */, +/* 310 */, +/* 311 */, +/* 312 */, +/* 313 */, +/* 314 */, +/* 315 */, +/* 316 */, +/* 317 */, +/* 318 */, +/* 319 */, +/* 320 */, +/* 321 */, +/* 322 */, +/* 323 */, +/* 324 */, +/* 325 */, +/* 326 */, +/* 327 */, +/* 328 */, +/* 329 */, +/* 330 */, +/* 331 */, +/* 332 */, +/* 333 */, +/* 334 */, +/* 335 */, +/* 336 */, +/* 337 */, +/* 338 */, +/* 339 */, +/* 340 */, +/* 341 */, +/* 342 */, +/* 343 */, +/* 344 */, +/* 345 */, +/* 346 */, +/* 347 */, +/* 348 */, +/* 349 */, +/* 350 */, +/* 351 */, +/* 352 */, +/* 353 */, +/* 354 */, +/* 355 */, +/* 356 */, +/* 357 */, +/* 358 */, +/* 359 */, +/* 360 */, +/* 361 */, +/* 362 */, +/* 363 */, +/* 364 */, +/* 365 */, +/* 366 */, +/* 367 */, +/* 368 */, +/* 369 */, +/* 370 */, +/* 371 */, +/* 372 */, +/* 373 */, +/* 374 */, +/* 375 */, +/* 376 */, +/* 377 */, +/* 378 */, +/* 379 */, +/* 380 */, +/* 381 */, +/* 382 */, +/* 383 */, +/* 384 */, +/* 385 */, +/* 386 */, +/* 387 */, +/* 388 */, +/* 389 */, +/* 390 */, +/* 391 */, +/* 392 */, +/* 393 */, +/* 394 */, +/* 395 */, +/* 396 */, +/* 397 */ +/*!**********************************************************************************!*\ + !*** ./node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js ***! + \**********************************************************************************/ +/*! no static exports found */ +/*! exports used: default */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/get-own-property-descriptor */ 504), __esModule: true }; + +/***/ }), +/* 398 */, +/* 399 */, +/* 400 */, +/* 401 */, +/* 402 */, +/* 403 */, +/* 404 */, +/* 405 */ +/*!************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js ***! + \************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ./_global */ 406); +var core = __webpack_require__(/*! ./_core */ 276); +var ctx = __webpack_require__(/*! ./_ctx */ 499); +var hide = __webpack_require__(/*! ./_hide */ 501); +var has = __webpack_require__(/*! ./_has */ 411); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var IS_WRAP = type & $export.W; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE]; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; + var key, own, out; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if (own && has(exports, key)) continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function (C) { + var F = function (a, b, c) { + if (this instanceof C) { + switch (arguments.length) { + case 0: return new C(); + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if (IS_PROTO) { + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + + +/***/ }), +/* 406 */ +/*!************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js ***! + \************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + + +/***/ }), +/* 407 */ +/*!***************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js ***! + \***************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(/*! ./_an-object */ 502); +var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 408); +var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 409); +var dP = Object.defineProperty; + +exports.f = __webpack_require__(/*! ./_descriptors */ 235) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), +/* 408 */ +/*!********************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js ***! + \********************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = !__webpack_require__(/*! ./_descriptors */ 235) && !__webpack_require__(/*! ./_fails */ 286)(function () { + return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ 503)('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 409 */ +/*!******************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js ***! + \******************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = __webpack_require__(/*! ./_is-object */ 285); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), +/* 410 */ +/*!*******************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js ***! + \*******************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 411 */ +/*!*********************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 412 */ +/*!****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(/*! ./_iobject */ 506); +var defined = __webpack_require__(/*! ./_defined */ 508); +module.exports = function (it) { + return IObject(defined(it)); +}; + + +/***/ }), +/* 413 */, +/* 414 */, +/* 415 */, +/* 416 */, +/* 417 */, +/* 418 */, +/* 419 */, +/* 420 */ +/*!**************************************************************!*\ + !*** ./node_modules/element-dataset/lib/browser/index.es.js ***! + \**************************************************************/ +/*! exports provided: default */ +/*! exports used: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/define-property */ 421); +/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/core-js/object/get-own-property-descriptor */ 397); +/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__); + +// +// element-dataset 2.2.6 +// +// element-dataset is released under the terms of the BSD-3-Clause license. +// (c) 2015 - 2017 Mark Milstein +// +// For all details and documentation: https://github.com/epiloque/element-dataset +// + + + + +/* eslint-env browser */ + +function elementDatasetPolyfill() { + if (!document.documentElement.dataset && (!babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset') || !babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset').get)) { + var descriptor = {}; + + descriptor.enumerable = true; + + descriptor.get = function get() { + var element = this; + var map = {}; + var attributes = this.attributes; + + function toUpperCase(n0) { + return n0.charAt(1).toUpperCase(); + } + + function getter() { + return this.value; + } + + function setter(name, value) { + if (typeof value !== 'undefined') { + this.setAttribute(name, value); + } else { + this.removeAttribute(name); + } + } + + for (var i = 0; i < attributes.length; i += 1) { + var attribute = attributes[i]; + + // This test really should allow any XML Name without + // colons (and non-uppercase for XHTML) + + if (attribute && attribute.name && /^data-\w[\w-]*$/.test(attribute.name)) { + var name = attribute.name; + var value = attribute.value; + + // Change to CamelCase + + var propName = name.substr(5).replace(/-./g, toUpperCase); + + babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(map, propName, { + enumerable: descriptor.enumerable, + get: getter.bind({ value: value || '' }), + set: setter.bind(element, name) + }); + } + } + return map; + }; + + Object.defineProperty(HTMLElement.prototype, 'dataset', descriptor); + } +} + +/* harmony default export */ __webpack_exports__["a"] = (elementDatasetPolyfill); + + +/***/ }), +/* 421 */ +/*!**********************************************************************!*\ + !*** ./node_modules/babel-runtime/core-js/object/define-property.js ***! + \**********************************************************************/ +/*! no static exports found */ +/*! exports used: default */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/define-property */ 497), __esModule: true }; + +/***/ }), +/* 422 */ +/*!*********************************************!*\ + !*** ./vendors/Progress.js/src/progress.js ***! + \*********************************************/ +/*! no static exports found */ +/*! exports used: progressJs */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Progress.js v0.1.0 + * https://github.com/usablica/progress.js + * MIT licensed + * + * Copyright (C) 2013 usabli.ca - Afshin Mehrabani (@afshinmeh) + */ + +(function (root, factory) { + if (true) { + // CommonJS + factory(exports); + } else {} +} (this, function (exports) { + //Default config/variables + var VERSION = '0.1.0'; + + /** + * ProgressJs main class + * + * @class ProgressJs + */ + function ProgressJs(obj) { + + if (typeof obj.length != 'undefined') { + this._targetElement = obj; + } else { + this._targetElement = [obj]; + } + + if (typeof window._progressjsId === 'undefined') + window._progressjsId = 1; + + if (typeof window._progressjsIntervals === 'undefined') + window._progressjsIntervals = {}; + + this._options = { + //progress bar theme + theme: 'blue', + //overlay mode makes an overlay layer in the target element + overlayMode: false, + //to consider CSS3 transitions in events + considerTransition: true + }; + } + + /** + * Start progress for specific element(s) + * + * @api private + * @method _createContainer + */ + function _startProgress() { + + //call onBeforeStart callback + if (typeof this._onBeforeStartCallback != 'undefined') { + this._onBeforeStartCallback.call(this); + } + + //create the container for progress bar + _createContainer.call(this); + + for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { + _setProgress.call(this, this._targetElement[i]); + } + } + + /** + * Set progress bar for specific element + * + * @api private + * @method _setProgress + * @param {Object} targetElement + */ + function _setProgress(targetElement) { + + //if the target element already as `data-progressjs`, ignore the init + if (targetElement.hasAttribute("data-progressjs")) + return; + + //get target element position + var targetElementOffset = _getOffset.call(this, targetElement); + + targetElement.setAttribute("data-progressjs", window._progressjsId); + + var progressElementContainer = document.createElement('div'); + progressElementContainer.className = 'progressjs-progress progressjs-theme-' + this._options.theme; + + + //set the position percent elements, it depends on targetElement tag + if (targetElement.tagName.toLowerCase() === 'body') { + progressElementContainer.style.position = 'fixed'; + } else { + progressElementContainer.style.position = 'absolute'; + } + + progressElementContainer.setAttribute("data-progressjs", window._progressjsId); + var progressElement = document.createElement("div"); + progressElement.className = "progressjs-inner"; + + //create an element for current percent of progress bar + var progressPercentElement = document.createElement('div'); + progressPercentElement.className = "progressjs-percent"; + progressPercentElement.innerHTML = "1%"; + + progressElement.appendChild(progressPercentElement); + + if (this._options.overlayMode && targetElement.tagName.toLowerCase() === 'body') { + //if we have `body` for target element and also overlay mode is enable, we should use a different + //position for progress bar container element + progressElementContainer.style.left = 0; + progressElementContainer.style.right = 0; + progressElementContainer.style.top = 0; + progressElementContainer.style.bottom = 0; + } else { + //set progress bar container size and offset + progressElementContainer.style.left = targetElementOffset.left + 'px'; + progressElementContainer.style.top = targetElementOffset.top + 'px'; + progressElementContainer.style.width = targetElementOffset.width + 'px'; + + if (this._options.overlayMode) { + progressElementContainer.style.height = targetElementOffset.height + 'px'; + } + } + + progressElementContainer.appendChild(progressElement); + + //append the element to container + var container = document.querySelector('.progressjs-container'); + container.appendChild(progressElementContainer); + + _setPercentFor(targetElement, 1); + + //and increase the progressId + ++window._progressjsId; + } + + /** + * Set percent for all elements + * + * @api private + * @method _setPercent + * @param {Number} percent + */ + function _setPercent(percent) { + for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { + _setPercentFor.call(this, this._targetElement[i], percent); + } + } + + /** + * Set percent for specific element + * + * @api private + * @method _setPercentFor + * @param {Object} targetElement + * @param {Number} percent + */ + function _setPercentFor(targetElement, percent) { + var self = this; + + //prevent overflow! + if (percent >= 100) + percent = 100; + + if (targetElement.hasAttribute("data-progressjs")) { + //setTimeout for better CSS3 animation applying in some cases + setTimeout(function() { + + //call the onprogress callback + if (typeof self._onProgressCallback != 'undefined') { + self._onProgressCallback.call(self, targetElement, percent); + } + + var percentElement = _getPercentElement(targetElement); + percentElement.style.width = parseInt(percent) + '%'; + + var percentElement = percentElement.querySelector(".progressjs-percent"); + var existingPercent = parseInt(percentElement.innerHTML.replace('%', '')); + + //start increase/decrease the percent element with animation + (function(percentElement, existingPercent, currentPercent) { + + var increasement = true; + if (existingPercent > currentPercent) { + increasement = false; + } + + var intervalIn = 10; + function changePercentTimer(percentElement, existingPercent, currentPercent) { + //calculate the distance between two percents + var distance = Math.abs(existingPercent - currentPercent); + if (distance < 3) { + intervalIn = 30; + } else if (distance < 20) { + intervalIn = 20; + } else { + intervanIn = 1; + } + + if ((existingPercent - currentPercent) != 0) { + //set the percent + percentElement.innerHTML = (increasement ? (++existingPercent) : (--existingPercent)) + '%'; + setTimeout(function() { changePercentTimer(percentElement, existingPercent, currentPercent); }, intervalIn); + } + } + + changePercentTimer(percentElement, existingPercent, currentPercent); + + })(percentElement, existingPercent, parseInt(percent)); + + }, 50); + } + } + + /** + * Get the progress bar element + * + * @api private + * @method _getPercentElement + * @param {Object} targetElement + */ + function _getPercentElement(targetElement) { + var progressjsId = parseInt(targetElement.getAttribute('data-progressjs')); + return document.querySelector('.progressjs-container > .progressjs-progress[data-progressjs="' + progressjsId + '"] > .progressjs-inner'); + } + + /** + * Auto increase the progress bar every X milliseconds + * + * @api private + * @method _autoIncrease + * @param {Number} size + * @param {Number} millisecond + */ + function _autoIncrease(size, millisecond) { + var self = this; + + var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); + + if (typeof window._progressjsIntervals[progressjsId] != 'undefined') { + clearInterval(window._progressjsIntervals[progressjsId]); + } + window._progressjsIntervals[progressjsId] = setInterval(function() { + _increasePercent.call(self, size); + }, millisecond); + } + + /** + * Increase the size of progress bar + * + * @api private + * @method _increasePercent + * @param {Number} size + */ + function _increasePercent(size) { + for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { + var currentElement = this._targetElement[i]; + if (currentElement.hasAttribute('data-progressjs')) { + var percentElement = _getPercentElement(currentElement); + var existingPercent = parseInt(percentElement.style.width.replace('%', '')); + if (existingPercent) { + _setPercentFor.call(this, currentElement, existingPercent + (size || 1)); + } + } + } + } + + /** + * Close and remove progress bar + * + * @api private + * @method _end + */ + function _end() { + + //call onBeforeEnd callback + if (typeof this._onBeforeEndCallback != 'undefined') { + if (this._options.considerTransition === true) { + //we can safety assume that all layers would be the same, so `this._targetElement[0]` is the same as `this._targetElement[1]` + _getPercentElement(this._targetElement[0]).addEventListener(whichTransitionEvent(), this._onBeforeEndCallback, false); + } else { + this._onBeforeEndCallback.call(this); + } + } + + var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); + + for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { + var currentElement = this._targetElement[i]; + var percentElement = _getPercentElement(currentElement); + + if (!percentElement) + return; + + var existingPercent = parseInt(percentElement.style.width.replace('%', '')); + + var timeoutSec = 1; + if (existingPercent < 100) { + _setPercentFor.call(this, currentElement, 100); + timeoutSec = 500; + } + + //I believe I should handle this situation with eventListener and `transitionend` event but I'm not sure + //about compatibility with IEs. Should be fixed in further versions. + (function(percentElement, currentElement) { + setTimeout(function() { + percentElement.parentNode.className += " progressjs-end"; + + setTimeout(function() { + //remove the percent element from page + percentElement.parentNode.parentNode.removeChild(percentElement.parentNode); + //and remove the attribute + currentElement.removeAttribute("data-progressjs"); + }, 1000); + }, timeoutSec); + })(percentElement, currentElement); + } + + //clean the setInterval for autoIncrease function + if (window._progressjsIntervals[progressjsId]) { + //`delete` keyword has some problems in IE + try { + clearInterval(window._progressjsIntervals[progressjsId]); + window._progressjsIntervals[progressjsId] = null; + delete window._progressjsIntervals[progressjsId]; + } catch(ex) { } + } + } + + /** + * Create the progress bar container + * + * @api private + * @method _createContainer + */ + function _createContainer() { + //first check if we have an container already, we don't need to create it again + if (!document.querySelector(".progressjs-container")) { + var containerElement = document.createElement("div"); + containerElement.className = "progressjs-container"; + document.body.appendChild(containerElement); + } + } + + /** + * Get an element position on the page + * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966 + * + * @api private + * @method _getOffset + * @param {Object} element + * @returns Element's position info + */ + function _getOffset(element) { + var elementPosition = {}; + + if (element.tagName.toLowerCase() === 'body') { + //set width + elementPosition.width = element.clientWidth; + //set height + elementPosition.height = element.clientHeight; + } else { + //set width + elementPosition.width = element.offsetWidth; + //set height + elementPosition.height = element.offsetHeight; + } + + //calculate element top and left + var _x = 0; + var _y = 0; + while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { + _x += element.offsetLeft; + _y += element.offsetTop; + element = element.offsetParent; + } + //set top + elementPosition.top = _y; + //set left + elementPosition.left = _x; + + return elementPosition; + } + + /** + * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 + * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically + * + * @param obj1 + * @param obj2 + * @returns obj3 a new object based on obj1 and obj2 + */ + function _mergeOptions(obj1, obj2) { + var obj3 = {}; + for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } + for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } + return obj3; + } + + var progressJs = function (targetElm) { + if (typeof (targetElm) === 'object') { + //Ok, create a new instance + return new ProgressJs(targetElm); + + } else if (typeof (targetElm) === 'string') { + //select the target element with query selector + var targetElement = document.querySelectorAll(targetElm); + + if (targetElement) { + return new ProgressJs(targetElement); + } else { + throw new Error('There is no element with given selector.'); + } + } else { + return new ProgressJs(document.body); + } + }; + + /** + * Get correct transition callback + * Thanks @webinista: http://stackoverflow.com/a/9090128/375966 + * + * @returns transition name + */ + function whichTransitionEvent() { + var t; + var el = document.createElement('fakeelement'); + var transitions = { + 'transition': 'transitionend', + 'OTransition': 'oTransitionEnd', + 'MozTransition': 'transitionend', + 'WebkitTransition': 'webkitTransitionEnd' + } + + for (t in transitions) { + if (el.style[t] !== undefined) { + return transitions[t]; + } + } + } + + /** + * Current ProgressJs version + * + * @property version + * @type String + */ + progressJs.version = VERSION; + + //Prototype + progressJs.fn = ProgressJs.prototype = { + clone: function () { + return new ProgressJs(this); + }, + setOption: function(option, value) { + this._options[option] = value; + return this; + }, + setOptions: function(options) { + this._options = _mergeOptions(this._options, options); + return this; + }, + start: function() { + _startProgress.call(this); + return this; + }, + set: function(percent) { + _setPercent.call(this, percent); + return this; + }, + increase: function(size) { + _increasePercent.call(this, size); + return this; + }, + autoIncrease: function(size, millisecond) { + _autoIncrease.call(this, size, millisecond); + return this; + }, + end: function() { + _end.call(this); + return this; + }, + onbeforeend: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._onBeforeEndCallback = providedCallback; + } else { + throw new Error('Provided callback for onbeforeend was not a function'); + } + return this; + }, + onbeforestart: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._onBeforeStartCallback = providedCallback; + } else { + throw new Error('Provided callback for onbeforestart was not a function'); + } + return this; + }, + onprogress: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._onProgressCallback = providedCallback; + } else { + throw new Error('Provided callback for onprogress was not a function'); + } + return this; + } + }; + + exports.progressJs = progressJs; + return progressJs; +})); + + +/***/ }), +/* 423 */, +/* 424 */, +/* 425 */, +/* 426 */, +/* 427 */, +/* 428 */, +/* 429 */, +/* 430 */, +/* 431 */, +/* 432 */, +/* 433 */, +/* 434 */, +/* 435 */, +/* 436 */, +/* 437 */, +/* 438 */, +/* 439 */, +/* 440 */, +/* 441 */, +/* 442 */, +/* 443 */, +/* 444 */, +/* 445 */, +/* 446 */, +/* 447 */, +/* 448 */, +/* 449 */, +/* 450 */, +/* 451 */, +/* 452 */, +/* 453 */, +/* 454 */, +/* 455 */, +/* 456 */, +/* 457 */, +/* 458 */, +/* 459 */, +/* 460 */, +/* 461 */, +/* 462 */, +/* 463 */, +/* 464 */, +/* 465 */, +/* 466 */, +/* 467 */, +/* 468 */, +/* 469 */, +/* 470 */, +/* 471 */, +/* 472 */, +/* 473 */, +/* 474 */, +/* 475 */, +/* 476 */, +/* 477 */, +/* 478 */, +/* 479 */, +/* 480 */, +/* 481 */, +/* 482 */, +/* 483 */, +/* 484 */, +/* 485 */, +/* 486 */, +/* 487 */, +/* 488 */, +/* 489 */, +/* 490 */, +/* 491 */, +/* 492 */, +/* 493 */, +/* 494 */, +/* 495 */, +/* 496 */ +/*!*********************!*\ + !*** ./dev/boot.js ***! + \*********************/ +/*! no exports provided */ +/*! all exports used */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var element_dataset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-dataset */ 420); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vendors/Progress.js/src/progress.js */ 422); +/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__); + + +Object(element_dataset__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(); + +__webpack_require__(/*! json3 */ 512); + +__webpack_require__(/*! intersection-observer */ 515); + + + +window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs = window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs || Object(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__["progressJs"])(); +window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs.onbeforeend(function () { + var _$ = window__WEBPACK_IMPORTED_MODULE_2___default.a.$; + + if (_$) { + try { + _$('.progressjs-container').hide(); + + window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { + _$('.progressjs-container').remove(); + }, 200); // eslint-disable-line no-magic-numbers + } catch (e) {} // eslint-disable-line no-empty + + } +}); + +__webpack_require__(/*! ../vendors/modernizr/modernizr-custom.js */ 516); + +__webpack_require__(/*! Common/Booter */ 517); + +if (window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot) { + window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot(); +} + +/***/ }), +/* 497 */ +/*!**********************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/define-property.js ***! + \**********************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(/*! ../../modules/es6.object.define-property */ 498); +var $Object = __webpack_require__(/*! ../../modules/_core */ 276).Object; +module.exports = function defineProperty(it, key, desc) { + return $Object.defineProperty(it, key, desc); +}; + + +/***/ }), +/* 498 */ +/*!*******************************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.define-property.js ***! + \*******************************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(/*! ./_export */ 405); +// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) +$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ 235), 'Object', { defineProperty: __webpack_require__(/*! ./_object-dp */ 407).f }); + + +/***/ }), +/* 499 */ +/*!*********************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(/*! ./_a-function */ 500); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 500 */ +/*!****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; + + +/***/ }), +/* 501 */ +/*!**********************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js ***! + \**********************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(/*! ./_object-dp */ 407); +var createDesc = __webpack_require__(/*! ./_property-desc */ 410); +module.exports = __webpack_require__(/*! ./_descriptors */ 235) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 502 */ +/*!***************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js ***! + \***************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ./_is-object */ 285); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + + +/***/ }), +/* 503 */ +/*!****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(/*! ./_is-object */ 285); +var document = __webpack_require__(/*! ./_global */ 406).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + + +/***/ }), +/* 504 */ +/*!**********************************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/get-own-property-descriptor.js ***! + \**********************************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(/*! ../../modules/es6.object.get-own-property-descriptor */ 505); +var $Object = __webpack_require__(/*! ../../modules/_core */ 276).Object; +module.exports = function getOwnPropertyDescriptor(it, key) { + return $Object.getOwnPropertyDescriptor(it, key); +}; + + +/***/ }), +/* 505 */ +/*!*******************************************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js ***! + \*******************************************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) +var toIObject = __webpack_require__(/*! ./_to-iobject */ 412); +var $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ 509).f; + +__webpack_require__(/*! ./_object-sap */ 511)('getOwnPropertyDescriptor', function () { + return function getOwnPropertyDescriptor(it, key) { + return $getOwnPropertyDescriptor(toIObject(it), key); + }; +}); + + +/***/ }), +/* 506 */ +/*!*************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js ***! + \*************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = __webpack_require__(/*! ./_cof */ 507); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + + +/***/ }), +/* 507 */ +/*!*********************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js ***! + \*********************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 508 */ +/*!*************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js ***! + \*************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), +/* 509 */ +/*!*****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js ***! + \*****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var pIE = __webpack_require__(/*! ./_object-pie */ 510); +var createDesc = __webpack_require__(/*! ./_property-desc */ 410); +var toIObject = __webpack_require__(/*! ./_to-iobject */ 412); +var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 409); +var has = __webpack_require__(/*! ./_has */ 411); +var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 408); +var gOPD = Object.getOwnPropertyDescriptor; + +exports.f = __webpack_require__(/*! ./_descriptors */ 235) ? gOPD : function getOwnPropertyDescriptor(O, P) { + O = toIObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return gOPD(O, P); + } catch (e) { /* empty */ } + if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); +}; + + +/***/ }), +/* 510 */ +/*!****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +exports.f = {}.propertyIsEnumerable; + + +/***/ }), +/* 511 */ +/*!****************************************************************************************!*\ + !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-sap.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +// most Object methods by ES6 should accept primitives +var $export = __webpack_require__(/*! ./_export */ 405); +var core = __webpack_require__(/*! ./_core */ 276); +var fails = __webpack_require__(/*! ./_fails */ 286); +module.exports = function (KEY, exec) { + var fn = (core.Object || {})[KEY] || Object[KEY]; + var exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); +}; + + +/***/ }), +/* 512 */ +/*!*****************************************!*\ + !*** ./node_modules/json3/lib/json3.js ***! + \*****************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */ +;(function () { + // Detect the `define` function exposed by asynchronous module loaders. The + // strict `define` check is necessary for compatibility with `r.js`. + var isLoader = true && __webpack_require__(/*! !webpack amd options */ 514); + + // A set of types used to distinguish objects from primitives. + var objectTypes = { + "function": true, + "object": true + }; + + // Detect the `exports` object exposed by CommonJS implementations. + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + // Use the `global` object exposed by Node (including Browserify via + // `insert-module-globals`), Narwhal, and Ringo as the default context, + // and the `window` object in browsers. Rhino exports a `global` function + // instead. + var root = objectTypes[typeof window] && window || this, + freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; + + if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) { + root = freeGlobal; + } + + // Public: Initializes JSON 3 using the given `context` object, attaching the + // `stringify` and `parse` functions to the specified `exports` object. + function runInContext(context, exports) { + context || (context = root.Object()); + exports || (exports = root.Object()); + + // Native constructor aliases. + var Number = context.Number || root.Number, + String = context.String || root.String, + Object = context.Object || root.Object, + Date = context.Date || root.Date, + SyntaxError = context.SyntaxError || root.SyntaxError, + TypeError = context.TypeError || root.TypeError, + Math = context.Math || root.Math, + nativeJSON = context.JSON || root.JSON; + + // Delegate to the native `stringify` and `parse` implementations. + if (typeof nativeJSON == "object" && nativeJSON) { + exports.stringify = nativeJSON.stringify; + exports.parse = nativeJSON.parse; + } + + // Convenience aliases. + var objectProto = Object.prototype, + getClass = objectProto.toString, + isProperty = objectProto.hasOwnProperty, + undefined; + + // Internal: Contains `try...catch` logic used by other functions. + // This prevents other functions from being deoptimized. + function attempt(func, errorFunc) { + try { + func(); + } catch (exception) { + if (errorFunc) { + errorFunc(); + } + } + } + + // Test the `Date#getUTC*` methods. Based on work by @Yaffle. + var isExtended = new Date(-3509827334573292); + attempt(function () { + // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical + // results for certain dates in Opera >= 10.53. + isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && + isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; + }); + + // Internal: Determines whether the native `JSON.stringify` and `parse` + // implementations are spec-compliant. Based on work by Ken Snyder. + function has(name) { + if (has[name] != null) { + // Return cached feature test result. + return has[name]; + } + var isSupported; + if (name == "bug-string-char-index") { + // IE <= 7 doesn't support accessing string characters using square + // bracket notation. IE 8 only supports this for primitives. + isSupported = "a"[0] != "a"; + } else if (name == "json") { + // Indicates whether both `JSON.stringify` and `JSON.parse` are + // supported. + isSupported = has("json-stringify") && has("date-serialization") && has("json-parse"); + } else if (name == "date-serialization") { + // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`. + isSupported = has("json-stringify") && isExtended; + if (isSupported) { + var stringify = exports.stringify; + attempt(function () { + isSupported = + // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly + // serialize extended years. + stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && + // The milliseconds are optional in ES 5, but required in 5.1. + stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && + // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative + // four-digit years instead of six-digit years. Credits: @Yaffle. + stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && + // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond + // values less than 1000. Credits: @Yaffle. + stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; + }); + } + } else { + var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; + // Test `JSON.stringify`. + if (name == "json-stringify") { + var stringify = exports.stringify, stringifySupported = typeof stringify == "function"; + if (stringifySupported) { + // A test function object with a custom `toJSON` method. + (value = function () { + return 1; + }).toJSON = value; + attempt(function () { + stringifySupported = + // Firefox 3.1b1 and b2 serialize string, number, and boolean + // primitives as object literals. + stringify(0) === "0" && + // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object + // literals. + stringify(new Number()) === "0" && + stringify(new String()) == '""' && + // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or + // does not define a canonical JSON representation (this applies to + // objects with `toJSON` properties as well, *unless* they are nested + // within an object or array). + stringify(getClass) === undefined && + // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and + // FF 3.1b3 pass this test. + stringify(undefined) === undefined && + // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, + // respectively, if the value is omitted entirely. + stringify() === undefined && + // FF 3.1b1, 2 throw an error if the given value is not a number, + // string, array, object, Boolean, or `null` literal. This applies to + // objects with custom `toJSON` methods as well, unless they are nested + // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` + // methods entirely. + stringify(value) === "1" && + stringify([value]) == "[1]" && + // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of + // `"[null]"`. + stringify([undefined]) == "[null]" && + // YUI 3.0.0b1 fails to serialize `null` literals. + stringify(null) == "null" && + // FF 3.1b1, 2 halts serialization if an array contains a function: + // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 + // elides non-JSON values from objects and arrays, unless they + // define custom `toJSON` methods. + stringify([undefined, getClass, null]) == "[null,null,null]" && + // Simple serialization test. FF 3.1b1 uses Unicode escape sequences + // where character escape codes are expected (e.g., `\b` => `\u0008`). + stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && + // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. + stringify(null, value) === "1" && + stringify([1, 2], null, 1) == "[\n 1,\n 2\n]"; + }, function () { + stringifySupported = false; + }); + } + isSupported = stringifySupported; + } + // Test `JSON.parse`. + if (name == "json-parse") { + var parse = exports.parse, parseSupported; + if (typeof parse == "function") { + attempt(function () { + // FF 3.1b1, b2 will throw an exception if a bare literal is provided. + // Conforming implementations should also coerce the initial argument to + // a string prior to parsing. + if (parse("0") === 0 && !parse(false)) { + // Simple parsing test. + value = parse(serialized); + parseSupported = value["a"].length == 5 && value["a"][0] === 1; + if (parseSupported) { + attempt(function () { + // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. + parseSupported = !parse('"\t"'); + }); + if (parseSupported) { + attempt(function () { + // FF 4.0 and 4.0.1 allow leading `+` signs and leading + // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow + // certain octal literals. + parseSupported = parse("01") !== 1; + }); + } + if (parseSupported) { + attempt(function () { + // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal + // points. These environments, along with FF 3.1b1 and 2, + // also allow trailing commas in JSON objects and arrays. + parseSupported = parse("1.") !== 1; + }); + } + } + } + }, function () { + parseSupported = false; + }); + } + isSupported = parseSupported; + } + } + return has[name] = !!isSupported; + } + has["bug-string-char-index"] = has["date-serialization"] = has["json"] = has["json-stringify"] = has["json-parse"] = null; + + if (!has("json")) { + // Common `[[Class]]` name aliases. + var functionClass = "[object Function]", + dateClass = "[object Date]", + numberClass = "[object Number]", + stringClass = "[object String]", + arrayClass = "[object Array]", + booleanClass = "[object Boolean]"; + + // Detect incomplete support for accessing string characters by index. + var charIndexBuggy = has("bug-string-char-index"); + + // Internal: Normalizes the `for...in` iteration algorithm across + // environments. Each enumerated key is yielded to a `callback` function. + var forOwn = function (object, callback) { + var size = 0, Properties, dontEnums, property; + + // Tests for bugs in the current environment's `for...in` algorithm. The + // `valueOf` property inherits the non-enumerable flag from + // `Object.prototype` in older versions of IE, Netscape, and Mozilla. + (Properties = function () { + this.valueOf = 0; + }).prototype.valueOf = 0; + + // Iterate over a new instance of the `Properties` class. + dontEnums = new Properties(); + for (property in dontEnums) { + // Ignore all properties inherited from `Object.prototype`. + if (isProperty.call(dontEnums, property)) { + size++; + } + } + Properties = dontEnums = null; + + // Normalize the iteration algorithm. + if (!size) { + // A list of non-enumerable properties inherited from `Object.prototype`. + dontEnums = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; + // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable + // properties. + forOwn = function (object, callback) { + var isFunction = getClass.call(object) == functionClass, property, length; + var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; + for (property in object) { + // Gecko <= 1.0 enumerates the `prototype` property of functions under + // certain conditions; IE does not. + if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { + callback(property); + } + } + // Manually invoke the callback for each non-enumerable property. + for (length = dontEnums.length; property = dontEnums[--length];) { + if (hasProperty.call(object, property)) { + callback(property); + } + } + }; + } else { + // No bugs detected; use the standard `for...in` algorithm. + forOwn = function (object, callback) { + var isFunction = getClass.call(object) == functionClass, property, isConstructor; + for (property in object) { + if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { + callback(property); + } + } + // Manually invoke the callback for the `constructor` property due to + // cross-environment inconsistencies. + if (isConstructor || isProperty.call(object, (property = "constructor"))) { + callback(property); + } + }; + } + return forOwn(object, callback); + }; + + // Public: Serializes a JavaScript `value` as a JSON string. The optional + // `filter` argument may specify either a function that alters how object and + // array members are serialized, or an array of strings and numbers that + // indicates which properties should be serialized. The optional `width` + // argument may be either a string or number that specifies the indentation + // level of the output. + if (!has("json-stringify") && !has("date-serialization")) { + // Internal: A map of control characters and their escaped equivalents. + var Escapes = { + 92: "\\\\", + 34: '\\"', + 8: "\\b", + 12: "\\f", + 10: "\\n", + 13: "\\r", + 9: "\\t" + }; + + // Internal: Converts `value` into a zero-padded string such that its + // length is at least equal to `width`. The `width` must be <= 6. + var leadingZeroes = "000000"; + var toPaddedString = function (width, value) { + // The `|| 0` expression is necessary to work around a bug in + // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. + return (leadingZeroes + (value || 0)).slice(-width); + }; + + // Internal: Serializes a date object. + var serializeDate = function (value) { + var getData, year, month, date, time, hours, minutes, seconds, milliseconds; + // Define additional utility methods if the `Date` methods are buggy. + if (!isExtended) { + var floor = Math.floor; + // A mapping between the months of the year and the number of days between + // January 1st and the first of the respective month. + var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + // Internal: Calculates the number of days between the Unix epoch and the + // first day of the given month. + var getDay = function (year, month) { + return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); + }; + getData = function (value) { + // Manually compute the year, month, date, hours, minutes, + // seconds, and milliseconds if the `getUTC*` methods are + // buggy. Adapted from @Yaffle's `date-shim` project. + date = floor(value / 864e5); + for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); + for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); + date = 1 + date - getDay(year, month); + // The `time` value specifies the time within the day (see ES + // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used + // to compute `A modulo B`, as the `%` operator does not + // correspond to the `modulo` operation for negative numbers. + time = (value % 864e5 + 864e5) % 864e5; + // The hours, minutes, seconds, and milliseconds are obtained by + // decomposing the time within the day. See section 15.9.1.10. + hours = floor(time / 36e5) % 24; + minutes = floor(time / 6e4) % 60; + seconds = floor(time / 1e3) % 60; + milliseconds = time % 1e3; + }; + } else { + getData = function (value) { + year = value.getUTCFullYear(); + month = value.getUTCMonth(); + date = value.getUTCDate(); + hours = value.getUTCHours(); + minutes = value.getUTCMinutes(); + seconds = value.getUTCSeconds(); + milliseconds = value.getUTCMilliseconds(); + }; + } + serializeDate = function (value) { + if (value > -1 / 0 && value < 1 / 0) { + // Dates are serialized according to the `Date#toJSON` method + // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 + // for the ISO 8601 date time string format. + getData(value); + // Serialize extended years correctly. + value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + + "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + + // Months, dates, hours, minutes, and seconds should have two + // digits; milliseconds should have three. + "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + + // Milliseconds are optional in ES 5.0, but required in 5.1. + "." + toPaddedString(3, milliseconds) + "Z"; + year = month = date = hours = minutes = seconds = milliseconds = null; + } else { + value = null; + } + return value; + }; + return serializeDate(value); + }; + + // For environments with `JSON.stringify` but buggy date serialization, + // we override the native `Date#toJSON` implementation with a + // spec-compliant one. + if (has("json-stringify") && !has("date-serialization")) { + // Internal: the `Date#toJSON` implementation used to override the native one. + function dateToJSON (key) { + return serializeDate(this); + } + + // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. + var nativeStringify = exports.stringify; + exports.stringify = function (source, filter, width) { + var nativeToJSON = Date.prototype.toJSON; + Date.prototype.toJSON = dateToJSON; + var result = nativeStringify(source, filter, width); + Date.prototype.toJSON = nativeToJSON; + return result; + } + } else { + // Internal: Double-quotes a string `value`, replacing all ASCII control + // characters (characters with code unit values between 0 and 31) with + // their escaped equivalents. This is an implementation of the + // `Quote(value)` operation defined in ES 5.1 section 15.12.3. + var unicodePrefix = "\\u00"; + var escapeChar = function (character) { + var charCode = character.charCodeAt(0), escaped = Escapes[charCode]; + if (escaped) { + return escaped; + } + return unicodePrefix + toPaddedString(2, charCode.toString(16)); + }; + var reEscape = /[\x00-\x1f\x22\x5c]/g; + var quote = function (value) { + reEscape.lastIndex = 0; + return '"' + + ( + reEscape.test(value) + ? value.replace(reEscape, escapeChar) + : value + ) + + '"'; + }; + + // Internal: Recursively serializes an object. Implements the + // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. + var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { + var value, type, className, results, element, index, length, prefix, result; + attempt(function () { + // Necessary for host object support. + value = object[property]; + }); + if (typeof value == "object" && value) { + if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) { + value = serializeDate(value); + } else if (typeof value.toJSON == "function") { + value = value.toJSON(property); + } + } + if (callback) { + // If a replacement function was provided, call it to obtain the value + // for serialization. + value = callback.call(object, property, value); + } + // Exit early if value is `undefined` or `null`. + if (value == undefined) { + return value === undefined ? value : "null"; + } + type = typeof value; + // Only call `getClass` if the value is an object. + if (type == "object") { + className = getClass.call(value); + } + switch (className || type) { + case "boolean": + case booleanClass: + // Booleans are represented literally. + return "" + value; + case "number": + case numberClass: + // JSON numbers must be finite. `Infinity` and `NaN` are serialized as + // `"null"`. + return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; + case "string": + case stringClass: + // Strings are double-quoted and escaped. + return quote("" + value); + } + // Recursively serialize objects and arrays. + if (typeof value == "object") { + // Check for cyclic structures. This is a linear search; performance + // is inversely proportional to the number of unique nested objects. + for (length = stack.length; length--;) { + if (stack[length] === value) { + // Cyclic structures cannot be serialized by `JSON.stringify`. + throw TypeError(); + } + } + // Add the object to the stack of traversed objects. + stack.push(value); + results = []; + // Save the current indentation level and indent one additional level. + prefix = indentation; + indentation += whitespace; + if (className == arrayClass) { + // Recursively serialize array elements. + for (index = 0, length = value.length; index < length; index++) { + element = serialize(index, value, callback, properties, whitespace, indentation, stack); + results.push(element === undefined ? "null" : element); + } + result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; + } else { + // Recursively serialize object members. Members are selected from + // either a user-specified list of property names, or the object + // itself. + forOwn(properties || value, function (property) { + var element = serialize(property, value, callback, properties, whitespace, indentation, stack); + if (element !== undefined) { + // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} + // is not the empty string, let `member` {quote(property) + ":"} + // be the concatenation of `member` and the `space` character." + // The "`space` character" refers to the literal space + // character, not the `space` {width} argument provided to + // `JSON.stringify`. + results.push(quote(property) + ":" + (whitespace ? " " : "") + element); + } + }); + result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; + } + // Remove the object from the traversed object stack. + stack.pop(); + return result; + } + }; + + // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. + exports.stringify = function (source, filter, width) { + var whitespace, callback, properties, className; + if (objectTypes[typeof filter] && filter) { + className = getClass.call(filter); + if (className == functionClass) { + callback = filter; + } else if (className == arrayClass) { + // Convert the property names array into a makeshift set. + properties = {}; + for (var index = 0, length = filter.length, value; index < length;) { + value = filter[index++]; + className = getClass.call(value); + if (className == "[object String]" || className == "[object Number]") { + properties[value] = 1; + } + } + } + } + if (width) { + className = getClass.call(width); + if (className == numberClass) { + // Convert the `width` to an integer and create a string containing + // `width` number of space characters. + if ((width -= width % 1) > 0) { + if (width > 10) { + width = 10; + } + for (whitespace = ""; whitespace.length < width;) { + whitespace += " "; + } + } + } else if (className == stringClass) { + whitespace = width.length <= 10 ? width : width.slice(0, 10); + } + } + // Opera <= 7.54u2 discards the values associated with empty string keys + // (`""`) only if they are used directly within an object member list + // (e.g., `!("" in { "": 1})`). + return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); + }; + } + } + + // Public: Parses a JSON source string. + if (!has("json-parse")) { + var fromCharCode = String.fromCharCode; + + // Internal: A map of escaped control characters and their unescaped + // equivalents. + var Unescapes = { + 92: "\\", + 34: '"', + 47: "/", + 98: "\b", + 116: "\t", + 110: "\n", + 102: "\f", + 114: "\r" + }; + + // Internal: Stores the parser state. + var Index, Source; + + // Internal: Resets the parser state and throws a `SyntaxError`. + var abort = function () { + Index = Source = null; + throw SyntaxError(); + }; + + // Internal: Returns the next token, or `"$"` if the parser has reached + // the end of the source string. A token may be a string, number, `null` + // literal, or Boolean literal. + var lex = function () { + var source = Source, length = source.length, value, begin, position, isSigned, charCode; + while (Index < length) { + charCode = source.charCodeAt(Index); + switch (charCode) { + case 9: case 10: case 13: case 32: + // Skip whitespace tokens, including tabs, carriage returns, line + // feeds, and space characters. + Index++; + break; + case 123: case 125: case 91: case 93: case 58: case 44: + // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at + // the current position. + value = charIndexBuggy ? source.charAt(Index) : source[Index]; + Index++; + return value; + case 34: + // `"` delimits a JSON string; advance to the next character and + // begin parsing the string. String tokens are prefixed with the + // sentinel `@` character to distinguish them from punctuators and + // end-of-string tokens. + for (value = "@", Index++; Index < length;) { + charCode = source.charCodeAt(Index); + if (charCode < 32) { + // Unescaped ASCII control characters (those with a code unit + // less than the space character) are not permitted. + abort(); + } else if (charCode == 92) { + // A reverse solidus (`\`) marks the beginning of an escaped + // control character (including `"`, `\`, and `/`) or Unicode + // escape sequence. + charCode = source.charCodeAt(++Index); + switch (charCode) { + case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: + // Revive escaped control characters. + value += Unescapes[charCode]; + Index++; + break; + case 117: + // `\u` marks the beginning of a Unicode escape sequence. + // Advance to the first character and validate the + // four-digit code point. + begin = ++Index; + for (position = Index + 4; Index < position; Index++) { + charCode = source.charCodeAt(Index); + // A valid sequence comprises four hexdigits (case- + // insensitive) that form a single hexadecimal value. + if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { + // Invalid Unicode escape sequence. + abort(); + } + } + // Revive the escaped character. + value += fromCharCode("0x" + source.slice(begin, Index)); + break; + default: + // Invalid escape sequence. + abort(); + } + } else { + if (charCode == 34) { + // An unescaped double-quote character marks the end of the + // string. + break; + } + charCode = source.charCodeAt(Index); + begin = Index; + // Optimize for the common case where a string is valid. + while (charCode >= 32 && charCode != 92 && charCode != 34) { + charCode = source.charCodeAt(++Index); + } + // Append the string as-is. + value += source.slice(begin, Index); + } + } + if (source.charCodeAt(Index) == 34) { + // Advance to the next character and return the revived string. + Index++; + return value; + } + // Unterminated string. + abort(); + default: + // Parse numbers and literals. + begin = Index; + // Advance past the negative sign, if one is specified. + if (charCode == 45) { + isSigned = true; + charCode = source.charCodeAt(++Index); + } + // Parse an integer or floating-point value. + if (charCode >= 48 && charCode <= 57) { + // Leading zeroes are interpreted as octal literals. + if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { + // Illegal octal literal. + abort(); + } + isSigned = false; + // Parse the integer component. + for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); + // Floats cannot contain a leading decimal point; however, this + // case is already accounted for by the parser. + if (source.charCodeAt(Index) == 46) { + position = ++Index; + // Parse the decimal component. + for (; position < length; position++) { + charCode = source.charCodeAt(position); + if (charCode < 48 || charCode > 57) { + break; + } + } + if (position == Index) { + // Illegal trailing decimal. + abort(); + } + Index = position; + } + // Parse exponents. The `e` denoting the exponent is + // case-insensitive. + charCode = source.charCodeAt(Index); + if (charCode == 101 || charCode == 69) { + charCode = source.charCodeAt(++Index); + // Skip past the sign following the exponent, if one is + // specified. + if (charCode == 43 || charCode == 45) { + Index++; + } + // Parse the exponential component. + for (position = Index; position < length; position++) { + charCode = source.charCodeAt(position); + if (charCode < 48 || charCode > 57) { + break; + } + } + if (position == Index) { + // Illegal empty exponent. + abort(); + } + Index = position; + } + // Coerce the parsed value to a JavaScript number. + return +source.slice(begin, Index); + } + // A negative sign may only precede numbers. + if (isSigned) { + abort(); + } + // `true`, `false`, and `null` literals. + var temp = source.slice(Index, Index + 4); + if (temp == "true") { + Index += 4; + return true; + } else if (temp == "fals" && source.charCodeAt(Index + 4 ) == 101) { + Index += 5; + return false; + } else if (temp == "null") { + Index += 4; + return null; + } + // Unrecognized token. + abort(); + } + } + // Return the sentinel `$` character if the parser has reached the end + // of the source string. + return "$"; + }; + + // Internal: Parses a JSON `value` token. + var get = function (value) { + var results, hasMembers; + if (value == "$") { + // Unexpected end of input. + abort(); + } + if (typeof value == "string") { + if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { + // Remove the sentinel `@` character. + return value.slice(1); + } + // Parse object and array literals. + if (value == "[") { + // Parses a JSON array, returning a new JavaScript array. + results = []; + for (;;) { + value = lex(); + // A closing square bracket marks the end of the array literal. + if (value == "]") { + break; + } + // If the array literal contains elements, the current token + // should be a comma separating the previous element from the + // next. + if (hasMembers) { + if (value == ",") { + value = lex(); + if (value == "]") { + // Unexpected trailing `,` in array literal. + abort(); + } + } else { + // A `,` must separate each array element. + abort(); + } + } else { + hasMembers = true; + } + // Elisions and leading commas are not permitted. + if (value == ",") { + abort(); + } + results.push(get(value)); + } + return results; + } else if (value == "{") { + // Parses a JSON object, returning a new JavaScript object. + results = {}; + for (;;) { + value = lex(); + // A closing curly brace marks the end of the object literal. + if (value == "}") { + break; + } + // If the object literal contains members, the current token + // should be a comma separator. + if (hasMembers) { + if (value == ",") { + value = lex(); + if (value == "}") { + // Unexpected trailing `,` in object literal. + abort(); + } + } else { + // A `,` must separate each object member. + abort(); + } + } else { + hasMembers = true; + } + // Leading commas are not permitted, object property names must be + // double-quoted strings, and a `:` must separate each property + // name and value. + if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { + abort(); + } + results[value.slice(1)] = get(lex()); + } + return results; + } + // Unexpected token encountered. + abort(); + } + return value; + }; + + // Internal: Updates a traversed object member. + var update = function (source, property, callback) { + var element = walk(source, property, callback); + if (element === undefined) { + delete source[property]; + } else { + source[property] = element; + } + }; + + // Internal: Recursively traverses a parsed JSON object, invoking the + // `callback` function for each value. This is an implementation of the + // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. + var walk = function (source, property, callback) { + var value = source[property], length; + if (typeof value == "object" && value) { + // `forOwn` can't be used to traverse an array in Opera <= 8.54 + // because its `Object#hasOwnProperty` implementation returns `false` + // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). + if (getClass.call(value) == arrayClass) { + for (length = value.length; length--;) { + update(getClass, forOwn, value, length, callback); + } + } else { + forOwn(value, function (property) { + update(value, property, callback); + }); + } + } + return callback.call(source, property, value); + }; + + // Public: `JSON.parse`. See ES 5.1 section 15.12.2. + exports.parse = function (source, callback) { + var result, value; + Index = 0; + Source = "" + source; + result = get(lex()); + // If a JSON string contains multiple tokens, it is invalid. + if (lex() != "$") { + abort(); + } + // Reset the parser state. + Index = Source = null; + return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; + }; + } + } + + exports.runInContext = runInContext; + return exports; + } + + if (freeExports && !isLoader) { + // Export for CommonJS environments. + runInContext(root, freeExports); + } else { + // Export for web browsers and JavaScript engines. + var nativeJSON = root.JSON, + previousJSON = root.JSON3, + isRestored = false; + + var JSON3 = runInContext(root, (root.JSON3 = { + // Public: Restores the original value of the global `JSON` object and + // returns a reference to the `JSON3` object. + "noConflict": function () { + if (!isRestored) { + isRestored = true; + root.JSON = nativeJSON; + root.JSON3 = previousJSON; + nativeJSON = previousJSON = null; + } + return JSON3; + } + })); + + root.JSON = { + "parse": JSON3.parse, + "stringify": JSON3.stringify + }; + } + + // Export for asynchronous module loaders. + if (isLoader) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return JSON3; + }).call(exports, __webpack_require__, exports, module), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } +}).call(this); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ 513)(module), __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) + +/***/ }), +/* 513 */ +/*!***********************************!*\ + !*** (webpack)/buildin/module.js ***! + \***********************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function(module) { + if (!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if (!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), +/* 514 */ +/*!****************************************!*\ + !*** (webpack)/buildin/amd-options.js ***! + \****************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ +module.exports = __webpack_amd_options__; + +/* WEBPACK VAR INJECTION */}.call(this, {})) + +/***/ }), +/* 515 */ +/*!*********************************************************************!*\ + !*** ./node_modules/intersection-observer/intersection-observer.js ***! + \*********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +/** + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE. + * + * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document + * + */ +(function() { +'use strict'; + +// Exit early if we're not running in a browser. +if (typeof window !== 'object') { + return; +} + +// Exit early if all IntersectionObserver and IntersectionObserverEntry +// features are natively supported. +if ('IntersectionObserver' in window && + 'IntersectionObserverEntry' in window && + 'intersectionRatio' in window.IntersectionObserverEntry.prototype) { + + // Minimal polyfill for Edge 15's lack of `isIntersecting` + // See: https://github.com/w3c/IntersectionObserver/issues/211 + if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) { + Object.defineProperty(window.IntersectionObserverEntry.prototype, + 'isIntersecting', { + get: function () { + return this.intersectionRatio > 0; + } + }); + } + return; +} + + +/** + * A local reference to the document. + */ +var document = window.document; + + +/** + * An IntersectionObserver registry. This registry exists to hold a strong + * reference to IntersectionObserver instances currently observing a target + * element. Without this registry, instances without another reference may be + * garbage collected. + */ +var registry = []; + + +/** + * Creates the global IntersectionObserverEntry constructor. + * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry + * @param {Object} entry A dictionary of instance properties. + * @constructor + */ +function IntersectionObserverEntry(entry) { + this.time = entry.time; + this.target = entry.target; + this.rootBounds = entry.rootBounds; + this.boundingClientRect = entry.boundingClientRect; + this.intersectionRect = entry.intersectionRect || getEmptyRect(); + this.isIntersecting = !!entry.intersectionRect; + + // Calculates the intersection ratio. + var targetRect = this.boundingClientRect; + var targetArea = targetRect.width * targetRect.height; + var intersectionRect = this.intersectionRect; + var intersectionArea = intersectionRect.width * intersectionRect.height; + + // Sets intersection ratio. + if (targetArea) { + // Round the intersection ratio to avoid floating point math issues: + // https://github.com/w3c/IntersectionObserver/issues/324 + this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4)); + } else { + // If area is zero and is intersecting, sets to 1, otherwise to 0 + this.intersectionRatio = this.isIntersecting ? 1 : 0; + } +} + + +/** + * Creates the global IntersectionObserver constructor. + * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface + * @param {Function} callback The function to be invoked after intersection + * changes have queued. The function is not invoked if the queue has + * been emptied by calling the `takeRecords` method. + * @param {Object=} opt_options Optional configuration options. + * @constructor + */ +function IntersectionObserver(callback, opt_options) { + + var options = opt_options || {}; + + if (typeof callback != 'function') { + throw new Error('callback must be a function'); + } + + if (options.root && options.root.nodeType != 1) { + throw new Error('root must be an Element'); + } + + // Binds and throttles `this._checkForIntersections`. + this._checkForIntersections = throttle( + this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT); + + // Private properties. + this._callback = callback; + this._observationTargets = []; + this._queuedEntries = []; + this._rootMarginValues = this._parseRootMargin(options.rootMargin); + + // Public properties. + this.thresholds = this._initThresholds(options.threshold); + this.root = options.root || null; + this.rootMargin = this._rootMarginValues.map(function(margin) { + return margin.value + margin.unit; + }).join(' '); +} + + +/** + * The minimum interval within which the document will be checked for + * intersection changes. + */ +IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100; + + +/** + * The frequency in which the polyfill polls for intersection changes. + * this can be updated on a per instance basis and must be set prior to + * calling `observe` on the first target. + */ +IntersectionObserver.prototype.POLL_INTERVAL = null; + +/** + * Use a mutation observer on the root element + * to detect intersection changes. + */ +IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true; + + +/** + * Starts observing a target element for intersection changes based on + * the thresholds values. + * @param {Element} target The DOM element to observe. + */ +IntersectionObserver.prototype.observe = function(target) { + var isTargetAlreadyObserved = this._observationTargets.some(function(item) { + return item.element == target; + }); + + if (isTargetAlreadyObserved) { + return; + } + + if (!(target && target.nodeType == 1)) { + throw new Error('target must be an Element'); + } + + this._registerInstance(); + this._observationTargets.push({element: target, entry: null}); + this._monitorIntersections(); + this._checkForIntersections(); +}; + + +/** + * Stops observing a target element for intersection changes. + * @param {Element} target The DOM element to observe. + */ +IntersectionObserver.prototype.unobserve = function(target) { + this._observationTargets = + this._observationTargets.filter(function(item) { + + return item.element != target; + }); + if (!this._observationTargets.length) { + this._unmonitorIntersections(); + this._unregisterInstance(); + } +}; + + +/** + * Stops observing all target elements for intersection changes. + */ +IntersectionObserver.prototype.disconnect = function() { + this._observationTargets = []; + this._unmonitorIntersections(); + this._unregisterInstance(); +}; + + +/** + * Returns any queue entries that have not yet been reported to the + * callback and clears the queue. This can be used in conjunction with the + * callback to obtain the absolute most up-to-date intersection information. + * @return {Array} The currently queued entries. + */ +IntersectionObserver.prototype.takeRecords = function() { + var records = this._queuedEntries.slice(); + this._queuedEntries = []; + return records; +}; + + +/** + * Accepts the threshold value from the user configuration object and + * returns a sorted array of unique threshold values. If a value is not + * between 0 and 1 and error is thrown. + * @private + * @param {Array|number=} opt_threshold An optional threshold value or + * a list of threshold values, defaulting to [0]. + * @return {Array} A sorted list of unique and valid threshold values. + */ +IntersectionObserver.prototype._initThresholds = function(opt_threshold) { + var threshold = opt_threshold || [0]; + if (!Array.isArray(threshold)) threshold = [threshold]; + + return threshold.sort().filter(function(t, i, a) { + if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) { + throw new Error('threshold must be a number between 0 and 1 inclusively'); + } + return t !== a[i - 1]; + }); +}; + + +/** + * Accepts the rootMargin value from the user configuration object + * and returns an array of the four margin values as an object containing + * the value and unit properties. If any of the values are not properly + * formatted or use a unit other than px or %, and error is thrown. + * @private + * @param {string=} opt_rootMargin An optional rootMargin value, + * defaulting to '0px'. + * @return {Array} An array of margin objects with the keys + * value and unit. + */ +IntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) { + var marginString = opt_rootMargin || '0px'; + var margins = marginString.split(/\s+/).map(function(margin) { + var parts = /^(-?\d*\.?\d+)(px|%)$/.exec(margin); + if (!parts) { + throw new Error('rootMargin must be specified in pixels or percent'); + } + return {value: parseFloat(parts[1]), unit: parts[2]}; + }); + + // Handles shorthand. + margins[1] = margins[1] || margins[0]; + margins[2] = margins[2] || margins[0]; + margins[3] = margins[3] || margins[1]; + + return margins; +}; + + +/** + * Starts polling for intersection changes if the polling is not already + * happening, and if the page's visibility state is visible. + * @private + */ +IntersectionObserver.prototype._monitorIntersections = function() { + if (!this._monitoringIntersections) { + this._monitoringIntersections = true; + + // If a poll interval is set, use polling instead of listening to + // resize and scroll events or DOM mutations. + if (this.POLL_INTERVAL) { + this._monitoringInterval = setInterval( + this._checkForIntersections, this.POLL_INTERVAL); + } + else { + addEvent(window, 'resize', this._checkForIntersections, true); + addEvent(document, 'scroll', this._checkForIntersections, true); + + if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) { + this._domObserver = new MutationObserver(this._checkForIntersections); + this._domObserver.observe(document, { + attributes: true, + childList: true, + characterData: true, + subtree: true + }); + } + } + } +}; + + +/** + * Stops polling for intersection changes. + * @private + */ +IntersectionObserver.prototype._unmonitorIntersections = function() { + if (this._monitoringIntersections) { + this._monitoringIntersections = false; + + clearInterval(this._monitoringInterval); + this._monitoringInterval = null; + + removeEvent(window, 'resize', this._checkForIntersections, true); + removeEvent(document, 'scroll', this._checkForIntersections, true); + + if (this._domObserver) { + this._domObserver.disconnect(); + this._domObserver = null; + } + } +}; + + +/** + * Scans each observation target for intersection changes and adds them + * to the internal entries queue. If new entries are found, it + * schedules the callback to be invoked. + * @private + */ +IntersectionObserver.prototype._checkForIntersections = function() { + var rootIsInDom = this._rootIsInDom(); + var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect(); + + this._observationTargets.forEach(function(item) { + var target = item.element; + var targetRect = getBoundingClientRect(target); + var rootContainsTarget = this._rootContainsTarget(target); + var oldEntry = item.entry; + var intersectionRect = rootIsInDom && rootContainsTarget && + this._computeTargetAndRootIntersection(target, rootRect); + + var newEntry = item.entry = new IntersectionObserverEntry({ + time: now(), + target: target, + boundingClientRect: targetRect, + rootBounds: rootRect, + intersectionRect: intersectionRect + }); + + if (!oldEntry) { + this._queuedEntries.push(newEntry); + } else if (rootIsInDom && rootContainsTarget) { + // If the new entry intersection ratio has crossed any of the + // thresholds, add a new entry. + if (this._hasCrossedThreshold(oldEntry, newEntry)) { + this._queuedEntries.push(newEntry); + } + } else { + // If the root is not in the DOM or target is not contained within + // root but the previous entry for this target had an intersection, + // add a new record indicating removal. + if (oldEntry && oldEntry.isIntersecting) { + this._queuedEntries.push(newEntry); + } + } + }, this); + + if (this._queuedEntries.length) { + this._callback(this.takeRecords(), this); + } +}; + + +/** + * Accepts a target and root rect computes the intersection between then + * following the algorithm in the spec. + * TODO(philipwalton): at this time clip-path is not considered. + * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo + * @param {Element} target The target DOM element + * @param {Object} rootRect The bounding rect of the root after being + * expanded by the rootMargin value. + * @return {?Object} The final intersection rect object or undefined if no + * intersection is found. + * @private + */ +IntersectionObserver.prototype._computeTargetAndRootIntersection = + function(target, rootRect) { + + // If the element isn't displayed, an intersection can't happen. + if (window.getComputedStyle(target).display == 'none') return; + + var targetRect = getBoundingClientRect(target); + var intersectionRect = targetRect; + var parent = getParentNode(target); + var atRoot = false; + + while (!atRoot) { + var parentRect = null; + var parentComputedStyle = parent.nodeType == 1 ? + window.getComputedStyle(parent) : {}; + + // If the parent isn't displayed, an intersection can't happen. + if (parentComputedStyle.display == 'none') return; + + if (parent == this.root || parent == document) { + atRoot = true; + parentRect = rootRect; + } else { + // If the element has a non-visible overflow, and it's not the + // or element, update the intersection rect. + // Note: and cannot be clipped to a rect that's not also + // the document rect, so no need to compute a new intersection. + if (parent != document.body && + parent != document.documentElement && + parentComputedStyle.overflow != 'visible') { + parentRect = getBoundingClientRect(parent); + } + } + + // If either of the above conditionals set a new parentRect, + // calculate new intersection data. + if (parentRect) { + intersectionRect = computeRectIntersection(parentRect, intersectionRect); + + if (!intersectionRect) break; + } + parent = getParentNode(parent); + } + return intersectionRect; +}; + + +/** + * Returns the root rect after being expanded by the rootMargin value. + * @return {Object} The expanded root rect. + * @private + */ +IntersectionObserver.prototype._getRootRect = function() { + var rootRect; + if (this.root) { + rootRect = getBoundingClientRect(this.root); + } else { + // Use / instead of window since scroll bars affect size. + var html = document.documentElement; + var body = document.body; + rootRect = { + top: 0, + left: 0, + right: html.clientWidth || body.clientWidth, + width: html.clientWidth || body.clientWidth, + bottom: html.clientHeight || body.clientHeight, + height: html.clientHeight || body.clientHeight + }; + } + return this._expandRectByRootMargin(rootRect); +}; + + +/** + * Accepts a rect and expands it by the rootMargin value. + * @param {Object} rect The rect object to expand. + * @return {Object} The expanded rect. + * @private + */ +IntersectionObserver.prototype._expandRectByRootMargin = function(rect) { + var margins = this._rootMarginValues.map(function(margin, i) { + return margin.unit == 'px' ? margin.value : + margin.value * (i % 2 ? rect.width : rect.height) / 100; + }); + var newRect = { + top: rect.top - margins[0], + right: rect.right + margins[1], + bottom: rect.bottom + margins[2], + left: rect.left - margins[3] + }; + newRect.width = newRect.right - newRect.left; + newRect.height = newRect.bottom - newRect.top; + + return newRect; +}; + + +/** + * Accepts an old and new entry and returns true if at least one of the + * threshold values has been crossed. + * @param {?IntersectionObserverEntry} oldEntry The previous entry for a + * particular target element or null if no previous entry exists. + * @param {IntersectionObserverEntry} newEntry The current entry for a + * particular target element. + * @return {boolean} Returns true if a any threshold has been crossed. + * @private + */ +IntersectionObserver.prototype._hasCrossedThreshold = + function(oldEntry, newEntry) { + + // To make comparing easier, an entry that has a ratio of 0 + // but does not actually intersect is given a value of -1 + var oldRatio = oldEntry && oldEntry.isIntersecting ? + oldEntry.intersectionRatio || 0 : -1; + var newRatio = newEntry.isIntersecting ? + newEntry.intersectionRatio || 0 : -1; + + // Ignore unchanged ratios + if (oldRatio === newRatio) return; + + for (var i = 0; i < this.thresholds.length; i++) { + var threshold = this.thresholds[i]; + + // Return true if an entry matches a threshold or if the new ratio + // and the old ratio are on the opposite sides of a threshold. + if (threshold == oldRatio || threshold == newRatio || + threshold < oldRatio !== threshold < newRatio) { + return true; + } + } +}; + + +/** + * Returns whether or not the root element is an element and is in the DOM. + * @return {boolean} True if the root element is an element and is in the DOM. + * @private + */ +IntersectionObserver.prototype._rootIsInDom = function() { + return !this.root || containsDeep(document, this.root); +}; + + +/** + * Returns whether or not the target element is a child of root. + * @param {Element} target The target element to check. + * @return {boolean} True if the target element is a child of root. + * @private + */ +IntersectionObserver.prototype._rootContainsTarget = function(target) { + return containsDeep(this.root || document, target); +}; + + +/** + * Adds the instance to the global IntersectionObserver registry if it isn't + * already present. + * @private + */ +IntersectionObserver.prototype._registerInstance = function() { + if (registry.indexOf(this) < 0) { + registry.push(this); + } +}; + + +/** + * Removes the instance from the global IntersectionObserver registry. + * @private + */ +IntersectionObserver.prototype._unregisterInstance = function() { + var index = registry.indexOf(this); + if (index != -1) registry.splice(index, 1); +}; + + +/** + * Returns the result of the performance.now() method or null in browsers + * that don't support the API. + * @return {number} The elapsed time since the page was requested. + */ +function now() { + return window.performance && performance.now && performance.now(); +} + + +/** + * Throttles a function and delays its execution, so it's only called at most + * once within a given time period. + * @param {Function} fn The function to throttle. + * @param {number} timeout The amount of time that must pass before the + * function can be called again. + * @return {Function} The throttled function. + */ +function throttle(fn, timeout) { + var timer = null; + return function () { + if (!timer) { + timer = setTimeout(function() { + fn(); + timer = null; + }, timeout); + } + }; +} + + +/** + * Adds an event handler to a DOM node ensuring cross-browser compatibility. + * @param {Node} node The DOM node to add the event handler to. + * @param {string} event The event name. + * @param {Function} fn The event handler to add. + * @param {boolean} opt_useCapture Optionally adds the even to the capture + * phase. Note: this only works in modern browsers. + */ +function addEvent(node, event, fn, opt_useCapture) { + if (typeof node.addEventListener == 'function') { + node.addEventListener(event, fn, opt_useCapture || false); + } + else if (typeof node.attachEvent == 'function') { + node.attachEvent('on' + event, fn); + } +} + + +/** + * Removes a previously added event handler from a DOM node. + * @param {Node} node The DOM node to remove the event handler from. + * @param {string} event The event name. + * @param {Function} fn The event handler to remove. + * @param {boolean} opt_useCapture If the event handler was added with this + * flag set to true, it should be set to true here in order to remove it. + */ +function removeEvent(node, event, fn, opt_useCapture) { + if (typeof node.removeEventListener == 'function') { + node.removeEventListener(event, fn, opt_useCapture || false); + } + else if (typeof node.detatchEvent == 'function') { + node.detatchEvent('on' + event, fn); + } +} + + +/** + * Returns the intersection between two rect objects. + * @param {Object} rect1 The first rect. + * @param {Object} rect2 The second rect. + * @return {?Object} The intersection rect or undefined if no intersection + * is found. + */ +function computeRectIntersection(rect1, rect2) { + var top = Math.max(rect1.top, rect2.top); + var bottom = Math.min(rect1.bottom, rect2.bottom); + var left = Math.max(rect1.left, rect2.left); + var right = Math.min(rect1.right, rect2.right); + var width = right - left; + var height = bottom - top; + + return (width >= 0 && height >= 0) && { + top: top, + bottom: bottom, + left: left, + right: right, + width: width, + height: height + }; +} + + +/** + * Shims the native getBoundingClientRect for compatibility with older IE. + * @param {Element} el The element whose bounding rect to get. + * @return {Object} The (possibly shimmed) rect of the element. + */ +function getBoundingClientRect(el) { + var rect; + + try { + rect = el.getBoundingClientRect(); + } catch (err) { + // Ignore Windows 7 IE11 "Unspecified error" + // https://github.com/w3c/IntersectionObserver/pull/205 + } + + if (!rect) return getEmptyRect(); + + // Older IE + if (!(rect.width && rect.height)) { + rect = { + top: rect.top, + right: rect.right, + bottom: rect.bottom, + left: rect.left, + width: rect.right - rect.left, + height: rect.bottom - rect.top + }; + } + return rect; +} + + +/** + * Returns an empty rect object. An empty rect is returned when an element + * is not in the DOM. + * @return {Object} The empty rect. + */ +function getEmptyRect() { + return { + top: 0, + bottom: 0, + left: 0, + right: 0, + width: 0, + height: 0 + }; +} + +/** + * Checks to see if a parent element contains a child element (including inside + * shadow DOM). + * @param {Node} parent The parent element. + * @param {Node} child The child element. + * @return {boolean} True if the parent node contains the child node. + */ +function containsDeep(parent, child) { + var node = child; + while (node) { + if (node == parent) return true; + + node = getParentNode(node); + } + return false; +} + + +/** + * Gets the parent node of an element or its host element if the parent node + * is a shadow root. + * @param {Node} node The node whose parent to get. + * @return {Node|null} The parent node or null if no parent exists. + */ +function getParentNode(node) { + var parent = node.parentNode; + + if (parent && parent.nodeType == 11 && parent.host) { + // If the parent is a shadow root, return the host element. + return parent.host; + } + + if (parent && parent.assignedSlot) { + // If the parent is distributed in a , return the parent of a slot. + return parent.assignedSlot.parentNode; + } + + return parent; +} + + +// Exposes the constructors globally. +window.IntersectionObserver = IntersectionObserver; +window.IntersectionObserverEntry = IntersectionObserverEntry; + +}()); + + +/***/ }), +/* 516 */ +/*!***********************************************!*\ + !*** ./vendors/modernizr/modernizr-custom.js ***! + \***********************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +/*! + * modernizr v3.3.1 + * Build http://modernizr.com/download?-backgroundsize-boxshadow-cssanimations-csstransitions-rgba-textshadow-setclasses-dontmin + * + * Copyright (c) + * Faruk Ates + * Paul Irish + * Alex Sexton + * Ryan Seddon + * Patrick Kettner + * Stu Cox + * Richard Herrera + + * MIT License + */ + +/* + * Modernizr tests which native CSS3 and HTML5 features are available in the + * current UA and makes the results available to you in two ways: as properties on + * a global `Modernizr` object, and as classes on the `` element. This + * information allows you to progressively enhance your pages with a granular level + * of control over the experience. +*/ + +;(function(window, document, undefined){ + var classes = []; + + + var tests = []; + + + /** + * + * ModernizrProto is the constructor for Modernizr + * + * @class + * @access public + */ + + var ModernizrProto = { + // The current version, dummy + _version: '3.3.1', + + // Any settings that don't work as separate modules + // can go in here as configuration. + _config: { + 'classPrefix': '', + 'enableClasses': true, + 'enableJSClass': true, + 'usePrefixes': true + }, + + // Queue of tests + _q: [], + + // Stub these for people who are listening + on: function(test, cb) { + // I don't really think people should do this, but we can + // safe guard it a bit. + // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests. + // This is in case people listen to synchronous tests. I would leave it out, + // but the code to *disallow* sync tests in the real version of this + // function is actually larger than this. + var self = this; + setTimeout(function() { + cb(self[test]); + }, 0); + }, + + addTest: function(name, fn, options) { + tests.push({name: name, fn: fn, options: options}); + }, + + addAsyncTest: function(fn) { + tests.push({name: null, fn: fn}); + } + }; + + + + // Fake some of Object.create so we can force non test results to be non "own" properties. + var Modernizr = function() {}; + Modernizr.prototype = ModernizrProto; + + // Leak modernizr globally when you `require` it rather than force it here. + // Overwrite name so constructor name is nicer :D + Modernizr = new Modernizr(); + + + + /** + * is returns a boolean if the typeof an obj is exactly type. + * + * @access private + * @function is + * @param {*} obj - A thing we want to check the type of + * @param {string} type - A string to compare the typeof against + * @returns {boolean} + */ + + function is(obj, type) { + return typeof obj === type; + } + ; + + /** + * Run through all tests and detect their support in the current UA. + * + * @access private + */ + + function testRunner() { + var featureNames; + var feature; + var aliasIdx; + var result; + var nameIdx; + var featureName; + var featureNameSplit; + + for (var featureIdx in tests) { + if (tests.hasOwnProperty(featureIdx)) { + featureNames = []; + feature = tests[featureIdx]; + // run the test, throw the return value into the Modernizr, + // then based on that boolean, define an appropriate className + // and push it into an array of classes we'll join later. + // + // If there is no name, it's an 'async' test that is run, + // but not directly added to the object. That should + // be done with a post-run addTest call. + if (feature.name) { + featureNames.push(feature.name.toLowerCase()); + + if (feature.options && feature.options.aliases && feature.options.aliases.length) { + // Add all the aliases into the names list + for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) { + featureNames.push(feature.options.aliases[aliasIdx].toLowerCase()); + } + } + } + + // Run the test, or use the raw value if it's not a function + result = is(feature.fn, 'function') ? feature.fn() : feature.fn; + + + // Set each of the names on the Modernizr object + for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) { + featureName = featureNames[nameIdx]; + // Support dot properties as sub tests. We don't do checking to make sure + // that the implied parent tests have been added. You must call them in + // order (either in the test, or make the parent test a dependency). + // + // Cap it to TWO to make the logic simple and because who needs that kind of subtesting + // hashtag famous last words + featureNameSplit = featureName.split('.'); + + if (featureNameSplit.length === 1) { + Modernizr[featureNameSplit[0]] = result; + } else { + // cast to a Boolean, if not one already + /* jshint -W053 */ + if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) { + Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]); + } + + Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result; + } + + classes.push((result ? '' : 'no-') + featureNameSplit.join('-')); + } + } + } + } + ; + + /** + * docElement is a convenience wrapper to grab the root element of the document + * + * @access private + * @returns {HTMLElement|SVGElement} The root element of the document + */ + + var docElement = document.documentElement; + + + /** + * A convenience helper to check if the document we are running in is an SVG document + * + * @access private + * @returns {boolean} + */ + + var isSVG = docElement.nodeName.toLowerCase() === 'svg'; + + + /** + * setClasses takes an array of class names and adds them to the root element + * + * @access private + * @function setClasses + * @param {string[]} classes - Array of class names + */ + + // Pass in an and array of class names, e.g.: + // ['no-webp', 'borderradius', ...] + function setClasses(classes) { + var className = docElement.className; + var classPrefix = Modernizr._config.classPrefix || ''; + + if (isSVG) { + className = className.baseVal; + } + + // Change `no-js` to `js` (independently of the `enableClasses` option) + // Handle classPrefix on this too + if (Modernizr._config.enableJSClass) { + var reJS = new RegExp('(^|\\s)' + classPrefix + 'no-js(\\s|$)'); + className = className.replace(reJS, '$1' + classPrefix + 'js$2'); + } + + if (Modernizr._config.enableClasses) { + // Add the new classes + className += ' ' + classPrefix + classes.join(' ' + classPrefix); + isSVG ? docElement.className.baseVal = className : docElement.className = className; + } + + } + + ; + + /** + * createElement is a convenience wrapper around document.createElement. Since we + * use createElement all over the place, this allows for (slightly) smaller code + * as well as abstracting away issues with creating elements in contexts other than + * HTML documents (e.g. SVG documents). + * + * @access private + * @function createElement + * @returns {HTMLElement|SVGElement} An HTML or SVG element + */ + + function createElement() { + if (typeof document.createElement !== 'function') { + // This is the case in IE7, where the type of createElement is "object". + // For this reason, we cannot call apply() as Object is not a Function. + return document.createElement(arguments[0]); + } else if (isSVG) { + return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]); + } else { + return document.createElement.apply(document, arguments); + } + } + + ; +/*! +{ + "name": "CSS rgba", + "caniuse": "css3-colors", + "property": "rgba", + "tags": ["css"], + "notes": [{ + "name": "CSSTricks Tutorial", + "href": "https://css-tricks.com/rgba-browser-support/" + }] +} +!*/ + + Modernizr.addTest('rgba', function() { + var style = createElement('a').style; + style.cssText = 'background-color:rgba(150,255,150,.5)'; + + return ('' + style.backgroundColor).indexOf('rgba') > -1; + }); + + + + /** + * contains checks to see if a string contains another string + * + * @access private + * @function contains + * @param {string} str - The string we want to check for substrings + * @param {string} substr - The substring we want to search the first string for + * @returns {boolean} + */ + + function contains(str, substr) { + return !!~('' + str).indexOf(substr); + } + + ; + + /** + * cssToDOM takes a kebab-case string and converts it to camelCase + * e.g. box-sizing -> boxSizing + * + * @access private + * @function cssToDOM + * @param {string} name - String name of kebab-case prop we want to convert + * @returns {string} The camelCase version of the supplied name + */ + + function cssToDOM(name) { + return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) { + return m1 + m2.toUpperCase(); + }).replace(/^-/, ''); + } + ; + + /** + * If the browsers follow the spec, then they would expose vendor-specific style as: + * elem.style.WebkitBorderRadius + * instead of something like the following, which would be technically incorrect: + * elem.style.webkitBorderRadius + + * Webkit ghosts their properties in lowercase but Opera & Moz do not. + * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+ + * erik.eae.net/archives/2008/03/10/21.48.10/ + + * More here: github.com/Modernizr/Modernizr/issues/issue/21 + * + * @access private + * @returns {string} The string representing the vendor-specific style properties + */ + + var omPrefixes = 'Moz O ms Webkit'; + + + var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []); + ModernizrProto._cssomPrefixes = cssomPrefixes; + + + /** + * List of JavaScript DOM values used for tests + * + * @memberof Modernizr + * @name Modernizr._domPrefixes + * @optionName Modernizr._domPrefixes + * @optionProp domPrefixes + * @access public + * @example + * + * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather + * than kebab-case properties, all properties are their Capitalized variant + * + * ```js + * Modernizr._domPrefixes === [ "Moz", "O", "ms", "Webkit" ]; + * ``` + */ + + var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []); + ModernizrProto._domPrefixes = domPrefixes; + + + /** + * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill. + * + * @access private + * @function fnBind + * @param {function} fn - a function you want to change `this` reference to + * @param {object} that - the `this` you want to call the function with + * @returns {function} The wrapped version of the supplied function + */ + + function fnBind(fn, that) { + return function() { + return fn.apply(that, arguments); + }; + } + + ; + + /** + * testDOMProps is a generic DOM property test; if a browser supports + * a certain property, it won't return undefined for it. + * + * @access private + * @function testDOMProps + * @param {array.} props - An array of properties to test for + * @param {object} obj - An object or Element you want to use to test the parameters again + * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check + */ + function testDOMProps(props, obj, elem) { + var item; + + for (var i in props) { + if (props[i] in obj) { + + // return the property name as a string + if (elem === false) { + return props[i]; + } + + item = obj[props[i]]; + + // let's bind a function + if (is(item, 'function')) { + // bind to obj unless overriden + return fnBind(item, elem || obj); + } + + // return the unbound function or obj or value + return item; + } + } + return false; + } + + ; + + /** + * Create our "modernizr" element that we do most feature tests on. + * + * @access private + */ + + var modElem = { + elem: createElement('modernizr') + }; + + // Clean up this element + Modernizr._q.push(function() { + delete modElem.elem; + }); + + + + var mStyle = { + style: modElem.elem.style + }; + + // kill ref for gc, must happen before mod.elem is removed, so we unshift on to + // the front of the queue. + Modernizr._q.unshift(function() { + delete mStyle.style; + }); + + + + /** + * domToCSS takes a camelCase string and converts it to kebab-case + * e.g. boxSizing -> box-sizing + * + * @access private + * @function domToCSS + * @param {string} name - String name of camelCase prop we want to convert + * @returns {string} The kebab-case version of the supplied name + */ + + function domToCSS(name) { + return name.replace(/([A-Z])/g, function(str, m1) { + return '-' + m1.toLowerCase(); + }).replace(/^ms-/, '-ms-'); + } + ; + + /** + * getBody returns the body of a document, or an element that can stand in for + * the body if a real body does not exist + * + * @access private + * @function getBody + * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an + * artificially created element that stands in for the body + */ + + function getBody() { + // After page load injecting a fake body doesn't work so check if body exists + var body = document.body; + + if (!body) { + // Can't use the real body create a fake one. + body = createElement(isSVG ? 'svg' : 'body'); + body.fake = true; + } + + return body; + } + + ; + + /** + * injectElementWithStyles injects an element with style element and some CSS rules + * + * @access private + * @function injectElementWithStyles + * @param {string} rule - String representing a css rule + * @param {function} callback - A function that is used to test the injected element + * @param {number} [nodes] - An integer representing the number of additional nodes you want injected + * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes + * @returns {boolean} + */ + + function injectElementWithStyles(rule, callback, nodes, testnames) { + var mod = 'modernizr'; + var style; + var ret; + var node; + var docOverflow; + var div = createElement('div'); + var body = getBody(); + + if (parseInt(nodes, 10)) { + // In order not to give false positives we create a node for each test + // This also allows the method to scale for unspecified uses + while (nodes--) { + node = createElement('div'); + node.id = testnames ? testnames[nodes] : mod + (nodes + 1); + div.appendChild(node); + } + } + + style = createElement('style'); + style.type = 'text/css'; + style.id = 's' + mod; + + // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody. + // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270 + (!body.fake ? div : body).appendChild(style); + body.appendChild(div); + + if (style.styleSheet) { + style.styleSheet.cssText = rule; + } else { + style.appendChild(document.createTextNode(rule)); + } + div.id = mod; + + if (body.fake) { + //avoid crashing IE8, if background image is used + body.style.background = ''; + //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible + body.style.overflow = 'hidden'; + docOverflow = docElement.style.overflow; + docElement.style.overflow = 'hidden'; + docElement.appendChild(body); + } + + ret = callback(div, rule); + // If this is done after page load we don't want to remove the body so check if body exists + if (body.fake) { + body.parentNode.removeChild(body); + docElement.style.overflow = docOverflow; + // Trigger layout so kinetic scrolling isn't disabled in iOS6+ + docElement.offsetHeight; + } else { + div.parentNode.removeChild(div); + } + + return !!ret; + + } + + ; + + /** + * nativeTestProps allows for us to use native feature detection functionality if available. + * some prefixed form, or false, in the case of an unsupported rule + * + * @access private + * @function nativeTestProps + * @param {array} props - An array of property names + * @param {string} value - A string representing the value we want to check via @supports + * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise + */ + + // Accepts a list of property names and a single value + // Returns `undefined` if native detection not available + function nativeTestProps(props, value) { + var i = props.length; + // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface + if ('CSS' in window && 'supports' in window.CSS) { + // Try every prefixed variant of the property + while (i--) { + if (window.CSS.supports(domToCSS(props[i]), value)) { + return true; + } + } + return false; + } + // Otherwise fall back to at-rule (for Opera 12.x) + else if ('CSSSupportsRule' in window) { + // Build a condition string for every prefixed variant + var conditionText = []; + while (i--) { + conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')'); + } + conditionText = conditionText.join(' or '); + return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) { + return getComputedStyle(node, null).position == 'absolute'; + }); + } + return undefined; + } + ; + + // testProps is a generic CSS / DOM property test. + + // In testing support for a given CSS property, it's legit to test: + // `elem.style[styleName] !== undefined` + // If the property is supported it will return an empty string, + // if unsupported it will return undefined. + + // We'll take advantage of this quick test and skip setting a style + // on our modernizr element, but instead just testing undefined vs + // empty string. + + // Property names can be provided in either camelCase or kebab-case. + + function testProps(props, prefixed, value, skipValueTest) { + skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest; + + // Try native detect first + if (!is(value, 'undefined')) { + var result = nativeTestProps(props, value); + if (!is(result, 'undefined')) { + return result; + } + } + + // Otherwise do it properly + var afterInit, i, propsLength, prop, before; + + // If we don't have a style element, that means we're running async or after + // the core tests, so we'll need to create our own elements to use + + // inside of an SVG element, in certain browsers, the `style` element is only + // defined for valid tags. Therefore, if `modernizr` does not have one, we + // fall back to a less used element and hope for the best. + var elems = ['modernizr', 'tspan']; + while (!mStyle.style) { + afterInit = true; + mStyle.modElem = createElement(elems.shift()); + mStyle.style = mStyle.modElem.style; + } + + // Delete the objects if we created them. + function cleanElems() { + if (afterInit) { + delete mStyle.style; + delete mStyle.modElem; + } + } + + propsLength = props.length; + for (i = 0; i < propsLength; i++) { + prop = props[i]; + before = mStyle.style[prop]; + + if (contains(prop, '-')) { + prop = cssToDOM(prop); + } + + if (mStyle.style[prop] !== undefined) { + + // If value to test has been passed in, do a set-and-check test. + // 0 (integer) is a valid property value, so check that `value` isn't + // undefined, rather than just checking it's truthy. + if (!skipValueTest && !is(value, 'undefined')) { + + // Needs a try catch block because of old IE. This is slow, but will + // be avoided in most cases because `skipValueTest` will be used. + try { + mStyle.style[prop] = value; + } catch (e) {} + + // If the property value has changed, we assume the value used is + // supported. If `value` is empty string, it'll fail here (because + // it hasn't changed), which matches how browsers have implemented + // CSS.supports() + if (mStyle.style[prop] != before) { + cleanElems(); + return prefixed == 'pfx' ? prop : true; + } + } + // Otherwise just return true, or the property name if this is a + // `prefixed()` call + else { + cleanElems(); + return prefixed == 'pfx' ? prop : true; + } + } + } + cleanElems(); + return false; + } + + ; + + /** + * testProp() investigates whether a given style property is recognized + * Property names can be provided in either camelCase or kebab-case. + * + * @memberof Modernizr + * @name Modernizr.testProp + * @access public + * @optionName Modernizr.testProp() + * @optionProp testProp + * @function testProp + * @param {string} prop - Name of the CSS property to check + * @param {string} [value] - Name of the CSS value to check + * @param {boolean} [useValue] - Whether or not to check the value if @supports isn't supported + * @returns {boolean} + * @example + * + * Just like [testAllProps](#modernizr-testallprops), only it does not check any vendor prefixed + * version of the string. + * + * Note that the property name must be provided in camelCase (e.g. boxSizing not box-sizing) + * + * ```js + * Modernizr.testProp('pointerEvents') // true + * ``` + * + * You can also provide a value as an optional second argument to check if a + * specific value is supported + * + * ```js + * Modernizr.testProp('pointerEvents', 'none') // true + * Modernizr.testProp('pointerEvents', 'penguin') // false + * ``` + */ + + var testProp = ModernizrProto.testProp = function(prop, value, useValue) { + return testProps([prop], undefined, value, useValue); + }; + +/*! +{ + "name": "CSS textshadow", + "property": "textshadow", + "caniuse": "css-textshadow", + "tags": ["css"], + "knownBugs": ["FF3.0 will false positive on this test"] +} +!*/ + + Modernizr.addTest('textshadow', testProp('textShadow', '1px 1px')); + + + /** + * testPropsAll tests a list of DOM properties we want to check against. + * We specify literally ALL possible (known and/or likely) properties on + * the element including the non-vendor prefixed one, for forward- + * compatibility. + * + * @access private + * @function testPropsAll + * @param {string} prop - A string of the property to test for + * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip + * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against + * @param {string} [value] - A string of a css value + * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set + */ + function testPropsAll(prop, prefixed, elem, value, skipValueTest) { + + var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), + props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); + + // did they call .prefixed('boxSizing') or are we just testing a prop? + if (is(prefixed, 'string') || is(prefixed, 'undefined')) { + return testProps(props, prefixed, value, skipValueTest); + + // otherwise, they called .prefixed('requestAnimationFrame', window[, elem]) + } else { + props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); + return testDOMProps(props, prefixed, elem); + } + } + + // Modernizr.testAllProps() investigates whether a given style property, + // or any of its vendor-prefixed variants, is recognized + // + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testAllProps('boxSizing') + ModernizrProto.testAllProps = testPropsAll; + + + + /** + * testAllProps determines whether a given CSS property is supported in the browser + * + * @memberof Modernizr + * @name Modernizr.testAllProps + * @optionName Modernizr.testAllProps() + * @optionProp testAllProps + * @access public + * @function testAllProps + * @param {string} prop - String naming the property to test (either camelCase or kebab-case) + * @param {string} [value] - String of the value to test + * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection + * @example + * + * testAllProps determines whether a given CSS property, in some prefixed form, + * is supported by the browser. + * + * ```js + * testAllProps('boxSizing') // true + * ``` + * + * It can optionally be given a CSS value in string form to test if a property + * value is valid + * + * ```js + * testAllProps('display', 'block') // true + * testAllProps('display', 'penguin') // false + * ``` + * + * A boolean can be passed as a third parameter to skip the value check when + * native detection (@supports) isn't available. + * + * ```js + * testAllProps('shapeOutside', 'content-box', true); + * ``` + */ + + function testAllProps(prop, value, skipValueTest) { + return testPropsAll(prop, undefined, undefined, value, skipValueTest); + } + ModernizrProto.testAllProps = testAllProps; + +/*! +{ + "name": "CSS Animations", + "property": "cssanimations", + "caniuse": "css-animation", + "polyfills": ["transformie", "csssandpaper"], + "tags": ["css"], + "warnings": ["Android < 4 will pass this test, but can only animate a single property at a time"], + "notes": [{ + "name" : "Article: 'Dispelling the Android CSS animation myths'", + "href": "https://goo.gl/OGw5Gm" + }] +} +!*/ +/* DOC +Detects whether or not elements can be animated using CSS +*/ + + Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true)); + +/*! +{ + "name": "Background Size", + "property": "backgroundsize", + "tags": ["css"], + "knownBugs": ["This will false positive in Opera Mini - https://github.com/Modernizr/Modernizr/issues/396"], + "notes": [{ + "name": "Related Issue", + "href": "https://github.com/Modernizr/Modernizr/issues/396" + }] +} +!*/ + + Modernizr.addTest('backgroundsize', testAllProps('backgroundSize', '100%', true)); + +/*! +{ + "name": "CSS Transitions", + "property": "csstransitions", + "caniuse": "css-transitions", + "tags": ["css"] +} +!*/ + + Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true)); + +/*! +{ + "name": "Box Shadow", + "property": "boxshadow", + "caniuse": "css-boxshadow", + "tags": ["css"], + "knownBugs": [ + "WebOS false positives on this test.", + "The Kindle Silk browser false positives" + ] +} +!*/ + + Modernizr.addTest('boxshadow', testAllProps('boxShadow', '1px 1px', true)); + + + // Run each test + testRunner(); + + // Remove the "no-js" class if it exists + setClasses(classes); + + delete ModernizrProto.addTest; + delete ModernizrProto.addAsyncTest; + + // Run the things that are supposed to run after the tests + for (var i = 0; i < Modernizr._q.length; i++) { + Modernizr._q[i](); + } + + // Leak Modernizr namespace + window.Modernizr = Modernizr; + + +; + +})(window, document); + +/***/ }), +/* 517 */ +/*!******************************!*\ + !*** ./dev/Common/Booter.js ***! + \******************************/ +/*! no exports provided */ +/*! all exports used */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! progressJs */ 99); +/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(progressJs__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Jassl */ 113); +/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/RainLoop */ 148); + + + + + + + + + + +var RL_APP_DATA_STORAGE = null; +/* eslint-disable camelcase,spaced-comment */ + +window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah = function () { + return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__[/* getHash */ "c"])(); +}; + +window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_set = function () { + return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__[/* setHash */ "e"])(); +}; + +window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_clear = function () { + return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_9__[/* clearHash */ "b"])(); +}; + +window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_data = function () { + return RL_APP_DATA_STORAGE; +}; + +var useJsNextBundle = function () { + // try { + // + // (function() { + // eval(` + // // let + const + //const x = 5; let y = 4; var z = 4; + // + // // Arrow Function + //const f = () => 'rainloop'; + // + // // Default + Rest + Spread + //const d = (test = 1, ...t) => 'rainloop'; + //d(...[1, 2, 3]); + // + //// Destructuring + //let [a, b] = [1, 2]; + //({a, b} = {a: 1, b: 2}); + // + //// Class + //class Q1 { constructor() {} } + // + //// Class extends + super + //class Q2 extends Q1 { constructor() { super() } } + // + //`); + // }()); + // + // return true; + // } + // catch (e) {} + return false; +}(); +/* eslint-enable */ + +/** + * @param {string} id + * @param {string} name + * @returns {string} + */ + + +function getComputedStyle(id, name) { + var element = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById(id); + return element && element.currentStyle ? element.currentStyle[name] : window__WEBPACK_IMPORTED_MODULE_6___default.a.getComputedStyle ? window__WEBPACK_IMPORTED_MODULE_6___default.a.getComputedStyle(element, null).getPropertyValue(name) : null; +} +/** + * @param {string} styles + * @returns {void} + */ + + +function includeStyle(styles) { + var style = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.createElement('style'); + style.type = 'text/css'; + style.text = styles; + + if (style.styleSheet) { + style.styleSheet.cssText = styles; + } else { + style.appendChild(window__WEBPACK_IMPORTED_MODULE_6___default.a.document.createTextNode(styles)); + } + + window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementsByTagName('head')[0].appendChild(style); +} +/** + * @param {string} src + * @returns {void} + */ + + +function includeScr(src) { + var script = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.createElement('script'); + script.type = 'text/javascript'; + script.src = src; + window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementsByTagName('head')[0].appendChild(script); +} +/** + * @returns {boolean} + */ + + +function includeLayout() { + var app = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-app'); + + __webpack_require__(/*! Styles/@Boot.css */ 518); + + if (app) { + var layout = __webpack_require__(/*! Html/Layout.html */ 522); + + app.innerHTML = ((layout && layout.default ? layout.default : layout) || '').replace(/[\r\n\t]+/g, ''); + return true; + } + + return false; +} +/** + * @param {boolean} admin = false + * @param {boolean} mobile = false + * @param {boolean} mobileDevice = false + * @returns {void} + */ + + +function includeAppScr(_ref) { + var _ref$admin = _ref.admin, + admin = _ref$admin === void 0 ? false : _ref$admin, + _ref$mobile = _ref.mobile, + mobile = _ref$mobile === void 0 ? false : _ref$mobile, + _ref$mobileDevice = _ref.mobileDevice, + mobileDevice = _ref$mobileDevice === void 0 ? false : _ref$mobileDevice; + var src = './?/'; + src += admin ? 'Admin' : ''; + src += 'AppData@'; + src += mobile ? 'mobile' : 'no-mobile'; + src += mobileDevice ? '-1' : '-0'; + src += '/'; + includeScr(src + (window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah ? window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah() || '0' : '0') + '/' + window__WEBPACK_IMPORTED_MODULE_6___default.a.Math.random().toString().substr(2) + '/'); +} +/** + * @returns {object} + */ + + +function getRainloopBootData() { + var result = {}; + var meta = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('app-boot-data'); + + if (meta && meta.getAttribute) { + result = JSON.parse(meta.getAttribute('content')) || {}; + } + + return result; +} +/** + * @param {string} additionalError + * @returns {void} + */ + + +function showError(additionalError) { + var oR = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading'), + oL = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading-error'), + oLA = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading-error-additional'); + + if (oR) { + oR.style.display = 'none'; + } + + if (oL) { + oL.style.display = 'block'; + } + + if (oLA && additionalError) { + oLA.style.display = 'block'; + oLA.innerHTML = additionalError; + } + + if (progressJs__WEBPACK_IMPORTED_MODULE_7___default.a) { + progressJs__WEBPACK_IMPORTED_MODULE_7___default.a.set(100).end(); + } +} +/** + * @param {string} description + * @returns {void} + */ + + +function showDescriptionAndLoading(description) { + var oE = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading'), + oElDesc = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('rl-loading-desc'); + + if (oElDesc && description) { + oElDesc.innerHTML = description; + } + + if (oE && oE.style) { + oE.style.opacity = 0; + window__WEBPACK_IMPORTED_MODULE_6___default.a.setTimeout(function () { + oE.style.opacity = 1; + }, 300); + } +} +/** + * @param {boolean} withError + * @param {string} additionalError + * @returns {void} + */ + + +function runMainBoot(withError, additionalError) { + if (window__WEBPACK_IMPORTED_MODULE_6___default.a.__APP_BOOT && !withError) { + window__WEBPACK_IMPORTED_MODULE_6___default.a.__APP_BOOT(function () { + showError(additionalError); + }); + } else { + showError(additionalError); + } +} +/** + * @returns {void} + */ + + +function runApp() { + var appData = window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_data(); + + if (Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"] && progressJs__WEBPACK_IMPORTED_MODULE_7___default.a && appData && appData.LangLink && appData.StaticLibJsLink && appData.StaticAppJsLink && appData.StaticAppJsNextLink && appData.StaticEditorJsLink) { + var p = progressJs__WEBPACK_IMPORTED_MODULE_7___default.a; + p.setOptions({ + theme: 'rainloop' + }); + p.start().set(5); + + var libs = function libs() { + return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.StaticLibJsLink).then(function () { + if (window__WEBPACK_IMPORTED_MODULE_6___default.a.$) { + window__WEBPACK_IMPORTED_MODULE_6___default.a.$('#rl-check').remove(); + + if (appData.IncludeBackground) { + window__WEBPACK_IMPORTED_MODULE_6___default.a.$('#rl-bg').attr('style', 'background-image: none !important;').backstretch(appData.IncludeBackground.replace('{{USER}}', window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah ? window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah() || '0' : '0'), { + fade: 100, + centeredX: true, + centeredY: true + }).removeAttr('style'); + } + } + }); + }; + + libs().then(function () { + p.set(20); + return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.LangLink); + }).then(function () { + p.set(30); + return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(useJsNextBundle ? appData.StaticAppJsNextLink : appData.StaticAppJsLink); + }).then(function () { + p.set(50); + return appData.PluginsLink ? Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.PluginsLink) : window__WEBPACK_IMPORTED_MODULE_6___default.a.Promise.resolve(); + }).then(function () { + p.set(70); + runMainBoot(false); + }).catch(function (e) { + runMainBoot(true); + throw e; + }).then(function () { + return Object(Common_Jassl__WEBPACK_IMPORTED_MODULE_8__[/* jassl */ "a"])(appData.StaticEditorJsLink); + }).then(function () { + if (window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR && window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor) { + window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor(); + + window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor = null; + } + }); + } else { + runMainBoot(true); + } +} +/** + * @param {mixed} data + * @returns {void} + */ + + +window__WEBPACK_IMPORTED_MODULE_6___default.a.__initAppData = function (data) { + RL_APP_DATA_STORAGE = data; + + window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_set(); + + if (RL_APP_DATA_STORAGE) { + if (RL_APP_DATA_STORAGE.NewThemeLink) { + (window__WEBPACK_IMPORTED_MODULE_6___default.a.document.getElementById('app-theme-link') || {}).href = RL_APP_DATA_STORAGE.NewThemeLink; + } + + if (RL_APP_DATA_STORAGE.IncludeCss) { + includeStyle(RL_APP_DATA_STORAGE.IncludeCss); + } + + showDescriptionAndLoading(RL_APP_DATA_STORAGE.LoadingDescriptionEsc || ''); + } + + runApp(); +}; +/** + * @returns {void} + */ + + +window__WEBPACK_IMPORTED_MODULE_6___default.a.__runBoot = function () { + if (!window__WEBPACK_IMPORTED_MODULE_6___default.a.navigator || !window__WEBPACK_IMPORTED_MODULE_6___default.a.navigator.cookieEnabled) { + window__WEBPACK_IMPORTED_MODULE_6___default.a.document.location.replace('./?/NoCookie'); + } + + var root = window__WEBPACK_IMPORTED_MODULE_6___default.a.document.documentElement; + + if ('none' !== getComputedStyle('rl-check', 'display')) { + root.className += ' no-css'; + } + + if (useJsNextBundle) { + root.className += ' js-next'; + } + + if (includeLayout()) { + includeAppScr(getRainloopBootData()); + } +}; + +/***/ }), +/* 518 */ +/*!******************************!*\ + !*** ./dev/Styles/@Boot.css ***! + \******************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ 519); + var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!./@Boot.css */ 520); + + content = content.__esModule ? content.default : content; + + if (typeof content === 'string') { + content = [[module.i, content, '']]; + } + +var options = {}; + +options.insert = "head"; +options.singleton = false; + +var update = api(content, options); + +var exported = content.locals ? content.locals : {}; + + + +module.exports = exported; + +/***/ }), +/* 519 */ +/*!****************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! + \****************************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isOldIE = function isOldIE() { + var memo; + return function memorize() { + if (typeof memo === 'undefined') { + // Test for IE <= 9 as proposed by Browserhacks + // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 + // Tests for existence of standard globals is to allow style-loader + // to operate correctly into non-standard environments + // @see https://github.com/webpack-contrib/style-loader/issues/177 + memo = Boolean(window && document && document.all && !window.atob); + } + + return memo; + }; +}(); + +var getTarget = function getTarget() { + var memo = {}; + return function memorize(target) { + if (typeof memo[target] === 'undefined') { + var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself + + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { + try { + // This will throw an exception if access to iframe is blocked + // due to cross-origin restrictions + styleTarget = styleTarget.contentDocument.head; + } catch (e) { + // istanbul ignore next + styleTarget = null; + } + } + + memo[target] = styleTarget; + } + + return memo[target]; + }; +}(); + +var stylesInDom = []; + +function getIndexByIdentifier(identifier) { + var result = -1; + + for (var i = 0; i < stylesInDom.length; i++) { + if (stylesInDom[i].identifier === identifier) { + result = i; + break; + } + } + + return result; +} + +function modulesToDom(list, options) { + var idCountMap = {}; + var identifiers = []; + + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var id = options.base ? item[0] + options.base : item[0]; + var count = idCountMap[id] || 0; + var identifier = "".concat(id, " ").concat(count); + idCountMap[id] = count + 1; + var index = getIndexByIdentifier(identifier); + var obj = { + css: item[1], + media: item[2], + sourceMap: item[3] + }; + + if (index !== -1) { + stylesInDom[index].references++; + stylesInDom[index].updater(obj); + } else { + stylesInDom.push({ + identifier: identifier, + updater: addStyle(obj, options), + references: 1 + }); + } + + identifiers.push(identifier); + } + + return identifiers; +} + +function insertStyleElement(options) { + var style = document.createElement('style'); + var attributes = options.attributes || {}; + + if (typeof attributes.nonce === 'undefined') { + var nonce = true ? __webpack_require__.nc : undefined; + + if (nonce) { + attributes.nonce = nonce; + } + } + + Object.keys(attributes).forEach(function (key) { + style.setAttribute(key, attributes[key]); + }); + + if (typeof options.insert === 'function') { + options.insert(style); + } else { + var target = getTarget(options.insert || 'head'); + + if (!target) { + throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + } + + target.appendChild(style); + } + + return style; +} + +function removeStyleElement(style) { + // istanbul ignore if + if (style.parentNode === null) { + return false; + } + + style.parentNode.removeChild(style); +} +/* istanbul ignore next */ + + +var replaceText = function replaceText() { + var textStore = []; + return function replace(index, replacement) { + textStore[index] = replacement; + return textStore.filter(Boolean).join('\n'); + }; +}(); + +function applyToSingletonTag(style, index, remove, obj) { + var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE + + /* istanbul ignore if */ + + if (style.styleSheet) { + style.styleSheet.cssText = replaceText(index, css); + } else { + var cssNode = document.createTextNode(css); + var childNodes = style.childNodes; + + if (childNodes[index]) { + style.removeChild(childNodes[index]); + } + + if (childNodes.length) { + style.insertBefore(cssNode, childNodes[index]); + } else { + style.appendChild(cssNode); + } + } +} + +function applyToTag(style, options, obj) { + var css = obj.css; + var media = obj.media; + var sourceMap = obj.sourceMap; + + if (media) { + style.setAttribute('media', media); + } else { + style.removeAttribute('media'); + } + + if (sourceMap && btoa) { + css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); + } // For old IE + + /* istanbul ignore if */ + + + if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + while (style.firstChild) { + style.removeChild(style.firstChild); + } + + style.appendChild(document.createTextNode(css)); + } +} + +var singleton = null; +var singletonCounter = 0; + +function addStyle(obj, options) { + var style; + var update; + var remove; + + if (options.singleton) { + var styleIndex = singletonCounter++; + style = singleton || (singleton = insertStyleElement(options)); + update = applyToSingletonTag.bind(null, style, styleIndex, false); + remove = applyToSingletonTag.bind(null, style, styleIndex, true); + } else { + style = insertStyleElement(options); + update = applyToTag.bind(null, style, options); + + remove = function remove() { + removeStyleElement(style); + }; + } + + update(obj); + return function updateStyle(newObj) { + if (newObj) { + if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { + return; + } + + update(obj = newObj); + } else { + remove(); + } + }; +} + +module.exports = function (list, options) { + options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of '),n.after(o),n.remove()),o&&o[0]&&qe(o,e[1])&&o.attr("data-href",r).attr("data-theme",e[0]),t(j.SaveSettingsStep.TrueResult))})).then(i,i))}function Ye(e,t){return function(){var n=e(),i=t(),o=[],r=function(e,t,i){void 0===t&&(t=!0),void 0===i&&(i="");var r={current:e===n,name:""===i?e.toString():i.toString(),custom:""!==i,title:""===i?"":e.toString(),value:e.toString()};t?o.push(r):o.unshift(r)},a=0,s=0,c=2;if(1=n||i-2<=n)&&(c+=2),r(n),a=n,s=n);0=s)r(s,!0),c-=1;else if(0>=a)break;3===a?r(2,!1):3s&&r(Math.round((i+s)/2),!0,"..."),1s&&r(i,!0)}return o}}function $e(e){var t=(e=R(e).toLowerCase()).split(".").pop();return t===e?"":t}function Xe(e){var t,n="application/octet-stream";return"winmail.dat"===(e=R(e).toLowerCase())?"application/ms-tnef":((t=$e(e))&&0this.height?[this.width-this.height,0]:[0,this.height-this.width],o.fillStyle="#fff",o.fillRect(0,0,t,t),o.drawImage(this,e[0]/2,e[1]/2,this.width-e[0],this.height-e[1],0,0,t,t),n(i.toDataURL("image/jpeg"))},i.src=e}function et(e,t){if(e&&"mailto:"===e.toString().substr(0,7).toLowerCase()){if(!t)return!0;var i,r=[],s=null,c=null,u=(e=e.toString().substr(7)).replace(/\?.+$/,""),l=e.replace(/^[^?]*\?/,""),d=n(82).default;return i=ne(l),M(i.to)?r=d.parseEmailLine(u):(r=d.parseEmailLine(Z(u+","+i.to)),r=a()(T.a).call(T.a,o()(r).call(r,(function(e,t){return t&&(e[t.email]&&e[t.email].name||(e[t.email]=t)),e}),{}))),M(i.cc)||(s=d.parseEmailLine(Z(i.cc))),M(i.bcc)||(c=d.parseEmailLine(Z(i.bcc))),n(7).showScreenPopup(t,[j.ComposeType.Empty,null,r,s,c,M(i.subject)?null:Y(Z(i.subject)),M(i.body)?null:Pe(Y(Z(i.body)))]),!0}return!1}function tt(e){O()((function(){return e()}))}var nt=T.a.debounce((function(e){M(e)||F(e)?E.$win.resize():y.a.setTimeout((function(){E.$win.resize()}),e)}),50);function it(){nt()}var ot=y.a.String.substr;"b"!=="ab".substr(-1)&&(ot=function(e,t,n){return t=0>t?e.length+t:t,e.substr(t,n)},y.a.String.substr=ot)},function(e,t){e.exports=window._},function(e,t){e.exports=window},function(e,t,n){"use strict";n.r(t),n.d(t,"settingsGet",(function(){return c})),n.d(t,"settingsSet",(function(){return u})),n.d(t,"appSettingsGet",(function(){return l})),n.d(t,"capa",(function(){return d}));var i=n(4),o=n.n(i),r=n(2),a=o.a.__rlah_data()||null,s=(a=Object(r.isNormal)(a)?a:{}).System||null;function c(e){return Object(r.isUnd)(a[e])?null:a[e]}function u(e,t){a[e]=t}function l(e){return Object(r.isUnd)(s[e])?null:s[e]}function d(e){var t=c("Capa");return Object(r.isArray)(t)&&Object(r.isNormal)(e)&&-1"),O=p()("
");O.attr("area","hidden").css({position:"absolute",left:-5e3}).appendTo(y);var A=(new c.a.Date).getTime(),T=!0,C=h.a.observable(!1).extend({rateLimit:0}),_=h.a.observable(!0),x="navigator"in c.a&&"userAgent"in c.a.navigator&&c.a.navigator.userAgent.toLowerCase()||"",E=-1").addClass("rl-view-model").addClass("RL-"+i.viewModelTemplateID).hide()).appendTo(r),i.viewModelDom=n,e.__dom=n,w.Popup===o&&(i.cancelCommand=i.closeCommand=A((function(){N(e)})),i.modalVisibility.subscribe((function(t){t?(i.viewModelDom.show(),i.storeAndSetKeyScope(),m.popupVisibilityNames.push(i.viewModelName),i.viewModelDom.css("z-index",3e3+Object(m.popupVisibilityNames)().length+10),i.onShowTrigger&&i.onShowTrigger(!i.onShowTrigger()),Object(b.delegateRun)(i,"onShowWithDelay",[],500)):(Object(b.delegateRun)(i,"onHide"),Object(b.delegateRun)(i,"onHideWithDelay",[],500),i.onHideTrigger&&i.onHideTrigger(!i.onHideTrigger()),i.restoreKeyScope(),R("view-model-on-hide",e),m.popupVisibilityNames.remove(i.viewModelName),i.viewModelDom.css("z-index",2e3),a.a.delay((function(){return i.viewModelDom.hide()}),300))}))),R("view-model-pre-build",e,n),u.a.applyBindingAccessorsToNode(n[0],{translatorInit:!0,template:function(){return{name:i.viewModelTemplateID}}},i),Object(b.delegateRun)(i,"onBuild",[n]),i&&w.Popup===o&&i.registerPopupKeyDown(),R("view-model-post-build",e,n)):Object(b.log)("Cannot find view model position: "+o)}return e?e.__vm:null}function P(e,t){void 0===t&&(t=[]);var n=D(e);n&&(I(n),n.__vm&&n.__dom&&(Object(b.delegateRun)(n.__vm,"onBeforeShow",t||[]),n.__vm.modalVisibility(!0),Object(b.delegateRun)(n.__vm,"onShow",t||[]),R("view-model-on-show",n,t||[])))}function k(e){var t=D(e);t&&(I(t),t.__vm&&t.__dom&&Object(b.delegateRun)(t.__vm,"onWarmUp"))}function L(e){var t=D(e);return!(!t||!t.__vm)&&t.__vm.modalVisibility()}function M(e,t){var n=null,i=!1,o=null;""===Object(b.pString)(e)&&(e=S),""!==e&&((n=j(e))||(n=j(S))&&(t=e+"/"+t,e=S),n&&n.__started&&(i=v&&n===v,n.__builded||(n.__builded=!0,Object(b.isNonEmptyArray)(n.viewModels())&&a.a.each(n.viewModels(),(function(e){I(e,n)})),Object(b.delegateRun)(n,"onBuild")),a.a.defer((function(){v&&!i&&(Object(b.delegateRun)(v,"onHide"),Object(b.delegateRun)(v,"onHideWithDelay",[],500),v.onHideTrigger&&v.onHideTrigger(!v.onHideTrigger()),Object(b.isNonEmptyArray)(v.viewModels())&&a.a.each(v.viewModels(),(function(e){e.__vm&&e.__dom&&w.Popup!==e.__vm.viewModelPosition&&(e.__dom.hide(),e.__vm.viewModelVisibility(!1),Object(b.delegateRun)(e.__vm,"onHide"),Object(b.delegateRun)(e.__vm,"onHideWithDelay",[],500),e.__vm.onHideTrigger&&e.__vm.onHideTrigger(!e.__vm.onHideTrigger()))}))),(v=n)&&!i&&(Object(b.delegateRun)(v,"onShow"),v.onShowTrigger&&v.onShowTrigger(!v.onShowTrigger()),Object(h.f)("screen-on-show",[v.screenName(),v]),Object(b.isNonEmptyArray)(v.viewModels())&&a.a.each(v.viewModels(),(function(e){e.__vm&&e.__dom&&w.Popup!==e.__vm.viewModelPosition&&(Object(b.delegateRun)(e.__vm,"onBeforeShow"),e.__dom.show(),e.__vm.viewModelVisibility(!0),Object(b.delegateRun)(e.__vm,"onShow"),e.__vm.onShowTrigger&&e.__vm.onShowTrigger(!e.__vm.onShowTrigger()),Object(b.delegateRun)(e.__vm,"onShowWithDelay",[],200),R("view-model-on-show",e))}))),(o=n&&n.__cross?n.__cross():null)&&o.parse(t)}))))}function F(e){a.a.each(e,(function(e){if(e){var t=new e,n=t?t.screenName():"";t&&""!==n&&(""===S&&(S=n),y[n]=t)}})),a.a.each(y,(function(e){e&&!e.__started&&e.__start&&(e.__started=!0,e.__start(),Object(h.f)("screen-pre-start",[e.screenName(),e]),Object(b.delegateRun)(e,"onStart"),Object(h.f)("screen-post-start",[e.screenName(),e]))}));var t=f.a.create();t.addRoute(/^([a-zA-Z0-9-]*)\/?(.*)$/,M),d.a.initialized.add(t.parse,t),d.a.changed.add(t.parse,t),d.a.init(),a.a.delay((function(){return m.$html.removeClass("rl-started-trigger").addClass("rl-started")}),100),a.a.delay((function(){return m.$html.addClass("rl-started-delay")}),200)}function U(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1),e="/"===(e="#"===e.substr(0,1)?e.substr(1):e).substr(0,1)?e.substr(1):e;var i=n?"replaceHash":"setHash";t?(d.a.changed.active=!1,d.a[i](e),d.a.changed.active=!0):(d.a.changed.active=!0,d.a[i](e),d.a.setHash(e))}function G(e){var t=e.name,n=e.type,i=e.templateID;return function(e){e&&(t&&(Object(b.isArray)(t)?e.__names=t:e.__names=[t],e.__name=e.__names[0]),n&&(e.__type=n),i&&(e.__templateID=i))}}function H(e){var t=e.name,n=e.templateID;return G({name:t,type:w.Popup,templateID:n})}function B(e){return void 0===e&&(e=!0),function(t,n,i){if(!n||!n.match(/Command$/))throw new Error('name "'+n+'" should end with Command suffix');var o=i.value||i.initializer(),r=Object(b.isFunc)(e)?e:function(){return!!e};return i.value=function(){if(r.call(this,this)){for(var e=arguments.length,t=new Array(e),n=0;n",viewModel:{createViewModel:function(t,n){return(t=t||{}).element=null,n&&n.element&&(t.component=n,t.element=s()(n.element),Object(l.i18nToNodes)(t.element),!Object(u.isUnd)(t.inline)&&c.a.unwrap(t.inline)&&t.element.css("display","inline-block")),new e(t)}}}}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(44);e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},,function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"f",(function(){return p})),n.d(t,"d",(function(){return f})),n.d(t,"e",(function(){return g})),n.d(t,"b",(function(){return h})),n.d(t,"c",(function(){return m})),n.d(t,"g",(function(){return b})),n.d(t,"h",(function(){return v}));var i=n(3),o=n.n(i),r=n(2),a=n(6),s=n(5),c={},u=[],l=[];function d(e,t){Object(r.isFunc)(t)&&(Object(r.isArray)(c[e])||(c[e]=[]),c[e].push(t))}function p(e,t){void 0===t&&(t=[]),Object(r.isArray)(c[e])&&o.a.each(c[e],(function(e){e.apply(void 0,t)}))}function f(e){return s.settingsGet(e)}function g(e,t,n,i){a.data.__APP__&&a.data.__APP__.remote().defaultRequest(e,"Plugin"+t,n,i)}function h(e,t,n,i){u.push([e,t,n,i])}function m(e,t,n,i){l.push([e,t,n,i])}function b(e){var t=n(7);o.a.each(e?l:u,(function(e){t.addSettingsViewModel(e[0],e[1],e[2],e[3])}))}function v(e,t){var n=s.settingsGet("Plugins");return(n=n&&!Object(r.isUnd)(n[e])?n[e]:null)?Object(r.isUnd)(n[t])?null:n[t]:null}},function(e,t,n){"use strict";var i=n(1);t.a=new function(){this.coreReal=i.a.observable(!0),this.coreChannel=i.a.observable("stable"),this.coreType=i.a.observable("stable"),this.coreUpdatable=i.a.observable(!0),this.coreAccess=i.a.observable(!0),this.coreWarning=i.a.observable(!1),this.coreChecking=i.a.observable(!1).extend({throttle:100}),this.coreUpdating=i.a.observable(!1).extend({throttle:100}),this.coreVersion=i.a.observable(""),this.coreRemoteVersion=i.a.observable(""),this.coreRemoteRelease=i.a.observable(""),this.coreVersionCompare=i.a.observable(-2)}},,function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";var i=n(66),o=n(238).f,r=n(294),a=n(97),s=n(241),c=n(84),u=n(78),l=function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,d,p,f,g,h,m,b,v=e.target,S=e.global,y=e.stat,w=e.proto,O=S?i:y?i[v]:(i[v]||{}).prototype,A=S?a:a[v]||(a[v]={}),T=A.prototype;for(p in t)n=!r(S?p:v+(y?".":"#")+p,e.forced)&&O&&u(O,p),g=A[p],n&&(h=e.noTargetGet?(b=o(O,p))&&b.value:O[p]),f=n&&h?h:t[p],n&&typeof g==typeof f||(m=e.bind&&n?s(f,i):e.wrap&&n?l(f):w&&"function"==typeof f?s(Function.call,f):f,(e.sham||f&&f.sham||g&&g.sham)&&c(m,"sham",!0),A[p]=m,w&&(u(a,d=v+"Prototype")||c(a,d,{}),a[d][p]=f,e.real&&T&&!T[p]&&c(T,p,f)))}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var i=n(50),o=n(110);i({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},,function(e,t,n){var i=n(36);e.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(e,t,n){var i=n(47),o=n(52),r=n(92);e.exports=i?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(27),o=n(91).f,r=n(48),a=n(53),s=n(93),c=n(181),u=n(130);e.exports=function(e,t){var n,l,d,p,f,g=e.target,h=e.global,m=e.stat;if(n=h?i:m?i[g]||s(g,{}):(i[g]||{}).prototype)for(l in t){if(p=t[l],d=e.noTargetGet?(f=o(n,l))&&f.value:n[l],!u(h?l:g+(m?".":"#")+l,e.forced)&&void 0!==d){if(typeof p==typeof d)continue;c(p,d)}(e.sham||d&&d.sham)&&r(p,"sham",!0),a(n,l,p,e)}}},function(e,t,n){var i=n(47),o=n(52).f,r=Function.prototype,a=r.toString,s=/^\s*function ([^ (]*)/,c="name";i&&!(c in r)&&o(r,c,{configurable:!0,get:function(){try{return a.call(this).match(s)[1]}catch(e){return""}}})},function(e,t,n){var i=n(47),o=n(126),r=n(37),a=n(125),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(r(e),t=a(t,!0),r(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var i=n(27),o=n(48),r=n(42),a=n(93),s=n(94),c=n(88),u=c.get,l=c.enforce,d=String(String).split("String");(e.exports=function(e,t,n,s){var c=!!s&&!!s.unsafe,u=!!s&&!!s.enumerable,p=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||r(n,"name")||o(n,"name",t),l(n).source=d.join("string"==typeof t?t:"")),e!==i?(c?!p&&e[t]&&(u=!0):delete e[t],u?e[t]=n:o(e,t,n)):u?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||s(this)}))},function(e,t,n){var i=n(97);e.exports=function(e){return i[e+"Prototype"]}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var i=n(135),o=n(37),r=n(120),a=n(73),s=n(81),c=n(56),u=n(154),l=n(136),d=Math.max,p=Math.min,f=Math.floor,g=/\$([$&'`]|\d\d?|<[^>]*>)/g,h=/\$([$&'`]|\d\d?)/g;i("replace",2,(function(e,t,n,i){var m=i.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,b=i.REPLACE_KEEPS_$0,v=m?"$":"$0";return[function(n,i){var o=c(this),r=null==n?void 0:n[e];return void 0!==r?r.call(n,o,i):t.call(String(o),n,i)},function(e,i){if(!m&&b||"string"==typeof i&&-1===i.indexOf(v)){var r=n(t,e,this,i);if(r.done)return r.value}var c=o(e),f=String(this),g="function"==typeof i;g||(i=String(i));var h=c.global;if(h){var y=c.unicode;c.lastIndex=0}for(var w=[];;){var O=l(c,f);if(null===O)break;if(w.push(O),!h)break;""===String(O[0])&&(c.lastIndex=u(f,a(c.lastIndex),y))}for(var A,T="",C=0,_=0;_=C&&(T+=f.slice(C,E)+I,C=E+x.length)}return T+f.slice(C)}];function S(e,n,i,o,a,s){var c=i+e.length,u=o.length,l=h;return void 0!==a&&(a=r(a),l=g),t.call(s,l,(function(t,r){var s;switch(r.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(c);case"<":s=a[r.slice(1,-1)];break;default:var l=+r;if(0===l)return t;if(l>u){var d=f(l/10);return 0===d?t:d<=u?void 0===o[d-1]?r.charAt(1):o[d-1]+r.charAt(1):t}s=o[l-1]}return void 0===s?"":s}))}}))},,function(e,t,n){var i=n(150),o=n(27),r=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?r(i[e])||r(o[e]):i[e]&&i[e][t]||o[e]&&o[e][t]}},function(e,t,n){"use strict";n.r(t),n.d(t,"momentNow",(function(){return m})),n.d(t,"momentNowUnix",(function(){return b})),n.d(t,"searchSubtractFormatDateHelper",(function(){return v})),n.d(t,"format",(function(){return S})),n.d(t,"momentToNode",(function(){return y})),n.d(t,"reload",(function(){return w}));var i=n(4),o=n.n(i),r=n(3),a=n.n(r),s=n(8),c=n.n(s),u=n(98),l=n.n(u),d=n(9),p=null,f=0,g=a.a.debounce((function(){p=l()()}),500,!0),h=a.a.debounce((function(){f=l()().unix()}),500,!0);function m(){return g(),p||l()()}function b(){return h(),f||0}function v(e){return m().clone().subtract(e,"days").format("YYYY.MM.DD")}function S(e,t){var n=null,i="",o=b();if((n=0<(e=o<(e=0=t.diff(e,"hours"):return e.fromNow();case t.format("L")===e.format("L"):return Object(d.i18n)("MESSAGE_LIST/TODAY_AT",{TIME:e.format("LT")});case t.clone().subtract(1,"days").format("L")===e.format("L"):return Object(d.i18n)("MESSAGE_LIST/YESTERDAY_AT",{TIME:e.format("LT")});case t.year()===e.year():return e.format("D MMM.")}return e?e.format("LL"):""}(n);break;case"FULL":i=n.format("LLL");break;default:i=n.format(t)}return i}function y(e){var t,n="",i=c()(e);(t=i.data("moment-time"))&&((n=i.data("moment-format"))&&i.text(S(t,n)),(n=i.data("moment-format-title"))&&i.attr("title",S(t,n)))}function w(){a.a.defer((function(){c()(".moment",o.a.document).each((function(e,t){y(t)}))}))}},function(e,t){e.exports=window.hasher},,function(e,t,n){var i=n(95),o=n(53),r=n(186);i||o(Object.prototype,"toString",r,{unsafe:!0})},,function(e,t,n){"use strict";function i(){return n(396).default}n.d(t,"a",(function(){return i}))},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")()}).call(this,n(124))},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){var i=n(50),o=n(27),r=n(105),a=[].slice,s=function(e){return function(t,n){var i=arguments.length>2,o=i?a.call(arguments,2):void 0;return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,n)}};i({global:!0,bind:!0,forced:/MSIE .\./.test(r)},{setTimeout:s(o.setTimeout),setInterval:s(o.setInterval)})},function(e,t,n){var i=n(66),o=n(244),r=n(78),a=n(245),s=n(248),c=n(306),u=o("wks"),l=i.Symbol,d=c?l:l&&l.withoutSetter||a;e.exports=function(e){return r(u,e)||(s&&r(l,e)?u[e]=l[e]:u[e]=d("Symbol."+e)),u[e]}},function(e,t,n){e.exports=n(258)},function(e,t,n){"use strict";var i=n(1),o=n(2),r=n(5),a=function(){function e(){this.languages=i.a.observableArray([]),this.languagesAdmin=i.a.observableArray([]),this.language=i.a.observable("").extend({limitedList:this.languages}).extend({reversible:!0}),this.languageAdmin=i.a.observable("").extend({limitedList:this.languagesAdmin}).extend({reversible:!0}),this.userLanguage=i.a.observable(""),this.userLanguageAdmin=i.a.observable("")}return e.prototype.populate=function(){var e=r.appSettingsGet("languages"),t=r.appSettingsGet("languagesAdmin");this.languages(Object(o.isArray)(e)?e:[]),this.languagesAdmin(Object(o.isArray)(t)?t:[]),this.language(r.settingsGet("Language")),this.languageAdmin(r.settingsGet("LanguageAdmin")),this.userLanguage(r.settingsGet("UserLanguage")),this.userLanguageAdmin(r.settingsGet("UserLanguageAdmin"))},e}();t.a=new a},function(e,t,n){var i=n(119),o=n(56);e.exports=function(e){return i(o(e))}},function(e,t,n){var i=n(81),o=Math.min;e.exports=function(e){return e>0?o(i(e),9007199254740991):0}},function(e,t){e.exports={}},function(e,t,n){"use strict";var i=n(50),o=n(119),r=n(72),a=n(287),s=[].join,c=o!=Object,u=a("join",",");i({target:"Array",proto:!0,forced:c||!u},{join:function(e){return s.call(r(this),void 0===e?",":e)}})},function(e,t,n){var i=n(55);e.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";var i=n(10),o=n(4),r=n.n(o),a=n(8),s=n.n(a),c=n(1),u=n(5),l=function(e){function t(){var t;return(t=e.call(this)||this).determineUserLanguage=c.a.observable(!1),t.determineUserDomain=c.a.observable(!1),t.weakPassword=c.a.observable(!1),t.useLocalProxyForExternalImages=c.a.observable(!1),t.dataFolderAccess=c.a.observable(!1),t}return Object(i.a)(t,e),t.prototype.populate=function(){var t=this;e.prototype.populate.call(this),this.determineUserLanguage(!!Object(u.settingsGet)("DetermineUserLanguage")),this.determineUserDomain(!!Object(u.settingsGet)("DetermineUserDomain")),this.weakPassword(!!Object(u.settingsGet)("WeakPassword")),this.useLocalProxyForExternalImages(!!Object(u.settingsGet)("UseLocalProxyForExternalImages")),Object(u.settingsGet)("Auth")&&s.a.get("./data/VERSION?"+r.a.Math.random()).then((function(){return t.dataFolderAccess(!0)}))},t}(n(262).a);t.a=new l},function(e,t){e.exports=!1},function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},function(e,t,n){"use strict";n.r(t),n.d(t,"EmailModel",(function(){return h})),n.d(t,"default",(function(){return h}));n(51),n(45),n(57),n(278);var i=n(18),o=n.n(i),r=n(70),a=n.n(r),s=n(30),c=n.n(s),u=n(17),l=n(3),d=n.n(l),p=n(166),f=n.n(p),g=n(2),h=function(){function e(e,t,n,i){void 0===e&&(e=""),void 0===t&&(t=""),void 0===n&&(n="none"),void 0===i&&(i=""),Object(u.a)(this,"email",""),Object(u.a)(this,"name",""),Object(u.a)(this,"dkimStatus",""),Object(u.a)(this,"dkimValue",""),this.email=e,this.name=t,this.dkimStatus=n,this.dkimValue=i,this.clearDuplicateName()}e.newInstanceFromJson=function(t){var n=new e;return n.initByJson(t)?n:null};var t=e.prototype;return t.clear=function(){this.email="",this.name="",this.dkimStatus="none",this.dkimValue=""},t.validate=function(){return""!==this.name||""!==this.email},t.hash=function(e){return void 0===e&&(e=!1),"#"+(e?"":this.name)+"#"+this.email+"#"},t.clearDuplicateName=function(){this.name===this.email&&(this.name="")},t.search=function(e){var t;return-1")+'" target="_blank" tabindex="-1">'+Object(g.encodeHtml)(this.name)+"":n?Object(g.encodeHtml)(this.name):this.name:(i=this.email,""!==this.name?t?i=Object(g.encodeHtml)('"'+this.name+'" <')+'")+'" target="_blank" tabindex="-1">'+Object(g.encodeHtml)(i)+""+Object(g.encodeHtml)(">"):(i='"'+this.name+'" <'+i+">",n&&(i=Object(g.encodeHtml)(i))):t&&(i=''+Object(g.encodeHtml)(this.email)+""))),i},e.splitEmailLine=function(t){var n=f()(t);if(Object(g.isNonEmptyArray)(n)){var i=[],o=!1;return a()(n).call(n,(function(t){var n=t.address?new e(t.address.replace(/^[<]+(.*)[>]+$/g,"$1"),t.name||""):null;n&&n.email&&(o=!0),i.push(n?n.toLine(!1):t.name)})),o?i:null}return null},e.parseEmailLine=function(t){var n=f()(t);return Object(g.isNonEmptyArray)(n)?d.a.compact(o()(d.a).call(d.a,n,(function(t){return t.address?new e(t.address.replace(/^[<]+(.*)[>]+$/g,"$1"),t.name||""):null}))):[]},t.parse=function(e){if(""===(e=Object(g.trim)(e)))return!1;var t=f()(e);return!(!Object(g.isNonEmptyArray)(t)||!t[0])&&(this.name=t[0].name||"",this.email=t[0].address||"",this.clearDuplicateName(),!0)},e}()},,function(e,t,n){var i=n(76),o=n(137),r=n(155);e.exports=i?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var i=n(76),o=n(55),r=n(78),a=Object.defineProperty,s={},c=function(e){throw e};e.exports=function(e,t){if(r(s,e))return s[e];t||(t={});var n=[][e],u=!!r(t,"ACCESSORS")&&t.ACCESSORS,l=r(t,0)?t[0]:c,d=r(t,1)?t[1]:void 0;return s[e]=!!n&&!o((function(){if(u&&!i)return!0;var e={length:-1};u?a(e,1,{enumerable:!0,get:c}):e[1]=1,n.call(e,l,d)}))}},function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var i=n(12),o=n.n(i),r=n(33),a=n(10),s=n(1),c=n(2),u=n(0),l=function(e){function t(t){var n,i;((n=e.call(this)||this).value=t.value||"",n.size=t.size||0,n.label=t.label||"",n.preLabel=t.preLabel||"",n.enable=!!Object(c.isUnd)(t.enable)||t.enable,n.trigger=t.trigger&&t.trigger.subscribe?t.trigger:null,n.placeholder=t.placeholder||"",n.labeled=!Object(c.isUnd)(t.label),n.preLabeled=!Object(c.isUnd)(t.preLabel),n.triggered=!Object(c.isUnd)(t.trigger)&&!!n.trigger,n.classForTrigger=s.a.observable(""),n.className=s.a.computed((function(){var e=s.a.unwrap(n.size);return(00&&(!a.multiline||a.multiline&&"\n"!==e[a.lastIndex-1])&&(g="(?: "+g+")",m=" "+m,h++),n=new RegExp("^(?:"+g+")",f)),p&&(n=new RegExp("^"+g+"$(?!\\s)",f)),l&&(t=a.lastIndex),i=s.call(u?n:a,m),u?i?(i.input=i.input.slice(h),i[0]=i[0].slice(h),i.index=a.lastIndex,a.lastIndex+=i[0].length):a.lastIndex=0:l&&i&&(a.lastIndex=a.global?i.index+i[0].length:t),p&&i&&i.length>1&&c.call(i[0],n,(function(){for(o=1;o0?o(i(e),9007199254740991):0}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));n(63),n(121);var i=n(4),o=n.n(i);function r(e,t){if(void 0===t&&(t=!1),!o.a.Promise||!o.a.Promise.all)throw new Error("Promises are not available your environment.");if(!e)throw new Error("src should not be empty.");return new o.a.Promise((function(n,i){var r=o.a.document.createElement("script");r.onload=function(){n(e)},r.onerror=function(){i(new Error(e))},r.async=!0===t,r.src=e,o.a.document.body.appendChild(r)}))}},function(e,t,n){e.exports=n(298)},function(e,t,n){"use strict";var i=n(1),o=n(2),r=n(5),a=function(){function e(){this.themes=i.a.observableArray([]),this.themeBackgroundName=i.a.observable(""),this.themeBackgroundHash=i.a.observable(""),this.theme=i.a.observable("").extend({limitedList:this.themes})}return e.prototype.populate=function(){var e=r.appSettingsGet("themes");this.themes(Object(o.isArray)(e)?e:[]),this.theme(r.settingsGet("Theme")),this.themeBackgroundName(r.settingsGet("UserBackgroundName")),this.themeBackgroundHash(r.settingsGet("UserBackgroundHash"))},e}();t.a=new a},,function(e,t,n){"use strict";var i=n(1);t.a=new function(){this.plugins=i.a.observableArray([]),this.plugins.loading=i.a.observable(!1).extend({throttle:100}),this.plugins.error=i.a.observable("")}},function(e,t,n){"use strict";var i=n(1);t.a=new function(){this.licensing=i.a.observable(!1),this.licensingProcess=i.a.observable(!1),this.licenseValid=i.a.observable(!1),this.licenseExpired=i.a.observable(0),this.licenseError=i.a.observable(""),this.licenseTrigger=i.a.observable(!1)}},function(e,t,n){var i=n(36),o=n(49),r="".split;e.exports=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==o(e)?r.call(e,""):Object(e)}:Object},function(e,t,n){var i=n(56);e.exports=function(e){return Object(i(e))}},function(e,t,n){"use strict";var i,o,r,a,s=n(50),c=n(80),u=n(27),l=n(59),d=n(171),p=n(53),f=n(189),g=n(109),h=n(190),m=n(44),b=n(67),v=n(191),S=n(49),y=n(94),w=n(143),O=n(195),A=n(144),T=n(133).set,C=n(196),_=n(172),x=n(197),E=n(106),j=n(145),D=n(88),N=n(130),R=n(32),I=n(153),P=R("species"),k="Promise",L=D.get,M=D.set,F=D.getterFor(k),U=d,G=u.TypeError,H=u.document,B=u.process,V=l("fetch"),q=E.f,z=q,K="process"==S(B),W=!!(H&&H.createEvent&&u.dispatchEvent),Y="unhandledrejection",$=N(k,(function(){if(!(y(U)!==String(U))){if(66===I)return!0;if(!K&&"function"!=typeof PromiseRejectionEvent)return!0}if(c&&!U.prototype.finally)return!0;if(I>=51&&/native code/.test(U))return!1;var e=U.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[P]=t,!(e.then((function(){}))instanceof t)})),X=$||!O((function(e){U.all(e).catch((function(){}))})),J=function(e){var t;return!(!m(e)||"function"!=typeof(t=e.then))&&t},Q=function(e,t,n){if(!t.notified){t.notified=!0;var i=t.reactions;C((function(){for(var o=t.value,r=1==t.state,a=0;i.length>a;){var s,c,u,l=i[a++],d=r?l.ok:l.fail,p=l.resolve,f=l.reject,g=l.domain;try{d?(r||(2===t.rejection&&ne(e,t),t.rejection=1),!0===d?s=o:(g&&g.enter(),s=d(o),g&&(g.exit(),u=!0)),s===l.promise?f(G("Promise-chain cycle")):(c=J(s))?c.call(s,p,f):p(s)):f(o)}catch(e){g&&!u&&g.exit(),f(e)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&ee(e,t)}))}},Z=function(e,t,n){var i,o;W?((i=H.createEvent("Event")).promise=t,i.reason=n,i.initEvent(e,!1,!0),u.dispatchEvent(i)):i={promise:t,reason:n},(o=u["on"+e])?o(i):e===Y&&x("Unhandled promise rejection",n)},ee=function(e,t){T.call(u,(function(){var n,i=t.value;if(te(t)&&(n=j((function(){K?B.emit("unhandledRejection",i,e):Z(Y,e,i)})),t.rejection=K||te(t)?2:1,n.error))throw n.value}))},te=function(e){return 1!==e.rejection&&!e.parent},ne=function(e,t){T.call(u,(function(){K?B.emit("rejectionHandled",e):Z("rejectionhandled",e,t.value)}))},ie=function(e,t,n,i){return function(o){e(t,n,o,i)}},oe=function(e,t,n,i){t.done||(t.done=!0,i&&(t=i),t.value=n,t.state=2,Q(e,t,!0))},re=function(e,t,n,i){if(!t.done){t.done=!0,i&&(t=i);try{if(e===n)throw G("Promise can't be resolved itself");var o=J(n);o?C((function(){var i={done:!1};try{o.call(n,ie(re,e,i,t),ie(oe,e,i,t))}catch(n){oe(e,i,n,t)}})):(t.value=n,t.state=1,Q(e,t,!1))}catch(n){oe(e,{done:!1},n,t)}}};$&&(U=function(e){v(this,U,k),b(e),i.call(this);var t=L(this);try{e(ie(re,this,t),ie(oe,this,t))}catch(e){oe(this,t,e)}},(i=function(e){M(this,{type:k,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=f(U.prototype,{then:function(e,t){var n=F(this),i=q(A(this,U));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=K?B.domain:void 0,n.parent=!0,n.reactions.push(i),0!=n.state&&Q(this,n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new i,t=L(e);this.promise=e,this.resolve=ie(re,e,t),this.reject=ie(oe,e,t)},E.f=q=function(e){return e===U||e===r?new o(e):z(e)},c||"function"!=typeof d||(a=d.prototype.then,p(d.prototype,"then",(function(e,t){var n=this;return new U((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof V&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return _(U,V.apply(u,arguments))}}))),s({global:!0,wrap:!0,forced:$},{Promise:U}),g(U,k,!1,!0),h(k),r=l(k),s({target:k,stat:!0,forced:$},{reject:function(e){var t=q(this);return t.reject.call(void 0,e),t.promise}}),s({target:k,stat:!0,forced:c||$},{resolve:function(e){return _(c&&this===r?U:this,e)}}),s({target:k,stat:!0,forced:X},{all:function(e){var t=this,n=q(t),i=n.resolve,o=n.reject,r=j((function(){var n=b(t.resolve),r=[],a=0,s=1;w(e,(function(e){var c=a++,u=!1;r.push(void 0),s++,n.call(t,e).then((function(e){u||(u=!0,r[c]=e,--s||i(r))}),o)})),--s||i(r)}));return r.error&&o(r.value),n.promise},race:function(e){var t=this,n=q(t),i=n.reject,o=j((function(){var o=b(t.resolve);w(e,(function(e){o.call(t,e).then(n.resolve,i)}))}));return o.error&&i(o.value),n.promise}})},function(e,t,n){var i=n(200);e.exports=function(e){return Object(i(e))}},,function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var i=n(44);e.exports=function(e,t){if(!i(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!i(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!i(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!i(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var i=n(47),o=n(36),r=n(102);e.exports=!i&&!o((function(){return 7!=Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var i=n(27),o=n(93),r="__core-js_shared__",a=i[r]||o(r,{});e.exports=a},function(e,t,n){var i=n(80),o=n(127);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.4",mode:i?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},function(e,t,n){var i=n(36),o=/#|\.prototype\./,r=function(e,t){var n=s[a(e)];return n==u||n!=c&&("function"==typeof t?i(t):!!t)},a=r.normalize=function(e){return String(e).replace(o,".").toLowerCase()},s=r.data={},c=r.NATIVE="N",u=r.POLYFILL="P";e.exports=r},function(e,t,n){var i=n(36);e.exports=!!Object.getOwnPropertySymbols&&!i((function(){return!String(Symbol())}))},function(e,t,n){var i=n(95),o=n(49),r=n(32)("toStringTag"),a="Arguments"==o(function(){return arguments}());e.exports=i?o:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),r))?n:a?o(t):"Object"==(i=o(t))&&"function"==typeof t.callee?"Arguments":i}},function(e,t,n){var i,o,r,a=n(27),s=n(36),c=n(49),u=n(104),l=n(142),d=n(102),p=n(134),f=a.location,g=a.setImmediate,h=a.clearImmediate,m=a.process,b=a.MessageChannel,v=a.Dispatch,S=0,y={},w="onreadystatechange",O=function(e){if(y.hasOwnProperty(e)){var t=y[e];delete y[e],t()}},A=function(e){return function(){O(e)}},T=function(e){O(e.data)},C=function(e){a.postMessage(e+"",f.protocol+"//"+f.host)};g&&h||(g=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return y[++S]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(S),S},h=function(e){delete y[e]},"process"==c(m)?i=function(e){m.nextTick(A(e))}:v&&v.now?i=function(e){v.now(A(e))}:b&&!p?(r=(o=new b).port2,o.port1.onmessage=T,i=u(r.postMessage,r,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(C)?i=w in d("script")?function(e){l.appendChild(d("script")).onreadystatechange=function(){l.removeChild(this),O(e)}}:function(e){setTimeout(A(e),0)}:(i=C,a.addEventListener("message",T,!1))),e.exports={set:g,clear:h}},function(e,t,n){var i=n(105);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(i)},function(e,t,n){"use strict";n(45);var i=n(53),o=n(36),r=n(32),a=n(110),s=n(48),c=r("species"),u=!o((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),l="$0"==="a".replace(/./,"$0"),d=r("replace"),p=!!/./[d]&&""===/./[d]("a","$0"),f=!o((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,d){var g=r(e),h=!o((function(){var t={};return t[g]=function(){return 7},7!=""[e](t)})),m=h&&!o((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags="",n[g]=/./[g]),n.exec=function(){return t=!0,null},n[g](""),!t}));if(!h||!m||"replace"===e&&(!u||!l||p)||"split"===e&&!f){var b=/./[g],v=n(g,""[e],(function(e,t,n,i,o){return t.exec===a?h&&!o?{done:!0,value:b.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}}),{REPLACE_KEEPS_$0:l,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:p}),S=v[0],y=v[1];i(String.prototype,e,S),i(RegExp.prototype,g,2==t?function(e,t){return y.call(e,this,t)}:function(e){return y.call(e,this)})}d&&s(RegExp.prototype[g],"sham",!0)}},function(e,t,n){var i=n(49),o=n(110);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var r=n.call(e,t);if("object"!=typeof r)throw TypeError("RegExp exec method returned something other than an Object or null");return r}if("RegExp"!==i(e))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(e,t)}},function(e,t,n){var i=n(76),o=n(239),r=n(157),a=n(201),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(r(e),t=a(t,!0),r(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var i=n(70),o=n.n(i),r=n(26),a=n.n(r),s=n(17),c=n(3),u=n.n(c),l=n(164),d=n.n(l),p=n(2),f=function(){function e(e,t){void 0===t&&(t=[]),Object(s.a)(this,"oCross",null),Object(s.a)(this,"sScreenName",void 0),Object(s.a)(this,"aViewModels",void 0),this.sScreenName=e,this.aViewModels=Object(p.isArray)(t)?t:[]}var t=e.prototype;return t.viewModels=function(){return this.aViewModels},t.screenName=function(){return this.sScreenName},t.routes=function(){return null},t.__cross=function(){return this.oCross},t.__start=function(){var e=null,t=null,n=this.routes();Object(p.isNonEmptyArray)(n)&&(t=a()(u.a).call(u.a,this.onRoute||p.noop,this),e=d.a.create(),o()(n).call(n,(function(n){n&&e&&(e.addRoute(n[0],t).rules=n[1])})),this.oCross=e)},e}()},function(e,t,n){e.exports=n(339)},function(e,t){e.exports=window.ssm},function(e,t,n){var i=n(42),o=n(72),r=n(168).indexOf,a=n(103);e.exports=function(e,t){var n,s=o(e),c=0,u=[];for(n in s)!i(a,n)&&i(s,n)&&u.push(n);for(;t.length>c;)i(s,n=t[c++])&&(~r(u,n)||u.push(n));return u}},function(e,t,n){var i=n(59);e.exports=i("document","documentElement")},function(e,t,n){var i=n(37),o=n(192),r=n(73),a=n(104),s=n(193),c=n(194),u=function(e,t){this.stopped=e,this.result=t};(e.exports=function(e,t,n,l,d){var p,f,g,h,m,b,v,S=a(t,n,l?2:1);if(d)p=e;else{if("function"!=typeof(f=s(e)))throw TypeError("Target is not iterable");if(o(f)){for(g=0,h=r(e.length);h>g;g++)if((m=l?S(i(v=e[g])[0],v[1]):S(e[g]))&&m instanceof u)return m;return new u(!1)}p=f.call(e)}for(b=p.next;!(v=b.call(p)).done;)if("object"==typeof(m=c(p,S,v.value,l))&&m&&m instanceof u)return m;return new u(!1)}).stop=function(e){return new u(!0,e)}},function(e,t,n){var i=n(37),o=n(67),r=n(32)("species");e.exports=function(e,t){var n,a=i(e).constructor;return void 0===a||null==(n=i(a)[r])?t:o(n)}},function(e,t){e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},function(e,t,n){"use strict";var i=n(55);e.exports=function(e,t){var n=[][e];return!!n&&i((function(){n.call(null,t||function(){throw 1},1)}))}},function(e,t,n){var i=n(208),o=n(156),r=n(69)("toStringTag"),a="Arguments"==o(function(){return arguments}());e.exports=i?o:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),r))?n:a?o(t):"Object"==(i=o(t))&&"function"==typeof t.callee?"Arguments":i}},,function(e,t,n){"use strict";var i=n(34),o=n.n(i),r=n(3),a=n.n(r),s=n(1);t.a=new function(){var e=this;this.domains=s.a.observableArray([]),this.domains.loading=s.a.observable(!1).extend({throttle:100}),this.domainsWithoutAliases=s.a.computed((function(){return o()(a.a).call(a.a,e.domains(),(function(e){return e&&!e.alias}))}))}},function(e,t,n){var i=n(27);e.exports=i},function(e,t,n){var i,o=n(37),r=n(227),a=n(108),s=n(103),c=n(142),u=n(102),l=n(107),d=l("IE_PROTO"),p=function(){},f=function(e){return"